Dplyr-opetusohjelma: Yhdistä ja yhdistä tiedot R:ssä esimerkkien avulla

Tietojen analysoinnin esittely

Tietojen analysointi voidaan jakaa kolmeen osaan:

  • Poisto: Ensin meidän on kerättävä tiedot useista lähteistä ja yhdistettävä ne.
  • Muuttaa: Tämä vaihe sisältää tietojen käsittelyn. Kun olemme yhdistäneet kaikki tietolähteet, voimme aloittaa tietojen puhdistamisen.
  • havainnollistaa: Viimeinen askel on visualisoida tietomme epäsäännöllisyyden tarkistamiseksi.
Tietojen analysointiprosessi
Tietojen analysointiprosessi

Yksi datatieteilijöiden merkittävimmistä haasteista on tietojen manipulointi. Tietoja ei ole koskaan saatavilla halutussa muodossa. Tietojen tutkijoiden on käytettävä vähintään puolet ajastaan ​​tietojen puhdistamiseen ja käsittelyyn. Se on yksi työn tärkeimmistä tehtävistä. Jos tietojen käsittelyprosessi ei ole täydellinen, tarkka ja tiukka, malli ei toimi oikein.

R Dplyr

R:llä on dplyr-niminen kirjasto, joka auttaa tietojen muuntamisessa. Dplyr-kirjasto on pohjimmiltaan luotu neljän funktion ympärille tietojen käsittelemiseksi ja viiden verbin ympärille tietojen puhdistamiseen. Sen jälkeen voimme käyttää ggplot-kirjastoa tietojen analysointiin ja visualisointiin.

Opimme käyttämään dplyr-kirjastoa a Datakehys.

Yhdistä tiedot R Dplyriin

dplyr tarjoaa mukavan ja kätevän tavan yhdistää tietojoukkoja. Meillä voi olla monia syöttötietolähteitä, ja jossain vaiheessa meidän on yhdistettävä ne. Liittäminen dplyr:n kanssa lisää muuttujia alkuperäisen tietojoukon oikealle puolelle.

Dplyr liittyy

Seuraavassa on neljä tärkeää liitostyyppiä, joita käytetään dplyrissä kahden tietojoukon yhdistämiseen:

Toiminto Tavoite argumentit Useita näppäimiä
left_join() Yhdistä kaksi tietojoukkoa. Säilytä kaikki havainnot alkuperätaulukosta tiedot, alkuperä, kohde, = "ID" alkuperä, kohde, = c("ID", "ID2")
right_join() Yhdistä kaksi tietojoukkoa. Säilytä kaikki havainnot kohdetaulukosta tiedot, alkuperä, kohde, = "ID" alkuperä, kohde, = c("ID", "ID2")
inner_join() Yhdistä kaksi tietojoukkoa. Sulkee pois kaikki täsmäämättömät rivit tiedot, alkuperä, kohde, = "ID" alkuperä, kohde, = c("ID", "ID2")
full_join() Yhdistä kaksi tietojoukkoa. Säilyttää kaikki havainnot tiedot, alkuperä, kohde, = "ID" alkuperä, kohde, = c("ID", "ID2")

Tutkimme kaikkia liitostyyppejä helpon esimerkin avulla.

Ensinnäkin rakennamme kaksi tietojoukkoa. Taulukko 1 sisältää kaksi muuttujaa, ID ja y, kun taas taulukko 2 sisältää ID ja z. Jokaisessa tilanteessa meillä on oltava a avainpari muuttuja. Meidän tapauksessamme henkilöllisyystodistus on meidän avain muuttuja. Funktio etsii identtisiä arvoja molemmista taulukoista ja sitoo palautettavat arvot taulukon 1 oikealle puolelle.

Yhdistä tiedot R Dplyriin

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

Yleisin tapa yhdistää kaksi tietojoukkoa on käyttää left_join()-funktiota. Näemme alla olevasta kuvasta, että avainpari vastaa täydellisesti molempien tietojoukon rivejä A, B, C ja D. E ja F jäävät kuitenkin yli. Miten käsittelemme näitä kahta havaintoa? Left_join() -funktiolla säilytämme kaikki muuttujat alkuperäisessä taulukossa emmekä ota huomioon muuttujia, joilla ei ole avainparia kohdetaulukossa. Esimerkissämme muuttujaa E ei ole taulukossa 1. Siksi rivi hylätään. Muuttuja F tulee alkuperätaulukosta; se säilytetään left_join() ja return NA jälkeen sarakkeessa z. Alla oleva kuva toistaa, mitä tapahtuu left_join().

Esimerkki komennosta dplyr left_join()

Esimerkki komennosta dplyr left_join()

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

lähtö:

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

Right_join()-funktio toimii täsmälleen kuten left_join(). Ainoa ero on rivi pudonnut. Kohdedatakehyksessä käytettävissä oleva arvo E on uudessa taulukossa ja saa arvon NA sarakkeelle y.

Esimerkki komennosta dplyr right_join()

Esimerkki komennosta dplyr right_join()

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

lähtö:

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

Kun olemme 100 % varmoja, että nämä kaksi tietojoukkoa eivät täsmää, voimme harkita palauttamista vain olemassa olevia rivejä sekä tietojoukko. Tämä on mahdollista, kun tarvitsemme puhtaan tietojoukon tai kun emme halua imputoida puuttuvia arvoja keskiarvolla tai mediaanilla.

Inner_join() tulee avuksi. Tämä toiminto sulkee pois täsmäämättömät rivit.

Esimerkki komennosta dplyr inner_join()

Esimerkki komennosta dplyr inner_join()

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

lähtö:

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

Lopuksi full_join()-funktio säilyttää kaikki havainnot ja korvaa puuttuvat arvot NA:lla.

Esimerkki komennosta dplyr full_join()

Esimerkki komennosta dplyr full_join()

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

lähtö:

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

Useita avainpareja

Viimeisenä mutta ei vähäisimpänä, meillä voi olla useita avaimia tietojoukossamme. Harkitse seuraavaa tietojoukkoa, jossa meillä on vuosia tai luettelo asiakkaan ostamista tuotteista.

Useita avainpareja R:ssä

Jos yritämme yhdistää molemmat taulukot, R antaa virheen. Tilanteen korjaamiseksi voimme välittää kaksi avainparimuuttujaa. Eli tunnus ja vuosi, jotka näkyvät molemmissa tietojoukoissa. Voimme käyttää seuraavaa koodia taulukon 1 ja taulukon 2 yhdistämiseen

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

lähtö:

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

Tietojen puhdistustoiminnot R:ssä

Seuraavassa on neljä tärkeää toimintoa tietojen siivoamiseksi (puhdistamiseksi):

Toiminto Tavoite argumentit
kerätä() Muunna tiedot laajasta pitkiksi (data, avain, arvo, na.rm = EPÄTOSI)
levitän() Muunna tiedot pitkästä leveäksi (data, avain, arvo)
erillinen() Jaa yksi muuttuja kahdeksi (data, col, into, sep= "", poista = TOSI)
yksikkö() Yhdistä kaksi muuttujaa yhdeksi (data, col, conc ,sep= "", poista = TOSI)

Käytämme tidyr-kirjastoa. Tämä kirjasto kuuluu kirjaston kokoelmaan tietojen käsittelyä, puhdistamista ja visualisointia varten. Jos asennamme R:n anacondan kanssa, kirjasto on jo asennettu. Löydämme kirjaston täältä, https://anaconda.org/r/r-tidyr.

Jos et ole jo asennettu, anna seuraava komento asentaaksesi tidyr:

install tidyr : install.packages("tidyr")

kerätä()

Kokoa()-funktion tavoitteena on muuntaa tiedot laajasta pitkiksi.

Syntaksi

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

esimerkki

Alla voimme visualisoida käsitteen leveästä pitkäksi. Haluamme luoda yhden sarakkeen nimeltä kasvu, joka täytetään vuosineljänneksen muuttujien riveillä.

Esimerkki collection()-funktiosta R:ssä

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

lähtö:

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

lähtö:

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

Kokoa()-funktiossa luomme kaksi uutta muuttujaa neljännes ja kasvu, koska alkuperäisessä tietojoukossamme on yksi ryhmämuuttuja: eli maa ja avainarvoparit.

levitän()

spread()-funktio tekee päinvastoin kuin kerää.

Syntaksi

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

esimerkki

Voimme muokata siistimmän tietojoukon takaisin sotkuiseksi spread()

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

lähtö:

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

erillinen()

separator()-funktio jakaa sarakkeen kahteen erottimen mukaan. Tämä toiminto on hyödyllinen joissakin tilanteissa, joissa muuttuja on päivämäärä. Analyysimme voi vaatia keskittymistä kuukauteen ja vuoteen, ja haluamme erottaa sarakkeen kahdeksi uudeksi muuttujaksi.

Syntaksi

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.

esimerkki

Voimme jakaa vuosineljänneksen vuodesta siistimmässä tietojoukossa käyttämällä separat()-funktiota.

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

lähtö:

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

yhdistää()

Unite()-funktio yhdistää kaksi saraketta yhdeksi.

Syntaksi

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

esimerkki

Yllä olevassa esimerkissä erotimme vuosineljänneksen vuodesta. Entä jos haluamme yhdistää ne. Käytämme seuraavaa koodia:

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

lähtö:

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

Yhteenveto

  • Tietojen analysointi voidaan jakaa kolmeen osaan: Poiminta, Muunna ja Visualisoi.
  • R:llä on dplyr-niminen kirjasto, joka auttaa tietojen muuntamisessa. Dplyr-kirjasto on pohjimmiltaan luotu neljän funktion ympärille tietojen käsittelemiseksi ja viiden verbin ympärille tietojen puhdistamiseen.
  • dplyr tarjoaa mukavan ja kätevän tavan yhdistää tietojoukkoja. Liittäminen dplyr:n kanssa lisää muuttujia alkuperäisen tietojoukon oikealle puolelle.
  • Dplyr:n kauneus on, että se käsittelee neljää samanlaista liitostyyppiä SQL:
    • left_join() – Yhdistää kaksi tietojoukkoa ja säilyttää kaikki havainnot alkuperätaulukosta.
    • right_join() – Yhdistää kaksi tietojoukkoa ja säilyttää kaikki havainnot kohdetaulukosta.
    • inner_join() – Yhdistä kaksi tietojoukkoa ja sulje pois kaikki täsmäämättömät rivit.
    • full_join() – Yhdistää kaksi tietojoukkoa ja säilyttää kaikki havainnot.
  • Tidyr Libraryn avulla voit muuntaa tietojoukon seuraavilla toiminnoilla:
    • kerätä(): Muunna tiedot laajasta pitkiksi.
    • levitän(): Muunna tiedot pitkästä leveäksi.
    • erillinen(): Jaa yksi muuttuja kahdeksi.
    • yksikkö(): Yhdistä kaksi muuttujaa yhdeksi.