Na CRANu se nedávno objevila package czso od Petra Bouchala. Tato package představuje interface z erka přímo do open datových struktur Českého statistického úřadu. S její pomocí snadno a rychle získáte čerstvá data, aniž byste přitom museli opustit pohodlí svého RStudia.

Prvním krokem pro orientaci je získání přehledu: k němu nám poslouží funkce czso_get_catalogue(), vracející seznam dostupných datových zdrojů, včetně základních metadat jako data.frame.

library(czso) 
library(tidyverse) # kvůli dplyr & ggplot2
library(gganimate) # protože animace táhnou

# stahnu datový katalog / přehled dostupných sad
prehled <- czso::czso_get_catalogue()

# počet tabulek k dispozici
nrow(prehled)
## [1] 605
# přehled hlavních informací
prehled %>% 
  select(dataset_id,
         title,
         start,
         end) %>%
  head() # pro základní orientaci...
## # A tibble: 6 x 4
##   dataset_id title                                         start      end       
##   <chr>      <chr>                                         <date>     <date>    
## 1 060003     Vybavenost domácností informačními a komunik… 2007-01-01 2019-12-31
## 2 270229     Sklizeň zemědělských plodin podle krajů       2002-01-01 2019-12-31
## 3 110080     Průměrná hrubá měsíční mzda a medián mezd v … 2011-01-01 2018-12-31
## 4 270230     Hospodářská zvířata podle krajů               2002-01-01 2019-12-31
## 5 340130     Velikostní skupiny obcí                       2001-01-01 2018-12-31
## 6 cis203     Číselník ČSÚ: Druh lesní dřeviny - agregace   1900-01-01 9999-09-09

Druhým krokem bude získat konkrétní datovou sadu; k tomu potřebujeme znát její kód (najdeme jej v poli dataset_id). Zaměřím se na svoji oblíbenou datovou sadu ceny piva v čase; pivo je jedna ze základních potravin.

Dataset ceny základních potravin stáhnu pomocí funkce czso_get_table(), a základní přehled o konkrétní datové struktuře získám pomocí czso_get_table_schema().

# najdu ty zázamy z přehledu dat, které v poli "title" obsahují řetězec "potravin"
prehled %>% 
  filter(str_detect(title, "potravin")) %>% 
  select(dataset_id, title)
## # A tibble: 1 x 2
##   dataset_id title                                                              
##   <chr>      <chr>                                                              
## 1 012052     Průměrné spotřebitelské ceny vybraných výrobků - potravinářské výr…
# zobrazím metadata (moc mi toho neřeknou, ale přece...)
czso::czso_get_table_schema("012052")
## # A tibble: 11 x 5
##    name     titles   `dc:description`                          required datatype
##    <chr>    <chr>    <chr>                                     <lgl>    <chr>   
##  1 idhod    idhod    unikátní identifikátor údaje Veřejné dat… TRUE     string  
##  2 hodnota  hodnota  zjištěná hodnota                          TRUE     number  
##  3 stapro_… stapro_… kód statistické proměnné ze systému SMS … TRUE     string  
##  4 reprcen… reprcen… číselník pro cenové reprezentanty         TRUE     string  
##  5 reprcen… reprcen… kód z číselníku cenových reprezentantů    TRUE     string  
##  6 obdobiod obdobiod referenční období počátek - ve formátu R… TRUE     date    
##  7 obdobido obdobido referenční období konec - ve formátu RRR… TRUE     date    
##  8 uzemi_c… uzemi_c… kód číselníku pro referenční území, číse… TRUE     string  
##  9 uzemi_k… uzemi_k… kód položky z číselníku pro referenční ú… TRUE     string  
## 10 uzemi_t… uzemi_t… text položky z číselníku pro referenční … TRUE     string  
## 11 reprcen… reprcen… text položky z číselníku pro cenové repr… TRUE     string
# načtu dataset základních potravin
potraviny <- czso::czso_get_table("012052")

Když jsem dataset načetl, tak na něm provedu základní transformaci – vyberu položky pouze pro jednoho konkrétního cenového reprezentanta, zahodím krajský detail a transformuju text na datum.

Nad výsledkem pak mohu technikami {ggplot2}, respektive rozšiřujícího balíčku {gganimate}, postavit jednoduchou prezentaci vývoje ceny v čase.

# ze základních potravin vyberu tu nejzákladnější 
pivo <- potraviny %>% 
  filter(reprcen_kod == "0213201") %>% # ... protože pivo :)
  filter(uzemi_kod == "19") %>%  # data za republiku jako celek (= ne kraje)
  mutate(obdobiod = as.Date(obdobiod),
         obdobido = as.Date(obdobido))

# a výsledek předložím graficky
ggplot(data = pivo, aes(x = obdobiod, y = hodnota)) +
  geom_line(color = "red", size = 1.25) +
  geom_point(color = "red", size = 2) +
  labs(title = "Vývoj ceny piva v čase") +
  scale_y_continuous(labels = scales::dollar_format(accuracy = .01, decimal.mark = ",",
                                                    prefix = "", suffix = " Kč")) +
  scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
  theme_bw() +
  theme(axis.title = element_blank()) +
  gganimate::transition_reveal(obdobiod) # animační část...

Příklad s pivem je (vědomě :) spíše lehčího žánru, ale věřím že jsem na něm předvedl jednoduchost a eleganci, s jakou lze čerpat data (a metadata) z otevřených dat ČSÚ přímo do běžícho erka.

Data jsou vždy čerstvá, a máme jistotu jejich kvality; nemusíme lovit pochybné excely někde po file systému.

Určitou nevýhodou této techniky je nutnost aktivního internetového připojení – jsem však přesvědčen, že výhody jasně převažují.