V prvním dílu naší série o zpracování dat v R tidyverse jsme se seznámili se základními pojmy a funkcemi, které tvoří základ práce s tímto výkonným ekosystémem balíčků. Prošli jsme také syntax programovacího jazyka R, datové typy a objekty a představili jsme si klíčové funkce pro práci v RStudiu.
Nyní se zaměříme na import výzkumných dat do jazyka R,resp. aplikace RStudio. Kvalitní import je základem pro spolehlivou statistickou analýzu, vizualizaci dat a (ne)vyvrácení vaší alternativní hypotézy. Umožní vám mj.:
- snadno reprodukovat vaše analýzy a studie,
- zachovat integritu dat pro další analýzy,
- identifikovat a opravit chyby ještě před samotnou analýzou,
- zjednodušit proces transformace a čištění dat.
Import s úpravami, nebo bez?Funkce pro import do jazyka R nabízejí řadu argumentů, pomocí kterých můžete importovat jen vybranou část dat, označit chybějící hodnoty apod. Při práci s velkými datovými sadami může být efektivnější a paměťově úspornější data při importu rovnou upravit. Pokud jsou vaše datové sady menší nebo střední velikosti (do desítek tisíc řádků a vyšší desítek sloupců), je vhodnější importovat všechna data a úpravy provést pomocí tidyverse balíčku dplyr. |
Příprava prostředí
Před samotným importem dat je klíčové správně nastavit pracovní prostředí v R. Jedním z prvních kroků je nastavení hlavní složky, také známé jako pracovní adresář. Tento krok vám umožní načítat data, aniž byste museli zadávat kompletní cestu k umístění souborů.
Nastavení hlavní složky (pracovního adresáře) provedete pomocí funkce ‚setwd()‘:
Zakupte si balíček 2 nebo více vybraných kurzů a ušetřete
# nastavení pracovního adresáře na C:/Documents/Datasets
setwd("C:/Documents/Datasets")
# alternativní nastavení pracovního adresáře na C:/Documents/Datasets
setwd("C:\\Documents\\Datasets")
Díky tomuto nastavení nemusíte ve funkcích pro import vypisovat jejich přesné umístění – stačí napsat jen název souboru. Pro ověření nastavení aktuálního pracovního adresáře můžete použít funkci ‚getwd()‘:
# zobrazení aktuálního pracovního adresáře
getwd()
Pracovní adresář samozřejmě nastavíte i „naklikáním“, použití ve skriptu má ale několik výhod:
- každý, kdo spustí váš skript, bude mít stejnou strukturu složek (klíčové pro reprodukovatelnost výzkumu),
- při sdílení nebo přenosu mezi počítači stačí upravit jednu řádku kódu,
- umožňuje snadno měnit pracovní adresář pro různé datové sady.
Zobrazení a ověření importovaných datových sadV R se všechny datové sady ukládají ve formě datových struktur (objektů). Pro jejich zobrazení po importu (a ověření bezproblémového přenosu dat) využijte tyto funkce:
Detaily rozebíráme v prvním článku o R tidyverse. Importovaná data nezapomeňte zkontrolovat např. pomocí těchto funkcí:
|
Import dat z Excelu (soubory XLS/XLSX) do R
Pro import dat z programu Microsoft Excel (ve formátu xls a xlsx) slouží balíček readxl. Přestože je s tidyverse kompatibilní, není jeho součástí. Nainstalujete a spustíte jej následujícím způsobem:
# instalace balíčku readxl
install.packages("readxl")
# načtení balíčku readxl
library(readxl)
Ukázka xlsx souboru
Pro načtení konkrétního listu stačí do funkce přidat argument ‚sheet‘. (Pro spojení listů je vhodnější využít funkce z balíčku dplyr, o kterém budeme mluvit v jednom z následujících článků):
# import konkrétního listu z daného souboru
data <- read_excel("nazev-souboru.xlsx", sheet = "nazev-listu")
# import konkrétního listu z daného souboru pomocí pořadí listu
data <- read_excel("nazev-souboru.xlsx", sheet = 1)
Pro import určitého rozsahu buněk slouží argument ‚range‘:
# import konkrétního rozsahu buněk z určitého listu a souboru
data <- read_excel("nazev-souboru.xlsx", sheet = "nazev-listu", range = "A1:A100")
Důležitým argumentem je ‚na‘ pro specifikaci, které hodnoty v souboru považovat za chybějící. Pokud např. laboratorní zařízení při měření nechalo u části chybějících hodnot prázdné pole a jiné zařízení doplnilo NA, popř. N/A, bude mít argument následující podobu:
# import celého souboru z Excelu s chybějícími hodnotami
data <- read_excel("nazev-souboru.xlsx", na = c("", "NA", "N/A"))
Proč řešit při importu chybějící hodnoty?Neoznačené chybějící hodnoty (např. prázdné buňky nebo texty jako “N/A”) mohou způsobit chyby a nesprávné výsledky ve výpočtech, protože je software nemusí rozpoznat jako chybějící. Označením chybějících hodnot zajistíte, že je funkce pro výpočet průměru, mediánu, kvartilů, směrodatné odchylky apod. automaticky vynechají. |
Častou využívaným argumentem je také ‚col-type‘, který může nabývat hodnot ‚TRUE‘, nebo ‚FALSE‘:
- pokud je hodnota ‚TRUE‘, první řádek datového souboru se využije pro názvy sloupců (výchozí nastavení),
- pokud je hodnota ‚FALSE‘, první řádek souboru se načte jako data a sloupce se automaticky pojmenují jako X1, X2, atd.:
# import konkrétního rozsahu buněk z určitého listu a souboru (1. řádek = názvy sloupců)
data <- read_excel("nazev-souboru.xlsx", sheet = "nazev-listu", range = "A1:A100", col_names = TRUE)
# import konkrétního rozsahu buněk z určitého listu a souboru (1. řádek = součást dat)
data <- read_excel("nazev-souboru.xlsx", sheet = "nazev-listu", range = "A1:A100", col_names = FALSE)
Rozdíl při použití hodnot ‚TRUE‘ a ‚FALSE‘ argumentu ‚col_names‘
Dalším často využívaným argumentem je ‚col_types‘, který umožňuje specifikovat datové typy jednotlivých sloupců. Ačkoliv balíček readxl provádí odhad datových typů ve sloupcích automaticky, není 100% přesný.
Argument může nabývat hodnot:
- “text” – textový řetězec,
- “numeric” – číselná hodnota (včetně čísel s desetinnou čárkou),
- “date” – datum,
- “logical” – logická hodnota (TRUE nebo FALSE).
Pořadí typů dat v argumentu ‚col_types‘ odpovídá pořadí sloupců v excelovém souboru. Např. pokud chcete specifikovat typy dat pro první tři sloupce jako text, číslo a datum, použijete tento kód:
# import konkrétního rozsahu buněk z určitého listu a souboru (1. řádek = názvy sloupců) s určením datových typů sloupců
data <- read_excel("nazev-souboru.xlsx", sheet = "nazev-listu", range = "A1:A100", col_names = TRUE, col_types = c("text", "numeric", "date"))
Import CSV (TIBCO Statistica) a TSV souborů do R
CSV (Comma-Separated Values) soubory jsou jedním z nejběžnějších formátů pro ukládání tabulkových dat. Jejich popularita spočívá v jednoduchosti a kompatibilitě s většinou softwarů pro zpracování dat.
Podobně fungují i TSV (Tab-Separated Value) soubory – rozdíl je v oddělení dat tabulátorem.
CSV soubory využijete i pro jednoduché načtení dat z aplikace TIBCO Statistica, která v tomto formátu umožňuje datové sady exportovat.
Pro import CSV a TSV se používá balíček readr, který je součástí ekosystému tidyverse.
# instalace a načtení celého tidyverse
install.packages("tidyverse")
library(tidyverse)
# instalace a načtení balíčku readr
install.packages("readr")
library(readr)
Ukázka csv souboru (s daty oddělenými čárkou a s daty oddělenými středníkem) a tsv souboru (oddělení tabulátorem)
Hlavními funkcemi pro import CSV a TSV souborů jsou ‚read_csv()‘, resp. ‚read_csv2()‘ a ‚read_tsv()‘. Nabízejí mnoho užitečných argumentů pro přizpůsobení importu vašim potřebám. Základní použití vypadá takto:
# import csv souboru (oddělení dat čárkami)
data <- read_csv("nazev-souboru.csv")
# import csv souboru (oddělení dat středníkem)
data <- read_csv2("nazev-souboru.csv")
# import tsv souboru (oddělení dat tabulátorem)
data <- read_tsv("nazev-souboru.tsv")
Mezi nejpoužívanější argumenty funkce ‚read_csv()‘ (resp. ‚read_csv2() a ‚read_tsv()‘) patří:
‚col_names‘ – určuje, zda první řádek obsahuje názvy sloupců; může nabývat hodnot:
- ‚TRUE‘ (výchozí nastavení) – první řádek datového souboru se využije pro názvy sloupců,
- ‚FALSE‘ – první řádek souboru se načte jako data, sloupce se automaticky pojmenují jako X1, X2, atd.:
# import csv souboru (1. řádek = názvy sloupců)
data <- read_csv("nazev-souboru.csv", col_names = TRUE)
# import csv souboru (1. řádek = součást dat)
data <- read_csv("nazev-souboru.csv", col_names = FALSE)
‚col_types‘ – slouží ke specifikaci datových typů sloupců (o rozpoznání se snaží balíček readr automaticky). Argument může nabývat těchto hodnot:
- “character” nebo “c” – textový řetězec,
- “double” nebo “d” – číselná hodnota (s plovoucí desetinnou čárkou),
- “integer” nebo “i” – celé číslo,
- “logical” nebo “l” – logická hodnota (TRUE nebo FALSE),
- “date” nebo “D” – datum (výchozí formát YYYY-MM-DD),
- “time” nebo “T” – čas,
- “datetime” nebo “t” – datum a čas,
- “factor” nebo “f” – faktor.
V argumentu ‚col_types‘ můžete buď přímo specifikovat název sloupce a typu dat, který obsahuje, nebo použít zkrácený zápis pomocí jednopísmenných kódů pro každý sloupec.
# import csv souboru s určením datového typu pomocí názvu sloupců
data <- read_csv("nazev-souboru.csv", col_types = cols(
nazev_sloupce1 = col_character(),
nazev_sloupce2 = col_double(),
nazev_sloupce3 = col_date()
))
# import csv souboru s určením datového typu pomocí jednopísmenných kódů
data <- read_csv("nazev-souboru.csv", col_types = "cdD")
‚na‘ určuje, které hodnoty bude R v souboru považovat za chybějící:
# import csv souboru s chybějícími hodnotami (v původním souboru označenými prázdným místem)
data <- read_csv("nazev-souboru.csv", na = ""))
# import csv souboru s chybějícími hodnotami (v původním souboru označené prázdným místem, NA a N/A)
data <- read_csv("nazev-souboru.csv", na = c("", "NA", "N/A"))
‚n_max‘ – omezuje počet řádků, které se importují:
# import prvních 10 řádků z csv souboru
data <- read_csv("nazev-souboru.csv", n_max = 10)
‚skip‘ – určuje počet řádků, které se při importu dat přeskočí:
# import csv souboru po přeskočení prvních 20 řádků
data <- read_csv("nazev-souboru.csv", skip = 20)
# přeskočení prvních 20 řádků a import prvních 10 řádků z csv souboru (1. řádek = součást dat)
data <- read_csv("nazev-souboru.csv", skip = 20, n_max = 10, col_names = FALSE)
Ukázka importovaného csv souboru (prvních 10 řádků po přeskočení 20 řádků, 1. řádek je součástí dat)
Import dat z SPSS (formát SAV) do R
IBM SPSS Statistics je široce používaný software pro statistickou analýzu, zejména v sociálních vědách. Součástí datových souborů jsou navíc metadata v podobě popisu proměnných (Variable Labels) a hodnotové štítky (Value Labels).
Datasety se v SPSS ukládají do sav souborů, popř. zsav (komprimovaný sav soubor). Lze je uložit ale také ve formě csv (viz výše), xls/xlsx (viz výše), por (formát pro přenos mezi různými verzemi SPSS). Do SAS souboru lze uložit i data (a metadata) z aplikace TIBCO Statistica.
Na následujících řádcích budeme mluvit o importu dat ve formátu sav a por. Data (včetně metadat) importujete pomocí balíčku haven, který je součástí tidyverse:
# instalace a načtení celého tidyverse
install.packages("tidyverse")
library(tidyverse)
# instalace a načtení balíčku haven
install.packages("haven")
library(haven)
Ukázka sav souboru v programu IBM SPSS Statistics
Hlavní funkcí pro import dat z SPSS je ‚read_spss()‘. S totou funkcí načtete jak soubory sav, tak por. Základní použití vypadá takto:
# import sav/por souboru
data <- read_spss("nazev-souboru.sav")
Často využívané argumenty funkce ‚read_spss()‘ jsou:
‚user_na‘ určuje jak, bude R zacházet s uživatelem definovanými chybějícími hodnotami (zpravidla nastavené už v programu SPSS). Argument může nabývat hodnot:
- ‚TRUE‘ (výchozí nastavení) – uživatelem nastavené hodnoty se považují za chybějící,
- ‚FALSE‘ – uživatelem nastavené hodnoty se nepovažují za chybějící, ale za běžné hodnoty.
# import sav souboru s chybějícími hodnotami (nastavené už v SPSS)
data <- read_spss("nazev-souboru.sav", user_na = TRUE)
# import sav souboru se záměnou chybějících hodnot (nastavené už v SPSS) za běžné hodnoty
data <- read_spss("nazev-souboru.sav", user_na = FALSE)
‚col_select‘ umožňuje importovat pouze vybrané sloupce:
# import sav souboru s jedním vybraným sloupcem
data <- read_spss("nazev-souboru.sav", col_select = “nazev_sloupce”)
# import sav souboru s více vybranými sloupci
data <- read_spss("nazev-souboru.sav", col_select = c(“nazev_sloupce1”, “nazev_sloupce2”, “nazev_sloupce3”))
‚n_max‘ – omezuje počet řádků, které se importují:
# import prvních 10 řádků ze sav souboru
data <- read_spss("nazev-souboru.sav", n_max = 10)
‚skip‘ – určuje počet řádků, které se při importu dat přeskočí:
# import sav souboru po přeskočení prvních 20 řádků
data <- read_spss("nazev-souboru.sav", skip = 20)
# přeskočení prvních 20 řádků a import prvních 10 řádků ze sav souboru
data <- read_spss("nazev-souboru.sav", skip = 20, n_max = 10)
Ukázka importovaného sav souboru s metadaty
Naučte se ovládat jazyk R pod dohledem zkušeného lektora
Kurz ovládání programovacího jazyka R pořádáme pravidelně v Praze i na dalších místech. Během 1denního kurzu se kromě základních funkcí naučíte do jazyka R data importovat, upravit je, analyzovat a nakonec vizualizovat.
Lektorem kurzu je Mgr. Patrik Galeta, PhD., odborný asistent katedry antropologie Západočeské univerzity v Plzni. Statistickým metodám se věnuje v rámci demografických studií, na ZČU vede také kurz zpracování dat.
Ze školení si navíc odnesete více než 40 skriptů, které můžete použít pro zpracování dat ze svého výzkumu.