File size: 4,467 Bytes
03df0fa 603824f 03df0fa 603824f 03df0fa 603824f 883455d 603824f 03df0fa 603824f 883455d 03df0fa 883455d 03df0fa 603824f 03df0fa 883455d 03df0fa 603824f 03df0fa 603824f 03df0fa 603824f 03df0fa 603824f 883455d 603824f 883455d 603824f 883455d 603824f 883455d 603824f 03df0fa 603824f 03df0fa 883455d 03df0fa 603824f 03df0fa 883455d 03df0fa 603824f 883455d 603824f 883455d 03df0fa 603824f 03df0fa 603824f |
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 |
import openmeteo_requests
import requests_cache
import pandas as pd
from retry_requests import retry
# Setup the Open-Meteo API client with cache and retry on error
cache_session = requests_cache.CachedSession('.cache', expire_after=3600)
retry_session = retry(cache_session, retries=5, backoff_factor=0.2)
openmeteo = openmeteo_requests.Client(session=retry_session)
def get_info_meteo(latitude, longitude):
"""Function that creates a Json file containing the weather data of the location
ARGS:
latitude (Float) : latitude coordinate
longitude (Float): longitude coordinate
"""
url = "https://api.open-meteo.com/v1/forecast"
params = {
"latitude": latitude,
"longitude": longitude, # "cloud_cover_low", "cloud_cover_mid","cloud_cover_high"
"hourly": {"relative_humidity_2m", "soil_temperature_0cm", "soil_moisture_0_to_1cm", "cloud_cover"},
"daily": {"temperature_2m_max", "precipitation_sum", "wind_speed_10m_max", "sunshine_duration", "rain_sum"},
"past_days": 5,
"forecast_days": 7
}
responses = openmeteo.weather_api(url, params=params)
response = responses[0]
# Hourly dataframe
hourly = response.Hourly()
hourly_relative_humidity_2m = hourly.Variables(0).ValuesAsNumpy()
hourly_soil_temperature_0cm = hourly.Variables(1).ValuesAsNumpy()
hourly_soil_moisture_0_to_1cm = hourly.Variables(2).ValuesAsNumpy()
hourly_cloud_cover = hourly.Variables(3).ValuesAsNumpy()
hourly_data = {"date": pd.date_range(
start=pd.to_datetime(hourly.Time(), unit="s", utc=True),
end=pd.to_datetime(hourly.TimeEnd(), unit="s", utc=True),
freq=pd.Timedelta(seconds=hourly.Interval()),
inclusive="left"
)}
hourly_data["relative_humidity_2m_%"] = hourly_relative_humidity_2m
hourly_data["soil_temperature_0cm_C"] = hourly_soil_temperature_0cm
hourly_data["soil_moisture_0_to_1cm_m³"] = hourly_soil_moisture_0_to_1cm
hourly_data["cloud_cover_%"] = hourly_cloud_cover
hourly_dataframe = pd.DataFrame(data=hourly_data)
hourly_dataframe = pd.DataFrame(data=hourly_data)
# Average hourly data per day
hourly_dataframe['day_date'] = hourly_dataframe['date'].dt.strftime(
'%Y-%m-%d')
tmp1 = hourly_dataframe.groupby('day_date')[
['relative_humidity_2m_%', 'soil_temperature_0cm_C', 'soil_moisture_0_to_1cm_m³']].mean()
avg_hourly_dataframe = tmp1.rename(columns={
'relative_humidity_2m_%': 'avg_hourly_relative_humidity_2m_%',
'soil_temperature_0cm_C': 'avg_hourly_soil_temperature_0cm_C',
'soil_moisture_0_to_1cm_m³': 'avg_hourly_soil_moisture_0_to_1cm_m³'
}
)
# med cloud couverture
tmp2 = hourly_dataframe.groupby('day_date')[['cloud_cover_%']].median()
med_cloud_cover = tmp2.rename(
columns={'cloud_cover_%': 'med_cloud_cover_%'})
# Daily dataframe
daily = response.Daily()
daily_temperature_2m_max = daily.Variables(0).ValuesAsNumpy()
print(daily_temperature_2m_max)
daily_precipitation_sum = daily.Variables(1).ValuesAsNumpy()
daily_wind_speed_10m_max = daily.Variables(2).ValuesAsNumpy()
daily_sunshine_duration = daily.Variables(3).ValuesAsNumpy()
daily_rain_sum = daily.Variables(4).ValuesAsNumpy()
daily_data = {"date": pd.date_range(
start=pd.to_datetime(daily.Time(), unit="s", utc=True),
end=pd.to_datetime(daily.TimeEnd(), unit="s", utc=True),
freq='D',
inclusive="left"
)}
daily_data["daily_temperature_2m_max_C"] = daily_temperature_2m_max
daily_data["daily_precipitation_sum_mm"] = daily_precipitation_sum
daily_data["daily_wind_speed_10m_max_km/h"] = daily_wind_speed_10m_max
daily_data["daily_sunshine_duration_sec"] = daily_sunshine_duration
daily_data["daily_rain_sum_mm"] = daily_rain_sum
daily_dataframe = pd.DataFrame(data=daily_data)
daily_dataframe['day_date'] = daily_dataframe['date'].dt.strftime(
'%Y-%m-%d')
total_df = pd.merge(daily_dataframe, avg_hourly_dataframe,
on="day_date", how="left")
total_df = pd.merge(total_df, med_cloud_cover, on="day_date", how="left")
total_df['date'] = total_df['day_date']
total_df = total_df.drop('day_date', axis=1)
total_df.to_json("weather_data.json", orient='columns')
return total_df
if __name__ == "__main__":
df = get_info_meteo(48.832, 2.286)
print(df)
|