knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(imgw)
library(tidyr)
library(dplyr)
options(scipen=999)

Głównym celem pakietu imgw jest dostarczenie wygodnego i programowalnego interfejsu do repozytorium danych meteorologicznych i hydrologicznych IMGW-PIB. Pakiet pozwala także na pobieranie danych radiosondażowych.

Pakiet imgw dla języka programowania *R umożliwia:

Funkcje

Pakiet imgw zawiera trzy główne grupy funkcji do pobierania danych, na które składają się cztery funkcje do danych meteorologicznych, cztery do danych hydrologicznych oraz jedna do danych radiosondażowych.

  1. Dane meteorologiczne:

  2. meteo() - pobieranie danych meteorologicznych - ogólna funkcja (nadrzędna) umożliwiająca wybór m.in. określonego rzędu stacji, interwału czasowego, dodanie metadanych geograficznych do pobieranych danych, ...

  3. meteo_hourly() - pobieranie danych meteorologicznych - pomiary terminowe (godzinowe)
  4. meteo_daily() - pobieranie danych meteorologicznych - serie danych dobowych
  5. meteo_monthly() - pobieranie danych meteorologicznych - serie danych miesięcznych

  6. Dane hydrologiczne:

  7. hydro() - pobieranie danych hydrologicznych z dowolnie zdefiniowanym interwałem (funkcja nadrzędna/interfejs dla pozostałych niżej wymienionych)

  8. hydro_daily() - pobieranie danych hydrologicznych - serie dobowe
  9. hydro_monthly() - pobieranie danych hydrologicznych - serie miesięczne
  10. hydro_annual() - pobieranie danych hydrologicznych - serie roczne

  11. Pomiary radiosondażowe:

  12. meteo_sounding() - pobieranie danych (i metadanych) dla pomiarów aerologicznych udostępnionych przez Uniwersytet Wyoming

Bazy danych

Pakiet imgw zawiera dodatkowe bazy danych przydatne do pracy z danymi meteo- i hydrologicznymi:

abbev = meteo_abbrev
head(abbev)
library(knitr)
abbev = meteo_abbrev
kable(head(abbev), caption = "Parametry meteorologiczne i skróty zastosowane w pakiecie.")
station = meteo_stations
head(station)
station = meteo_stations
kable(head(station), caption = "Metadane dla stacji meteorologicznych.")

Przykłady

Poniżej zamieszczono przykłady zastosowania pakietu imgw w połączeniu z pakietami dplyr oraz tidyr.

Dane hydrologiczne - przykład

  1. Pobranie 10-letniej serii miesięcznych danych hydrologicznych dla wszystkich dostępnych stacji w okresie 2001-2010, wraz z automatycznym dodaniem informacji przestrzennych (długość geograficzna, szerokość geograficzna).
h = hydro_monthly(year = 2001:2010, coords = TRUE)
head(h)
h = hydro_monthly(year = 2001:2010, coords = TRUE)
kable(head(h), caption = "Pierwsze 6 wierszy pobranych danych:")

Kolumna idex zawiera informację o rodzaju ekstremum, tj. 1 - minimum, 2 - średnia, 3 - maximum.^[Szczegółowe informacje znajdują się w zbiorze hydro_abbrev].

  1. Dla osób preferujących pracę w arkuszach kalkulacyjnych możliwe jest zapisanie pobranych danych do formatów .csv lub .xlsx. W tym drugim przypadku konieczne będzie aktywowanie (a gdy konieczne także wcześniejsze zainstalowanie) odpowiedniego pakietu:
# CSV:
write.csv(h, file = "result.csv", sep = ";",dec = ".")
# powyzsza instrukcja zapisze pobrane dane do pliku  `result.csv` z separatoratorem dla kolumn `;` i miejscem dziesietnym `.` 

# XLSX:
library(writexl)
# lub jesli biblioteka 'writexl' nie byla instalowana wowczas nalezy wczesniej wywolac komende: install.packages("writexl")
write_xlsx(result, path =  "result.xlsx")
  1. Analizy hydrologiczne często koncentrują się na jednej grupy zjawisk, np. związanych z przepływami maksymalnymi. W tym celu pozostaną w ramce danych tylko wartości przepływów maksymalnych oraz kolumny zawierające interesujące nas informacje, tj. identyfikator stacji - id, rok hydrologiczny - hyy, szerokość geograficzną - X oraz długość geograficzną - Y.

  2. Następnie obliczmy średni przepływ maksymalny na każdej z dostępnych stacji, w każdym z analizowanych lat hydrologicznych. W tym celu można wykorzystać funkcję summarise() z pakietu dplyr. Zmiana postaci otrzymanej tabeli (z wąskiej do szerokiej) może zostać wykonana za pomocą pakietu tidyr i funkcji spread().

h2 = h %>%
  filter(idex == 3) %>%
  select(id, station, X, Y, hyy, Q) %>%
  group_by(hyy, id, station, X, Y) %>%
  summarise(mean_Q = round(mean(Q, na.rm = TRUE),1)) %>%
  spread(hyy, mean_Q)
kable(head(h2), caption = "Przykład wyniku przetwarzania danych hydrologicznych.")
  1. Uzyskane wyniki mogą zostać następnie zwizualizowane w formie przestrzennej za pomocą np. pakietów GIS: sf i tmap. Poniżej zamieszczono przykładowy kod dla średnich maksymalnych przepływów rocznych:
library(sf)
library(tmap)
library(rnaturalearth)
library(rnaturalearthdata)
world = ne_countries(scale = "medium", returnclass = "sf")

h3 = h2 %>% 
  filter(!is.na(X)) %>% 
  st_as_sf(coords = c("X", "Y"))

tm_shape(h3) + 
  tm_symbols(size = as.character(c(2001:2010)),
             title.size = "Średni przepływ maksymalny") +
  tm_facets(free.scales = FALSE, ncol = 4) + 
  tm_shape(world) + 
  tm_borders(col = "black", lwd = 2) +
  tm_layout(legend.position = c(-1.25, 0.05),
            outer.margins = c(0, 0.05, 0, -0.25),
            panel.labels = as.character(c(2001:2010)))

Zmienność wieloletnia średnich maksymalnych przepływów



bczernecki/imgw documentation built on Aug. 14, 2020, 3:09 p.m.