Dplyr Vodič: Spajanje i spajanje podataka u R s primjerima

Uvod u analizu podataka

Analiza podataka može se podijeliti u tri dijela:

  • Vađenje: Prvo, moramo prikupiti podatke iz mnogih izvora i kombinirati ih.
  • Transformirati: Ovaj korak uključuje manipulaciju podacima. Nakon što smo konsolidirali sve izvore podataka, možemo početi čistiti podatke.
  • Vizualizirajte: Zadnji korak je vizualizacija naših podataka kako bismo provjerili nepravilnosti.
Proces analize podataka
Proces analize podataka

Jedan od najznačajnijih izazova s ​​kojima se suočavaju podatkovni znanstvenici je manipulacija podacima. Podaci nikad nisu dostupni u željenom formatu. Znanstvenici koji se bave podacima trebaju provesti barem polovicu svog vremena čisteći i manipulirajući podacima. To je jedan od najkritičnijih zadataka u poslu. Ako proces manipulacije podacima nije potpun, precizan i rigorozan, model neće raditi ispravno.

R Dplyr

R ima biblioteku pod nazivom dplyr koja pomaže u transformaciji podataka. Biblioteka dplyr temelji se na četiri funkcije za manipuliranje podacima i pet glagola za čišćenje podataka. Nakon toga, možemo koristiti biblioteku ggplot za analizu i vizualizaciju podataka.

Naučit ćemo kako koristiti biblioteku dplyr za manipuliranje a Okvir podataka.

Spoji podatke s R Dplyr

dplyr pruža lijep i praktičan način kombiniranja skupova podataka. Možemo imati mnogo izvora ulaznih podataka iu nekom trenutku ćemo ih morati kombinirati. Spajanje s dplyr dodaje varijable s desne strane izvornog skupa podataka.

Dplyr se pridružuje

Slijede četiri važne vrste spojeva koji se koriste u dplyr za spajanje dva skupa podataka:

funkcija Cilj argumenti Više tipki
lijevo_pridruživanje() Spoji dva skupa podataka. Sačuvajte sva opažanja iz matične tablice podaci, porijeklo, odredište, prema = “ID” polazište, odredište, prema = c(“ID”, “ID2”)
desno_pridruživanje() Spoji dva skupa podataka. Sačuvajte sva zapažanja iz odredišne ​​tablice podaci, porijeklo, odredište, prema = “ID” polazište, odredište, prema = c(“ID”, “ID2”)
unutarnje_pridruživanje() Spoji dva skupa podataka. Isključuje sve nepodudarne retke podaci, porijeklo, odredište, prema = “ID” polazište, odredište, prema = c(“ID”, “ID2”)
full_join() Spoji dva skupa podataka. Čuva sva zapažanja podaci, porijeklo, odredište, prema = “ID” polazište, odredište, prema = c(“ID”, “ID2”)

Proučit ćemo sve vrste spojeva na jednostavnom primjeru.

Prije svega, gradimo dva skupa podataka. Tablica 1 sadrži dvije varijable, ID i y, dok tablica 2 okuplja ID i z. U svakoj situaciji moramo imati par ključeva varijabla. U našem slučaju ID je naš ključ varijabla. Funkcija će tražiti identične vrijednosti u obje tablice i vezati povratne vrijednosti s desne strane tablice 1.

Spoji podatke s R Dplyr

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 lijevo_pridruživanje()

Najčešći način za spajanje dva skupa podataka je korištenje funkcije left_join(). Na slici ispod možemo vidjeti da se par ključeva savršeno podudara s redovima A, B, C i D iz oba skupa podataka. Međutim, E i F su ostali. Kako se odnosimo prema ova dva opažanja? Uz left_join(), zadržat ćemo sve varijable u izvornoj tablici i nećemo uzeti u obzir varijable koje nemaju upareni ključ u odredišnoj tablici. U našem primjeru, varijabla E ne postoji u tablici 1. Stoga će redak biti ispušten. Varijabla F dolazi iz izvorne tablice; zadržat će se nakon left_join() i vratiti NA u stupcu z. Slika ispod prikazuje što će se dogoditi s left_join().

Primjer dplyr left_join()

Primjer dplyr left_join()

left_join(df_primary, df_secondary, by ='ID')

Izlaz:

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

Funkcija right_join() radi točno kao left_join(). Jedina razlika je ispušten red. Vrijednost E, dostupna u odredišnom okviru podataka, postoji u novoj tablici i uzima vrijednost NA za stupac y.

Primjer dplyr right_join()

Primjer dplyr right_join()

right_join(df_primary, df_secondary, by = 'ID')

Izlaz:

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

Kada smo 100% sigurni da se dva skupa podataka neće podudarati, možemo razmisliti o povratku samo redovi koji postoje u oboje skup podataka. To je moguće kada trebamo čist skup podataka ili kada ne želimo imputirati nedostajuće vrijednosti sa srednjom ili medijanom.

Inner_join() dolazi u pomoć. Ova funkcija isključuje retke koji se ne podudaraju.

Primjer dplyr inner_join()

Primjer dplyr inner_join()

inner_join(df_primary, df_secondary, by ='ID')

Izlaz:

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

Konačno, funkcija full_join() čuva sva opažanja i zamjenjuje nedostajuće vrijednosti s NA.

Primjer dplyr full_join()

Primjer dplyr full_join()

full_join(df_primary, df_secondary, by = 'ID')

Izlaz:

## # 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

Više parova ključeva

Posljednje, ali ne manje važno, možemo imati više ključeva u našem skupu podataka. Razmotrite sljedeći skup podataka gdje imamo godine ili popis proizvoda koje je kupac kupio.

Više parova ključeva u R

Ako pokušamo spojiti obje tablice, R izbacuje pogrešku. Kako bismo popravili situaciju, možemo proslijediti dvije varijable para ključeva. To jest, ID i godina koji se pojavljuju u oba skupa podataka. Možemo koristiti sljedeći kod za spajanje tablice1 i tablice 2

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

Izlaz:

## # 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

Funkcije čišćenja podataka u R

Slijede četiri važne funkcije za pospremanje (čišćenje) podataka:

funkcija Cilj argumenti
skupiti () Pretvorite podatke iz širokih u dugačke (podaci, ključ, vrijednost, na.rm = FALSE)
širenje() Pretvorite podatke iz dugih u široke (podatak, ključ, vrijednost)
odvojeno() Podijelite jednu varijablu u dvije (data, col, into, sep= “”, remove = TRUE)
jedinica() Spojite dvije varijable u jednu (data, col, conc, sep= “”, remove = TRUE)

Koristimo urednu knjižnicu. Ova knjižnica pripada zbirci knjižnice za manipuliranje, čišćenje i vizualizaciju podataka. Ako instaliramo R s anacondom, biblioteka je već instalirana. Knjižnicu možemo pronaći ovdje, https://anaconda.org/r/r-tidyr.

Ako već nije instaliran, unesite sljedeću naredbu da instalirate tidyr:

install tidyr : install.packages("tidyr")

skupiti ()

Ciljevi funkcije gather() su transformirati podatke iz širokih u dugačke.

Sintaksa

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

Primjer

U nastavku možemo vizualizirati koncept preoblikovanja širokog u dugo. Želimo stvoriti jedan stupac pod nazivom rast, ispunjen redovima varijabli četvrtine.

Primjer funkcije gather() u R

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

Izlaz:

##   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

Izlaz:

##    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

U funkciji gather() stvaramo dvije nove varijable kvartal i rast jer naš izvorni skup podataka ima jednu grupnu varijablu: tj. zemlju i parove ključ-vrijednost.

širenje()

Funkcija spread() radi suprotno od skupljanja.

Sintaksa

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

Primjer

Možemo preoblikovati uredniji skup podataka natrag u neuredan pomoću spread()

# Reshape the data
messy_1 <- tidier %>%
  spread(quarter, growth) 
messy_1

Izlaz:

##   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

odvojeno()

Funkcija separate() dijeli stupac na dva prema separatoru. Ova je funkcija korisna u nekim situacijama kada je varijabla datum. Naša analiza može zahtijevati fokusiranje na mjesec i godinu i želimo razdvojiti stupac u dvije nove varijable.

Sintaksa

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.

Primjer

Možemo razdvojiti tromjesečje od godine u urednijem skupu podataka primjenom funkcije separate().

separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)

Izlaz:

##   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

ujediniti()

Funkcija unite() povezuje dva stupca u jedan.

Sintaksa

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

Primjer

U gornjem primjeru odvojili smo kvartal od godine. Što ako ih želimo spojiti. Koristimo sljedeći kod:

unit_tidier <- separate_tidier %>%
  unite(Quarter, Qrt, year, sep ="_")
head(unit_tidier)

Izlaz:

##   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

rezime

  • Analiza podataka može se podijeliti u tri dijela: ekstrakcija, transformacija i vizualizacija.
  • R ima biblioteku pod nazivom dplyr koja pomaže u transformaciji podataka. Biblioteka dplyr temelji se na četiri funkcije za manipuliranje podacima i pet glagola za čišćenje podataka.
  • dplyr pruža lijep i praktičan način kombiniranja skupova podataka. Spajanje s dplyr dodaje varijable s desne strane izvornog skupa podataka.
  • Ljepota dplyr-a je u tome što obrađuje četiri vrste spojeva sličnih SQL:
    • lijevo_pridruživanje() – Za spajanje dva skupa podataka i zadržavanje svih opažanja iz izvorne tablice.
    • desno_pridruživanje() – Za spajanje dva skupa podataka i zadržavanje svih promatranja iz odredišne ​​tablice.
    • unutarnje_pridruživanje() – Za spajanje dva skupa podataka i isključivanje svih nepodudarnih redaka.
    • full_join() – Za spajanje dva skupa podataka i zadržavanje svih promatranja.
  • Koristeći knjižnicu tidyr, možete transformirati skup podataka pomoću sljedećih funkcija:
    • skupiti (): Pretvorite podatke iz širokih u dugačke.
    • širenje(): Pretvorite podatke iz dugih u široke.
    • odvojeno(): Podijelite jednu varijablu na dvije.
    • jedinica(): Jedinica dvije varijable u jednu.