Spaces:
Runtime error
Runtime error
File size: 5,097 Bytes
a8dd5f5 9c23216 a8dd5f5 9c23216 a8dd5f5 9c23216 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
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))
|