Introduction to the climate package

Bartosz Czernecki, Arkadiusz Głogowski, Jakub Nowosad

2021-09-19

The goal of the climate R package is to automatize downloading of meteorological and hydrological data from publicly available repositories:

Functions

The climate package consists of ten main functions - three for meteorological data, one for hydrological data and six auxiliary functions and datasets:

Meteorological data

Hydrological data

Auxiliary functions and datasets

Examples

Examples shows aplication of climate package with additional use of tools that help with processing the data to increase legible of downloaded data.

Example 1

Finding a 50 nearest meteorological stations in a given country:

library(climate)
ns = nearest_stations_ogimet(country ="United+Kingdom",
                             point = c(-4, 56),
                             no_of_stations = 50, 
                             add_map = TRUE)
#> [1] "http://ogimet.com/cgi-bin/gsynres?lang=en&state=United+Kingdom&osum=no&fmt=html&ord=REV&ano=2021&mes=09&day=19&hora=06&ndays=1&Send=send"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d05a52e00f

head(ns)
#>    wmo_id        station_names       lon      lat alt distance [km]
#> 27  03144         Strathallan  -3.733348 56.31667  35      46.44794
#> 30  03155           Drumalbin  -3.733348 55.61668 245      52.38975
#> 28  03148           Glen Ogle  -4.316673 56.41667 564      58.71862
#> 25  03134   Glasgow Bishopton  -4.533344 55.90002  59      60.88179
#> 32  03166 Edinburgh Gogarbank  -3.350007 55.93335  57      73.30942
#> 26  03136      Prestwick RNAS  -4.583345 55.51668  26      84.99537
#>    wmo_id       station_names       lon       lat alt  distance [km]
#> 29  03144         Strathallan  -3.733348 56.31667  35      46.44794
#> 32  03155           Drumalbin  -3.733348 55.61668 245      52.38975
#> 30  03148           Glen Ogle  -4.316673 56.41667 564      58.71862
#> 27  03134   Glasgow Bishopton  -4.533344 55.90002  59      60.88179
#> 35  03166 Edinburgh Gogarbank  -3.350007 55.93335  57      73.30942
#> 28  03136      Prestwick RNAS  -4.583345 55.51668  26      84.99537

Example 2

Summary of stations available in Ogimet repository for a selected country:

library(climate)
PL = stations_ogimet(country = "Poland", add_map = TRUE)
#> [1] "http://ogimet.com/cgi-bin/gsynres?lang=en&state=Poland&osum=no&fmt=html&ord=REV&ano=2021&mes=09&day=19&hora=06&ndays=1&Send=send"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01733dc47

head(PL)
#>   wmo_id     station_names      lon      lat alt
#> 1  12001 Petrobaltic Beta  18.16667 55.46668  46
#> 2  12100        Kolobrzeg  15.58334 54.18334   3
#> 3  12105         Koszalin  16.15000 54.20000  32
#> 4  12115            Ustka  16.86668 54.58335   6
#> 5  12120             Leba  17.53334 54.75001   2
#> 6  12124         Darlowek  16.40001 54.40001   2

Example 3

Downlading hourly meteorological data Svalbard in a random year from Ogimet

# downloading data with NOAA service:
df = meteo_noaa_hourly(station = "010080-99999", 
                       year = sample(2000:2020, 1))
#> [1] "https://www1.ncdc.noaa.gov/pub/data/noaa/2009/010080-99999-2009.gz"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d02e21c5c3

# downloading the same data with Ogimet.com (example for 2019):
# df <- meteo_ogimet(interval = "hourly", date = c("2019-01-01", "2019-12-31"),
#                   station = c("01008"))
Examplary data frame of meteorological data.
date lon lat alt t2m dpt2m ws wd slp visibility
1 2009-01-01 00:00:00 15.467 78.25 29 -15.8 -21.7 7 340 1020.3 70000
3 2009-01-01 01:00:00 15.467 78.25 29 -15.8 -20.8 6 320 1020.1 NA
5 2009-01-01 02:00:00 15.467 78.25 29 -16.0 -21.4 6 330 1020.3 NA
7 2009-01-01 03:00:00 15.467 78.25 29 -16.1 -21.8 7 350 1020.3 70000
9 2009-01-01 04:00:00 15.467 78.25 29 -15.9 -21.8 6 340 1020.1 NA
11 2009-01-01 05:00:00 15.467 78.25 29 -16.0 -21.9 6 340 1019.6 NA
13 2009-01-01 06:00:00 15.467 78.25 29 -16.3 -22.2 6 350 1019.7 70000
15 2009-01-01 07:00:00 15.467 78.25 29 -16.8 -23.2 8 350 1019.4 NA
17 2009-01-01 08:00:00 15.467 78.25 29 -16.7 -22.8 6 340 1019.6 NA
19 2009-01-01 09:00:00 15.467 78.25 29 -16.9 -21.7 5 350 1019.6 70000

Example 4

Downloading atmospheric (sounding) profile for Łeba, PL rawinsonde station:

library(climate)
data("profile_demo")
# same as:
# profile_demo <- sounding_wyoming(wmo_id = 12120,
#                                  yy = 2000,
#                                  mm = 3,
#                                  dd = 23,
#                                  hh = 0)
df2 <- profile_demo[[1]] 
colnames(df2)[c(1, 3:4)] = c("PRESS", "TEMP", "DEWPT") # changing column names
Examplary data frame of sounding preprocessing
PRESS HGHT TEMP DEWPT RELH MIXR DRCT SKNT THTA THTE THTV
1013 6 4.2 3.8 97 4.98 270 8 276.3 290.0 277.2
1009 37 2.4 2.3 99 4.50 285 12 274.9 287.2 275.6
1000 107 2.2 1.9 98 4.41 295 17 275.4 287.5 276.1
976 303 0.8 -1.3 86 3.58 298 23 275.9 285.8 276.5
970 352 1.0 -6.0 60 2.53 299 25 276.6 283.8 277.0
959 444 1.0 -0.6 89 3.83 300 27 277.4 288.2 278.1
925 733 -1.1 -1.1 100 3.83 290 27 278.2 288.9 278.8
913 837 -1.5 -1.5 100 3.76 285 27 278.8 289.4 279.4
877 1157 -2.9 -2.9 100 3.54 288 29 280.6 290.6 281.2
850 1404 -4.1 -4.1 100 3.33 290 31 281.8 291.4 282.4

Example 5

Preparing an annual summary of air temperature and precipitation, processing with dplyr

library(climate)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

df = meteo_imgw(interval = "monthly", rank = "synop", year = 1991:2019, station = "ŁEBA") 
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/s_m_d_format.txt"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d04d766a09
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/s_m_t_format.txt"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0192b9c9a
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d07e364f5e
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/1991_1995/1991_1995_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01f94e50e
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/1996_2000/1996_2000_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d054ec4649
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2001/2001_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0568c5fa2
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2002/2002_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0649f2200
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2003/2003_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d040bf4ea2
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2004/2004_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d02fda01fe
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2005/2005_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d014ec2e2
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2006/2006_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01c64b366
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2007/2007_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d066721ae1
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2008/2008_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d06112011e
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2009/2009_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0520c902e
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2010/2010_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d07bd0c1d
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2011/2011_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0ef98e71
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2012/2012_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d047a2f44e
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2013/2013_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d07e61ed64
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2014/2014_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d06c30e6bb
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2015/2015_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0cdcc476
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2016/2016_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d03caccea9
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2017/2017_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01ec1fdc8
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2018/2018_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0115af37f
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_meteorologiczne/miesieczne/synop/2019/2019_m_s.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0703c6b0b
# please note that sometimes 2 names are used for the same station in different years

df2 = select(df, station:t2m_mean_mon, rr_monthly)

monthly_summary = df2 %>% 
  group_by(mm) %>% 
  summarise(tmax = mean(tmax_abs, na.rm = TRUE), 
            tmin = mean(tmin_abs, na.rm = TRUE),
            tavg = mean(t2m_mean_mon, na.rm = TRUE), 
            precip = sum(rr_monthly) / n_distinct(yy))            

monthly_summary = as.data.frame(t(monthly_summary[, c(5,2,3,4)])) 
monthly_summary = round(monthly_summary, 1)
colnames(monthly_summary) = month.abb
Examplary data frame of meteorological preprocessing.
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
precip 42.0 32.9 37.7 28.7 49.0 54.3 73.0 81.5 76.0 77.6 59.5 54.1
tmax 7.5 8.9 14.5 22.1 26.2 28.5 29.6 29.0 24.5 18.8 12.2 8.7
tmin -11.6 -10.0 -7.4 -3.7 -0.1 4.4 7.8 7.8 3.6 -0.8 -3.9 -8.8
tavg 0.1 0.5 2.7 6.9 11.3 14.9 17.5 17.5 13.9 9.2 4.7 1.6

Example 6

Calculate the mean maximum value of the flow on the stations in each year with dplyr’s summarise(), and spread data by year using tidyr’s spread() to get the annual means of maximum flow in the consecutive columns.

library(climate)
library(dplyr)
library(tidyr)
h = hydro_imgw(interval = "monthly", year = 2001:2005, coords = TRUE)
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01f2f3469
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/mies_info.txt"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d05419e97d
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/2001/mies_2001.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d0713038ad
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/2002/mies_2002.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d03abe04b0
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/2003/mies_2003.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d04ccc5b02
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/2004/mies_2004.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d056c63547
#> [1] "https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/miesieczne/2005/mies_2005.zip"
#> /var/folders/lw/3fnnk87n4q1dkl35s2_p24h80000gn/T//RtmpVAtlEf/file15d01d6e3fd6
head(h)
#>              id       X        Y station riv_or_lake  hyy idhyy idex   H   Q  T
#> 47027 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     1    1 214 172 NA
#> 47028 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     1    2 228 207 NA
#> 47029 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     1    3 250 272 NA
#> 47030 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     2    1 215 174 NA
#> 47031 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     2    2 225 201 NA
#> 47032 150210180 21.8335 50.88641 ANNOPOL   Wisła (2) 2001     2    3 258 297 NA
#>       mm
#> 47027 11
#> 47028 11
#> 47029 11
#> 47030 12
#> 47031 12
#> 47032 12
h2 = h %>%
  filter(idex == 3) %>%
  select(id, station, X, Y, hyy, Q) %>%
  group_by(hyy, id, station, X, Y) %>%
  summarise(annual_mean_Q = round(mean(Q, na.rm = TRUE), 1)) %>% 
  pivot_wider(names_from = hyy, values_from = annual_mean_Q)
#> `summarise()` has grouped output by 'hyy', 'id', 'station', 'X'. You can override using the `.groups` argument.
Examplary data frame of hydrological preprocesssing.
id station X Y 2001 2002 2003 2004 2005
149180010 KRZYŻANOWICE 18.28780 49.99301 200.5 147.4 87.9 109.2 170.6
149180020 CHAŁUPKI 18.32752 49.92127 174.7 96.7 57.6 91.8 146.9
149180040 GOŁKOWICE 18.49640 49.92579 4.5 2.0 1.7 1.7 2.5
149180050 ZEBRZYDOWICE 18.61326 49.88025 13.5 7.9 3.8 5.0 10.4
149180060 CIESZYN 18.62972 49.74616 57.2 57.7 29.8 26.8 65.4
149180070 CIESZYN 18.63137 49.74629 NaN NaN NaN NaN NaN

Acknowledgment

Ogimet.com, University of Wyoming, and Institute of Meteorology and Water Management - National Research Institute (IMGW-PIB), National Oceanic & Atmospheric Administration (NOAA) - Earth System Research Laboratories - Global Monitoring Laboratory, Global Monitoring Division and Integrated Surface Hourly (NOAA ISH) are the sources of the data.

Contribution

Contributions to this package are welcome. The preferred method of contribution is through a GitHub pull request. Feel also free to contact us by creating an issue.

Citation

To cite the climate package in publications, please use this paper:

Czernecki, B.; Głogowski, A.; Nowosad, J. Climate: An R Package to Access Free In-Situ Meteorological and Hydrological Datasets for Environmental Assessment. Sustainability 2020, 12, 394. https://doi.org/10.3390/su12010394"

LaTeX version can be obtained with:

library(climate)
citation("climate")