Dplyr oktatóanyag: egyesítse és egyesítse az adatokat az R-ben példákkal
Bevezetés az adatelemzésbe
Az adatok elemzése három részre osztható:
- Kivonat: Először is sok forrásból kell összegyűjtenünk az adatokat, és kombinálnunk kell őket.
- Átalakítás: Ez a lépés az adatkezelést foglalja magában. Miután az összes adatforrást konszolidáltuk, elkezdhetjük az adatok tisztítását.
- Képzeld el: Az utolsó lépés az, hogy vizualizáljuk adatainkat, hogy ellenőrizzük a szabálytalanságokat.

Az egyik legjelentősebb kihívás, amellyel az adattudósok szembesülnek, az adatok manipulálása. Az adatok soha nem állnak rendelkezésre a kívánt formátumban. Az adattudósoknak idejük legalább felét az adatok tisztításával és manipulálásával kell tölteniük. Ez az egyik legkritikusabb feladat a munkában. Ha az adatkezelési folyamat nem teljes, pontos és szigorú, a modell nem fog megfelelően működni.
R Dplyr
Az R-nek van egy dplyr nevű könyvtára, amely segít az adatátalakításban. A dplyr könyvtár alapvetően négy függvényből áll az adatok kezeléséhez és öt igéből az adatok tisztítására. Ezt követően a ggplot könyvtárat használhatjuk az adatok elemzésére és megjelenítésére.
Megtanuljuk, hogyan lehet a dplyr könyvtárat használni a Dataframe.
Egyesítse az adatokat az R Dplyr-rel
A dplyr szép és kényelmes módot biztosít az adatkészletek kombinálására. Lehetséges, hogy sok bemeneti adatforrásunk van, és egy bizonyos ponton kombinálnunk kell őket. A dplyr funkcióval való összekapcsolás változókat ad hozzá az eredeti adatkészlet jobb oldalán.
Dplyr csatlakozik
Az alábbiakban a dplyrben két adatkészlet egyesítésére használt négy fontos összekapcsolási típus található:
| Funkció | Objektív | érvek | Több gomb |
|---|---|---|---|
| left_join() | Egyesítsen két adatkészletet. Őrizze meg az eredettáblázat összes megfigyelését | adatok, eredet, cél, = „azonosító” | eredet, cél, = c("ID", "ID2") |
| right_join() | Egyesítsen két adatkészletet. Őrizze meg a céltáblázat összes megfigyelését | adatok, eredet, cél, = „azonosító” | eredet, cél, = c("ID", "ID2") |
| belső összekapcsolás() | Egyesítsen két adatkészletet. Kizárja az összes páratlan sort | adatok, eredet, cél, = „azonosító” | eredet, cél, = c("ID", "ID2") |
| full_join() | Egyesítsen két adatkészletet. Megőrzi az összes megfigyelést | adatok, eredet, cél, = „azonosító” | eredet, cél, = c("ID", "ID2") |
Az összes csatlakozási típust egy egyszerű példán keresztül tanulmányozzuk.
Először is két adatkészletet készítünk. Az 1. táblázat két változót tartalmaz, az ID-t és az y-t, míg a 2. táblázat az ID-t és a z-t tartalmazza. Minden helyzetben szükségünk van a kulcs-pár változó. Esetünkben az azonosító a miénk kulcs változó. A függvény mindkét táblában azonos értékeket keres, és a visszatérő értékeket az 1. tábla jobb oldalára köti.
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()
A két adatkészlet egyesítésének legáltalánosabb módja a left_join() függvény használata. Az alábbi képen láthatjuk, hogy a kulcspár tökéletesen illeszkedik mindkét adatkészlet A, B, C és D soraihoz. E és F azonban megmaradt. Hogyan kezeljük ezt a két megfigyelést? A left_join() segítségével az összes változót megtartjuk az eredeti táblában, és nem vesszük figyelembe azokat a változókat, amelyeknek nincs kulcspárja a céltáblázatban. Példánkban az E változó nem létezik az 1. táblázatban. Ezért a sor kimarad. Az F változó az eredettáblázatból származik; a left_join() és a return NA után marad a z oszlopban. Az alábbi ábra azt mutatja be, hogy mi fog történni a left_join()-al.
Példa a dplyr left_join()
left_join(df_primary, df_secondary, by ='ID')
output:
## # 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()
A right_join() függvény pontosan úgy működik, mint a left_join(). Az egyetlen különbség az elvetett sor. A cél adatkeretben elérhető E érték létezik az új táblában, és az y oszlop NA értéket veszi fel.
Példa a dplyr right_join()
right_join(df_primary, df_secondary, by = 'ID')
output:
## # 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()
Ha 100%-ig biztosak vagyunk abban, hogy a két adatkészlet nem egyezik, mérlegelhetjük a visszatérést csak ben létező sorok mindkét adatkészlet. Ez akkor lehetséges, ha tiszta adatkészletre van szükségünk, vagy ha nem akarjuk a hiányzó értékeket az átlaggal vagy mediánnal imputálni.
Az inner_join() segít. Ez a függvény kizárja a páratlan sorokat.
Példa a dplyr inner_join()
inner_join(df_primary, df_secondary, by ='ID')
output:
## # 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()
Végül a full_join() függvény megtartja az összes megfigyelést, és a hiányzó értékeket NA-val helyettesíti.
Példa a dplyr full_join()
full_join(df_primary, df_secondary, by = 'ID')
output:
## # 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
Több kulcspár
Végül, de nem utolsósorban több kulcs is lehet az adatkészletünkben. Tekintsük a következő adatkészletet, ahol évszámaink vannak, vagy az ügyfél által vásárolt termékek listája.
Ha megpróbáljuk összevonni mindkét táblát, R hibát dob. A helyzet orvoslására két kulcspár változót adhatunk át. Azaz az azonosító és az év, amely mindkét adatkészletben megjelenik. A következő kóddal egyesíthetjük a 1. és a 2. táblát
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'))
output:
## # 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
Adattisztító funkciók az R-ben
A következő négy fontos funkció az adatok rendezéséhez (tisztításához):
| Funkció | Objektív | érvek |
|---|---|---|
| gyűjteni () | Alakítsa át az adatokat szélesről hosszúra | (adat, kulcs, érték, na.rm = HAMIS) |
| terjedés() | Alakítsa át az adatokat hosszúról szélesre | (adat, kulcs, érték) |
| különálló() | Oszd ketté az egyik változót | (data, col, into, sep= "", eltávolítás = IGAZ) |
| Mértékegység() | Egyesítsen két változót egybe | (data, col, conc ,sep= "", eltávolítás = IGAZ) |
A tidyr könyvtárat használjuk. Ez a könyvtár a könyvtár gyűjteményéhez tartozik az adatok manipulálására, tisztítására és megjelenítésére. Ha az R-t az anacondával telepítjük, akkor a könyvtár már telepítve van. A könyvtárat itt találjuk, https://anaconda.org/r/r-tidyr.
Ha még nincs telepítve, írja be a következő parancsot a tidyr telepítéséhez:
install tidyr : install.packages("tidyr")
gyűjteni ()
A collection() függvény célja az adatok szélesről hosszúra átalakítása.
Szintaxis
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élda
Az alábbiakban a szélesre hosszúra átalakítás koncepcióját láthatjuk. Egy növekedés nevű oszlopot szeretnénk létrehozni, amelyet a negyedéves változók sorai töltenek ki.
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
output:
## 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
output:
## 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
A collect() függvényben két új változót hozunk létre a negyedévben és a növekedésben, mivel az eredeti adatkészletünkben egy csoportváltozó van: az ország és a kulcs-érték párok.
terjedés()
A spread() függvény az összegyűjtés ellenkezőjét teszi.
Szintaxis
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élda
A spread() segítségével a rendezettebb adathalmazt újra rendetlenné alakíthatjuk
# Reshape the data messy_1 <- tidier %>% spread(quarter, growth) messy_1
output:
## 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
különálló()
A separat() függvény egy oszlopot kettéoszt egy elválasztó szerint. Ez a funkció bizonyos esetekben hasznos, amikor a változó dátum. Elemzésünk megkövetelheti, hogy a hónapra és az évre összpontosítsunk, és az oszlopot két új változóra szeretnénk szétválasztani.
Szintaxis
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élda
A rendezettebb adatkészletben a negyedévet szétválaszthatjuk az évtől a separat() függvény alkalmazásával.
separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)
output:
## 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
egyesül()
Az unite() függvény két oszlopot fűz egybe.
Szintaxis
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élda
A fenti példában a negyedévet elkülönítettük az évtől. Mi van, ha egyesíteni akarjuk őket. A következő kódot használjuk:
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
output:
## 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
Összegzésként
- Az adatok elemzése három részre osztható: Kivonás, Átalakítás és Vizualizálás.
- Az R-nek van egy dplyr nevű könyvtára, amely segít az adatátalakításban. A dplyr könyvtár alapvetően négy függvényből áll az adatok kezeléséhez és öt igéből az adatok tisztítására.
- A dplyr szép és kényelmes módot biztosít az adatkészletek kombinálására. A dplyr funkcióval való összekapcsolás változókat ad hozzá az eredeti adatkészlet jobb oldalán.
- A dplyr szépsége az, hogy négyféle illesztést kezel, hasonlóan SQL:
- left_join() – Két adatkészlet egyesítése és az eredettáblázat összes megfigyelésének megtartása.
- right_join() – Két adatkészlet egyesítéséhez és a céltáblázat összes megfigyelésének megtartásához.
- belső összekapcsolás() – Két adatkészlet egyesítéséhez és az összes páratlan sor kizárásához.
- full_join() – Két adatkészlet egyesítése és az összes megfigyelés megtartása.
- A tidyr Library használatával az alábbi függvényekkel alakíthat át egy adatkészletet:
- gyűjteni (): Átalakítsa az adatokat szélesről hosszúra.
- terjedés(): Az adatok átalakítása hosszúról szélesre.
- különálló(): Egy változó kettéosztása.
- Mértékegység(): két változó egyesítése.







