Dplyr õpetus: ühendage ja ühendage andmed R-is koos näidetega
Sissejuhatus andmeanalüüsi
Andmete analüüsi võib jagada kolme ossa:
- Kaevandamine: Esiteks peame koguma andmeid paljudest allikatest ja ühendama need.
- Muutma: see samm hõlmab andmete töötlemist. Kui oleme kõik andmeallikad koondanud, saame hakata andmeid puhastama.
- Visualiseerima: Viimane samm on meie andmete visualiseerimine, et kontrollida eeskirjade eiramist.

Üks olulisemaid väljakutseid, millega andmeteadlased silmitsi seisavad, on andmetega manipuleerimine. Andmed pole kunagi soovitud vormingus saadaval. Andmeteadlased peavad kulutama vähemalt poole oma ajast andmete puhastamisele ja nendega manipuleerimisele. See on töö üks kriitilisemaid ülesandeid. Kui andmete töötlemise protsess ei ole täielik, täpne ja range, ei tööta mudel õigesti.
R Dplyr
R-l on andmete teisendamisel abiks teek nimega dplyr. Teek dplyr on põhimõtteliselt loodud nelja funktsiooniga andmetega manipuleerimiseks ja viie verbi ümber andmete puhastamiseks. Pärast seda saame andmete analüüsimiseks ja visualiseerimiseks kasutada ggploti teeki.
Õpime, kuidas kasutada dplyr teeki a manipuleerimiseks Andmeraam.
Ühendage andmed R Dplyriga
dplyr pakub kena ja mugava viisi andmehulkade kombineerimiseks. Meil võib olla palju sisendandmete allikaid ja mingil hetkel peame need kombineerima. Ühendus dplyr-ga lisab muutujad algsest andmekogumist paremale.
Dplyr liitub
Järgnevalt on toodud neli olulist liitumistüüpi, mida dplyr-is kasutatakse kahe andmestiku liitmiseks.
funktsioon | Eesmärk | Argumendid | Mitu klahvi |
---|---|---|---|
left_join() | Ühendage kaks andmekogumit. Säilita kõik vaatlused päritolutabelist | andmed, päritolu, sihtkoht, = "ID" | päritolu, sihtkoht, = c(“ID”, “ID2”) |
right_join() | Ühendage kaks andmekogumit. Hoidke kõik vaatlused sihttabelist alles | andmed, päritolu, sihtkoht, = "ID" | päritolu, sihtkoht, = c(“ID”, “ID2”) |
inner_join() | Ühendage kaks andmekogumit. Välistab kõik sobimatud read | andmed, päritolu, sihtkoht, = "ID" | päritolu, sihtkoht, = c(“ID”, “ID2”) |
full_join() | Ühendage kaks andmekogumit. Säilitab kõik tähelepanekud | andmed, päritolu, sihtkoht, = "ID" | päritolu, sihtkoht, = c(“ID”, “ID2”) |
Uurime kõiki liitetüüpe lihtsa näite abil.
Esiteks koostame kaks andmekogumit. Tabel 1 sisaldab kahte muutujat, ID ja y, samas kui tabelis 2 on ID ja z. Igas olukorras peab meil olema a võtmepaar muutuv. Meie puhul on ID meie võti muutuv. Funktsioon otsib mõlemas tabelis identseid väärtusi ja seob tagastatavad väärtused tabelist 1 paremale.
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()
Kõige tavalisem viis kahe andmestiku liitmiseks on funktsiooni left_join() kasutamine. Allolevalt pildilt näeme, et võtmepaar sobib ideaalselt mõlema andmestiku ridadega A, B, C ja D. E ja F jäävad aga üle. Kuidas me neid kahte tähelepanekut käsitleme? Funktsiooni left_join() abil säilitame kõik muutujad algses tabelis ja ei võta arvesse muutujaid, millel pole sihttabelis võtmepaari. Meie näites ei ole muutujat E tabelis 1 olemas. Seetõttu jäetakse rida välja. Muutuja F pärineb lähtetabelist; seda hoitakse alles pärast left_join() ja tagastab NA veerus z. Alloleval joonisel on näha, mis juhtub parameetriga left_join().
Näide dplyr left_join()
left_join(df_primary, df_secondary, by ='ID')
Väljund:
## # 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()
Funktsioon right_join() töötab täpselt nagu left_join(). Ainus erinevus on see, et rida on maha jäetud. Sihtandmeraamis saadaval olev väärtus E on uues tabelis olemas ja võtab veeru y väärtuse NA.
Näide dplyr right_join()
right_join(df_primary, df_secondary, by = 'ID')
Väljund:
## # 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()
Kui oleme 100% kindlad, et need kaks andmekogumit ei ühti, võime kaaluda naasmist ainult olemasolevad read mõlemad andmestik. See on võimalik, kui vajame puhast andmestikku või kui me ei soovi puuduvaid väärtusi omistada keskmise või mediaaniga.
Inner_join() tuleb appi. See funktsioon välistab sobimatud read.
dplyr inner_join() näide
inner_join(df_primary, df_secondary, by ='ID')
Väljund:
## # 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()
Lõpuks säilitab funktsioon full_join() kõik vaatlused ja asendab puuduvad väärtused NA-ga.
Näide dplyr full_join()
full_join(df_primary, df_secondary, by = 'ID')
Väljund:
## # 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
Mitu võtmepaari
Viimaseks, kuid mitte vähem tähtsaks, võib meie andmekogus olla mitu võtit. Mõelge järgmisele andmekogumile, kus meil on aastaarvud või kliendi ostetud toodete loend.
Kui proovime mõlemat tabelit liita, annab R vea. Olukorra parandamiseks saame edastada kaks võtmepaari muutujat. See tähendab ID ja aasta, mis kuvatakse mõlemas andmekogumis. Tabeli 1 ja tabeli 2 ühendamiseks saame kasutada järgmist koodi
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äljund:
## # 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
Andmete puhastamise funktsioonid R-is
Andmete korrastamiseks (puhastamiseks) on järgmised neli olulist funktsiooni:
funktsioon | Eesmärk | Argumendid |
---|---|---|
koguma () | Muutke andmed laiast pikaks | (andmed, võti, väärtus, na.rm = VÄÄR) |
levik() | Muutke andmed pikkadest laiadeks | (andmed, võti, väärtus) |
eralda () | Jagage üks muutuja kaheks | (andmed, veerg, into, sep= "", eemalda = TRUE) |
ühik() | Ühendage kaks muutujat üheks | (data, col, conc ,sep= "", eemalda = TRUE) |
Kasutame tidyr raamatukogu. See teek kuulub andmetega manipuleerimiseks, puhastamiseks ja visualiseerimiseks raamatukogu kogusse. Kui installime R koos anacondaga, on teek juba installitud. Raamatukogu leiame siit, https://anaconda.org/r/r-tidyr.
Kui pole veel installitud, sisestage tidyr installimiseks järgmine käsk:
install tidyr : install.packages("tidyr")
koguma ()
Funktsiooni kogumis() eesmärk on muuta andmed laiast pikaks.
Süntaks
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
Näide
Allpool saame visualiseerida laiast pikaks ümberkujundamise kontseptsiooni. Soovime luua ühe veeru nimega kasv, mis on täidetud kvartalimuutujate ridadega.
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äljund:
## 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äljund:
## 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
Funktsioonis collection() loome kaks uut muutujat kvartal ja kasv, kuna meie algsel andmekogumil on üks rühmamuutuja: riik ja võtme-väärtuste paarid.
levik()
Funktsioon spread() toimib kogumisele vastupidiselt.
Süntaks
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
Näide
Saame korrektsema andmestiku uuesti segaseks muuta funktsiooniga spread()
# Reshape the data messy_1 <- tidier %>% spread(quarter, growth) messy_1
Väljund:
## 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
eralda ()
Funktsioon separat () jagab veeru kaheks vastavalt eraldajale. See funktsioon on abiks mõnes olukorras, kus muutujaks on kuupäev. Meie analüüs võib nõuda keskendumist kuule ja aastale ning me tahame veeru eraldada kaheks uueks muutujaks.
Süntaks
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.
Näide
Saame kvartali jaotada aastast korrastatud andmekogumis, rakendades funktsiooni separation().
separate_tidier <-tidier %>% separate(quarter, c("Qrt", "year"), sep ="_") head(separate_tidier)
Väljund:
## 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
ühenda ()
Funktsioon unite() ühendab kaks veergu üheks.
Süntaks
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
Näide
Ülaltoodud näites eraldasime kvartali aastast. Mis siis, kui tahame need ühendada. Kasutame järgmist koodi:
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
Väljund:
## 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
kokkuvõte
- Andmete analüüs saab jagada kolmeks osaks: ekstraheerimine, teisendus ja visualiseerimine.
- R-l on andmete teisendamisel abiks teek nimega dplyr. Teek dplyr on põhimõtteliselt loodud nelja funktsiooniga andmetega manipuleerimiseks ja viie verbi ümber andmete puhastamiseks.
- dplyr pakub kena ja mugava viisi andmehulkade kombineerimiseks. Ühendus dplyr-ga lisab muutujad algsest andmekogumist paremale.
- Dplyri ilu seisneb selles, et see käsitleb nelja tüüpi ühendusi, mis on sarnased SQL:
- left_join() – Kahe andmekogumi ühendamiseks ja kõikide vaatluste säilitamiseks lähtetabelist.
- right_join() – Kahe andmestiku liitmiseks ja sihttabelist kõigi vaatluste säilitamiseks.
- inner_join() – Kahe andmestiku liitmiseks ja kõigi sobimatute ridade välistamiseks.
- full_join() – Kahe andmekogumi ühendamiseks ja kõigi vaatluste säilitamiseks.
- Tidyr Library abil saate andmestiku teisendada järgmiste funktsioonide abil.
- koguma (): teisendage andmed laiast pikaks.
- levik(): teisendage andmed pikkadest laiadeks.
- eralda (): jagage üks muutuja kaheks.
- ühik(): ühendage kaks muutujat üheks.