geocif 0.1.58__tar.gz → 0.1.60__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {geocif-0.1.58/geocif.egg-info → geocif-0.1.60}/PKG-INFO +1 -1
- {geocif-0.1.58 → geocif-0.1.60}/geocif/geocif.py +10 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/embedding.py +2 -2
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/feature_engineering.py +43 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/stats.py +1 -1
- {geocif-0.1.58 → geocif-0.1.60/geocif.egg-info}/PKG-INFO +1 -1
- {geocif-0.1.58 → geocif-0.1.60}/setup.py +1 -1
- {geocif-0.1.58 → geocif-0.1.60}/LICENSE +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/MANIFEST.in +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/README.md +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/agmet/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/agmet/geoagmet.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/agmet/plot.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/agmet/utils.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/analysis.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/constants.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/features.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/geo.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/geocif.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/metadata.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/backup/models.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/cei/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/cei/definitions.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/cei/indices.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/experiments.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/geocif_runner.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_angola.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_madagascar.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_malawi.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_mozambique.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_south_africa.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_zambia.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/indices_runner_zimbabwe.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/logger.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/correlations.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/feature_selection.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/outliers.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/outlook.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/output.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/spatial_autocorrelation.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/stages.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/trainers.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/trend.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/ml/xai.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/mm.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/aa.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/automl.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/download_esi.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/enso.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/eval.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/gamtest.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/gee_access.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/misc.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/play_xagg.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/reg.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/sustain.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/test_catboost.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/tmp.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/tmp2.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/tmp3.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/tmp4.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/playground/tmp5.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/risk/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/risk/impact_assessment.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/utils.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/viz/__init__.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif/viz/plot.py +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif.egg-info/SOURCES.txt +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif.egg-info/dependency_links.txt +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif.egg-info/not-zip-safe +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/geocif.egg-info/top_level.txt +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/requirements.txt +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/setup.cfg +0 -0
- {geocif-0.1.58 → geocif-0.1.60}/tests/test_geocif.py +0 -0
@@ -730,6 +730,8 @@ class Geocif:
|
|
730
730
|
|
731
731
|
if self.median_yield_as_feature:
|
732
732
|
self.feature_names.append(f"Median {self.target}")
|
733
|
+
self.feature_names.append(f"Median {self.target} (2014-2018)")
|
734
|
+
self.feature_names.append(f"Median {self.target} (2013-2017)")
|
733
735
|
|
734
736
|
if self.lag_yield_as_feature:
|
735
737
|
# For the number of years specified in self.number_lag_years
|
@@ -988,6 +990,14 @@ class Geocif:
|
|
988
990
|
df, self.all_seasons_with_yield, self.number_median_years, self.target
|
989
991
|
)
|
990
992
|
|
993
|
+
df = fe.compute_user_median_statistics(
|
994
|
+
df, [2014, 2015, 2016, 2017, 2018]
|
995
|
+
)
|
996
|
+
|
997
|
+
df = fe.compute_user_median_statistics(
|
998
|
+
df, [2013, 2014, 2015, 2016, 2017]
|
999
|
+
)
|
1000
|
+
|
991
1001
|
if self.median_area_as_feature:
|
992
1002
|
df = fe.compute_median_statistics(
|
993
1003
|
df, self.all_seasons_with_yield, self.number_median_years, "Area (ha)"
|
@@ -32,7 +32,7 @@ def _compute_correlations(X, y):
|
|
32
32
|
f_series = X[feature]
|
33
33
|
|
34
34
|
# Ignore NaN values in either y and f_series
|
35
|
-
mask = ~np.isnan(y) |
|
35
|
+
mask = ~ (np.isnan(y) | np.isnan(f_series))
|
36
36
|
y = y[mask]
|
37
37
|
f_series = f_series[mask]
|
38
38
|
|
@@ -137,7 +137,7 @@ def get_all_features_correlation(inputs, targets, method):
|
|
137
137
|
df = pd.DataFrame(split_keys, columns=["Metric", method])
|
138
138
|
df["Value"] = values
|
139
139
|
|
140
|
-
#
|
140
|
+
# Pivot the DataFrame so each metric becomes a column name and include the year as a separate column
|
141
141
|
df_pivoted = df.pivot_table(
|
142
142
|
index=method, columns="Metric", values="Value", aggfunc="first"
|
143
143
|
).reset_index()
|
@@ -105,6 +105,49 @@ def compute_median_statistics(
|
|
105
105
|
return df
|
106
106
|
|
107
107
|
|
108
|
+
def compute_user_median_statistics(df, user_years, target_col="Yield (tn per ha)"):
|
109
|
+
"""
|
110
|
+
Enhances the DataFrame with a new column that contains the median yield computed
|
111
|
+
using only the yields from the user-specified list of years.
|
112
|
+
|
113
|
+
Args:
|
114
|
+
df (DataFrame): The original DataFrame containing yield data.
|
115
|
+
user_years (array-like): List of years to consider for computing the median yield.
|
116
|
+
target_col (str): The column name from which to compute the median yield.
|
117
|
+
|
118
|
+
Returns:
|
119
|
+
DataFrame: The original DataFrame enhanced with a new column for median yield.
|
120
|
+
"""
|
121
|
+
# Ensure 'Harvest Year' is treated as integer for accurate comparisons.
|
122
|
+
df["Harvest Year"] = df["Harvest Year"].astype(int)
|
123
|
+
|
124
|
+
# Sort the user_years list to reliably extract the earliest and latest years.
|
125
|
+
user_years_sorted = sorted(user_years)
|
126
|
+
first_year = user_years_sorted[0]
|
127
|
+
last_year = user_years_sorted[-1]
|
128
|
+
|
129
|
+
# Define the new column name to include the range of years.
|
130
|
+
new_col_name = f"Median {target_col} ({first_year}-{last_year})"
|
131
|
+
|
132
|
+
# Initialize the new column with NaN values.
|
133
|
+
df[new_col_name] = np.nan
|
134
|
+
|
135
|
+
# Group by region and compute the median yield for the specified years.
|
136
|
+
for region, group in tqdm(df.groupby("Region"), desc="Median yield", leave=False):
|
137
|
+
# Skip if the target column is completely null for this region.
|
138
|
+
if group[target_col].isnull().all():
|
139
|
+
continue
|
140
|
+
|
141
|
+
# Filter the rows to only include harvest years that are in the user provided list.
|
142
|
+
mask = group["Harvest Year"].isin(user_years)
|
143
|
+
median_yield = group.loc[mask, target_col].median()
|
144
|
+
|
145
|
+
# Assign the computed median yield to all rows in the current region.
|
146
|
+
df.loc[df["Region"] == region, new_col_name] = median_yield
|
147
|
+
|
148
|
+
return df
|
149
|
+
|
150
|
+
|
108
151
|
def compute_lag_yield(
|
109
152
|
df, all_seasons_with_yield, number_lag_years, target_col="Yield (tn per ha)"
|
110
153
|
):
|
@@ -209,7 +209,7 @@ def add_statistics(
|
|
209
209
|
# Check if country and crop exist in the fewsnet database
|
210
210
|
mask = (df_fewsnet["country"] == country) & (df_fewsnet["product"] == crop)
|
211
211
|
|
212
|
-
if mask.sum() == 0
|
212
|
+
if mask.sum() == 0:
|
213
213
|
df = add_GEOGLAM_statistics(dir_stats, df, stats, method, admin_zone)
|
214
214
|
else:
|
215
215
|
group_by = ["Region", "Harvest Year"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|