In [1]:
using Random
In [2]:
people = ["IIMOG", "YYMOG", "PPMOG","!!WO6" ];
In [4]:
shuffle(people)
Out[4]:
4-element Vector{String}:
 "IIMOG"
 "!!WO6"
 "PPMOG"
 "YYMOG"
In [3]:
using CSV, DataFrames, DataFramesMeta
ENV["COLUMNS"] = 350;
In [4]:
data = DataFrame(CSV.File("annual_weather_data_germany.tsv", missingstring="NA"))
Out[4]:

296,119 rows × 9 columns

station_idyeartemperaturesunshineprecipitationstation_namelatlongaltitude
Int64Int64Float64?Float64?Float64?StringFloat64Float64Int64
1119317.52missing799.3Aach47.84138.8493478
2119328.12missing640.4Aach47.84138.8493478
3119337.68missing750.1Aach47.84138.8493478
4119349.31missing638.8Aach47.84138.8493478
5119358.41missing824.7Aach47.84138.8493478
6119368.59missing891.5Aach47.84138.8493478
7119378.59missing817.4Aach47.84138.8493478
8119388.18missing766.5Aach47.84138.8493478
9119397.99missing1072.3Aach47.84138.8493478
10119407.07missing966.2Aach47.84138.8493478
11119417.61missing636.0Aach47.84138.8493478
12119427.95missing734.3Aach47.84138.8493478
13119439.57missing487.8Aach47.84138.8493478
14119448.22missingmissingAach47.84138.8493478
15119479.38missing520.6Aach47.84138.8493478
16119488.82missing613.0Aach47.84138.8493478
17119499.27missing505.0Aach47.84138.8493478
18119508.8missing774.9Aach47.84138.8493478
19119518.74missing688.3Aach47.84138.8493478
20119528.33missing927.7Aach47.84138.8493478
21119538.19missing606.8Aach47.84138.8493478
22119547.49missing876.6Aach47.84138.8493478
23119557.87missing800.1Aach47.84138.8493478
24119567.27missing675.1Aach47.84138.8493478
25119578.56missing670.0Aach47.84138.8493478
26119588.55missing855.0Aach47.84138.8493478
27119598.86missing704.0Aach47.84138.8493478
28119608.25missing913.2Aach47.84138.8493478
29119619.12missing693.1Aach47.84138.8493478
30119627.22missing629.7Aach47.84138.8493478
⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮
In [5]:
data2021 = @subset(data, :year .== 2021, :temperature .!== missing)
Out[5]:

472 rows × 9 columns

station_idyeartemperaturesunshineprecipitationstation_namelatlongaltitude
Int64Int64Float64?Float64?Float64?StringFloat64Float64Int64
1100120219.64missing603.9Doberlug-Kirchhain51.645113.574797
2102202110.06missingmissingLeuchtturm Alte Weser53.86338.127532
3104820219.534.54735.3Dresden-Klotzsche51.12813.7543227
41050202110.154.27714.7Dresden-Hosterwitz51.022113.847112
51051202110.12missing661.9Dresden-Strehlen51.024813.775120
6105220219.77missing724.4Drewitz bei Burg52.217412.164180
71072202110.85missing642.8Dürkheim, Bad49.47198.1929107
81078202110.784.25879.0Düsseldorf51.2966.768637
9110320218.62missing1073.2Ebersberg-Halbing48.100311.9872592
10110720218.42missing920.3Ebrach49.85210.4991346
11116120218.37missingmissingEichstätt-Landershofen48.877711.2349384
12119720218.624.81896.6Ellwangen-Rindelbach48.989510.1312460
13120020219.61missingmissingElpersbüttel54.06919.01053
14120720217.11missingmissingElster, Bad-Sohl50.270512.2742558
15121420219.474.571374.7Elzach-Fisnacht48.20128.1088431
161224202110.23missing806.9Emmendingen-Mundingen48.13787.8351201
171246202110.164.27613.5Ennigerloh-Ostenfelde51.84188.0607104
1812520217.52missingmissingAltenstadt47.834210.8667756
19126220218.625.38896.4München-Flughafen48.347711.8134446
20126620219.53missing885.9Erfde54.29929.316218
21127020218.824.3613.1Erfurt-Weimar50.982910.9608316
22127920219.484.73677.0Möhrendorf-Kleinseebach49.649711.0074268
23129720219.314.01570.2Eschwege51.204110.0138156
24130020218.14missing1012.2Eslohe51.2548.1565351
251303202110.424.361087.3Essen-Bredeney51.40416.9677150
2613120218.914.41896.0Geringswalde-Altgeringswalde51.088112.9326296
271327202110.374.59753.8Weilerswist-Lommersum50.71196.7905147
28133220218.98missing816.7Falkenberg,Kr.Rottal-Inn48.483212.7241471
29133920219.1missingmissingFaßberg52.915710.188573
30135720216.83missing944.3Fichtelberg/Oberfranken-Hüttstadl49.980711.8376654
⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮
In [6]:
data2021.temperature = Float64.(data2021.temperature);
In [7]:
using Statistics, CairoMakie
In [8]:
fig = Figure()
ax1 = Axis3(fig[1,1])
scat = scatter!(ax1,data2021.long,data2021.lat,data2021.altitude,color=data2021.temperature,colormap = :hot )
display(fig)
Out[8]:
In [9]:
fig = Figure()
ax1 = Axis3(fig[1,1])
scat = scatter!(ax1,data2021.long,data2021.lat,data2021.altitude,color=log.(data2021.temperature.+abs(minimum(data2021.temperature)).+1.0),colormap = :jet )
display(fig)
Out[9]:
In [10]:
@combine(data, :avg_temp = mean(skipmissing(:temperature)))
Out[10]:

1 rows × 1 columns

avg_temp
Float64
18.50186

Playing around with missing, NaN, Inf & co.¶

In [11]:
missing === missing
Out[11]:
true
In [13]:
missing == missing
Out[13]:
missing
In [12]:
NaN == missing
Out[12]:
missing
In [14]:
typeof(NaN)
Out[14]:
Float64
In [16]:
0/0, Inf/Inf, 0/Inf, Inf/0
Out[16]:
(NaN, NaN, 0.0, Inf)
In [17]:
0/0 == missing
Out[17]:
missing
In [18]:
typeof(0/0)
Out[18]:
Float64
In [19]:
0/0/-Inf
Out[19]:
NaN
In [20]:
0/(0/-Inf)
Out[20]:
NaN
In [21]:
-0 === 0
Out[21]:
true
In [22]:
(1/-Inf) === (1/Inf)
Out[22]:
false
In [23]:
0/(-exp(1000)) === 0/exp(1000)
Out[23]:
false