Indledende leg med R-pakken StationaRy, der har data fra vejrstationer. Legen er baseret og inspireret af Pers leg med samme i dokumentet “vejrdata.Rmd”.
https://github.com/rich-iannone/stationaRy
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.1 ✔ purrr 0.3.2
## ✔ tibble 2.1.3 ✔ dplyr 0.8.3
## ✔ tidyr 0.8.3 ✔ stringr 1.4.0
## ✔ readr 1.3.1 ✔ forcats 0.4.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(stationaRy)
Inspiret af min opvækst som landsmandssøn og min fars evige afhængighed af vejret luner særlig i høsten følger her en leg med vejrdata fra de sidste par års augustmåneder.
Først og fremmest skal den vejrstation, der ligger tættest på den fædrende gård opspores. Indledende undersøgelser fandt den til at være Skinderholm, men det viste sig, at den er blevet taget ud af brug på et tidspunkt, hvorfor der ikke var data tilgængelig for årene 2015-2019.Derfor laves først en filtrering på danske vejrstationer og dem som er i funktion endnu i 2019.:
stations_dk <-
get_station_metadata() %>%
filter(country == "DA") %>%
filter(end_year == 2019)
stations_dk
## # A tibble: 70 x 16
## id usaf wban name country state icao lat lon elev begin_date
##
## 1 0600… 0600… 99999 FROD… DA 61.5 -6.77 23 2016-05-17
## 2 0601… 0601… 99999 TORS… DA 62.0 -6.77 61 1931-01-03
## 3 0601… 0601… 99999 HORN… DA EKHN 55.6 7.62 10 2009-09-25
## 4 0601… 0601… 99999 SILS… DA 56.9 8.63 41 2005-04-05
## 5 0602… 0602… 99999 HANS… DA 57.1 8.6 3 1931-01-01
## 6 0602… 0602… 99999 TYRA… DA EKGF 55.7 4.8 43 2005-03-09
## 7 0602… 0602… 99999 GORM… DA EKGC 55.6 4.76 96 2012-08-22
## 8 0602… 0602… 99999 HALF… DA EKHA 55.5 5.00 94.5 2012-08-21
## 9 0602… 0602… 99999 TYRA… DA EKTE 55.7 4.80 95.1 2012-08-21
## 10 0602… 0602… 99999 HARA… DA EKHD 56.3 4.27 95 2012-09-04
## # … with 60 more rows, and 5 more variables: end_date ,
## # begin_year , end_year , tz_name , years
Udtrækker navnene - måske er der en der bare hedder Sinding?
stations_dk %>% arrange(name) %>% pull(name)
## [1] "ABED" "ANHOLT"
## [3] "ASKOV" "ASSENS/TOROE"
## [5] "AVNO AIR BASE" "BILLUND"
## [7] "BLAAVANDSHUK" "BORNHOLM RONNE"
## [9] "BORRIS" "BRANDELEV"
## [11] "DROGDEN" "ESBJERG"
## [13] "FLAKKEBJERG" "FLYVESTATION AALBORG"
## [15] "FOULUM" "FRODBA HELIPORT"
## [17] "GEDSER" "GNIBEN"
## [19] "GORM C OIL PLATFORM HELIPAD" "HALD V"
## [21] "HALFDAN A OIL PLATFORM HELIPAD" "HALS"
## [23] "HAMMER ODDE FYR" "HANSTHOLM"
## [25] "HARALD HELIDECK OIL RIG" "HIRTSHALS"
## [27] "HOLBAEK" "HORNS REV B HELIDECK"
## [29] "HORSENS/BYGHOLM" "HVIDE SANDE"
## [31] "ISENVAD" "JAEGERSBORG"
## [33] "KARUP" "KASTRUP"
## [35] "KEGNAES" "KOLDING VAMDRUP"
## [37] "LANGOE" "MEJRUP"
## [39] "NAKKEHOVED" "NEXOE VEST"
## [41] "ODENSE" "OEDUM"
## [43] "OMOE" "RINGSTED ARPT"
## [45] "ROEMOE/JUVRE" "ROESNAES"
## [47] "ROSKILDE" "SILSTRUP"
## [49] "SINDAL" "SJAELSMARK"
## [51] "SKAGEN" "SKRYDSTRUP"
## [53] "SLETTERHAGE FYR" "SONDERBORG"
## [55] "STAUNING" "STENHOJ"
## [57] "SYDFYNS/TASINGE ISL" "TESSEBOELLE"
## [59] "THYBOROEN" "TORSHAVN"
## [61] "TYLSTRUP" "TYRA E OIL PLATFORM HELIPAD"
## [63] "TYRA OST" "TYSTOFTE"
## [65] "VESTER VEDSTED" "VINDEBAEK KYST"
## [67] "AARHUS" "AARHUS SYD"
## [69] "AARS SYD" "AARSLEV"
Okay, det var der altså ikke. Men det næste spørgsmål trænger sig på:
Hvad er tættest på Sinding?
library(leaflet)
I Leaflet plotter vi alle stationerne i Danmark, der har data frem til 2019. Zoom sættes til at overskue en god bid midtjylland.
Vi skal dog også have plottet den fædrende gård. Fra OSM finder vi koordinaterne på den fædrende gård:
Nybyvej 4: 8.85641/56.20968
stations_dk %>%
leaflet(options = leafletOptions(maxZoom = 9)) %>%
setView(lng = 8.85641, lat = 56.20968, zoom =9) %>%
addTiles() %>%
addMarkers(~lon, ~lat, popup = ~name) %>%
addMarkers(8.85641, 56.20968, popup = "Den fædrende gård")
stations_dk %>%
filter(str_detect(name, pattern = "KARUP"))
## # A tibble: 1 x 16
## id usaf wban name country state icao lat lon elev begin_date
##
## 1 0606… 0606… 99999 KARUP DA EKKA 56.3 9.12 51.8 1973-01-01
## # … with 5 more variables: end_date , begin_year ,
## # end_year , tz_name , years
Karups id er: 060600-99999
Så henter vi data fra Karup ud og angiver i øvrigt også hvilke år vi er interessede i. Her er det bare de seneste fire:
kar_met_data <-
get_met_data(
station_id = "060600-99999", years = 2015:2019)
kar_met_data
## # A tibble: 43,824 x 10
## id time temp wd ws atmos_pres dew_point rh
##
## 1 0606… 2015-01-01 00:00:00 6 220 4.1 NA 4 87
## 2 0606… 2015-01-01 01:00:00 5.9 210 3.6 1025. 4 87
## 3 0606… 2015-01-01 02:00:00 6 220 4.6 NA 5 87.1
## 4 0606… 2015-01-01 03:00:00 7 230 4.6 NA 5 87.1
## 5 0606… 2015-01-01 04:00:00 7 220 5.1 1024. 5 87.1
## 6 0606… 2015-01-01 05:00:00 7 230 6.2 NA 6 93.4
## 7 0606… 2015-01-01 06:00:00 7 220 7.2 NA 6 87.2
## 8 0606… 2015-01-01 07:00:00 7.6 220 7.2 1023. 6 87.2
## 9 0606… 2015-01-01 08:00:00 7 220 8.2 NA 7 93.4
## 10 0606… 2015-01-01 09:00:00 7 230 9.3 NA 7 100
## # … with 43,814 more rows, and 2 more variables: ceil_hgt ,
## # visibility
Rask lille visualisering af data:
kar_met_data %>%
ggplot() +
geom_point(aes(x = time, y = temp, alpha = 0.5))
library(ggthemes)
kar_met_data %>%
ggplot() +
geom_point(aes(x = time, y = temp, colour = temp), alpha = 0.8, size = 1) +
geom_smooth(aes(x = time, y = temp), colour = "yellow") +
scale_color_gradient2(low = "blue", mid = "blue", high = "red", midpoint = 0) +
scale_y_continuous(sec.axis = dup_axis()) +
theme_classic() +
theme(
panel.border = element_rect(colour = "black", fill=NA, size=1),
legend.position = "none",
) +
ylab("Temperatur [°C]") + xlab("") +
labs(
title = "Temperaturen i Karup",
subtitle = "2015-2019",
caption = "Datakilde: National Oceanic and Atmospheric Administration (NOAA) via stationaRy pakken.")
For at fokusere på vejret i netop august, så skal vi bruge pakken lubridate, der gør det nemt og bekvemt at arbejde med tidsformater i R. https://lubridate.tidyverse.org/
library(lubridate)
Vi laver en ny dataramme, hvor vi vil have data fra augustmåned for årene 2015-2019. I denne dataramme bruger vi lubridate til at lave tre nye kolonne hvorfra henholdsvis år, måned og dag trækkes ud fra kolonnen “time”. Til sidst filtres der på den 8. måned:
august_weather <- kar_met_data %>%
mutate(year = year(time)) %>%
mutate(month = month(time)) %>%
mutate(dag = day(time)) %>%
filter(month == 8)
Ved hjælp fra Pers vilde visualisering laves nu en visulisering af temperaturene for hvert år.
august_weather %>%
ggplot() +
geom_point(aes(x = dag, y = temp, colour = temp), alpha = 0.8, size = 1) +
#geom_smooth(aes(x = time, y = temp), colour = "yellow") +
scale_color_gradient2(low = "blue", mid = "blue", high = "red", midpoint = 0) +
scale_y_continuous(sec.axis = dup_axis()) +
facet_wrap(~ year, nrow = 2) +
ylab("Temperatur [°C]") + xlab("Dag") +
labs(
title = "Temperaturen i augustmåned i Karup",
subtitle = "2015-2019",
caption = "Datakilde: National Oceanic and Atmospheric Administration (NOAA) via stationaRy pakken.")