Torna all'elenco degli articoli Articoli
Tempo di lettura: 9 minuti

Mini-tutorial: Analizzare dati meteo reali in SQL e trovare il periodo migliore per viaggiare

Cercate il momento perfetto per andare in vacanza? Con poche query SQL e i dati meteo reali di Szeged, in Ungheria, è possibile scoprire quali sono i mesi più caldi, quelli più piovosi o quelli ideali per una passeggiata al sole. Questo mini-tutorial è un modo divertente e pratico per affinare le vostre abilità con l'SQL, e magari per pianificare il vostro prossimo viaggio.

Cercate il sole e la pioggia?

Pianificare una vacanza non significa solo scegliere una destinazione. È anche una questione di tempismo: quando il tempo è effettivamente piacevole?

Con poche query SQL è possibile rispondere a domande come: Qual è il mese più caldo in una città? Quando piove più spesso? Le giornate ventose sono frequenti in primavera? In questo tutorial lavorerete con dati meteorologici storici reali di Szeged, in Ungheria, e metterete in pratica abilità SQL essenziali come SELECT, GROUP BY, HAVING e ORDER BY. Si tratta di un mini progetto pratico che combina la pratica del mondo reale con un po' di curiosità di viaggio.

Volete prima ripassare le nozioni di base? Provate il corso SQL per principianti su LearnSQL.it: è facile da seguire, interattivo e insegna tutto ciò che serve per seguire questo tutorial.

È possibile adattare queste query per analizzare il meteo di altre località. API meteo storico

Cercate dati di altre località? L'API Open-Meteo Historical Weather è un'ottima risorsa gratuita per scaricare la storia del tempo per città o coordinate.

L'SQL non è solo per i report e i cruscotti: può anche aiutarvi a pianificare la vostra prossima vacanza. Immergiamoci in questo mondo.

Per iniziare: Caricare il dataset meteo

Utilizzeremo il dataset pubblico Weather in Szeged 2006-2016 di Kaggle, che contiene dati meteo giornalieri dal 2006 al 2016.

  1. Scaricare i dati: Visitare la pagina di Kaggle e scaricare il fileweatherHistory.csv.
  2. Preparare il file per l'importazione.

Per importare il file in un database di vostra scelta, dovete:

  • Rimuovere il sito +01:00 dal sito Formatted Date Per farlo si può usare la funzione Cerca e sostituisci del proprio editor.
  • Rinominare le intestazioni in modo da utilizzare i trattini bassi al posto degli spazi.

È possibile modificare il file utilizzando Excel, Notepad o qualsiasi altro editor di testo.

Ecco la riga di intestazione ripulita:

formatted_date,summary,precip_type,temperature_c,apparent_temperature_c,humidity,wind_speed_kmh,wind_bearing_deg,visibility_km,pressure_mb,daily_summary
  1. Creare la tabella nel database
CREATE TABLE szeged_weather (
  formatted_date TEXT,
  summary TEXT,
  precip_type TEXT,
  temperature_c FLOAT,
  apparent_temperature_c FLOAT,
  humidity FLOAT,
  wind_speed_kmh FLOAT,
  wind_bearing_deg FLOAT,
  visibility_km FLOAT,
  pressure_mb FLOAT,
  daily_summary TEXT
);
  1. Importare il file CSV

In PostgreSQL:

COPY szeged_weather FROM '/path/to/weatherHistory.csv' DELIMITER ',' CSV HEADER;

o in MySQL:

LOAD DATA INFILE '/path/to/weatherHistory.csv' INTO TABLE szeged_weather
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

Assicurarsi che il database sia configurato per consentire l'importazione di file.

Passo dopo passo: Analisi dei dati meteo in SQL

Iniziare con l'esplorazione dei dati

Prima di tuffarsi nell'analisi, è utile capire con che tipo di dati si sta lavorando. Vediamo un'anteprima di alcune righe del set di dati.

Query SQL

SELECT *
FROM szeged_weather
LIMIT 5;

Esempio di output

formatted_datesummaryprecip_typetemperature_capparent_temperature_chumiditywind_speed_kmhwind_bearing_degvisibility_kmpressure_mbdaily_summary
2016-09-01 00:00:00Partly Cloudyrain21.121.00.8913.02309.51012.3Partly cloudy throughout the day
2016-09-01 01:00:00Mostly Cloudyrain20.720.60.9211.32409.41012.1Partly cloudy throughout the day
2016-09-01 02:00:00Overcastrain20.320.20.9310.72459.21011.9Partly cloudy throughout the day
2016-09-01 03:00:00Overcastrain19.919.80.949.92509.01011.7Partly cloudy throughout the day
2016-09-01 04:00:00Mostly Cloudyrain19.519.40.959.32558.91011.6Partly cloudy throughout the day

Come funziona

  • SELECT * restituisce tutte le colonne - utile per una prima occhiata.
  • LIMIT 5 restituisce solo le prime 5 righe. In questo modo l'output è gestibile e non sovraccarica il database.

Cosa avete appena imparato

  • Anteprima della struttura dei dati
  • Scansione delle colonne disponibili
  • Conferma del formato e dei tipi di dati

🔗 S iete nuovi a SQL? Il corso SQL per principianti su LearnSQL.it vi guida attraverso questi primi passi in modo interattivo, perfetto per chi è alle prime armi.

Cosa significa per voi

Vedrete colonne come formatted_date, temperature_c, wind_speed_kmh e summary. In questo modo si può capire cosa è possibile fare e quali campi possono essere filtrati o raggruppati in seguito.

Qual è la temperatura media a Szeged?

Cominciamo con qualcosa di semplice: la temperatura media dell'intero set di dati.

Query SQL

SELECT 
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather;

Esempio di risultato

avg_temp
14.6

Come funziona

  • AVG() calcola il valore medio.
  • ROUND(..., 1) rende più facile la lettura mostrando un solo decimale.

Cosa avete appena imparato

  • Aggregazione di base con AVG()
  • Formattazione dei risultati numerici
  • Ottenere un numero di grande formato da dati grezzi

🔗 Volete padroneggiare le funzioni SQL? Date un'occhiata al Funzioni SQL standard su LearnSQL.it - copre AVG(), SUM(), MIN(), MAX() e altro ancora, con esercizi pratici e casi d'uso reali.

Cosa significa per voi

Il risultato indica la temperatura media giornaliera di Szeged per l'intero periodo di 10 anni. Questo è utile come punto di riferimento: in seguito, è possibile confrontare mesi o giorni specifici con questa linea di base.

Qual è il mese più caldo a Szeged?

Siete alla ricerca di giornate calde e soleggiate, magari per visitare i mercati locali, fare una passeggiata lungo il fiume o semplicemente evitare di mettere in valigia il cappotto. Scopriamo quale mese ha la temperatura media più alta a Szeged.

Query SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(AVG(temperature_c), 1) AS avg_temp
FROM szeged_weather
GROUP BY month
ORDER BY month;

Esempio di risultato

monthavg_temp
10.4
22.6
37.9
413.5
518.6
622.3
724.9
824.4
919.1
1013.0
116.7
121.5

Come funziona

  • EXTRACT(MONTH FROM ...) estrae il mese da ogni data.
  • AVG(temperature_c) calcola la temperatura media mensile.
  • ROUND(..., 1) la formatta con un decimale.
  • GROUP BY e ORDER BY struttura i risultati per facilitarne il confronto.

Cosa avete appena imparato

  • Aggregazione con AVG()
  • Lavorare con parti di data utilizzando EXTRACT()
  • Raggruppare e ordinare i risultati delle query

📘 Volete esercitarvi in modo più strutturato?

Provate il Pratica di SQL Group BY su LearnSQL.it. Questo corso per principianti si concentra sull'uso di GROUP BY con funzioni aggregate come AVG(), SUM(), MIN() e COUNT() in diversi scenari e insiemi di dati. È perfetto per rafforzare ciò che si è appena esercitato in un formato interattivo.

Cosa significa per voi

  • Luglio è il mese più caldo a Szeged, mentre agosto lo segue a breve distanza.
  • Maggio e settembre sono miti e adatti a chi preferisce un clima confortevole.
  • Evitate i mesi da gennaio a marzo se sperate in giornate calde.

Quali sono i tipi di tempo più comuni?

Vediamo quali sono i tipi di tempo più probabili, in base alla colonna di riepilogo.

Query SQL

SELECT 
  summary,
  COUNT(*) AS occurrences
FROM szeged_weather
GROUP BY summary
ORDER BY occurrences DESC
LIMIT 10;

Esempio di risultato

summaryoccurrences
Partly Cloudy5200
Mostly Cloudy4300
Clear3800
Overcast3100
Foggy1900
Breezy and Partly Cloudy1200
Breezy and Mostly Cloudy1100
Humid and Mostly Cloudy950
Dangerously Windy and Partly Cloudy850
Dry and Mostly Cloudy800

Come funziona

  • COUNT(*) calcola la frequenza con cui appare ogni riepilogo.
  • GROUP BY summary raggruppa valori identici.
  • ORDER BY ... DESC e LIMIT aiutano a concentrarsi sui 10 tipi di tempo principali.

Cosa avete appena imparato

  • Analisi di frequenza con COUNT(*)
  • Ordinamento decrescente dei risultati
  • Limitare l'output con LIMIT

Cosa significa per voi

  • La dicitura "Parzialmente nuvoloso" è molto comune, quindi ci si può aspettare un cielo misto.

Se la vostra vacanza ideale richiede un sole costante, controllate la frequenza di "Sereno".

Quanto spesso piove ogni mese?

Il clima caldo è fantastico, ma non se piove continuamente. Scopriamo quanto spesso piove a Szeged ogni mese - non solo le precipitazioni totali, ma anche il numero di ore in cui piove.

Ogni riga di questo set di dati rappresenta un'ora di tempo. Quindi, quando calcoliamo le percentuali di pioggia, stiamo rispondendo: "Di tutte le ore in un dato mese, quante hanno avuto pioggia?".

Query SQL

SELECT 
  EXTRACT(MONTH FROM formatted_date) AS month,
  ROUND(
    SUM(CASE WHEN LOWER(summary) LIKE '%rain%' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
    1
  ) AS percent_rainy
FROM szeged_weather
GROUP BY month
ORDER BY month;

Esempio di output

monthpercent_rainy
112.8
210.2
315.3
418.1
521.5
625.6
719.2
816.8
920.4
1017.7
1114.9
1213.3

Come funziona

  • EXTRACT(MONTH FROM formatted_date) fornisce il numero del mese (1-12)
  • LOWER(summary) si assicura che corrispondano parole come "pioggia" o "rain".
  • CASE WHEN ... THEN 1 ELSE 0 END controlla ogni riga:
    • Se contiene "pioggia" → ritorno 1
    • Se no → ritorno 0
  • SUM(...) somma tutti gli 1 - questo è il numero di ore di pioggia in quel mese
  • COUNT(*) ci dà il totale delle ore nel mese
  • Dividiamo, moltiplichiamo per 100 e arrotondiamo il risultato per ottenere una percentuale pulita.

Cosa avete appena imparato

  • Usare EXTRACT() per raggruppare i dati per mese
  • Applicazione di un contatore condizionale con CASE WHEN all'interno SUM()
  • Rendere le ricerche di testo insensibili alle maiuscole e alle minuscole con LOWER()
  • Calcolo di percentuali da dati raggruppati
  • Formattazione dei numeri con ROUND()

📘 Volete affinare ulteriormente queste competenze?

Date un'occhiata al Come creare semplici report SQL su LearnSQL.it. Questo corso interattivo spiega come utilizzare le funzioni aggregate (AVG(), COUNT(), SUM()), come classificare i dati con CASE WHEN e come creare semplici report con GROUP BY. È adatto ai principianti, con scenari reali e oltre 90 esercizi pratici per rafforzare quanto appreso.

Cosa significa per voi

Se state pianificando una vacanza, questo vi fornisce il quadro reale:

  • Giugno ha una maggiore probabilità di pioggia, circa il 25% di tutte le ore.
  • Agosto è più sicuro, con meno ore di pioggia.

Utilizzate questo approccio anche per altre condizioni: neve, nebbia o tempo soleggiato. Basta cambiare una parola nella clausola LIKE.

Quali giorni erano freddi e ventosi?

Alcune condizioni meteorologiche non compaiono nelle medie mensili. Cerchiamo di individuare i giorni in cui c'è stato sia freddo che vento, condizioni che rendono scomodo stare all'aperto.

Query SQL

SELECT 
  formatted_date,
  temperature_c,
  wind_speed_kmh
FROM szeged_weather
WHERE temperature_c < 5 AND wind_speed_kmh > 30
ORDER BY temperature_c;

Esempio di output

formatted_datetemperature_cwind_speed_kmh
2015-01-07 05:00:00-6.434.2
2013-12-01 03:00:00-3.831.7
2014-02-12 08:00:00-2.536.0
2016-01-19 04:00:000.932.5
2012-11-28 01:00:004.233.1

Come funziona

  • WHERE filtra le righe che soddisfano entrambe le condizioni: freddo e vento.
  • ORDER BY temperature_c le elenca dal più freddo in su.

Cosa avete appena imparato

  • Condizioni multiple in un filtro
  • Operatori logici (AND)
  • Ordinamento per colonne specifiche

Cosa significa per voi

  • Questi giorni sono rari ma duri. La maggior parte cade tra novembre e marzo.
  • Questo conferma l'idea che Szeged non è ideale per i viaggi invernali.

Sfida: qual è stata la temperatura più calda mai registrata?

Ecco un'occasione per mettere in pratica quanto appreso. Riuscite a trovare la singola ora più calda nell'intero set di dati di Szeged?

Compito SQL

Avrete bisogno di:

  • MAX(temperature_c) trovare il valore più alto registrato
  • ORDER BY temperature_c DESC ordinare i dati
  • LIMIT 1 restituire solo l'ora più calda
  • Oppure utilizzare una sottoquery per restituire sia la temperatura che la data in cui si è verificato il fenomeno.

Lasciamo a voi la query. Provatela, testatela e scoprite che tipo di estremi estivi ha affrontato Szeged!

Prova con altre città

La parte migliore? Queste query funzionano ovunque. Se siete curiosi di sapere qual è il mese più ventoso di Varsavia o la stagione più soleggiata di Sydney, caricate un dataset meteo storico in SQL e iniziate a esplorare.

Non si tratta solo di esercitarsi, ma di scoprire. Dati reali. Domande reali. Risposte reali.
E forse anche il vostro prossimo luogo di vacanza.

Volete affinare ulteriormente le vostre competenze in SQL? LearnSQL.it offre corsi pratici e interattivi in cui si scrive e si esegue SQL nel browser. Iniziate con il corso SQL per principianti e proseguite da lì.