Tutorial Dplyr: unisci e unisci dati in R con esempi

Introduzione all'analisi dei dati

Lโ€™analisi dei dati puรฒ essere divisa in tre parti:

  • Estrazione: Innanzitutto, dobbiamo raccogliere i dati da molte fonti e combinarli.
  • Trasformare: Questo passaggio prevede la manipolazione dei dati. Una volta consolidate tutte le fonti di dati, possiamo iniziare a pulire i dati.
  • Visualizzare: L'ultima mossa รจ visualizzare i nostri dati per verificare l'irregolaritร .
Processo di analisi dei dati
Processo di analisi dei dati

Una delle sfide piรน significative affrontate dai data scientist รจ la manipolazione dei dati. I dati non sono mai disponibili nel formato desiderato. I data scientist devono dedicare almeno la metร  del loro tempo alla pulizia e alla manipolazione dei dati. Questo รจ uno degli incarichi piรน critici del lavoro. Se il processo di manipolazione dei dati non รจ completo, preciso e rigoroso, il modello non funzionerร  correttamente.

R Dplir

R ha una libreria chiamata dplyr per aiutare nella trasformazione dei dati. La libreria dplyr รจ fondamentalmente creata attorno a quattro funzioni per manipolare i dati e cinque verbi per pulire i dati. Successivamente, possiamo utilizzare la libreria ggplot per analizzare e visualizzare i dati.

Impareremo come utilizzare la libreria dplyr per manipolare a Cornice dati.

Unisci i dati con R Dplyr

dplyr fornisce un modo piacevole e conveniente per combinare i set di dati. Potremmo avere molte fonti di dati di input e, a un certo punto, dobbiamo combinarle. Un join con dplyr aggiunge variabili a destra del set di dati originale.

Dplyr si unisce

Di seguito sono riportati quattro importanti tipi di join utilizzati in dplyr per unire due set di dati:

Funzione Obiettivo argomenti Chiavi multiple
left_join() Unisci due set di dati. Conserva tutte le osservazioni dalla tabella di origine dati, origine, destinazione, per = โ€œIDโ€ origine, destinazione, per = c(โ€œIDโ€, โ€œID2โ€)
right_join() Unisci due set di dati. Conserva tutte le osservazioni dalla tabella di destinazione dati, origine, destinazione, per = โ€œIDโ€ origine, destinazione, per = c(โ€œIDโ€, โ€œID2โ€)
inner_join() Unisci due set di dati. Esclude tutte le righe senza corrispondenza dati, origine, destinazione, per = โ€œIDโ€ origine, destinazione, per = c(โ€œIDโ€, โ€œID2โ€)
full_join() Unisci due set di dati. Mantiene tutte le osservazioni dati, origine, destinazione, per = โ€œIDโ€ origine, destinazione, per = c(โ€œIDโ€, โ€œID2โ€)

Studieremo tutti i tipi di join tramite un semplice esempio.

Prima di tutto, creiamo due set di dati. La Tabella 1 contiene due variabili, ID e y, mentre la Tabella 2 raccoglie ID e z. In ogni situazione, dobbiamo avere a coppia di chiavi variabile. Nel nostro caso, l'ID รจ our chiave variabile. La funzione cercherร  valori identici in entrambe le tabelle e legherร  i valori restituiti a destra della tabella 1.

Unisci i dati con 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 left_join()

Il modo piรน comune per unire due set di dati รจ utilizzare la funzione left_join(). Possiamo vedere dall'immagine qui sotto che la coppia di chiavi corrisponde perfettamente alle righe A, B, C e D di entrambi i set di dati. Tuttavia, E ed F rimangono. Come trattiamo queste due osservazioni? Con left_join(), manterremo tutte le variabili nella tabella originale e non considereremo le variabili che non hanno una coppia di chiavi nella tabella di destinazione. Nel nostro esempio, la variabile E non esiste nella tabella 1. Pertanto, la riga verrร  eliminata. La variabile F proviene dalla tabella di origine; verrร  mantenuto dopo left_join() e restituirร  NA nella colonna z. La figura seguente riproduce cosa accadrร  con un left_join().

Esempio di dplyr left_join()

Esempio di dplyr left_join()

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

Produzione:

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

La funzione right_join() funziona esattamente come left_join(). L'unica differenza รจ la riga eliminata. Il valore E, disponibile nel data frame di destinazione, esiste nella nuova tabella e assume il valore NA per la colonna y.

Esempio di dplyr right_join()

Esempio di dplyr right_join()

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

Produzione:

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

Quando siamo sicuri al 100% che i due set di dati non corrisponderanno, possiamo considerare di restituire esclusivamente righe esistenti in entrambi set di dati. Ciรฒ รจ possibile quando abbiamo bisogno di un set di dati pulito o quando non vogliamo imputare i valori mancanti con la media o la mediana.

inner_join() viene in aiuto. Questa funzione esclude le righe senza corrispondenza.

Esempio di dplyr inner_join()

Esempio di dplyr inner_join()

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

Produzione:

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

Infine, la funzione full_join() mantiene tutte le osservazioni e sostituisce i valori mancanti con NA.

Esempio di dplyr full_join()

Esempio di dplyr full_join()

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

Produzione:

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

Coppie di chiavi multiple

Ultimo ma non meno importante, possiamo avere piรน chiavi nel nostro dataset. Considerate il seguente dataset in cui abbiamo anni o un elenco di prodotti acquistati dal cliente.

Coppie di chiavi multiple in R

Se proviamo a unire entrambe le tabelle, R genera un errore. Per porre rimedio alla situazione, possiamo passare due variabili coppia-chiave. Ovvero, ID e anno che compaiono in entrambi i dataset. Possiamo usare il seguente codice per unire table1 e table 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'))

Produzione:

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

Funzioni di pulizia dei dati in R

Di seguito sono riportate le quattro funzioni importanti per riordinare (pulire) i dati:

Funzione Obiettivo argomenti
raccogliere() Trasforma i dati da larghi a lunghi (dati, chiave, valore, na.rm = FALSE)
diffusione() Trasforma i dati da lunghi a larghi (dati, chiave, valore)
separato() Dividere una variabile in due (data, col, into, sep= โ€œโ€, rimuovi = TRUE)
unitร () Unisci due variabili in una (dati, col, conc, sep= โ€œโ€, rimuovi = TRUE)

Usiamo la libreria tidyr. Questa libreria appartiene alla collezione della libreria per manipolare, pulire e visualizzare i dati. Se installiamo R con anaconda, la libreria รจ giร  installata. Possiamo trovare la biblioteca qui, https://anaconda.org/r/r-tidyr.

Se non รจ giร  installato, immettere il seguente comando per installare tidyr:

install tidyr : install.packages("tidyr")

raccogliere()

L'obiettivo della funzione raccogli() รจ trasformare i dati da ampi a lunghi.

Sintassi

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

Esempio

Di seguito, possiamo visualizzare il concetto di rimodellamento da largo a lungo. Vogliamo creare un'unica colonna denominata crescita, riempita dalle righe delle variabili del trimestre.

Esempio della funzione raccogli() in 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

Produzione:

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

Produzione:

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

Nella funzione raccogli() creiamo due nuove variabili trimestre e crescita perchรฉ il nostro set di dati originale ha una variabile di gruppo: ovvero paese e coppie chiave-valore.

diffusione()

La funzione spread() fa l'opposto di raccogliere.

Sintassi

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

Esempio

Possiamo rimodellare il set di dati piรน ordinato in modo disordinato con spread()

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

Produzione:

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

separato()

La funzione separate() divide una colonna in due secondo un separatore. Questa funzione รจ utile in alcune situazioni in cui la variabile รจ una data. La nostra analisi puรฒ richiedere di concentrarsi su mese e anno e vogliamo separare la colonna in due nuove variabili.

Sintassi

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.

Esempio

Possiamo dividere il trimestre dall'anno nel set di dati piรน ordinato applicando la funzione separate().

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

Produzione:

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

unire()

La funzione unite() concana due colonne in una.

Sintassi

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

Esempio

Nell'esempio sopra, abbiamo separato trimestre da anno. E se volessimo unirli? Utilizziamo il seguente codice:

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

Produzione:

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

Sintesi

  • L'analisi dei dati puรฒ essere diviso in tre parti: Estrazione, Trasformazione e Visualizzazione.
  • R ha una libreria chiamata dplyr per aiutare nella trasformazione dei dati. La libreria dplyr รจ fondamentalmente creata attorno a quattro funzioni per manipolare i dati e cinque verbi per pulire i dati.
  • dplyr fornisce un modo piacevole e conveniente per combinare i set di dati. Un join con dplyr aggiunge variabili a destra del set di dati originale.
  • La bellezza di dplyr รจ che gestisce quattro tipi di join simili a SQL:
    • left_join() โ€“ Per unire due set di dati e conservare tutte le osservazioni dalla tabella di origine.
    • right_join() โ€“ Per unire due set di dati e conservare tutte le osservazioni dalla tabella di destinazione.
    • inner_join() โ€“ Per unire due set di dati ed escludere tutte le righe senza corrispondenze.
    • full_join() โ€“ Per unire due set di dati e conservare tutte le osservazioni.
  • Utilizzando la libreria tidyr, รจ possibile trasformare un set di dati utilizzando le seguenti funzioni:
    • raccogliere(): trasforma i dati da larghi a lunghi.
    • diffusione(): trasforma i dati da lunghi a larghi.
    • separato(): divide una variabile in due.
    • unitร (): Unisci due variabili in una.

Riassumi questo post con: