Datenquelle: https://www.govdata.de/web/guest/suchen/-/details/kontiluqs-t Stundenmittelwerte der Lufttemperatur für verschiene Orte in NRW
Der Dezimaltrenner "," wird in "." umgewandelt (emacs): ´([0-9]+),([0-9]+)´ wird zu ´\1.\2´ Ausgabe: OpenKontiLUQS_LTEM_2010-2019-dot.csv (Encoding: UTF-8)
pwd()
filesrc = "d:/Home/Nepomuk/projekte/Statistik/data/OpenKontiLUQS_LTEM_2010-2019-dot.csv"
import DataFrames
const Dfm = DataFrames
df = Dfm.readtable(filesrc, skipstart = 2, separator = ';')
Beschränkung auf das Jahr 2010. Erstelle einen Indexvektor.
iv = [contains(datum,"2010") for datum in df[:Datum]]
df2010 = df[iv,:]
Beschränkung auf einen Monat, zum Beispiel Mai und den Ort Nummer "Bott" in Spalte 5. Der Ort ist: 46238 Bottrop, Welheim, Welheimer Straße (an der Schule).
Der DataFrame wird erweitert um eine Spalte Monat.
dmonths = Dict{String,String}()
map((key, val) -> dmonths[lpad("$key",2,'0')] = val,
1:12,
["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"])
df2010[:Monat] = [dmonths[getindex(date, 4:5)] for date in df2010[:Datum]]
dfbott2010 = df2010[[:Monat, :Datum, :Zeit]]
dfbott2010[:Temp] = df2010[:BOTT_T_1H_Mittelwert_°C_]
Lösche Zeilen mit fehlenden Werten.
dfbott2010valid = dfbott2010[!Dfm.isna(dfbott2010[:Temp]),:]
Betracht die einzelnen Monate.
by(dfbott2010valid, :Monat) do df
println(df[:Monat][1], " ", mean(df[:Temp]), length(df[:Temp]))
end;
Leider lässt sich ´by´ nicht verwenden, um ´dfbott2010valid´ aufzuteilen.
Daher wird eine Zuordnung erzeugt, und die Datenwerte werden zu dem jeweiligen Array zugeordnet.
amonths = unique(dfbott2010valid[:Monat])
monval = Dict{String, Array{Float64,1}}()
for month in amonths
get!(monval, month, Array{Float64,1}()) # Jeder Array muss einzeln erzeugt werden.
end
for i = 1:length(dfbott2010valid[:Monat])
cmonth = dfbott2010valid[:Monat][i]
dst = monval[cmonth]
push!(dst, dfbott2010valid[:Temp][i])
end
monval["Mrz"]
using PyPlot
x1 = rand(30); x2 = randn(70);
boxplot([x1, x2], labels = ("alpha", "beta"))
Zurück zu den Temperaturdaten: Wie sehen die Plots für jeden einzelnen Monat aus?
pxdata = Array{Array{Float64,1},1}()
for month in dmonths
push!(pxdata, montemp[month])
end
boxplot(pxdata, labels = dmonths);