Introduktion

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)

Augustvejret på den fædrende gård

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")


Karup er altså den vejrstation som befinder sig tættest på den fædrende gård.
For at hente data fra vejrstationen skal vi dog kende dens id:

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 

Visualisering

Rask lille visualisering af data:

kar_met_data %>% 
  ggplot() +
    geom_point(aes(x = time, y = temp, alpha = 0.5))

Pers vilde visualisering

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.")

Visualisering af vejret i august

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.")