Dplyr-Tutorial: Zusammenführen und Verbinden von Daten in R mit Beispielen

Einführung in die Datenanalyse

Die Datenanalyse kann in drei Teile unterteilt werden:

  • Extrahierung: Zuerst müssen wir die Daten aus vielen Quellen sammeln und kombinieren.
  • Transformieren: Dieser Schritt beinhaltet die Datenmanipulation. Sobald wir alle Datenquellen konsolidiert haben, können wir mit der Bereinigung der Daten beginnen.
  • Visualize: Der letzte Schritt besteht darin, unsere Daten zu visualisieren, um Unregelmäßigkeiten zu überprüfen.
Datenanalyseprozess
Datenanalyseprozess

Eine der größten Herausforderungen für Datenwissenschaftler ist die Datenmanipulation. Daten liegen nie im gewünschten Format vor. Datenwissenschaftler müssen mindestens die Hälfte ihrer Zeit damit verbringen, die Daten zu bereinigen und zu manipulieren. Das ist eine der kritischsten Aufgaben im Job. Wenn der Datenmanipulationsprozess nicht vollständig, präzise und rigoros ist, wird das Modell nicht ordnungsgemäß funktionieren.

R Dplyr

R verfügt über eine Bibliothek namens dplyr, die bei der Datentransformation hilft. Die dplyr-Bibliothek besteht im Wesentlichen aus vier Funktionen zum Bearbeiten der Daten und fünf Verben zum Bereinigen der Daten. Danach können wir die ggplot-Bibliothek verwenden, um die Daten zu analysieren und zu visualisieren.

Wir werden lernen, wie man mit der dplyr-Bibliothek a manipuliert Datenrahmen.

Daten mit R Dplyr zusammenführen

dplyr bietet eine schöne und bequeme Möglichkeit, Datensätze zu kombinieren. Möglicherweise haben wir viele Eingabedatenquellen und irgendwann müssen wir diese kombinieren. Ein Join mit dplyr fügt Variablen rechts vom Originaldatensatz hinzu.

Dplyr tritt bei

Im Folgenden sind vier wichtige Verknüpfungstypen aufgeführt, die in dplyr zum Zusammenführen zweier Datasets verwendet werden:

Funktion Ziel Argumente Mehrere Schlüssel
left_join() Zwei Datensätze zusammenführen. Behalten Sie alle Beobachtungen aus der Ursprungstabelle bei Daten, Herkunft, Ziel, von = „ID“ Herkunft, Ziel, by = c(„ID“, „ID2“)
right_join() Zwei Datensätze zusammenführen. Behalten Sie alle Beobachtungen aus der Zieltabelle Daten, Herkunft, Ziel, von = „ID“ Herkunft, Ziel, by = c(„ID“, „ID2“)
inner_join() Zwei Datensätze zusammenführen. Schließt alle nicht übereinstimmenden Zeilen aus Daten, Herkunft, Ziel, von = „ID“ Herkunft, Ziel, by = c(„ID“, „ID2“)
full_join() Zwei Datensätze zusammenführen. Behält alle Beobachtungen Daten, Herkunft, Ziel, von = „ID“ Herkunft, Ziel, by = c(„ID“, „ID2“)

Wir werden alle Join-Typen anhand eines einfachen Beispiels untersuchen.

Zunächst erstellen wir zwei Datensätze. Tabelle 1 enthält zwei Variablen, ID und y, während Tabelle 2 ID und z sammelt. In jeder Situation brauchen wir eine Schlüsselpaar Variable. In unserem Fall ist ID unser Haupt Variable. Die Funktion sucht in beiden Tabellen nach identischen Werten und bindet die zurückgegebenen Werte an die rechte Seite von Tabelle 1.

Daten mit R Dplyr zusammenführen

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

Die gebräuchlichste Methode zum Zusammenführen zweier Datensätze ist die Verwendung der Funktion left_join(). Aus dem Bild unten können wir ersehen, dass das Schlüsselpaar perfekt mit den Zeilen A, B, C und D beider Datensätze übereinstimmt. Allerdings bleiben E und F übrig. Wie gehen wir mit diesen beiden Beobachtungen um? Mit left_join() behalten wir alle Variablen in der Originaltabelle und berücksichtigen nicht die Variablen, die in der Zieltabelle kein Schlüsselpaar haben. In unserem Beispiel ist die Variable E in Tabelle 1 nicht vorhanden. Daher wird die Zeile gelöscht. Die Variable F stammt aus der Ursprungstabelle; Es wird nach left_join() beibehalten und NA in der Spalte z zurückgeben. Die folgende Abbildung zeigt, was mit einem left_join() passieren wird.

Beispiel für dplyr left_join()

Beispiel für dplyr left_join()

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

Ausgang:

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

Die Funktion right_join() funktioniert genau wie left_join(). Der einzige Unterschied besteht darin, dass die Zeile gelöscht wurde. Der im Zieldatenrahmen verfügbare Wert E ist in der neuen Tabelle vorhanden und nimmt für die Spalte y den Wert NA an.

Beispiel für dplyr right_join()

Beispiel für dplyr right_join()

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

Ausgang:

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

Wenn wir zu 100 % sicher sind, dass die beiden Datensätze nicht übereinstimmen, können wir über eine Rückkehr nachdenken einzige Zeilen vorhanden in beide Datensatz. Dies ist möglich, wenn wir einen sauberen Datensatz benötigen oder wenn wir fehlende Werte nicht mit dem Mittelwert oder Median unterstellen möchten.

Der inner_join() kommt zur Hilfe. Diese Funktion schließt die nicht übereinstimmenden Zeilen aus.

Beispiel für dplyr inner_join()

Beispiel für dplyr inner_join()

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

Ausgang:

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

Schließlich behält die Funktion full_join() alle Beobachtungen bei und ersetzt fehlende Werte durch NA.

Beispiel für dplyr full_join()

Beispiel für dplyr full_join()

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

Ausgang:

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

Mehrere Schlüsselpaare

Zu guter Letzt können wir mehrere Schlüssel in unserem Datensatz haben. Betrachten Sie den folgenden Datensatz, in dem wir Jahre oder eine Liste der vom Kunden gekauften Produkte haben.

Mehrere Schlüsselpaare in R

Wenn wir versuchen, beide Tabellen zusammenzuführen, gibt R einen Fehler aus. Um Abhilfe zu schaffen, können wir zwei Schlüsselpaarvariablen übergeben. Das heißt, ID und Jahr, die in beiden Datensätzen vorkommen. Wir können den folgenden Code verwenden, um Tabelle1 und Tabelle2 zusammenzuführen

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

Ausgang:

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

Datenbereinigungsfunktionen in R

Im Folgenden sind die vier wichtigen Funktionen zum Aufräumen (Bereinigen) der Daten aufgeführt:

Funktion Ziel Argumente
versammeln() Transformieren Sie die Daten von breit nach lang (Daten, Schlüssel, Wert, na.rm = FALSE)
verbreiten() Transformieren Sie die Daten von lang nach breit (Daten, Schlüssel, Wert)
separate() Teilen Sie eine Variable in zwei auf (Daten, Spalte, in, sep= „“, entfernen = TRUE)
Einheit() Vereinigen Sie zwei Variablen zu einer (Daten, Spalte, Konz, Sep = „“, Entfernen = TRUE)

Wir verwenden die Tidyr-Bibliothek. Diese Bibliothek gehört zur Sammlung der Bibliothek zum Bearbeiten, Bereinigen und Visualisieren der Daten. Wenn wir R mit Anaconda installieren, ist die Bibliothek bereits installiert. Die Bibliothek finden wir hier, https://anaconda.org/r/r-tidyr.

Falls es noch nicht installiert ist, geben Sie den folgenden Befehl ein, um tidyr zu installieren:

install tidyr : install.packages("tidyr")

versammeln()

Das Ziel der Funktion „gather()“ besteht darin, die Daten von „Wide“ in „Long“ umzuwandeln.

Syntax

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

Beispiel

Unten können wir uns das Konzept der Umformung von breit nach lang vorstellen. Wir möchten eine einzelne Spalte mit dem Namen „Wachstum“ erstellen, die mit den Zeilen der Quartalsvariablen gefüllt ist.

Beispiel für die Funktion „gather()“ 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

Ausgang:

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

Ausgang:

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

In der Funktion „gather()“ erstellen wir zwei neue Variablen „Quartal“ und „Wachstum“, da unser ursprünglicher Datensatz eine Gruppenvariable enthält: dh Land und die Schlüssel-Wert-Paare.

verbreiten()

Die Spread()-Funktion macht das Gegenteil von Gather.

Syntax

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

Beispiel

Mit spread() können wir den aufgeräumteren Datensatz wieder in einen chaotischen Zustand umwandeln.

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

Ausgang:

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

separate()

Die Funktion „separate()“ teilt eine Spalte entsprechend einem Trennzeichen in zwei Spalten. Diese Funktion ist in einigen Situationen hilfreich, in denen es sich bei der Variablen um ein Datum handelt. Bei unserer Analyse kann es erforderlich sein, sich auf Monat und Jahr zu konzentrieren, und wir möchten die Spalte in zwei neue Variablen aufteilen.

Syntax

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.

Beispiel

Wir können das Quartal vom Jahr im übersichtlicheren Datensatz trennen, indem wir die Funktion „separate()“ anwenden.

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

Ausgang:

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

Vereinen()

Die Funktion „unite()“ verkettet zwei Spalten zu einer.

Syntax

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

Beispiel

Im obigen Beispiel haben wir Quartal und Jahr getrennt. Was ist, wenn wir sie zusammenführen möchten? Wir verwenden den folgenden Code:

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

Ausgang:

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

Zusammenfassung

  • Datenanalyse kann in drei Teile unterteilt werden: Extrahieren, Transformieren und Visualisieren.
  • R verfügt über eine Bibliothek namens dplyr, die bei der Datentransformation hilft. Die dplyr-Bibliothek besteht im Wesentlichen aus vier Funktionen zum Bearbeiten der Daten und fünf Verben zum Bereinigen der Daten.
  • dplyr bietet eine schöne und bequeme Möglichkeit, Datensätze zu kombinieren. Ein Join mit dplyr fügt Variablen rechts vom Originaldatensatz hinzu.
  • Das Schöne an dplyr ist, dass es vier Arten von Verknüpfungen verarbeitet, ähnlich wie SQL:
    • left_join() – Um zwei Datensätze zusammenzuführen und alle Beobachtungen aus der Ursprungstabelle beizubehalten.
    • right_join() – Um zwei Datensätze zusammenzuführen und alle Beobachtungen aus der Zieltabelle beizubehalten.
    • inner_join() – Um zwei Datensätze zusammenzuführen und alle nicht übereinstimmenden Zeilen auszuschließen.
    • full_join() – Um zwei Datensätze zusammenzuführen und alle Beobachtungen beizubehalten.
  • Mit der tidyr-Bibliothek können Sie einen Datensatz mit den folgenden Funktionen transformieren:
    • versammeln(): Transformieren Sie die Daten von breit nach lang.
    • verbreiten(): Transformieren Sie die Daten von lang nach breit.
    • separate(): Teilen Sie eine Variable in zwei.
    • Einheit(): Zwei Variablen zu einer zusammenfassen.