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