Spaces:
Runtime error
Runtime error
File size: 5,226 Bytes
a8dd5f5 9c23216 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 a8dd5f5 38af3d3 2914aec a8dd5f5 2914aec a8dd5f5 2914aec 9c23216 38af3d3 9c23216 38af3d3 9c23216 38af3d3 9c23216 38af3d3 9c23216 38af3d3 9c23216 38af3d3 2914aec |
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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
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),
}
)
return temperature_df, rain_df, irradiation_df
def get_not_shaded_summary():
scenario = "pessimiste"
temperature_df, rain_df, irradiance_df = get_mocked_summary(scenario)
summary = get_meterological_summary(
scenario, temperature_df, rain_df, irradiance_df
)
return summary
# Example usage
def get_shaded_summary():
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,
)
return summary
|