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ร .

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







