Začínáme s datasety
Logicky navážeme na minulý příspěvek a ukážeme si už postup úlohy, kterou většina z Vás bude při zpracování nějaké statistické či ekonometrické analýzy řešit vždy jako první. Tou je import dat, jejich prvotní analytické a grafické prozkoumání, příp. nějaké úpravy a následná konstrukce např. regresního modelu s odhadem MNČ. Úlohu rozdělíme na dvě části – grafy a samotný odhad regrese necháme na příště.
Import dat
Způsobů, resp. funkci, které slouží pro načítání datasetů je, jak je v R tradicí, značné množství. My si ukážeme ale jednu velmi univerzální funkci pro import z lokálního disku (zatím jsem žádnou jinou „speciálnější“ nepotřeboval).
V převážné většině případů se importují souboru ve formátu csv, pro to nám velmi dobře poslouží funkce read.table(). Specifikovat načtení konkrétního vstupu, např. odděleného středníkem a obsahujícího názvy proměnných v záhlaví lze takto:
Je však potřeba mít na paměti několik důležitých věcí. První je to, že R používá jako oddělovač desetinných míst americkou tečku, a ne evropskou čárku. Já to osobně řeším např. tak, že v MS Excel to mám „natvrdo“ přenastaveno na tečku, neboť i v jiných softwarech to občas věci spíše jen komplikuje. Udělat to můžete v Nastaveních na kartě Upřesnit a v bodě Používat systémový oddělovač. Tuto možnost deaktivujte a v aktivovaném hned pod tím okýnku napište ".". Pokud to v Excelu měnit nechcete, tak v R to samozřejmě lze ohlídat při importu také. Musíte doplnit další parametr a to dec=",".
Dále musíte si pamatovat, že základním nastavením české verze MS Excel je ukládání csv jako comma delimited, a ne semicolon delimited (což se jinak vyskytuje spíše častěji). Musíte tedy přesně specifikovat parametr sep při definici read.table(). V příkladu výše je sep="," , pokud si vytvoříte csv z nějakého svého xlsx souboru, budete muset to opravit na:
Pokud specifikujete nesprávný oddělovač, R nerozezná sloupce a načte Vám jen jeden sloupec s celým řetězcem v každém řádku.
Inspekce dat
Po importu dat je zpravidla potřeba nebo vhodné provést jejich základní inspekci. Už jen např. pro kontrolu, že se vše načetlo dobře a má takový datový formát, který jste předpokládali. Velmi schopnou funkci v tomto ohledu je str(). Přepravil jsem pro tento příspěvek jednoduchý dataset, se kterým i budeme pracovat (zde). Bohužel nemohu nahrát. Nejdřív ho naimportujeme, pak aplikujeme funkci str().
Vidíme tedy, že máme dvě proměnné numerické a jednu kategoriální (v terminologii R factor). Dokonce je vypsáno, jaké všechny kategorie proměnná obsahuje. Pokud by jich bylo mnohem vice a nevešly by se na obrazovku, pak stejný atribut jakéhokoliv objektu typu factor lze vyvolat funkcí levels().
Provedli jsme základní kontrolu datasetu a zjistili, že se naimportoval správně a datové typy proměnných jsou takové, jaké jsme očekávali. K čemu je to dobré? Např. k tomu, že při importu velkých datasetů, které nejde zkontrolovat pouhým okem, se může v numerickém sloupci vyskytnout nějaká chyba (textový znak), který zapříčiní naformátování proměnné jako char nebo factor. Při kontrole funkcí str to odhalíte. Stejně tak, jako že dataset má správný počet sloupců a řádků.
Další užitečnou funkcí je summary(). Ta zobrazí zase základní statistický přehled, viz příklad níže:
Takto jednak už získáváte nějaké statistické informace o datasetu a proměnných, tedy obrázek o datech, se kterými pracujete, jednak máte možnost přijít na případné chybné hodnoty (outliery), že např. v proměnné Výška je maximum číslo 1000 cm, což je zjevná chyba a měla by se opravit.
Základní transformace a úpravy
Začneme případem, že pro Vaší analýzu je potřeba vypočítat řádkové nebo sloupcové součty. S tím pomohou funkce colSums(), rowSums().
Je však dostupná i jiná funkce, která může fungovat i jako výpočet kontingenční tabulky. Je lehce matoucí, neboť sčítá v rámci sloupce, ale nazývá se rowsum(). Doplnit musíme parametr group, který určije dle hodnot jaké proměnné se mají data seskupovat. Nasčítáme tedy v našem datasetu šířky pro jednotlivé skupiny:
Stejně tak můžete spočítat sloupcové a řádkové průměy pomoci funkcí rowMeans a colMeans. Sice stejný údaj máte v přehledu summary, ale pokud je potřeba jako vstup do něčeho jiného, tak by se takový výpočte hodil:
Řazení
Seřadit data můžeme opět několika způsoby. Závisí na tom, jestli chceme řadit jednorozměrný objekt (naoř. jeden sloupec ze vstupního datasetu), nebo celý objekt. Základníi funkci je sort(). Například proměnnou length z našeho datasetu můžeme seřadit vzestupně následujícím způsobem:
Řadit lze samozřejmě i textové řetězce, v příkladu níže seřadíme abecedně názvy evropských měst:
Práce s data frame
V poslední kapitole rozebereme práci s objekty typu data frame, do kterých budete nejčastěji ukládat načtená data. Velmi často se hzodí z nich získávat např. názvy sloupců, indexy řádků, nebo jen jejich části (subsety).
Subsetting datových objektů v r se odehrává pomoci výběru potřebného sloupce nebo řádku (u vícedimenzionálních struktur) v hranatých závorkách []. Dole uvedeme hned několik příkladu, jak získat subsety z našeho datasetu:
Dalším způsobem je adresování pomoci názvu samotných proměnných. Provádí se pro elementy třídy S3 znakem $, u S4 se používá @ (podrobněji vysvtětlíme později, ale pro Vás je důležité vědět, že většina objektů většiny využívaných balíčků jsou třídy S3). Opět uvedeme rovnou příklady:
Způsob, který si ukážeme teď, budete púoužívat možná ještě častěji, než předchozí. Je to tzv. podmíněný subsetting, kdy chcete z dat získat jen záznamy (řádky), které splňují nějakou podmínku. Představte si, že potřebujetevyřešit tyto tři úlohy:
získat jen záznamy skupiny a
záznamy se šířkou nad 105 cm
měření ze skupiny b, které mají nadprůměrnou délku
Z této lekci si odnesete základní dovednosti práce s datasety s R, import dat, jejich jednoduchou inspekci a primární analytické zhodnocení. Nezapomínejte na důležitost správné specifikace oddělovače sloupců a desetinných míst při importu csv. Vhodným a flexibilním subsettingem můžete vždy z původních dat získat konkrétní pozorování, nebo proměnné, které jsou potřeba k tomu či onému výpočtu. V příští lekci vytvoříme několik grafů a odhadneme regresi MNČ s následnou inspekci splnění předpokladů.