Nella Data Science , le previsioni meteorologiche sono un'applicazione del machine learning sulle serie temporali dove utilizziamo dati temporali e algoritmi per fare previsioni per un determinato periodo di tempo.
Se vuoi imparare a prevedere il tempo usando le tue competenze di Data Science, questo articolo è per te. Ti guiderò attraverso nelle previsione metereologiche usando Python e un algoritmo di Machine learning.
Previsioni meteo con python e machine learning
La previsione meteorologica è il compito di prevedere le condizioni meteorologiche per una data posizione e ora. Con l'uso di dati meteorologici e algoritmi, è possibile prevedere le condizioni meteorologiche per il numero di n giorni successivo.
Per la previsione del tempo utilizzando Python, abbiamo bisogno di un set di dati contenente dati meteorologici storici basati su una posizione particolare. Ho trovato un set di dati su Kaggle basato sui dati meteorologici giornalieri.
Possiamo utilizzare questo set di dati per il compito di previsioni meteorologiche. È possibile scaricare il set di dati da qui sotto oppure nella sezione Dataset cercando
"DatiTemperatura.csv"
Nella sezione seguente imparerai come analizzare e prevedere il tempo usando Python.
Ora iniziamo questa attività importando le librerie Python necessarie e il set di dati di cui abbiamo bisogno:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
data = pd.read_csv("DatiTemperatura.csv")
print(data.head())
Output:
date meantemp humidity wind_speed meanpressure
0 2013-01-01 10.000000 84.500000 0.000000 1015.666667
1 2013-01-02 7.400000 92.000000 2.980000 1017.800000
2 2013-01-03 7.166667 87.000000 4.633333 1018.666667
3 2013-01-04 8.666667 71.333333 1.233333 1017.166667
4 2013-01-05 6.000000 86.833333 3.700000 1016.500000
Diamo un'occhiata alle statistiche descrittive di questi dati prima di andare avanti:
print(data.describe())
Output:
meantemp humidity wind_speed meanpressure
count 1462.000000 1462.000000 1462.000000 1462.000000
mean 25.495521 60.771702 6.802209 1011.104548
std 7.348103 16.769652 4.561602 180.231668
min 6.000000 13.428571 0.000000 -3.041667
25% 18.857143 50.375000 3.475000 1001.580357
50% 27.714286 62.625000 6.221667 1008.563492
75% 31.305804 72.218750 9.238235 1014.944901
max 38.714286 100.000000 42.220000 7679.333333
Ora diamo un'occhiata alle informazioni su tutte le colonne nel set di dati:
print(data.info())
Output:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1462 entries, 0 to 1461
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 1462 non-null object
1 meantemp 1462 non-null float64
2 humidity 1462 non-null float64
3 wind_speed 1462 non-null float64
4 meanpressure 1462 non-null float64
dtypes: float64(4), object(1)
memory usage: 57.2+ KB
La colonna della data in questo set di dati non ha un tipo di dati datetime. Lo cambieremo quando richiesto. Diamo un'occhiata alla temperatura media nel corso degli anni:
figure = px.line(data, x="date",
y="meantemp",
title='Mean Temperature Over the Years')
figure.show()
Output:
Ora diamo un'occhiata all'umidità nel corso degli anni:
figure = px.line(data, x="date",
y="humidity",
title='Humidity Over the Years')
figure.show()
Output:
Ora diamo un'occhiata alla velocità del vento nel corso degli anni:
figure = px.line(data, x="date",
y="wind_speed",
title='Wind Speed Over the Years')
figure.show()
Output:
Fino al 2015, la velocità del vento era maggiore durante agosto, settembre, dicembre e gennaio.
Dopo il 2015 non si sono verificate anomalie nella velocità del vento durante agosto, settembre, dicembre e gennaio. Ora diamo un'occhiata al rapporto tra temperatura e umidità:
figure = px.scatter(data_frame = data, x="humidity",
y="meantemp", size="meantemp",
trendline="ols",
title = "Relationship Between Temperature and Humidity")
figure.show()
Output:
C'è una correlazione negativa tra temperatura e umidità. Significa che una temperatura più alta comporta una bassa umidità e una temperatura più bassa comporta un'umidità elevata.
Analisi del cambiamento di temperatura con Python
Ora analizziamo il cambiamento di temperatura nel corso degli anni. Per questa attività, convertirò prima il tipo di dati della colonna della data in datetime. Quindi aggiungerò due nuove colonne nel set di dati per i valori di anno e mese.
Ecco come possiamo modificare il tipo di dati ed estrarre i dati di anno e mese dalla colonna della data:
data["date"] = pd.to_datetime(data["date"], format = '%Y-%m-%d')
data['year'] = data['date'].dt.year
data["month"] = data["date"].dt.month
print(data.head())
Output:
date meantemp humidity wind_speed meanpressure year month
0 2013-01-01 10.000000 84.500000 0.000000 1015.666667 2013 1
1 2013-01-02 7.400000 92.000000 2.980000 1017.800000 2013 1
2 2013-01-03 7.166667 87.000000 4.633333 1018.666667 2013 1
3 2013-01-04 8.666667 71.333333 1.233333 1017.166667 2013 1
4 2013-01-05 6.000000 86.833333 3.700000 1016.500000 2013 1
Ora diamo un'occhiata al cambiamento di temperatura nel corso degli anni:
plt.style.use('fivethirtyeight')
plt.figure(figsize=(15, 10))
plt.title("Temperature Change Over the Years")
sns.lineplot(data = data, x='month', y='meantemp', hue='year')
plt.show()
Output:
Sebbene il 2017 non sia stato l'anno più caldo dell'estate, possiamo vedere un aumento della temperatura media ogni anno.
Previsioni meteo con Python
Passiamo ora al compito delle previsioni del tempo. Userò il modello del profeta di Facebook per questo compito. Il modello del profeta di Facebook è una delle migliori tecniche per la previsione delle serie temporali.
Se non hai mai utilizzato questo modello prima, puoi installarlo sul tuo sistema utilizzando il comando menzionato di seguito nel prompt dei comandi o nel terminale:
pip install prophet
Il modello prophet accetta dati temporali denominati "ds" ed etichettati come "y". Quindi convertiamo i dati in questo formato:
forecast_data = data.rename(columns = {"date": "ds",
"meantemp": "y"})
print(forecast_data)
Output:
ds y humidity wind_speed meanpressure year month
0 2013-01-01 10.000000 84.500000 0.000000 1015.666667 2013 1
1 2013-01-02 7.400000 92.000000 2.980000 1017.800000 2013 1
2 2013-01-03 7.166667 87.000000 4.633333 1018.666667 2013 1
3 2013-01-04 8.666667 71.333333 1.233333 1017.166667 2013 1
4 2013-01-05 6.000000 86.833333 3.700000 1016.500000 2013 1
... ... ... ... ... ... ...
1457 2016-12-28 17.217391 68.043478 3.547826 1015.565217 2016 12
1458 2016-12-29 15.238095 87.857143 6.000000 1016.904762 2016 12
1459 2016-12-30 14.095238 89.666667 6.266667 1017.904762 2016 12
1460 2016-12-31 15.052632 87.000000 7.325000 1016.100000 2016 12
1461 2017-01-01 10.000000 100.000000 0.000000 1016.000000 2017 1
[1462 rows x 7 columns]
Di seguito è riportato come possiamo utilizzare il modello del profeta di Facebook per le previsioni del tempo utilizzando Python:
from prophet import Prophet
from prophet.plot import plot_plotly, plot_components_plotly
model = Prophet()
model.fit(forecast_data)
forecasts = model.make_future_dataframe(periods=365)
predictions = model.predict(forecasts)
plot_plotly(model, predictions)
Output:
E' così che puoi analizzare e prevedere il meteo usando Python.
Riepilogo sulle Previsioni meteo con python e machine learning
La previsione meteo è il compito di prevedere le condizioni meteorologiche per una data posizione e ora. Con l'uso di dati meteorologici e algoritmi, è possibile prevedere le condizioni meteorologiche per il numero di n giorni successivi. Spero che questo articolo sull'analisi e le previsioni meteorologiche utilizzando Python ti sia piaciuto. Sentiti libero di porre domande nella sezione commenti qui sotto.
Comments