Sonntag, 17. Juli 2011

Sonnenscheindauer für die Messstation Konstanz

Im Rahmen der Solarthermie Recherche habe ich heute ein paar Auswertungen gemacht. 

Dank dem Deutschen Wetterdienst und "Marian Steinbach", dessen "DWD scraper" Quellcode habe ich zum Einlesen der Daten des Deutschen Wetterdienst verwendet.

Der Deutschen Wetterdienst im Folgenden DWD genannt stellt die Daten diverser Messstationen kostenlos im Internet bereit. 

Marians Quellcode habe ich so abgeändert, dass ich die Daten nicht von der Internet Seite des DWDs lade sondern direkt von der Festplatte. Das spart Zeit beim herum Experimentieren.

Im Folgenden ein Plot der Sonnenscheindauer im Jahr 2003 für die Messstation Konstanz.
© Deutscher Wetterdienst
"Die tatsächliche Sonnenscheindauer ist als die Zeitspanne definiert, während der die direkte Sonnenstrahlung senkrecht zur Sonnenrichtung mindestens 120 W/m2 beträgt" Quelle: Wikipedia
Interessant ist das im Jahr 2003 fast 2060 Stunden die Sonne geschienen hat. Die Längste Sonneneinstrahlung betrug 14,5 Stunden. Es ist aber auch klar zu erkennen, dass es auch im Sommer Tage gibt an den die Einstrahlung sehr gering beziehungsweise gleich Null ist. Dafür gibt es auch im Januar und Dezember Tage an welchen die Sonne 8 Stunden geschienen hat.

Das modifizierte Python Skript befindet sich hier:

import re
import sys
import numpy
import matplotlib
matplotlib.rc('text', usetex = True)
import pylab
import scipy
# This stuff is based on marians-dwd-climate-data-scraper
# https://github.com/marians/dwd-climate-data-scraper
f = open('/home/chris/Solarthermie/DWD_daten_10929_konstanz.txt','r')
content = f.read()
f.close()
headers_regex = re.compile(r"STAT\s+JJJJMMDD\s+QN\s+TG\s+TN\s+TM\s+TX\s+RFM\s+FM\s+FX\s+SO\s+NM\s+RR\s+PM")
allrows = []
sunshine = {}
curr_year = "xxxx"
if not headers_regex.search(content):
print "Error: Data not in expected format - or header line not found."
sys.exit(1)
else:
values_regex = re.compile(r"([0-9]{5})\s+([0-9]{8})\s+([0-9]{1,2})\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)\s+([-\.0-9]+)")
matches = re.findall(values_regex, content)
for row in matches:
# station_id
# date in format YYYYMMDD
# quality_level = QN = Qualitaetsniveau der Daten
# temperature_5cm_min = TG = Minimum der Temperatur in 5 cm ueber dem Erdboden (Grad C)
# temperature_200cm_min = TN = Minimum der Temperatur in 2 m ueber dem Erdboden (Grad C)
# temperature_200cm_average = TM = Mittel der Temperatur in 2 m ueber dem Erdboden (Grad C)
# temperature_200cm_max = TX = Maximum der Temperatur in 2 m ueber dem Erdboden (Grad C)
# relative_humidity = RFM = Mittel der relativen Feuchte (%)
# wind_force_average = FM = Mittel der Windstaerke (Bft)
# wind_speed_max = FX = Maximum der Windgeschwindigkeit (Spitzenboee) (m/sec)
# sunshine_duration = SO = Summe der Sonnenscheindauer (Stunden)
# cloud_amount_average = NM = Mittel des Bedeckungsgrades (Achtel)
# precipitation_height = RR = Niederschlagshoehe (mm)
# barometric_pressure_average = PM = Mittel des Luftdruckes in Stationshoehe (hpa)
row = {'station_id': int(row[0]),
'date': row[1],
'quality_level': int(row[2]),
'temperature_5cm_min': row[3],
'temperature_200cm_min': row[4],
'temperature_200cm_average': row[5],
'temperature_200cm_max': row[6],
'relative_humidity': row[7],
'wind_force_average': row[8],
'wind_speed_max': row[9],
'sunshine_duration': row[10],
'cloud_amount_average': row[11],
'precipitation_height': row[12],
'barometric_pressure_average': row[13]
}
date = row["date"]
if(False == date.startswith(curr_year)):
curr_year = date[0:4]
sunshine[curr_year] = []
sunshine[curr_year].append(row['sunshine_duration'])
allrows.append(row)
for key in sunshine.iterkeys():
sun = scipy.array(sunshine[key],dtype=float)
total_sun = numpy.sum(sun)
max_sun = numpy.max(sun)
pylab.plot(sun,'-ro')
pylab.xlabel('Tage')
pylab.ylabel('Summe Sonnenscheindauer (Stunden)')
pylab.title('Sonnenscheindauer Messstation Konstanz im Jahr' + key)
pylab.xlim(0,370)
pylab.grid(True)
pylab.text(2, max_sun-1.2, "Summe: " + str (total_sun) + 'h\nMaximum: ' + str(max_sun) +'h', {'color' : 'g', 'fontsize' : 16})
pylab.savefig('Sonnenscheindauer_' + key +'.png')
pylab.show()
pylab.close()
view raw dwd_reader.py hosted with ❤ by GitHub

Keine Kommentare:

Kommentar veröffentlichen