gaia / summary_test.py
Rim BACCOUR
add prompt to compare both scenarii with and without ombrage
9c23216 unverified
raw
history blame
5.1 kB
import pandas as pd
import pandas as pd
import numpy as np
from utils.summary import get_meterological_summary, get_agricultural_yield_comparison
# Générer des dates sur 5 ans (historique) + 5 ans (prévision)
dates_past = pd.date_range(start="2023-01-01", periods=36, freq='ME') # 3 ans d'historique
dates_future = pd.date_range(start="2023-01-01", periods=60, freq='ME') # 5 ans de prévisions
# Température: Tendance à la hausse selon le scénario
def generate_temperature_trend(scenario):
base_temp = 10 + 10 * np.sin(np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future)))
if scenario == "optimiste":
trend = base_temp + np.linspace(0, 1, len(base_temp)) # Faible réchauffement
elif scenario == "modéré":
trend = base_temp + np.linspace(0, 2, len(base_temp)) # Réchauffement moyen
else: # pessimiste
trend = base_temp + np.linspace(0, 3, len(base_temp)) # Fort réchauffement
return trend
# Précipitations: Variation selon le scénario
def generate_precipitation_trend(scenario):
base_rain = 50 + 20 * np.cos(np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future)))
if scenario == "optimiste":
trend = base_rain - np.linspace(0, 5, len(base_rain)) # Légère baisse
elif scenario == "modéré":
trend = base_rain - np.linspace(0, 10, len(base_rain)) # Baisse moyenne
else: # pessimiste
trend = base_rain - np.linspace(0, 15, len(base_rain)) # Forte baisse
return trend
# Irradiance: Augmentation progressive
def generate_irradiance_trend(scenario):
base_irradiance = 200 + 50 * np.sin(np.linspace(0, 2 * np.pi, len(dates_past) + len(dates_future)))
if scenario == "optimiste":
trend = base_irradiance + np.linspace(0, 5, len(base_irradiance)) # Faible augmentation
elif scenario == "modéré":
trend = base_irradiance + np.linspace(0, 10, len(base_irradiance)) # Augmentation modérée
else: # pessimiste
trend = base_irradiance + np.linspace(0, 20, len(base_irradiance)) # Forte augmentation
return trend
# Choix du scénario
scenario = "modéré" # Changer entre "optimiste", "modéré" et "pessimiste"
# Créer les DataFrames
temperature_df = pd.DataFrame({"Date": dates_past.tolist() + dates_future.tolist(),
"Température (°C)": generate_temperature_trend(scenario)})
rain_df = pd.DataFrame({"Date": dates_past.tolist() + dates_future.tolist(),
"Précipitations (mm)": generate_precipitation_trend(scenario)})
irradiation_df = pd.DataFrame({"Date": dates_past.tolist() + dates_future.tolist(),
"Irradiance (W/m²)": generate_irradiance_trend(scenario)})
# Afficher un extrait
print("Température (extrait) :")
print(temperature_df.head(3))
print("\nPrécipitations (extrait) :")
print(rain_df.head(3))
print("\nIrradiance (extrait) :")
print(irradiation_df.head(3))
if __name__ == "__main__":
# summary = get_meterological_summary(scenario, temperature_df, rain_df, irradiation_df)
# print(summary)
# Example usage
import pandas as pd
import numpy as np
from utils.soil_utils import find_nearest_point
city = "Bourgogne Franche Comté"
closest_soil_features = find_nearest_point(city)
print(closest_soil_features)
# Définir la période de 4 ans dans le passé + 15 ans dans le futur (19 ans)
start_date = "2010-01"
end_date = "2029-12"
# Générer une série de dates mensuelles
dates = pd.date_range(start=start_date, end=end_date, freq='M')
# Générer des données fictives de rendement (en tonnes par hectare)
np.random.seed(42) # Pour reproductibilité
# Tendance générale du rendement sans ombrage (augmentation progressive)
trend = np.linspace(2.5, 3.2, len(dates)) # Augmente légèrement sur les années
# Ajout de variations saisonnières et aléatoires
seasonality = 0.3 * np.sin(np.linspace(0, 12 * np.pi, len(dates))) # Effet saisonnier
random_variation = np.random.normal(0, 0.1, len(dates)) # Bruit aléatoire
# Calcul du rendement sans ombrage
yield_no_shade = trend + seasonality + random_variation
# Appliquer un effet d'ombrage (réduction de 10-20% du rendement)
shade_factor = np.random.uniform(0.1, 0.2, len(dates)) # Entre 10% et 20% de réduction
yield_with_shade = yield_no_shade * (1 - shade_factor)
# Créer le DataFrame
df = pd.DataFrame({
"date": dates,
"yield_no_shade": yield_no_shade,
"yield_with_shade": yield_with_shade
})
water_deficit_data = pd.DataFrame()
climate_data = pd.DataFrame()
print(get_agricultural_yield_comparison(culture="orge",
region="bourgogne franche comté",
water_df=water_deficit_data,
climate_df=climate_data,
soil_df=closest_soil_features,
agri_yield_df=df))