Published
Edited
Feb 3, 2022
Importers
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
niederschlagsart = {
const niederschlagsart = await FileAttachment("data_OBS_DEU_PT1H_RR-F.csv").csv({typed: true})
const niederschlag_codes = ["Kein Niederschlag", "Regen", "Unbekannt", "Unbekannt", "Unbekannt", "Unbekannt", "Regen", "Schnee", "Schneeregen", "Fehler"]
return T.tidy(niederschlagsart, T.mutate({Wert: x=>niederschlag_codes[x.Wert]}))
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
combined = T.tidy(
temperatur,
T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Temperatur", Wert: x=>x.Wert}),
T.addRows(
T.tidy(luftfeuchtigkeit, T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Luftfeuchtigkeit", Wert: x=>x.Wert}))
),
T.addRows(
T.tidy(niederschlag, T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Niederschlag", Wert: x=>x.Wert}))
),
T.addRows(
T.tidy(niederschlagsart, T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Niederschlagsart", Wert: x=>x.Wert}))
),
T.addRows(
T.tidy(bedeckung, T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Bedeckung", Wert: x=>x.Wert}))
),
T.addRows(
T.tidy(sonnenscheindauer, T.transmute({Zeit: x=>x.Zeitstempel, Variable: "Sonnenscheindauer", Wert: x=>x.Wert}))
),
T.pivotWider({namesFrom: "Variable", valuesFrom: "Wert"})
)
Insert cell
combinedByDay = T.tidy(
combined,
T.mutate({Datum: x => d3.timeFormat("%d.%m.%Y")(x.Zeit)}),
T.groupBy("Datum", [], T.groupBy.map())
)
Insert cell
Insert cell
dailyCombined = T.tidy(
combined,
T.mutate({Zeit: x=>d3.timeDay(x.Zeit)}),
T.groupBy("Zeit", [T.summarize({
"Temperatur Min": T.min("Temperatur"),
"Temperatur Max": T.max("Temperatur"),
"Temperatur": T.mean("Temperatur"),
Luftfeuchtigkeit: T.mean("Luftfeuchtigkeit"),
Niederschlag: T.sum("Niederschlag"),
Niederschlagsart: typeSummary("Niederschlagsart"),
Bedeckung: T.mean("Bedeckung"),
Sonnenscheindauer: T.sum("Sonnenscheindauer")
})]),
T.mutate(
{
Datum: x => d3.timeFormat("%Y/%m/%d")(x.Zeit),
Temperatur: x=>_.round(x.Temperatur,2),
Luftfeuchtigkeit: x=>_.round(x.Luftfeuchtigkeit,2),
Niederschlag: x=>_.round(x.Niederschlag,2),
Bedeckung: x=>_.round(x.Bedeckung,2),
Kategorie: getKategorie
}
)
)
Insert cell
Insert cell
typeSummary = (key) => (arr) => {
let summaryString = _.uniq(arr.map(x=>x[key])).join(",")
if(summaryString.indexOf("Schnee") >= 0){
return "Schnee"
} else if(summaryString.indexOf("Regen") >= 0){
return "Regen"
} else {
return ""
}
}
Insert cell
Insert cell
getKategorie = x => {
if(x.Niederschlagsart === "Schnee"){
return "Snow"
}
if(x.Niederschlagsart === "Regen" && x.Niederschlag > .1){
return "Rain"
}
if(x.Bedeckung < 4){
return "Clear"
}
if(x.Sonnenscheindauer > 120){
return "Partially cloudy"
}
return "Overcast"
}
Insert cell
Inputs.table(T.tidy(dailyCombined, T.count("Kategorie")))
Insert cell
Insert cell
import {T} from "@pbeshai/tidyjs"
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more