You are in: Home » Software » Plot Meteo

Interpolare dati meteo con GNU Octave e gnuplot

Introduzione

Tutti noi siamo familiari con i grafici meteorologici che mostrano con colori diversi le temperature medie registrate in determinate zone. Insomma, grafici come questo. Naturalmente, per produrre grafici a livello professionale sono necessari dati precisi ed elaborazioni sofisticate che sono fuori della portata dei singoli appassionati. Se tuttavia ci si accontenta di una soluzione casalinga, è possibile ottenere risultati molto interessanti con pochissimi mezzi.

In questa pagina vedremo come sia possibile realizzare una mappa delle temperature al suolo e delle precipitazioni registrate dalle centraline meteo amatoriali che molti appassionati gestiscono nel cortile o nel giardino di casa. I dati vengono raccolti dal sito www.meteoveneto.com, che pubblica i dati e realizzare diversi tipi di elaborazioni e statistiche. Con gli script descritti in seguito è possibile recuperare automaticamente i dati della temperatura e dell'accumulo di pioggia di una specifica data, elaborarli e produrre il grafico. Gli script sono anche in grado di recuperare i dati meteo dal sito dell'ARPAV. Naturalmente è possibile anche produrre animazioni sulla variazione delle temperature col tempo. I più volenterosi potranno, con minime modifiche, adattare gli script qui presentati per produrre animazioni anche di altre quantità di interesse (ad esempio, pressione atmosferica, eccetera).

Gli script descritti in questa pagina sono utilizzabili e distribuibili liberamente in base ai termini della GNU General Public License, versione 2.0 o successiva. In soldoni cioò significa che chiunque ha la possibilità di utilizzare e modificare a piacimento gli script, purché le modifiche siano esse stesse distribuite con la stessa licenza.

Prima di cominciare

Prima di cominciare è necessario assicurarsi di disporre del software necessario. Tutti gli script richiedono interpreti disponibili come software open source, disponibili con licenza GPL o simili. Questo significa che possono essere liberamente e gratuitamente scaricati dalla rete. Io personalmente ho testato gli script col sistema operativo Linux (in particolare Ubuntu 6.06 su piattaforma AMD64). Credo comunque che dovrebbe funzionare tutto su qualsiasi sistema Unix-like (incluso MacOSX), e probabilmente anche sotto Windows con un po' di adattamento.

Gli script richiedono tra gli altri i software seguenti:

Chi dispone di un sistema Linux probabilmente troverà tali programmi già installati nella propria distribuzione, o comunque facilmente disponibili ed installabili tramite gestori di pacchetti quali apt, urpmi, yum o simili.

Installazione

Installare gli script è molto semplice. Scaricate l'archivio plot_temp_meteoveneto-0.8.1.tar.gz e scompattatelo dando il comando:

tar xfz plot_temp_meteoveneto-0.8.1.tar.gz

Al termine d questa operazione sarà stata creata una directory plot_temp_meteoveneto-0.8.1/ contenente tra gli altri i seguenti file:

make_plot.pl
Questo è lo script principale, che dovrà essere invocato per produrre il grafico.
fetch_meteoveneto.pl, fetch_arpav.pl
Questi due script vengono utilizzati per recuperare i dati dal sito di meteoveneto oppure dell'ARPAV, rispettivamente. Volendo, possono essere utilizzati direttamente (da soli) per recuperare i dati. È sufficiente digitare ad esempio il comando:
./fetch_arpav.pl -d 10 -m 10 -y 2008
per ottenere un file out.dat con i dati meteo relativi al 10 ottobre 2008 del sito dell'ARPAV. Si noti che lo script non considera tutte le centraline ARPAV, ma solo quelle che forniscono temperatura e accumulo di pioggia. Lo script fetch_meteoveneto.pl può essere utilizzato con la stessa identica sintassi per recuperare i dati dal sito meteoveneto.
coordinate_arpav.txt, coordinate_meteoveneto.txt
Questi file di testo contengono sigla, nome e coordinate di alcune delle centraline meteo che forniscono dati a meteoveneto e all'ARPAV, rispettivamente. Le coordinate delle centraline sono essenziali per la corretta produzione del grafico. Nota bene: questo file non contiene le coordinate di tutte le centraline, senza contare che nuove centraline possono comparire in futuro. È quindi necessario aggiungere i dati delle centraline mancanti semplicemente aggiungendo delle righe al file; la struttura è molto semplice, ogni riga contiene i campi: CODICE NOME LONGITUDINE LATITUDINE ove CODICE è una breve stringa (racchiusa tra virgolette) che individua univocamente ciascuna stazione, NOME è il nome della stazione (sempre racchiuso tra virgolette) esattamente come compare nella pagina Wap di meteoveneto.com, oppure nelle pagine delle stazioni ARPAV; LONGITUDINE e LATITUDINE sono le coordinate espresse in gradi decimali (nel caso delle centraline meteoveneto), oppure secondo le coordinate Gauss-Boaga (per le centraline ARPAV).
interpolate.m
Questo script Octave è responsabile dell'interpolazione dei dati, prima che questi vengano plottati tramite gnuplot. Questo script produce i file temp_map.tmp, tmin_map.tmp, tmax_map.tmp e rain_map.tmp che contengono i dati di temperatura (media, minima, massima) e dell'accumulo di pioggia rispettivamente. In piú vengono prodotti ulteriori file ausiliari che contengono informazioni sulle isoterme, isoiete e le relative etichette. Questi vengono poi utilizzati da gnuplot per produrre il grafico, mediante lo script plot.sh.
griddata_cgs.m
Questo script Octave contiene la funzione utilizzata per l'interpolazione dei dati bidimensionali.
plot.sh
Questo script invoca gnuplot per produrre i grafici.
veneto.dat
Coordinate dei segmenti che formano il profilo della regione Veneto, con i confini delle province. Questo file viene usato da gnuplot per sovraimporre i confini della regione sul grafico delle temperature.

Il funzionamento degli script è piuttosto semplice, e ho provveduto a inserire qualche commento al loro interno per agevolarne la comprensione. Siete ovviamente i benvenuti ad apportare tutti i miglioramenti del caso!

Uso dello script

Per usare lo script, è sufficiente dare il comando seguente:

./make_plot.pl -d <giorno> -m <mese> -y <anno>

ove <giorno>, <mese> e <anno> rappresentano la data (in formato numerico) relativamente alla quale si vogliono recuperare i dati. Se non si specifica una fonte differente, i dati vengono recuperati dal sito meteoveneto. Ad esempio, per produrre i grafici relativamente alle temperature e all'accumulo di pioggia del 30 maggio 2008, sarà sufficiente dare il comando:

./make_plot.pl -d 30 -m 5 -y 2008

L'output del comando dovrebbe assomigliare a questo:

Reading coordinates.txt... Fetching data for date 2008-5-30 from www.meteoveneto.com... Making table... Interpolating... Making graphs... Done!

Se tutto è andato correttamente, dovreste trovare nella directory corrente alcuni file chiamati rispettivamente temp_map_20080530.png (mappa della temperatura media), tmin_map_20080530.png (mappa della temperatura minima), tmax_map_20080530.png (mappa della temperatura massima), e rain_map_20080530.png (mappa dell'accumulo di pioggia), tutti relativi alla data del 13 maggio 2008. I grafici dovrebbero apparire circa come questi:

Grafico temperature medie del 30 maggio 2008 in Veneto
Grafico accumulo di pioggia del 30 maggio 2008 in Veneto

Utilizzando l'opzione --datasource arpav è possibile produrre i grafici utilizzare i dati meteo delle stazioni ARPAV. Visto che al momento le centraline ARPAV sono in numero maggiore rispetto a quelle meteoveneto, e risultano anche meglio disposte sul territorio, si ottengono grafici piú lisci. Si veda il confronto tra le temperature prodotte con dati meteoveneto (a sinistra) e con dati ARPAV (a destra):

Dati meteoveneto

Grafico temperature medie del 10 ottobre 2008 in Veneto, dati meteoveneto

Dati ARPAV

Grafico temperature medie del 10 ottobre 2008 in Veneto, dati ARPAV

Lo script make_plot.pl accetta ulteriori parametri sulla riga di comando (oltre a -d, -m e -y che vanno obbligatoriamente sempre indicati):

--datasource <source>
Specifica la fonte da cui recuperare i dati da visualizzare. Se questa opzione non viene specificata, lo script preleva i dati da www.meteoveneto.com. I valori ammessi per <source> sono meteoveneto oppure arpav.
--show-temp-isolines
Questa opzione serve per generare le isoterme sovrapposte al grafico della temperatura. Viene generata una isoterma in corrispondenza delle zone con valori interi di temperatura.
--label-temp-isolines
Con questa opzione è possibile associare alle isoterme le etichette numeriche che rappresentano i valori di temperatura espressi in gradi centigradi. Nota: per diminuire l'"affollamento" del grafico, viene etichettata una isoterma ogni tre.
--show-temp-stations
Con questa opzione è possibile visualizzare nel grafico delle temperature delle etichette in corrispondenza delle stazioni meteo. Tali etichette indicano la sigla della stazione e il valore della temperatura media rilevata.
--show-rain-isolines
Simile a --show-temp-isolines, però genera le isoiete, ossia le curve che racchiudono aree con la stessa quantità di pioggia.
--label-rain-isolines
Simile a --label-temp-isolines, ma riferita alle isoiete.
--show-rain-stations
Questa opzione inserisce nel grafico dell'accumulo di pioggia delle etichette in corrispondenza di ciascuna stazione meteo, con l'indicazione della sigla della stazione e dell'accumulo (in millimetri) di pioggia registrato.
--interpolation-method <metodo>
Questa opzione consente di selezionare il metodo di interpolazione utilizzato. Di default lo script utilizza l'interpolazione lineare. Possibili valori per <metodo> sono: linear, thin_plate, multiquadric, gaussian, inverse_multiquadric. Si noti che le interpolazioni di tipo multiquadric, inverse_multiquadric e gaussian richiedono un ulteriore parametro che può essere definito utilizzando il parametro --interpolation-param (descritto in seguito). linear e thin_plate non richiedono alcun parametro. Per una discussione sui vari metodi di interpolazione utilizzati si veda Billings, S. D, Beatson, R. K., Newsam, G. N., Interpolation of geophysical data by continuous global surfaces, Geophysics, vol. 67, n. 6 (nov/dec 2002), pp 1810-1822.
--interpolation-param <c>
Usa <c> come parametro per la funzione di interpolazione specificata tramite --interpolation-method. Al momento l'opzione --interpolation-param viene utilizzata per specificare il parametro per le interpolazioni di tipo multiquadric, inverse_multiquadric e gaussian.
--help
Visualizza le istruzioni d'uso e termina immediatamente

Di seguito vengono mostrati alcuni esempi di grafici di temperatura del 31 maggio 2008 interpolati con metodi diversi.

Linear

Temperature map at 2008-05-31, linear interpolation

Thin-plate spline

Temperature map at 2008-05-31, thin-plate spline interpolation

Multiquadric, c=0.01

Temperature map at 2008-05-31, multiquadric interpolation with c=0.01

Multiquadric, c=0.05

Temperature map at 2008-05-31, multiquadric interpolation with c=0.05

Inverse Multiquadric, c=0.1

Temperature map at 2008-05-31, inverse multiquadric interpolation with c=0.1

Gaussian, c=0.005

Temperature map at 2008-05-31, gaussian interpolation with c=0.005

Si può osservare come interpolazioni diverse da quella lineare generino artefatti difficilmente giustificabili (si noti l'avvallamento seguito da un picco al centro del grafico nel caso delle interpolazioni thin-plate e multiquadrica). Notare anche come l'interpolazione mediante funzione base radiale gaussiana produce risultati chiaramente errati al di fuori del minimo poligono convesso che contiene le coordinate delle stazioni meteo. Esiste una nutrita bibliografia sull'uso di tecniche di interpolazione applicate a dati geografici o meteorologici. Alcuni riferimenti sono dati in appendice.

È molto facile realizzare animazioni delle temperature, ad esempio, di un intero mese. Supponiamo di voler realizzare un filmato che mostri l'evoluzione delle temperature nel mese di maggio 2008. Come prima cosa è necessario produrre i singoli grafici di ciascun giorno di maggio, col comando seguente (funziona con la shell bash):

for d in `seq 1 31`; do \ ./make_plot.pl -d $d -m 5 -y 2008 --show-temp-isolines --label-temp-isolines; \ done

Questo comando produrrà, dopo un po' di tempo, diversi file tra cui una serie chiamati temp_map_20080501.png ... temp_map_20080531.png, che rappresentano i grafici delle temperature di ciascun giorno del mese di maggio 2008. A questo punto è possibile creare un filmato partendo dalla sequenza dei file mediante il comando convert della suite ImageMagick:

convert -delay 100 temp_map_200805??.png temp_map_200805.gif

Questo comando produrrà il file temp_map_200805.gif con l'animazione delle temperature di maggio 2008. La stessa cosa si può fare per i grafici dell'accumulo di pioggia, ottenendo risultati simili a questi:

Animazione temperature del mese di maggio 2008 in Veneto
Animazione accumulo di pioggia del mese di maggio 2008 in Veneto

Come funziona lo script

Il funzionamento dello script può essere schematizzato (sebbene in modo un po' impreciso) come segue:

Schema di funzionamento dello script make_plot.pl
  1. Il primo passo consiste nel recupero delle informazioni dal web. Esistono due script differenti, fetch_meteoveneto.pl e fetch_arpav.pl, che sono in grado di recuperare i dati dal sito di meteoveneto oppure dell'ARPAV, rispettivamente. In base ai valore del parametro --datasource passato sulla riga di comando di make_plot.pl viene invocato lo script opportuno, il quale al termine dell'esecuzione crea un file out.tmp che contiene in format tabellare le informazioni meteo di interesse.
  2. A questo punto make_plot.pl fonde i dati del file out.tmp con altri file contenenti le coordinate delle centraline. Quale file di coordinate utilizzare viene deciso sempre in base al valore del parametro --datasource. Si noti che nel caso delle centraline ARPAV, il file coordiante_arpav.txt contiene le coordinate secondo la proiezione di Gauss-Boaga, perché questo è il sistema geografico con cui sono espresse sul sito dell'ARPAV.
  3. Il file grid_data.tmp, prodotto dal passo precedente, contiene i dati meteo associati alle coordinate geografiche in cui sono stati rilevati. In altre parole, ogni riga di grid_data.tmp contiene le coordinate di una centralina, e i relativi valori di temperatura (minima, massima, media) e accumulo di pioggia. Queste informazioni vengono utilizzate dallo script interpolate.m per generare i dati interpolati.
  4. Il passo finale consiste nell'invocazione dello script plot.sh, il cui scopo è quello di produrre i file in formato PNG delle mappe contenenti i dati meteo interpolati.

Un esempio

Un interessante esempio di applicazione di questi script si trova sul sito Meteo Merlara, dove è possibile scorrere tutte le mappe di temperatura e accumulo di pioggia dell'anno in corso. I grafici meteo prodotti con gli script descritti sopra sono stati sovrapposti alla piantina della regione Veneto a cura di Luca Stevanato, autore del sito Merlara Meteo, rendendo il tutto molto piú comprensibile ed esteticamente gradevole.

Alcune osservazioni

Durante l'esecuzione, lo script produce un certo numero di file temporanei con testensione .tmp. Se si recuperano dati dal sito ARPAV, lo script produce un file temporaneo per ciascuna stazione ARPAV considerata. Questi file possono essere lasciati al loro posto, perché in certi casi ciò fa sì che lo script riutilizzi i dati già prelevati anziché riscaricarli nuovamente. Tuttavia, se l'esecuzione dello script viene interrotta per qualsiasi motivo, è utile rimuovere tutti i file con estensione .tmp in modo da ripartire da una situazione il piú possibile pulita.

Risorse

Esistono in rete software molto più professionali per trattare dati meteo (o dati geofisici in generale) rispetto ai semplici script presentati qui. Ecco alcuni di tali programmi:

Alcune discussioni interessanti sull'applicazione di diverse tecniche di interpolazione a dati geofisici:

This page was last updated on December 19 2013 informativa sulla privacy