Schwellwerte
Kompositkarten von Störmeldundungen über bestimmten Schwellwerten meteorologischer Parameter
Leseprobe¶
Tage mit meteorologischen Bedingungen über einem kritischen Schwellwert können überdurchschnittlich viele Meldungen hervorrufen, weil es entweder zu heiß war (Tmax>30°C), weil es örtlich Starkregen gab (Nied>20mm) oder weil hohe Windgeschwindigkeiten geherrscht (Wmax>17m/s) haben.
Durch die Kombination von täglichen Wetterdaten und Störungdaten (Filter1) je PD von 2015-2019 wurde ein Split der Daten nach einem vorgegebenen Schwellwert einer meteorologischen Größe durchgeführt. Die Meldedaten oberhalb der kritischen Schwelle wurden gemittelt und mit dem Mittelwert über die Zeit verglichen.
Beispiel Wind
An Tagen mit einer maximalen Windgeschwindigkeit von mehr al 17 m/s je PD treten Deutschlandweit 1.5 Meldungen je PD mehr auf als im Mittel. Bei 19 m/s sind es bereits 3.0 Meldungen je PD. 8.7 Meldungen je PD mehr sind es bei Windgeschwindigkeiten über 23 m/s. Also ein exponentieller Anstieg der Meldungen mit der Windgeschwindigkeit.
Ergebnis¶
Temperatur¶
tmax30 | tmax31 | tmax32 | tmax33 |
---|---|---|---|
Niederschlag¶
nied10 | nied15 | nied20 | nied25 |
---|---|---|---|
Windgeschwindkigkeit¶
wmax17 | wmax19 | wmax21 | wmax23 |
---|---|---|---|
Code¶
Module
import sys
import numpy as N
import shapefile
import scipy.stats as stats
import pylab as P
from matplotlib.collections import PatchCollection
from pylab import Polygon
from mpl_toolkits.basemap import Basemap
P.style.use('bmh')
params = {'legend.fontsize': 8,'font.family': 'serif'}
P.rcParams.update(params)
Plotting
bahns = {'bahn':[-18,18,'PiYG_r','[N]']}
#paras = {'tmax':30,'nied':10,'wmax':17}
#paras = {'tmax':31,'nied':15,'wmax':19}
#paras = {'tmax':32,'nied':20,'wmax':21}
#paras = {'tmax':33,'nied':25,'wmax':23}
paras = {'tmax':34,'nied':30,'wmax':25}
for para in paras:
print (para)
fig = P.figure(figsize=(12,4))
ax = fig.add_subplot(1,1,1)
m = Basemap(projection='merc',llcrnrlat=47,urcrnrlat=55.2,llcrnrlon=5,urcrnrlon=16,resolution='l')
m.readshapefile('./shp/OSS_M1_PROD_DURCH_FL_EXT_geo', 'pds',zorder=10)
cmap=P.get_cmap(bahns['bahn'][2],11)
norm=P.Normalize(bahns['bahn'][0],bahns['bahn'][1])
patches = []
avg = []
abs = []
for info, shape in zip(m.pds_info, m.pds):
pd = info['NAME']
file = './csv/pds-uas/'+pd+'.csv'
data=N.genfromtxt(file,names=True,comments='#',delimiter=';',dtype=None,encoding='utf-8')
id = N.where((data['ja']>=2015)&(data['ja']<=2019))[0]
bahn = N.array(data['Filter0'][id])
file = './csv/obs-dwd/'+pd+'.csv'
data=N.genfromtxt(file,names=True,comments='#',delimiter=';',dtype=None,encoding='utf-8')
id = N.where((data['ja']>=2015)&(data['ja']<=2019))[0]
tmps = N.array(data[para][id])
id = N.where(tmps>paras[para])[0]
tmp0 = N.mean(bahn)
if(len(id)>0):
tmp1 = N.mean(bahn[id])
tmp = tmp1-tmp0
else:
tmp = N.nan
if(N.isnan(tmp)==True):
color = 'lightgray'
else:
color=cmap(norm(tmp))
avg.append(tmp)
abs.append(tmp0)
#color=cmap(norm(tmp))
patches.append( Polygon(N.array(shape), True, color=color) )
pc = PatchCollection(patches, match_original=True, edgecolor='k', linewidths=0.1, zorder=2)#, alpha=0.5)
ax.add_collection(pc)
ax.axis('off')
Nshp=10
CM = P.scatter(N.zeros(Nshp),N.zeros(Nshp),s=N.zeros(Nshp),c=N.zeros(Nshp),cmap=cmap,vmin=bahns['bahn'][0],vmax=bahns['bahn'][1])
CB = m.colorbar(CM,location='bottom',extend='both',shrink=0.9,pad=0.05)
CB.set_label('Abweichung vom Mittel [N]',fontsize=10,weight='bold')
CB.ax.tick_params(labelsize=8,labelrotation=45)#,ha="center")#CB.ax.set_xticklabels(fontsize=10,rotation =45,ha="center")
avg = N.array(avg)
x,y = m(5.7,54.5)
P.text(x,y,r'$\varnothing$ %.1f'%N.nanmean(avg),fontsize=10,weight='bold')
abs = N.array(abs)
x,y = m(5.7,54.0)
P.text(x,y,'N %.1f'%N.nanmean(abs),fontsize=8)#,weight='bold')
P.title('$\mathbf{\overline{N_{SW}}-\overline{N}}$: '+para+'>%i'%(paras[para]),fontsize=12,weight='bold')
fig.tight_layout()
fig.savefig('./img/composite_%s%i.png'%(para,paras[para]),dpi=240,transparent=False,bbox_inches='tight',pad_inches=0.0)