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.
Adatelemzési folyamat
Adatelemzési folyamat

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.

Egyesítse az adatokat az R Dplyr-rel

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()

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()

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()

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()

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.

Több kulcspár R-ben

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.

Példa a collection() függvényre az R-ben

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.