File size: 5,523 Bytes
a07ee0c
a8dd5f5
 
 
a07ee0c
 
a8dd5f5
9c23216
38af3d3
9c23216
a07ee0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9c23216
a07ee0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import pandas as pd
import pandas as pd
import numpy as np
from forecast import get_forecast_datasets, get_forecast_data
from data_pipelines.historical_weather_data import download_historical_weather_data, aggregate_hourly_weather_data

from utils.summary import get_meterological_summary, get_agricultural_yield_comparison


def get_meterological_past_data():
    download_historical_weather_data(latitude, longitude, start_year, end_year)

def process_all_data_for_meterological_summary(scenario: str, lat: float = 47.0, lon:float = 5.0):
   
    start_year, end_year = 2010, 2025
    historical_df = aggregate_hourly_weather_data(download_historical_weather_data(latitude=lat, longitude=lon, start_year=start_year, end_year= end_year))
    forecast_df = get_forecast_data(scenario=scenario, longitude=lon, latitude=lat, shading_coef=0)

    forecast_df["time"] = pd.to_datetime(forecast_df["time"])
    forecast_df['year'] = forecast_df["time"].dt.year
    new_forecast_df = forecast_df.groupby(by="year", as_index=False)[["Near Surface Air Temperature (°C)", "Surface Downwelling Shortwave Radiation (W/m²)", "Precipitation (kg m-2 s-1)"]].mean().reset_index()
    # new_forecast_df = new_forecast_df[new_forecast_df["year"] > 2025]

    historical_df = historical_df.reset_index().rename(columns={"index": "time"}).sort_values(by="time")
    historical_df["year"] = historical_df["time"].dt.year
    historical_df["precipitation"] = historical_df["precipitation"] / 3600  # to transform the data to kg m2 per s

    new_historical_df = historical_df.groupby(by="year", as_index=False)[["air_temperature_mean", "irradiance", "precipitation"]].mean().reset_index()
    new_historical_df = new_historical_df[new_historical_df["year"] < 2024]

    temperature_df = pd.concat([new_historical_df[["year", "air_temperature_mean"]].rename(columns={"air_temperature_mean": "Near Surface Air Temperature (°C)"}), 
                                new_forecast_df[["year", "Near Surface Air Temperature (°C)"]]], axis=0)

    irradiance_df = pd.concat([new_historical_df[["year", "irradiance"]].rename(columns={"irradiance": "Surface Downwelling Shortwave Radiation (W/m²)"}), 
                                new_forecast_df[["year", "Surface Downwelling Shortwave Radiation (W/m²)"]]], axis=0)
    
    rain_df = pd.concat([new_historical_df[["year", "precipitation"]].rename(columns={"precipitation": "Precipitation (kg m-2 s-1)"}), 
                                new_forecast_df[["year", "Precipitation (kg m-2 s-1)"]]], axis=0)

    return temperature_df, rain_df, irradiance_df


if __name__ == "__main__":

    scenario = "pessimist"
    lat, lon = 47.0, 5.0
    temperature_df, rain_df, irradiance_df = process_all_data_for_meterological_summary(scenario, lat, lon)
    
    meterological_summary = get_meterological_summary(scenario=scenario, 
                                                      temperature_df=temperature_df,
                                                      irradiance_df=irradiance_df,
                                                      rain_df=rain_df)
    print(meterological_summary)

    # from utils.soil_utils import find_nearest_point
    # city = "Bourgogne Franche Comté"
    # closest_soil_features = find_nearest_point(city)
    # print(closest_soil_features)

    # 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 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))