geocif 0.1.62__tar.gz → 0.1.64__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.62/geocif.egg-info → geocif-0.1.64}/PKG-INFO +1 -1
- {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/definitions.py +8 -8
- {geocif-0.1.62 → geocif-0.1.64}/geocif/geocif.py +20 -3
- {geocif-0.1.62 → geocif-0.1.64}/geocif/geocif_runner.py +35 -34
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_angola.py +3 -3
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/stats.py +5 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/trainers.py +4 -0
- {geocif-0.1.62 → geocif-0.1.64/geocif.egg-info}/PKG-INFO +1 -1
- {geocif-0.1.62 → geocif-0.1.64}/setup.py +1 -1
- {geocif-0.1.62 → geocif-0.1.64}/LICENSE +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/MANIFEST.in +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/README.md +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/geoagmet.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/plot.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/utils.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/analysis.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/constants.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/features.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/geo.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/geocif.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/metadata.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/models.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/indices.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/experiments.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_madagascar.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_malawi.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_mozambique.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_south_africa.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_zambia.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_zimbabwe.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/logger.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/correlations.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/embedding.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/feature_engineering.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/feature_selection.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/outliers.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/outlook.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/output.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/spatial_autocorrelation.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/stages.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/trend.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/xai.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/mm.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/aa.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/area.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/automl.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/download_esi.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/enso.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/eval.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/gamtest.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/gee_access.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/misc.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/play_xagg.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/reg.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/sustain.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/test_catboost.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp2.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp3.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp4.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp5.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/risk/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/risk/impact_assessment.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/utils.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/__init__.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/plot.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/tmp.py +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/SOURCES.txt +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/dependency_links.txt +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/not-zip-safe +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/top_level.txt +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/requirements.txt +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/setup.cfg +0 -0
- {geocif-0.1.62 → geocif-0.1.64}/tests/test_geocif.py +0 -0
@@ -1,11 +1,11 @@
|
|
1
1
|
PHENOLOGICAL_STAGES = [1, 2, 3]
|
2
2
|
dict_indices = {
|
3
3
|
"GD4": ["Cold", "Growing degree days (sum of Tmean > 4 C)"],
|
4
|
-
"CFD": ["Cold", "Maximum number of consecutive frost days (Tmin < 0 C)"],
|
5
|
-
"FD": ["Cold", "Number of Frost Days (Tmin < 0C)"],
|
4
|
+
#"CFD": ["Cold", "Maximum number of consecutive frost days (Tmin < 0 C)"],
|
5
|
+
#"FD": ["Cold", "Number of Frost Days (Tmin < 0C)"],
|
6
6
|
"HD17": ["Cold", "Heating degree days (sum of Tmean < 17 C)"],
|
7
|
-
"ID": ["Cold", "Number of sharp Ice Days (Tmax < 0C)"],
|
8
|
-
"CSDI": ["Cold", "Cold-spell duration index"],
|
7
|
+
#"ID": ["Cold", "Number of sharp Ice Days (Tmax < 0C)"],
|
8
|
+
#"CSDI": ["Cold", "Cold-spell duration index"],
|
9
9
|
"TG10p": ["Cold", "Percentage of days when Tmean < 10th percentile"],
|
10
10
|
"TN10p": ["Cold", "Percentage of days when Tmin < 10th percentile"],
|
11
11
|
"TXn": ["Cold", "Minimum daily maximum temperature"],
|
@@ -70,10 +70,10 @@ dict_indices = {
|
|
70
70
|
"Compound",
|
71
71
|
"Days with TG > 75th percentile of daily mean temperature and RR >75th percentile of daily precipitation sum",
|
72
72
|
],
|
73
|
-
"SD": ["Snow", "Mean of daily snow depth"],
|
74
|
-
"SD1": ["Snow", "Number of days with snow depth >= 1 cm"],
|
75
|
-
"SD5cm": ["Snow", "Number of days with snow depth >= 5 cm"],
|
76
|
-
"SD50cm": ["Snow", "Number of days with snow depth >= 50 cm"],
|
73
|
+
# "SD": ["Snow", "Mean of daily snow depth"],
|
74
|
+
# "SD1": ["Snow", "Number of days with snow depth >= 1 cm"],
|
75
|
+
# "SD5cm": ["Snow", "Number of days with snow depth >= 5 cm"],
|
76
|
+
# "SD50cm": ["Snow", "Number of days with snow depth >= 50 cm"],
|
77
77
|
}
|
78
78
|
|
79
79
|
dict_ndvi = {
|
@@ -308,9 +308,12 @@ class Geocif:
|
|
308
308
|
cat_features=self.cat_features,
|
309
309
|
verbose=False,
|
310
310
|
)
|
311
|
-
elif self.model_name
|
312
|
-
|
313
|
-
|
311
|
+
elif self.model_name in ["ngboost", "oblique", "tabpfn"]:
|
312
|
+
X_train = X_train.drop(
|
313
|
+
columns=[
|
314
|
+
item for item in self.cat_features if item != "Harvest Year"
|
315
|
+
]
|
316
|
+
)
|
314
317
|
self.model.fit(X_train, y_train)
|
315
318
|
elif self.model_name == "ydf":
|
316
319
|
# Combine X_train and y_train
|
@@ -517,6 +520,14 @@ class Geocif:
|
|
517
520
|
elif self.model_name == "ydf":
|
518
521
|
y_pred = self.model.evaluate(X_test)
|
519
522
|
best_hyperparameters = {}
|
523
|
+
elif self.model_name == "tabpfn":
|
524
|
+
X_test = X_test.drop(
|
525
|
+
columns=[
|
526
|
+
item for item in self.cat_features if item != "Harvest Year"
|
527
|
+
]
|
528
|
+
)
|
529
|
+
y_pred = self.model.predict(X_test)
|
530
|
+
best_hyperparameters = {}
|
520
531
|
else:
|
521
532
|
y_pred = self.model.predict(X_test)
|
522
533
|
best_hyperparameters = self.model.get_params().copy()
|
@@ -1280,6 +1291,9 @@ class Geocif:
|
|
1280
1291
|
self.cluster_strategy = "single"
|
1281
1292
|
self.select_cei_by = "Index"
|
1282
1293
|
self.use_cumulative_features = True
|
1294
|
+
elif self.model_name in ["tabpfn"]:
|
1295
|
+
self.do_xai = False
|
1296
|
+
self.estimate_ci = False
|
1283
1297
|
elif self.model_name in ["oblique", "ydf"]:
|
1284
1298
|
self.do_xai = False
|
1285
1299
|
self.estimate_ci = False
|
@@ -1360,6 +1374,9 @@ class Geocif:
|
|
1360
1374
|
if self.country == "nepal":
|
1361
1375
|
self.dg["ADM0_NAME"] = "nepal"
|
1362
1376
|
self.dg["Country Region"] = self.dg["ADM0_NAME"] + " " + self.dg["PR_NAME"]
|
1377
|
+
elif self.country == "wolayita":
|
1378
|
+
self.dg["ADM0_NAME"] = "ethiopia"
|
1379
|
+
self.dg["Country Region"] = self.dg["ADM0_NAME"] + " " + self.dg["W_NAME"]
|
1363
1380
|
elif self.admin_zone == "admin_1":
|
1364
1381
|
self.dg["Country Region"] = (
|
1365
1382
|
self.dg["ADM0_NAME"] + " " + self.dg["ADM1_NAME"]
|
@@ -26,40 +26,41 @@ def loop_execute(inputs):
|
|
26
26
|
Returns:
|
27
27
|
|
28
28
|
"""
|
29
|
-
from pycallgraph2 import Config, PyCallGraph, GlobbingFilter
|
30
|
-
from pycallgraph2.output import GraphvizOutput
|
31
|
-
|
32
|
-
graphviz = GraphvizOutput()
|
33
|
-
graphviz.output_file = "geocif_visualization.png"
|
34
|
-
plt.rcParams["figure.dpi"] = 600
|
35
|
-
config = Config(max_depth=5)
|
36
|
-
config.trace_filter = GlobbingFilter(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
29
|
+
# from pycallgraph2 import Config, PyCallGraph, GlobbingFilter
|
30
|
+
# from pycallgraph2.output import GraphvizOutput
|
31
|
+
#
|
32
|
+
# graphviz = GraphvizOutput()
|
33
|
+
# graphviz.output_file = "geocif_visualization.png"
|
34
|
+
# plt.rcParams["figure.dpi"] = 600
|
35
|
+
# config = Config(max_depth=5)
|
36
|
+
# config.trace_filter = GlobbingFilter(
|
37
|
+
# exclude=[
|
38
|
+
# "pycallgraph.*",
|
39
|
+
# "torch*",
|
40
|
+
# ]
|
41
|
+
# )
|
42
|
+
#
|
43
|
+
# with PyCallGraph(output=graphviz, config=config):
|
44
|
+
project_name, country, crop, season, model, logger, parser, index = inputs
|
45
|
+
|
46
|
+
logger.info("=====================================================")
|
47
|
+
logger.info(f"\tStarting GEOCIF: {country} {crop} {season} {model}")
|
48
|
+
logger.info("=====================================================")
|
49
|
+
|
50
|
+
obj = geocif.Geocif(logger=logger,
|
51
|
+
parser=parser,
|
52
|
+
project_name=project_name)
|
53
|
+
obj.read_data(country, crop, season)
|
54
|
+
|
55
|
+
# Store config file in database, only execute this for
|
56
|
+
# the first iteration of the loop
|
57
|
+
if index == 0:
|
58
|
+
output.config_to_db(obj.db_path, obj.parser, obj.today)
|
59
|
+
|
60
|
+
# Setup metadata and run ML code
|
61
|
+
obj.setup(season, model)
|
62
|
+
if obj.simulation_stages:
|
63
|
+
obj.execute()
|
63
64
|
|
64
65
|
|
65
66
|
def gather_inputs(parser):
|
@@ -12,7 +12,7 @@ warnings.filterwarnings("ignore")
|
|
12
12
|
from .cei import indices
|
13
13
|
from geoprepare import base
|
14
14
|
|
15
|
-
country = "
|
15
|
+
country = "ethiopia"
|
16
16
|
|
17
17
|
def remove_duplicates(lst):
|
18
18
|
"""
|
@@ -171,10 +171,10 @@ class cei_runner(base.BaseGeo):
|
|
171
171
|
# Only keep those entries in combinations where the third elemt is
|
172
172
|
# mozambique, south_africa, angola or dem_people's_rep_of_korea
|
173
173
|
# This is done to test the code for these countries
|
174
|
-
combinations = [i for i in combinations if f"{country}
|
174
|
+
combinations = [i for i in combinations if f"{country}_wheat_s1" in i[3]]
|
175
175
|
|
176
176
|
if True:
|
177
|
-
num_cpu = int(cpu_count() * 0.
|
177
|
+
num_cpu = int(cpu_count() * 0.9)
|
178
178
|
with Pool(num_cpu) as p:
|
179
179
|
for i, _ in enumerate(p.imap_unordered(indices.process, combinations)):
|
180
180
|
pass
|
@@ -209,6 +209,11 @@ def add_statistics(
|
|
209
209
|
df_fewsnet.loc[:, "product"] = (
|
210
210
|
df_fewsnet["season_name"] + " " + df_fewsnet["product"]
|
211
211
|
)
|
212
|
+
|
213
|
+
# Hack replace Wheat in product column in df_fewsnet with Winter Wheat
|
214
|
+
if "product" in df_fewsnet.columns:
|
215
|
+
df_fewsnet.loc[:, "product"] = df_fewsnet["product"].replace("Wheat", "Winter Wheat")
|
216
|
+
|
212
217
|
# Check if country and crop exist in the fewsnet database
|
213
218
|
mask = (df_fewsnet["country"] == country) & (df_fewsnet["product"] == crop)
|
214
219
|
|
@@ -300,6 +300,10 @@ def auto_train(
|
|
300
300
|
n_estimators=1500, max_depth=20, max_features=n_features**2,
|
301
301
|
feature_combinations=n_features, n_jobs=-1, random_state=42
|
302
302
|
)
|
303
|
+
elif model_name == "tabpfn":
|
304
|
+
from tabpfn_extensions.post_hoc_ensembles.sklearn_interface import AutoTabPFNRegressor
|
305
|
+
|
306
|
+
model = AutoTabPFNRegressor()
|
303
307
|
elif model_name == "ngboost":
|
304
308
|
if model_type == "REGRESSION":
|
305
309
|
from ngboost import NGBRegressor
|
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
|