Co budeme dělat

  • základní práce s adresáři
  • načítání a ukládání tabulárních textových souborů
  • kontrola načtených dat
  • načítání a ukládání nativních R-kových souborů
  • načítání dat z balíků
  • načítání a ukládání z a do cizích formátů
  • (data v databázích a na webu)
  • (funkce pro práci se soubory a adresáři)

Nastavení adresáře

  • getwd() vrací cestu k aktuálnímu adresáři
  • setwd() nastaví cestu k pracovnímu adresáři

Používejte relativní cesty: Pokud je např. váš pracovní adresář C:\diplomka\R a data máte uložená v adresáři C:\diplomka\data, použijte cestu ../data/moje_data.csv.

Problém s lomítky:

file.path("..", "diplomka", "moje_data.csv")
## [1] "../diplomka/moje_data.csv"

Tabulární textové soubory

Základní způsob výměny dat jsou textové tabulární formáty:

  • jednotlivé řádky odpovídají pozorováním
  • sloupce jsou odděleny oddělovačem (např. středníkem)

Výhody:

  • jdou načíst a vypsat do / z téměř do každého software
  • jsou data "čitelná lidmi"
  • pokud se něco pokazí, je často možné data nějak zachránit

Nevýhody:

  • mohou obsahovat pouze tabulární data a ne metadata
  • načítání může trvat dlouho (pokud jsou data velká)
  • nekomprimovaná zabírají hodně místa na disku

Načítání tabulárních txt souborů

Funkce read.table(), vrací data.frame. Vybrané parametry:

  • file = jméno souboru nebo spojení
  • header = logická, zda soubor má na 1. řádku jména sloupců
  • skip = počet řádků, které se mají na začátku přeskočit
  • sep = řetězec se znakem oddělujícím jednotlivé sloupce
  • stringsAsFactors = logická proměnná, zda se řetězce mají převést na faktory; implicitně TRUE, doporučuji vypnout

Pro speciální případy (jako je např. formát CSV) nabízí R wrappery nad touto funkcí, zejména funkce read.csv() a read.csv2(); ty však jen nastavují hodnoty některých parametrů v základní funkci read.table().

Příklad

Chcete načíst soubor "bmi_data.csv" exportovaný z LibreOffice:

id,height,weight,bmi
1,153,55,23.4952368747
2,207,97,22.6376344839
3,173,83,27.7322997761
4,181,92,28.0821708739
5,164,112,41.6418798334
bmi_data <- read.csv("data/bmi_data.csv", stringsAsFactors = FALSE)
bmi_data
##   id height weight      bmi
## 1  1    153     55 23.49524
## 2  2    207     97 22.63763
## 3  3    173     83 27.73230
## 4  4    181     92 28.08217
## 5  5    164    112 41.64188

Načtení tabulárních txt dat v RStudiu

V záložce Environment je klikátko Import Dataset.
Vyberte From Local File....

Nástroj odhadne většinu potřebných informací a zbytek je možné konfigurovat.

Vygeneruje kód pro přetažení do skriptu.

Prohlídka dat

Všechna data načtená v globálním prostředí R najdete v záložce Environment:

  • kliknutím na jméno datasetu se zobrazí prohlížeč datasetu
    (umožňuje data zobrazit, třídit a filtrovat)
  • kliknutím na "šipku" se zobrazí struktura datasetu

(Po načtení dat přes klikátko Import Dataset se prohlížeč datasetu otevře automaticky.)

Rady pro načítání velkých souborů

Může trvat dlouho.

R spadne, pokud se data nevejdou do paměti počítače.

Rady viz lecture notes.

Kontrola načtených dat

Po načtení data zkontrolujte:

  1. zkontrolujte, že má dataset správný počet řádků (nrow()) a sloupců (ncol()), tj. že se načetlo vše a nenačetl se nějaký "odpad" uložený na začátku nebo konci datového souboru

  2. podívejte se na začátek (head()) a konec (tail()) datasetu; opět pomůže kontrolovat, zda se nenačetl nějaký zmatek na začátku nebo konci souboru a že vše vypadá tak, jak má

  3. zkontrolujte strukturu datasetu (str()) – jména sloupců, jejich typy a hodnoty

  4. podívejte se na souhrnné statistiky dat (summary()): jaké jsou hodnoty proměnných (dávají smysl? jsou správně velké? porovnejte hodnoty s tím, co víte odjinud), kde hodnoty chybí

Další rady v lekci o EDA (exploratory data analysis).

K procvičení

Do nějakého adresáře uložte z ISu soubor "FebPwtExport9292016.csv.gz".

Soubor obsahuje čtyři sloupce oddělené čárkou:

  • VariableCode – typ proměnné: rgdpe je Expenditure-side real GDP at chained PPPs (in mil. 2011US$), pop je
  • RegionCode – kód země (Česká republika je "CZE")
  • YearCode – rok (1960, 1970, …, 2010)
  • AggValue – hodnota

Zdroj: Penn World Table 9.

K procvičení (pokrač.)

Úkoly:

  • načtěte data pomocí "klikátka" v RStudiu
  • prohlédněte si vygenerovaný kód
  • prohlédněte si data v prohlížeči dat
  • podívejte se na začátek a konec dat
  • zjistěte, kolik mají data řádků
  • podívejte se na souhrnné statistiky

K procvičení (pokrač.)

Spusťte:

library(tidyr)
pwdata <- pwdata %>% spread(VariableCode, AggValue)

Podívejte se, jak se data změnila.

Úkoly:

  • přidejte sloupec, který spočítá HDP na hlavu
  • vyberte data pro Českou republiku a uložte do sel
  • setřiďte dataset sel podle roku vzestupně
  • spočítejte růst HDP na hlavu a uložte do vektoru growth

Ukládání dat

K zapsání dat do tabulárních formátů slouží funkce:

  • write.table()
  • write.csv()
  • write.csv2()

Detaily jsou v dokumentaci.

K procvičení

Upravený dataset pwdata uložte do souboru "rust.csv", kde budou sloupce oddělené čárkou a nevypíší se jména (fakticky čísla) řádků.

Spojení (connections)

R nečte a nezapisuje přímo do souborů, ale do connections, což může být

  • nekomprimovaný lokální soubor
  • soubor komprimovaný gzip a bzip (ne PK Zip)
  • URL a další.

Funkce read.table() a její wrappery vytváří spojení pro čtení dat automaticky.

Načtení komprimovaných tab. dat

bmi_data <- read.csv("data/bmi_data.csv.gz",
                     stringsAsFactors = FALSE)
bmi_data
##   id height weight      bmi
## 1  1    153     55 23.49524
## 2  2    207     97 22.63763
## 3  3    173     83 27.73230
## 4  4    181     92 28.08217
## 5  5    164    112 41.64188

Načtení tabulárních dat z internetu

country_codes <- read.csv(
    "http://www.correlatesofwar.org/data-sets/cow-country-codes/cow-country-codes",
    stringsAsFactors = FALSE)
head(country_codes)
##   StateAbb CCode                 StateNme
## 1      USA     2 United States of America
## 2      CAN    20                   Canada
## 3      BHM    31                  Bahamas
## 4      CUB    40                     Cuba
## 5      CUB    40                     Cuba
## 6      HAI    41                    Haiti

RStudio: záložka Environment, klikátko Import Dataset, volba From Web URL....

Zápis do komprimovaného souboru

Pokud chcete uložit data pomocí spojení (např. do komprimovaného souboru), je potřeba spojení deklarovat přímo:

gfile <- gzfile("moje_data.csv.gz")
write.csv(bmi_data, file = gfile)

Balík readr

Balík readr poskytuje rychlejší funkce

  • read_table()
  • read_csv()
  • read_csv2()
  • apod.

Je však lepší specifikovat typ jednotlivých sloupců, viz viněta.

Nativní R-kové binární soubory

Textové tabulární datové formáty jsou výborné při předávání dat mezi lidmi.

Při vlastním zpracování dat je lepší použít vlastní binární datový formát R:

  • data zabírají na disku méně místa
  • načítají se rychleji
  • mohou obsahovat metadata včetně atributů
  • jde ukládat i netabulární data (např. seznamy, pole, různé objekty apod.)

Uložení vybraných proměnných

Obvykle s koncovkami .RData nebo .rda:

save(bmi_data, file = "bmi_data.RData")

Pokud je proměnných více, oddělí se čárkou:

save(var1, var2, var3, var4, file = "somefile.RData")

Uložení všech proměnných v paměti

save.image(file = "somefile.RData")

Detaily viz dokumentace.

Načtení proměnných

load("bmi_data.RData")

K procvičení

Uložte pwdata a vektor growth do souboru "moje_data.RData".

Vymažte všechny proměnné z globálního prostředí (zkontrolujte v záložce Environment).

Načte tyto proměnné ze souboru "moje_data.RData".

Načítání dat z balíků (1)

Mnoho R-kových balíků obsahuje data.

library(ggplot2)
data("diamonds")
head(diamonds)
## # A tibble: 6 × 10
##   carat       cut color clarity depth table price     x     y     z
##   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43
## 2  0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31
## 3  0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31
## 4  0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63
## 5  0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75
## 6  0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48

Načítání dat z balíků (2)

Seznam dat obsažených v daném balíku:

data(package = "ggplot2")

Načtení dat bez načtení balíku:

data("economics", package = "ggplot2")
head(economics)
## # A tibble: 6 × 6
##         date   pce    pop psavert uempmed unemploy
##       <date> <dbl>  <int>   <dbl>   <dbl>    <int>
## 1 1967-07-01 507.4 198712    12.5     4.5     2944
## 2 1967-08-01 510.5 198911    12.5     4.7     2945
## 3 1967-09-01 516.3 199113    11.7     4.6     2958
## 4 1967-10-01 512.9 199311    12.5     4.9     3143
## 5 1967-11-01 518.1 199498    12.5     4.7     3066
## 6 1967-12-01 525.8 199657    12.1     4.8     3018

Načítání dat z MS Excelu

Nejbezpečnější je načítat data z Excelu přes CSV souboru. Tak máte největší kontrolu nad tím, co se děje.

Přímo je načtete pomocí balíku readxl:

  • excel_sheets() vypíše seznam listů v Excelovém souboru
  • read_excel() načte jeden list z Excelového souboru

Víc detailů viz dokumentace.

K procvičení

Do nějakého adresáře si z ISu nahrajte soubor "FebPwtExport9292016.xlsx" (zdroj: Penn World Tables):

  • podívejte se, jaké listy obsahuje
  • načtěte list "Data"

Hint: nezapomeňte načíst potřebný balík.

Data z jichých statistických programů

Někdy jsou data distribuovaná v nativním formátu některého statistického softwaru.

K jejich načtení (a někdy i ukládání) slouží balíky:

  • haven: SPSS, SAS a Stata

  • foreign mnoho dalších datových formátů

Pokud nějaký formát umí číst oba balíky, doporučuji jako první vyzkoušet balík haven.

K procvičení

Do vybraného adresáře ulože z ISu soubor "chile.dta" ve formátu Stata (zdroj: http://www.ats.ucla.edu/stat/stata/examples/ara/arastata_dl.htm).

S pomocí balíku haven načtěte data z tohoto souboru a uložte do proměnné (viz dokumentace k balíku).

Zjistěte

  • kolik má dataset řádků
  • jaké má proměnné
  • jak vypadají první a poslední řádky
  • souhrnné statistiky
  • jak vypadá struktura datasetu (funkce str())

Připojení databází

Viz Spector: Data Manipulation with R, kap. 3.

Ekonomické databáze na webu

Některé balíky umožňují číst data přímo z vybraných ekonomických databází:

  • WDI umí přímo načíst makroekonomická data z World Development Indicators, které poskytuje Světová banka
  • Quandl načítá různá ekonomická a finanční data, viz https://www.quandl.com/tools/r
  • quantmod umí načíst některá finanční data, např. z Fedu, viz http://www.quantmod.com

Balík Ecdat poskytuje spoustu datasetů pro ekonometrii.

Google API apod.

Některé balíky umožňují číst data z různých služeb Google a podobných internetových firem:

  • ggmap - využívá mapy z Google k vizualizaci dat, zjištění adres, GPS lokací, dojezdových vzdáleností apod.
  • gtrendsR – spojení s Google Trends
  • twitteR – spojení s API Twitteru
  • Rfacebook – spojení s API Facebooku

Práce se soubory a adresáři

Naučit se funkce na práci se soubory a adresáři.

Seznam je v lecture notes.

Domácí úkol

  1. načtete soubor cars.csv z aktuálního adresáře; soubor má v prvním řádku jména sloupců a jednotlivé sloupce jsou odděleny dvojtečkou
  2. pomocí funkce cor() spočítejte Pearsonovu korelaci mezi počtem mil, které auto ujede na 1 galon paliva (mpg) a výkonem motoru v koňských silách (horse); hodnot NA se zbavte volbou "complete.obs"
  3. načtěte soubor Cars.sav ve formátu SPSS
  4. zkontrolujte, zda jsou všechny sloupce obou datasetů pojmenovány stejně; rozdíly mezi malými a velkými písmeny ignorujte (řetězce na malá písmena převádí funkce tolower()); výsledkem bude jediná logická hodnota: TRUE, pokud jsou všechny sloupce stejně pojmenované, FALSE jinak
  5. všechny vytvořené proměnné uložte do souboru results.RData