DMUG-Archiv 2025

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

[Dmug] Heizgradtage von Realdaten

Liebe Freundinnen und Freunde von Realdaten,


Ab Mai 2025 macht MeteoSchweiz ihre Daten schrittweise als Open Government Data (OGD) zugänglich. Die verfügbaren Daten können entweder manuell heruntergeladen oder automatisch als Dateien bezogen werden.
https://www.meteoschweiz.admin.ch/service-und-publikationen/service/open-data.html

Die Station Kloten misst seit 1.1.1935:
https://data.geo.admin.ch/ch.meteoschweiz.ogd-smn/klo/ogd-smn_klo_d_historical.csv

Seit 1.3.1950 wird die Tagesmitteltemperatur (tre200d0) ausgewiesen.

Ein Heiztag liegt vor, wenn die Tagesmitteltemperatur nicht über (Schweiz: 12 °C, BRDtld: 15 °C) steigt. Die Differenz zwischen (Schweiz: 20 °C, DBDtld: 21 °C) und der Tagesmitteltemperatur an einem Heiztag wird als Heizgradtag [K d] bezeichnet
und deren Darstellung ist recht geradlinig

Man beachte, dass trotz des Abschwungs der Extremwerte (4200, 3200) -> (3400, 2800) die
2800 Heizgradtage bedeuten, dass weiterhin geheizt wird.

Grüsse

Udo.

Heizgradtage Kloten


klotenD = Import[FileNameJoin[{NotebookDirectory[], "others", "swissmeteo", "ogd-smn_klo_d_historical.csv"}], "CSV"];

klotenS = Select[Take[First[StringSplit[#, ";"]], 3] & /@ klotenD, (StringLength[#[[3]]] > 0) &]

klotenTS = {DateObject[StringTake[#[[2]], 10], "Day"],
 If[ToExpression[#[[3]]] <= 12,
 Quantity[20 - ToExpression[#[[3]]], "Kelvins"*"Days"], (* else *)
 Quantity[0, "Kelvins"*"Days"]]} & /@ Rest[klotenS]

hgtHissy::granularNA = "Granularity of `1` is not in `2`.";
hgtHissy::offRange = "Either `1` or `2` outside the data range.";
hgtHissy[d2_DateObject, d1_DateObject] := hgtHissy[d1, d2] /; QuantityMagnitude[DateDifference[d2, d1, "Day"]] < 0 hgtHissy[d1_DateObject, d2_DateObject] :=  Quantity[0, "Days"*"Kelvins"] /; QuantityMagnitude[DateDifference[d1, d2, "Day"]] == 0 hgtHissy[d1_DateObject, d2_DateObject] :=  Block[{ts = TimeSeries[klotenTS], granularOK = {"Day"}, gran1, gran2},
 {gran1, gran2} = Information[#]["Granularity"] & /@ {d1, d2};
 If[ContainsAny[{gran1}, granularOK],
     If[ContainsAny[{gran2}, granularOK],
         If[DateObject[ts["FirstDate"], "Day"] <= d1 \[And] DatePlus[d2, -1] <= DateObject[ts["LastDate"], "Day"],
             (* the Total[] presumes daily data *)
             Total[TimeSeriesWindow[ts, {d1, DatePlus[d2, -1]}]],(* else *)
             Message[hgtHissy::offRange, d1, DatePlus[d2, -1]];
             Return[$Failed]
         ], (* else *)
         Message[hgtHissy::granularNA, d2, granularOK];
         Return[$Failed]
     ], (* else *)
     Message[hgtHissy::granularNA, d1, granularOK];
     Return[$Failed]
 ]
 ] /; QuantityMagnitude[DateDifference[d1, d2, "Day"]] > 0

hgtK = hgtHissy @@@ Table[{DateObject[{o, 1, 1}, "Day"], DateObject[{o + 1, 1, 1}, "Day"]}, {o, 1951, 2024}]

DateListStepPlot[ Transpose[{Table[DateObject[{o}, "Year"], {o, 1951, 2024}], hgtK}],
 FrameLabel -> {"Jahr", "HGT"},
 PlotLabel -> "Heizgradtage in Zürich/Kloten", Filling -> Axis]
_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html