gaia / summary_test.py
AliceTt's picture
added separation between infos and results in two pages
38af3d3
raw
history blame
5.04 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
def get_mocked_summary(scenario):
# 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),
}
)
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()
summary = 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,
)
print(summary)