Dplyr Tutorial: Sloučení a spojení dat v R s příklady
Úvod do analýzy dat
Analýzu dat lze rozdělit do tří částí:
- Těžba: Nejprve musíme shromáždit data z mnoha zdrojů a zkombinovat je.
- Změnit: Tento krok zahrnuje manipulaci s daty. Jakmile zkonsolidujeme všechny zdroje dat, můžeme začít data čistit.
- Vizualizujte: Posledním krokem je vizualizace našich dat pro kontrolu nesrovnalostí.
Jednou z nejvýznamnějších výzev, kterým čelí datoví vědci, je manipulace s daty. Data nejsou nikdy k dispozici v požadovaném formátu. Datoví vědci musí strávit alespoň polovinu svého času čištěním a manipulací s daty. To je jeden z nejdůležitějších úkolů v práci. Pokud proces manipulace s daty není úplný, přesný a přísný, model nebude fungovat správně.
R Dplyr
R má knihovnu nazvanou dplyr, která pomáhá při transformaci dat. Knihovna dplyr je v zásadě vytvořena kolem čtyř funkcí pro manipulaci s daty a pěti sloves pro čištění dat. Poté můžeme použít knihovnu ggplot k analýze a vizualizaci dat.
Naučíme se, jak používat knihovnu dplyr k manipulaci s a Datový rámec.
Sloučit data s R Dplyr
dplyr poskytuje pěkný a pohodlný způsob, jak kombinovat datové sady. Můžeme mít mnoho zdrojů vstupních dat a v určitém okamžiku je musíme zkombinovat. Spojení s dplyr přidá proměnné napravo od původní datové sady.
Dplyr se připojuje
Následují čtyři důležité typy spojení používaných v dplyr ke sloučení dvou datových sad:
funkce | Objektivní | Argumenty | Více kláves |
---|---|---|---|
left_join() | Sloučit dvě datové sady. Uchovávejte všechna pozorování z tabulky původu | data, origin, destination, by = “ID” | původ, cíl, podle = c(“ID”, “ID2”) |
right_join() | Sloučit dvě datové sady. Uchovávejte všechna pozorování z cílové tabulky | data, origin, destination, by = “ID” | původ, cíl, podle = c(“ID”, “ID2”) |
vnitřní spojení() | Sloučit dvě datové sady. Vyloučí všechny neshodné řádky | data, origin, destination, by = “ID” | původ, cíl, podle = c(“ID”, “ID2”) |
full_join() | Sloučit dvě datové sady. Uchovává všechna pozorování | data, origin, destination, by = “ID” | původ, cíl, podle = c(“ID”, “ID2”) |
Budeme studovat všechny typy spojení na jednoduchém příkladu.
Nejprve vytvoříme dvě datové sady. Tabulka 1 obsahuje dvě proměnné, ID a y, zatímco Tabulka 2 shromažďuje ID a z. V každé situaci musíme mít a klíčový pár variabilní. V našem případě je ID naše klíč variabilní. Funkce bude hledat identické hodnoty v obou tabulkách a sváže vracející se hodnoty napravo od tabulky 1.
library(dplyr) df_primary <- tribble( ~ID, ~y, "A", 5, "B", 5, "C", 8, "D", 0, "F", 9) df_secondary <- tribble( ~ID, ~z, "A", 30, "B", 21, "C", 22, "D", 25, "E", 29)
Dplyr left_join()
Nejběžnějším způsobem sloučení dvou datových sad je použití funkce left_join(). Z obrázku níže vidíme, že pár klíčů dokonale odpovídá řádkům A, B, C a D z obou datových sad. E a F však zůstaly. Jak zacházíme s těmito dvěma pozorováními? Pomocí left_join() zachováme všechny proměnné v původní tabulce a nebudeme brát v úvahu proměnné, které nemají v cílové tabulce spárovaný klíč. V našem příkladu proměnná E v tabulce 1 neexistuje. Proto bude řádek vypuštěn. Proměnná F pochází z tabulky počátku; bude zachován po left_join() a vrátí NA ve sloupci z. Obrázek níže reprodukuje, co se stane s left_join().
Příklad dplyr left_join()
left_join(df_primary, df_secondary, by ='ID')
Výstup:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA
Dplyr right_join()
Funkce right_join() funguje úplně stejně jako left_join(). Jediný rozdíl je vynechaný řádek. Hodnota E dostupná v cílovém datovém rámci existuje v nové tabulce a má hodnotu NA pro sloupec y.
Příklad dplyr right_join()
right_join(df_primary, df_secondary, by = 'ID')
Výstup:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 E NA 29
Dplyr inner_join()
Když jsme si 100% jisti, že se tyto dvě datové sady nebudou shodovat, můžeme zvážit návrat 👔 řádky existující v oba datový soubor. To je možné, když potřebujeme čistou datovou sadu nebo když nechceme přičítat chybějící hodnoty průměrem nebo mediánem.
Na pomoc přichází inner_join(). Tato funkce vyloučí neshodné řádky.
Příklad dplyr inner_join()
inner_join(df_primary, df_secondary, by ='ID')
Výstup:
## # A tibble: 4 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25
Dplyr full_join()
Nakonec funkce full_join() zachová všechna pozorování a chybějící hodnoty nahradí NA.
Příklad dplyr full_join()
full_join(df_primary, df_secondary, by = 'ID')
Výstup:
## # A tibble: 6 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA ## 6 E NA 29
Více párů klíčů
V neposlední řadě můžeme mít v naší datové sadě více klíčů. Zvažte následující soubor dat, kde máme roky nebo seznam produktů zakoupených zákazníkem.
Pokud se pokusíme sloučit obě tabulky, R vyvolá chybu. Abychom situaci napravili, můžeme předat dvě proměnné párů klíčů. Tedy ID a rok, které se objevují v obou souborech dat. Ke sloučení tabulky 1 a tabulky 2 můžeme použít následující kód
df_primary <- tribble( ~ID, ~year, ~items, "A", 2015,3, "A", 2016,7, "A", 2017,6, "B", 2015,4, "B", 2016,8, "B", 2017,7, "C", 2015,4, "C", 2016,6, "C", 2017,6) df_secondary <- tribble( ~ID, ~year, ~prices, "A", 2015,9, "A", 2016,8, "A", 2017,12, "B", 2015,13, "B", 2016,14, "B", 2017,6, "C", 2015,15, "C", 2016,15, "C", 2017,13) left_join(df_primary, df_secondary, by = c('ID', 'year'))
Výstup:
## # A tibble: 9 x 4 ## ID year items prices ## <chr> <dbl> <dbl> <dbl> ## 1 A 2015 3 9 ## 2 A 2016 7 8 ## 3 A 2017 6 12 ## 4 B 2015 4 13 ## 5 B 2016 8 14 ## 6 B 2017 7 6 ## 7 C 2015 4 15 ## 8 C 2016 6 15 ## 9 C 2017 6 13
Funkce čištění dat v R
Níže jsou uvedeny čtyři důležité funkce pro uklizení (čištění) dat:
funkce | Objektivní | Argumenty |
---|---|---|
shromáždit() | Transformujte data z širokých na dlouhé | (data, klíč, hodnota, na.rm = FALSE) |
šíření() | Transformujte data z dlouhých na široké | (data, klíč, hodnota) |
samostatný() | Rozdělte jednu proměnnou na dvě | (data, col, into, sep= “”, remove = TRUE) |
jednotka() | Spojte dvě proměnné do jedné | (data, col, conc ,sep= “”, remove = TRUE) |
Používáme knihovnu tidyr. Tato knihovna patří do sbírky knihovny pro manipulaci, čištění a vizualizaci dat. Pokud nainstalujeme R s anakondou, knihovna je již nainstalována. Knihovnu najdeme zde, https://anaconda.org/r/r-tidyr.
Pokud ještě není nainstalován, zadejte následující příkaz pro instalaci tidyr:
install tidyr : install.packages("tidyr")
shromáždit()
Cílem funkce collect() je transformovat data z širokých na dlouhá.
Syntax
gather(data, key, value, na.rm = FALSE) Arguments: -data: The data frame used to reshape the dataset -key: Name of the new column created -value: Select the columns used to fill the key column -na.rm: Remove missing values. FALSE by default
Příklad
Níže si můžeme představit koncept přetváření široký na dlouhý. Chceme vytvořit jeden sloupec s názvem růst, vyplněný řádky kvartálních proměnných.
library(tidyr) # Create a messy dataset messy <- data.frame( country = c("A", "B", "C"), q1_2017 = c(0.03, 0.05, 0.01), q2_2017 = c(0.05, 0.07, 0.02), q3_2017 = c(0.04, 0.05, 0.01), q4_2017 = c(0.03, 0.02, 0.04)) messy
Výstup:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
# Reshape the data tidier <-messy %>% gather(quarter, growth, q1_2017:q4_2017) tidier
Výstup:
## country quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02 ## 7 A q3_2017 0.04 ## 8 B q3_2017 0.05 ## 9 C q3_2017 0.01 ## 10 A q4_2017 0.03 ## 11 B q4_2017 0.02 ## 12 C q4_2017 0.04
Ve funkci collect() vytváříme dvě nové proměnné čtvrtletí a růst, protože naše původní datová sada má jednu skupinovou proměnnou: tj. země a páry klíč-hodnota.
šíření()
Funkce spread() dělá opak shromažďování.
Syntax
spread(data, key, value) arguments: data: The data frame used to reshape the dataset key: Column to reshape long to wide value: Rows used to fill the new column
Příklad
Můžeme přetvořit čistší datovou sadu zpět na chaotický pomocí spread()
# Reshape the data messy_1 <- tidier %>% spread(quarter, growth) messy_1
Výstup:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
samostatný()
Funkce separát() rozdělí sloupec na dva podle oddělovače. Tato funkce je užitečná v některých situacích, kdy je proměnnou datum. Naše analýza může vyžadovat zaměření na měsíc a rok a chceme sloupec rozdělit na dvě nové proměnné.
Syntax
separate(data, col, into, sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: The column to split -into: The name of the new variables -sep: Indicates the symbol used that separates the variable, i.e.: "-", "_", "&" -remove: Remove the old column. By default sets to TRUE.
Příklad
V přehlednější datové sadě můžeme oddělit čtvrtletí od roku použitím funkce separát () .
separate_tidier <-tidier %>% separate(quarter, c("Qrt", "year"), sep ="_") head(separate_tidier)
Výstup:
## country Qrt year growth ## 1 A q1 2017 0.03 ## 2 B q1 2017 0.05 ## 3 C q1 2017 0.01 ## 4 A q2 2017 0.05 ## 5 B q2 2017 0.07 ## 6 C q2 2017 0.02
sjednotit()
Funkce unite() spojí dva sloupce do jednoho.
Syntax
unit(data, col, conc ,sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: Name of the new column -conc: Name of the columns to concatenate -sep: Indicates the symbol used that unites the variable, i.e: "-", "_", "&" -remove: Remove the old columns. By default, sets to TRUE
Příklad
Ve výše uvedeném příkladu jsme oddělili čtvrtletí od roku. Co když je chceme sloučit. Používáme následující kód:
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
Výstup:
## country Quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02
Shrnutí
- Analýza dat lze rozdělit do tří částí: Extrakce, Transformace a Vizualizace.
- R má knihovnu nazvanou dplyr, která pomáhá při transformaci dat. Knihovna dplyr je v zásadě vytvořena kolem čtyř funkcí pro manipulaci s daty a pěti sloves pro čištění dat.
- dplyr poskytuje pěkný a pohodlný způsob, jak kombinovat datové sady. Spojení s dplyr přidá proměnné napravo od původní datové sady.
- Krása dplyru je v tom, že zvládá čtyři typy spojení podobně jako SQL:
- left_join() – Sloučit dvě datové sady a zachovat všechna pozorování z původní tabulky.
- right_join() – Sloučit dvě datové sady a zachovat všechna pozorování z cílové tabulky.
- vnitřní spojení() – Chcete-li sloučit dvě datové sady a vyloučit všechny neshodné řádky.
- full_join() – Sloučit dvě datové sady a zachovat všechna pozorování.
- Pomocí knihovny tidyr můžete transformovat datovou sadu pomocí následujících funkcí:
- shromáždit(): Transformujte data z širokých na dlouhé.
- šíření(): Transformujte data z dlouhých na široké.
- samostatný(): Rozdělení jedné proměnné na dvě.
- jednotka(): Spojte dvě proměnné do jedné.