Rosa del vento in Python

In questo post mostriamo come produrre con Python una semplice rosa del vento dei dati meteorologici in superficie generati con AERMET. Altri dati direzionali possono essere plottati modificando la funzione di lettura e parsing del file di input.

AERMET e' il preprocessore meteorologico di AERMOD, il modello di dispersione per la qualita' dell'aria preferito dall'US-EPA.

AERMET produce un file di dati di superficie e un file di dati di profilo con risoluzione oraria. L'input ad AERMET e' costituito da osservazioni al suolo (monitoraggi sito-specifici, misure agli aeroporti, misure di reti di monitoraggio) e in quota (radiosondaggi).

In alternativa, l'input ad AERMET puo' essere generato utilizzando MMIF, un postprocessore dell'US-EPA del modello meteorologico WRF. Questo approccio e' raccomandato dell'US-EPA quando non si dispone di dati affidabili rappresentativi del sito in esame.

Noi forniamo un servizio online di fornitura di dati meteorologici che permette di ordinare un set di file di input (o di output) di AERMET per qualsiasi localita' del mondo, per uno o piu' anni passati.

Una rosa del vento e' un grafico che mostra come velocita' e direzione sono distribuite in un determinato luogo, entro uno specifico periodo temporale. E' una rappresentazione molto utile perche' permette di sintentizzare in un singolo plot una grossa quantita' di dati.

La libreria Windrose di Python e' un software facile da utilizzare per generare una rosa del vento.

Il codice Python per creare una rosa del vento dai dati di superficie di AERMET e' il seguente (l'ultima versione e' disponibile su Github):

import os.path
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.cm as cm

from windrose import WindroseAxes

def load_aermet_sfc_file(ff):

    # This is a function to read AERMET surface file. Change it to read other formats.

    myfile = open(ff,"r",newline="\n")
    lines = myfile.readlines()
    # Header record
    (latitude,longitude,ua_identifier, sf_identifier, os_identifier, version_date) = [lines[0].split()[i] for i in (0,1,3,5,7,9)]

    wind = []
    for line in lines[1:]:
        (year,month,day,j_day,hour,h_sens,u_star,w_star,vptg,zic,zim,lmo,z_zero,bowen,albedo,ws,wd,zref,temp,ztemp,ipcode,pamt,rh,pres,ccvr,wsadj,extra) = line.split()
        wind.append([float(wd),float(ws)])

    myfile.close()

    d = dict()
    d['wind'] = wind
    d['latitude'] = latitude
    d['longitude'] = longitude

    return d

sfc_file = input("Please enter AERMOD.SFC file name: ")
if not os.path.exists(sfc_file):
    print(sfc_file+" does not exists.")
    exit()

d = load_aermet_sfc_file(sfc_file)
wd = []
ws = []

for pair in d['wind']:
    wd.append(pair[0])
    ws.append(pair[1])


ax = WindroseAxes.from_ax()    
ax.bar(wd, ws, normed=True, opening=0.8, edgecolor='white',cmap=cm.hot)
ax.set_legend()
plt.suptitle('LAT:'+d['latitude']+ ' / LON: '+d['longitude'])
plt.savefig(sfc_file+".png")
print("Windrose plot saved as "+sfc_file+".png")

                

Un file di esempio AERMOD.SFC e' disponibile per il download qui.

Per generare una rosa del vento si deve salvare il codice seguente in un file testuale di nome 'plot_windrose.py' e lanciare dalla linea di comando:

$ python3 plot_windrose.py

Si deve quindi inserire il nome del file come richiesto (AERMOD.SFC o nome e percorso di un altro file) e verra' generato nella medesima cartella del file di input un file PNG con la rosa del vento mostrata sopra.

Per rose del vento piu' elaborate e per analisi complesse dei dati direzionali puo' essere utile valutare il software WindRose PRO.

Scarica la versione di prova gratuita di WindRose PRO3