Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Wenn Sie im Internet nach R oder Python suchen, finden Sie Millionen von Artikeln und kilometerlange Diskussionen zu dem Thema, welches für die Arbeit mit Daten besser, schneller und bequemer ist. Aber leider sind all diese Artikel und Streitigkeiten nicht besonders nützlich.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Der Zweck dieses Artikels besteht darin, die grundlegenden Datenverarbeitungstechniken in den gängigsten Paketen beider Sprachen zu vergleichen. Und helfen Sie den Lesern, etwas, das sie noch nicht wissen, schnell zu meistern. Für diejenigen, die in Python schreiben, erfahren Sie, wie Sie dasselbe in R tun können und umgekehrt.

Im Laufe des Artikels analysieren wir die Syntax der beliebtesten Pakete in R. Dies sind die in der Bibliothek enthaltenen Pakete tidyverseund auch das Paket data.table. Und vergleichen Sie ihre Syntax mit pandas, das beliebteste Datenanalysepaket in Python.

Wir werden Schritt für Schritt den gesamten Weg der Datenanalyse durchgehen, vom Laden bis zur Ausführung analytischer Fensterfunktionen mit Python und R.

Inhalt

Dieser Artikel kann als Spickzettel verwendet werden, wenn Sie vergessen haben, wie man einen Datenverarbeitungsvorgang in einem der betrachteten Pakete durchführt.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

  1. Hauptsyntaxunterschiede zwischen R und Python
    1.1 Auf Paketfunktionen zugreifen
    1.2 Abtretung
    1.3 Indizierung
    1.4 Methoden und OOP
    1.5 Pipelines
    1.6 Datenstrukturen
  2. Ein paar Worte zu den Paketen, die wir verwenden werden
    2.1 ordentlichversum
    2.2 Datentabelle
    2.3 Pandas
  3. Pakete installieren
  4. Daten werden geladen
  5. Datenrahmen erstellen
  6. Auswahl der benötigten Spalten
  7. Zeilen filtern
  8. Gruppierung und Aggregation
  9. Vertikale Vereinigung von Tabellen (UNION)
  10. Horizontale Verbindung von Tabellen (JOIN)
  11. Grundlegende Fensterfunktionen und berechnete Spalten
  12. Korrespondenztabelle zwischen Datenverarbeitungsmethoden in R und Python
  13. Abschluss
  14. Eine kurze Umfrage, welches Paket Sie nutzen

Wenn Sie sich für Datenanalyse interessieren, finden Sie möglicherweise meine Telegram mit и Youtube Kanäle. Der größte Teil des Inhalts ist der R-Sprache gewidmet.

Hauptsyntaxunterschiede zwischen R und Python

Um Ihnen den Wechsel von Python zu R oder umgekehrt zu erleichtern, nenne ich einige Hauptpunkte, auf die Sie achten müssen.

Auf Paketfunktionen zugreifen

Sobald ein Paket in R geladen ist, müssen Sie den Paketnamen nicht mehr angeben, um auf seine Funktionen zuzugreifen. In den meisten Fällen ist dies in R nicht üblich, aber akzeptabel. Sie müssen ein Paket überhaupt nicht importieren, wenn Sie eine seiner Funktionen in Ihrem Code benötigen, sondern rufen es einfach auf, indem Sie den Namen des Pakets und den Namen der Funktion angeben. Das Trennzeichen zwischen Paket- und Funktionsnamen in R ist ein Doppelpunkt. package_name::function_name().

In Python hingegen gilt es als klassisch, die Funktionen eines Pakets durch explizite Angabe seines Namens aufzurufen. Wenn ein Paket heruntergeladen wird, erhält es normalerweise einen verkürzten Namen, z. B. pandas in der Regel wird ein Pseudonym verwendet pd. Der Zugriff auf eine Paketfunktion erfolgt über einen Punkt package_name.function_name().

Abtretung

In R ist es üblich, einen Pfeil zu verwenden, um einem Objekt einen Wert zuzuweisen. obj_name <- valueObwohl ein einzelnes Gleichheitszeichen zulässig ist, wird das einzelne Gleichheitszeichen in R hauptsächlich zum Übergeben von Werten an Funktionsargumente verwendet.

In Python erfolgt die Zuweisung ausschließlich mit einem einzelnen Gleichheitszeichen obj_name = value.

Indizierung

Auch hier gibt es durchaus erhebliche Unterschiede. In R beginnt die Indizierung bei eins und umfasst alle angegebenen Elemente im resultierenden Bereich.

In Python beginnt die Indizierung bei Null und der ausgewählte Bereich umfasst nicht das letzte im Index angegebene Element. Also Design x[i:j] in Python wird das j-Element nicht enthalten.

Es gibt auch Unterschiede in der negativen Indizierung, in der R-Notation x[-1] gibt alle Elemente des Vektors außer dem letzten zurück. In Python gibt eine ähnliche Notation nur das letzte Element zurück.

Methoden und OOP

R implementiert OOP auf seine eigene Art und Weise, darüber habe ich im Artikel geschrieben „OOP in der R-Sprache (Teil 1): S3-Klassen“. Im Allgemeinen ist R eine funktionale Sprache und alles darin basiert auf Funktionen. Gehen Sie daher beispielsweise für Excel-Benutzer zu tydiverse es wird einfacher sein als pandas. Obwohl dies möglicherweise meine subjektive Meinung ist.

Kurz gesagt, Objekte in R haben keine Methoden (wenn wir über S3-Klassen sprechen, gibt es aber andere OOP-Implementierungen, die viel seltener sind). Es gibt lediglich verallgemeinerte Funktionen, die sie je nach Klasse des Objekts unterschiedlich verarbeiten.

Pipelines

Vielleicht ist das der Name dafür pandas Es wird nicht ganz richtig sein, aber ich werde versuchen, die Bedeutung zu erklären.

Um keine Zwischenberechnungen einzusparen und keine unnötigen Objekte in der Arbeitsumgebung zu erzeugen, kann man eine Art Pipeline nutzen. Diese. Übergeben Sie das Ergebnis einer Berechnung von einer Funktion an die nächste und speichern Sie keine Zwischenergebnisse.

Nehmen wir das folgende Codebeispiel, in dem wir Zwischenberechnungen in separaten Objekten speichern:

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

Wir haben drei Operationen nacheinander ausgeführt und das Ergebnis jeder Operation in einem separaten Objekt gespeichert. Aber tatsächlich brauchen wir diese Zwischenobjekte nicht.

Oder noch schlimmer, aber den Excel-Benutzern vertrauter.

obj  <- func3(func2(func1()))

In diesem Fall haben wir keine Zwischenberechnungsergebnisse gespeichert, aber das Lesen von Code mit verschachtelten Funktionen ist äußerst umständlich.

Wir werden uns verschiedene Ansätze zur Datenverarbeitung in R ansehen, die ähnliche Vorgänge auf unterschiedliche Weise ausführen.

Pipelines in der Bibliothek tidyverse vom Betreiber umgesetzt %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

So nehmen wir das Ergebnis der Arbeit func1() und übergeben Sie es als erstes Argument an func2(), dann übergeben wir das Ergebnis dieser Berechnung als erstes Argument func3(). Und am Ende schreiben wir alle durchgeführten Berechnungen in das Objekt obj <-.

All das wird durch dieses Meme besser als Worte veranschaulicht:
Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

В data.table Ketten werden auf ähnliche Weise verwendet.

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

In jeder der eckigen Klammern können Sie das Ergebnis der vorherigen Operation verwenden.

В pandas Solche Operationen werden durch einen Punkt getrennt.

obj = df.fun1().fun2().fun3()

Diese. Wir nehmen unseren Tisch ein df und wende ihre Methode an fun1(), dann wenden wir die Methode auf das erhaltene Ergebnis an fun2()nachher fun3(). Das resultierende Ergebnis wird in einem Objekt gespeichert obj .

Datenstrukturen

Datenstrukturen in R und Python sind ähnlich, haben jedoch unterschiedliche Namen.

Beschreibung
Name in R
Name in Python/Pandas

Tabellenstruktur
data.frame, data.table, tibble
Datenrahmen

Eindimensionale Werteliste
Vektor
Serien in Pandas oder Listen in reinem Python

Mehrstufige, nicht tabellarische Struktur
Aufführen
Wörterbuch (Diktat)

Im Folgenden werden wir uns einige weitere Funktionen und Unterschiede in der Syntax ansehen.

Ein paar Worte zu den Paketen, die wir verwenden werden

Zunächst erzähle ich Ihnen ein wenig über die Pakete, mit denen Sie in diesem Artikel vertraut werden.

ordentlichversum

Offizielle Website: Tidyverse.org
Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück
Bibliothek tidyverse geschrieben von Hedley Wickham, Senior Research Scientist bei RStudio. tidyverse besteht aus einer beeindruckenden Reihe von Paketen, die die Datenverarbeitung vereinfachen, von denen 5 in den Top 10 Downloads aus dem CRAN-Repository enthalten sind.

Der Kern der Bibliothek besteht aus folgenden Paketen: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Jedes dieser Pakete zielt auf die Lösung eines bestimmten Problems ab. Zum Beispiel dplyr zur Datenmanipulation erstellt, tidyr die Daten in eine saubere Form zu bringen, stringr vereinfacht die Arbeit mit Strings und ggplot2 ist eines der beliebtesten Datenvisualisierungstools.

Der Vorteil tidyverse ist die Einfachheit und leicht lesbare Syntax, die in vielerlei Hinsicht der SQL-Abfragesprache ähnelt.

Datentabelle

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurückOffizielle Website: r-datatable.com

Vom Autor data.table ist Matt Dole von H2O.ai.

Die erste Veröffentlichung der Bibliothek erfolgte im Jahr 2006.

Die Paketsyntax ist nicht so praktisch wie in tidyverse und erinnert eher an klassische Dataframes in R, ist aber gleichzeitig in der Funktionalität deutlich erweitert.

Alle Manipulationen mit der Tabelle in diesem Paket werden in eckigen Klammern beschrieben und wenn Sie die Syntax übersetzen data.table In SQL erhalten Sie etwa Folgendes: data.table[ WHERE, SELECT, GROUP BY ]

Die Stärke dieses Pakets liegt in der Geschwindigkeit bei der Verarbeitung großer Datenmengen.

Pandas

Offizielle Website: pandas.pydata.org Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Der Name der Bibliothek leitet sich vom ökonometrischen Begriff „Paneldaten“ ab, mit dem mehrdimensional strukturierte Informationsmengen beschrieben werden.

Vom Autor pandas ist der Amerikaner Wes McKinney.

Wenn es um die Datenanalyse in Python geht, gleich pandas Nein. Ein sehr multifunktionales High-Level-Paket, mit dem Sie beliebige Datenmanipulationen durchführen können, vom Laden von Daten aus beliebigen Quellen bis zur Visualisierung.

Zusätzliche Pakete installieren

Die in diesem Artikel besprochenen Pakete sind nicht in den grundlegenden R- und Python-Distributionen enthalten. Obwohl es eine kleine Einschränkung gibt: Wenn Sie die Anaconda-Distribution installiert haben, installieren Sie sie zusätzlich pandas nicht erforderlich.

Pakete in R installieren

Wenn Sie die RStudio-Entwicklungsumgebung mindestens einmal geöffnet haben, wissen Sie wahrscheinlich bereits, wie Sie das erforderliche Paket in R installieren. Um Pakete zu installieren, verwenden Sie den Standardbefehl install.packages() indem es direkt in R selbst ausgeführt wird.

# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

Nach der Installation müssen die Pakete verbunden werden, wofür in den meisten Fällen der Befehl verwendet wird library().

# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)

Pakete in Python installieren

Wenn Sie also reines Python installiert haben, dann pandas Sie müssen es manuell installieren. Öffnen Sie je nach Betriebssystem eine Befehlszeile oder ein Terminal und geben Sie den folgenden Befehl ein.

pip install pandas

Anschließend kehren wir zu Python zurück und importieren das installierte Paket mit dem Befehl import.

import pandas as pd

Daten werden geladen

Data Mining ist einer der wichtigsten Schritte in der Datenanalyse. Sowohl Python als auch R bieten Ihnen auf Wunsch umfangreiche Möglichkeiten, Daten aus beliebigen Quellen zu beziehen: lokale Dateien, Dateien aus dem Internet, Websites, Datenbanken aller Art.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Im gesamten Artikel werden wir mehrere Datensätze verwenden:

  1. Zwei Downloads von Google Analytics.
  2. Titanic-Passagierdatensatz.

Alle Daten liegen bei mir GitHub in Form von CSV- und TSV-Dateien. Woher werden wir sie anfordern?

Daten in R laden: Tidyverse, Vroom, Readr

Um Daten in eine Bibliothek zu laden tidyverse Es gibt zwei Pakete: vroom, readr. vroom moderner, aber in Zukunft können die Pakete kombiniert werden.

Zitat aus amtliche Dokumentation vroom.

vroom vs. Reader
Was bedeutet die Veröffentlichung von vroom meine für readr? Im Moment planen wir, die beiden Pakete getrennt weiterentwickeln zu lassen, aber wahrscheinlich werden wir die Pakete in Zukunft vereinen. Ein Nachteil des Lazy Reading von vroom besteht darin, dass bestimmte Datenprobleme nicht im Voraus gemeldet werden können. Daher bedarf es einiger Überlegungen, wie diese am besten vereinheitlicht werden können.

vroom vs. readr
Was bedeutet Freigabe? vroom für readr? Im Moment planen wir, beide Pakete separat zu entwickeln, aber wir werden sie wahrscheinlich in Zukunft kombinieren. Einer der Nachteile des faulen Lesens vroom Der Nachteil besteht darin, dass einige Probleme mit den Daten nicht im Voraus gemeldet werden können. Sie müssen daher darüber nachdenken, wie Sie sie am besten kombinieren können.

In diesem Artikel werden wir uns beide Datenladepakete ansehen:

Laden von Daten in R: vroom-Paket

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Daten werden in R geladen: readr

# install.packages("readr")
library(readr)

# Чтение данных
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

In der Packung vroomUnabhängig vom CSV-/TSV-Datenformat erfolgt das Laden durch die gleichnamige Funktion vroom(), im Paket readr Wir verwenden für jedes Format eine andere Funktion read_tsv() и read_csv().

Daten in R laden: data.table

В data.table Es gibt eine Funktion zum Laden von Daten fread().

Laden von Daten in R: data.table-Paket

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Laden von Daten in Python: Pandas

Wenn wir mit R-Paketen vergleichen, ist die Syntax in diesem Fall am nächsten pandas werden readrDa pandas kann Daten von überall anfordern, und es gibt eine ganze Familie von Funktionen in diesem Paket read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

Und viele weitere Funktionen zum Lesen von Daten aus verschiedenen Formaten. Aber für unsere Zwecke reicht es read_table() oder read_csv() Argumente verwenden Sept um das Spaltentrennzeichen anzugeben.

Laden von Daten in Python: Pandas

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

Datenrahmen erstellen

Tisch titanisch, das wir geladen haben, gibt es ein Feld Geschlecht, in dem die Geschlechtskennung des Passagiers gespeichert ist.

Für eine bequemere Darstellung der Daten im Hinblick auf das Geschlecht der Passagiere sollten Sie jedoch den Namen anstelle des Geschlechtscodes verwenden.

Dazu erstellen wir ein kleines Verzeichnis, eine Tabelle, in der es jeweils nur 2 Spalten (Code und Geschlechtsname) und 2 Zeilen gibt.

Erstellen eines Datenrahmens in R: Tidyverse, Dplyr

Im folgenden Codebeispiel erstellen wir den gewünschten Datenrahmen mithilfe der Funktion tibble() .

Erstellen eines Datenrahmens in R: dplyr

## dplyr
### создаём справочник
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

Erstellen eines Datenrahmens in R: data.table

Erstellen eines Datenrahmens in R: data.table

## data.table
### создаём справочник
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

Erstellen eines Datenrahmens in Python: Pandas

В pandas Die Erstellung von Frames erfolgt in mehreren Schritten: Zuerst erstellen wir ein Wörterbuch und konvertieren das Wörterbuch dann in einen Datenrahmen.

Erstellen eines Datenrahmens in Python: Pandas

# создаём дата фрейм
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)

Spalten auswählen

Die Tabellen, mit denen Sie arbeiten, können Dutzende oder sogar Hunderte von Datenspalten enthalten. Für die Analyse benötigen Sie jedoch in der Regel nicht alle in der Quelltabelle verfügbaren Spalten.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Daher besteht einer der ersten Vorgänge, die Sie mit der Quelltabelle durchführen, darin, sie von unnötigen Informationen zu befreien und den von diesen Informationen belegten Speicher freizugeben.

Spalten in R auswählen: Tidyverse, Dplyr

Syntax dplyr ist der SQL-Abfragesprache sehr ähnlich. Wenn Sie damit vertraut sind, werden Sie dieses Paket schnell beherrschen.

Um Spalten auszuwählen, verwenden Sie die Funktion select().

Nachfolgend finden Sie Codebeispiele, mit denen Sie Spalten auf folgende Weise auswählen können:

  • Auflistung der Namen der erforderlichen Spalten
  • Verweisen Sie auf Spaltennamen mit regulären Ausdrücken
  • Nach Datentyp oder einer anderen Eigenschaft der in der Spalte enthaltenen Daten

Spalten in R auswählen: dplyr

# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)

Auswählen von Spalten in R: data.table

Die gleichen Operationen in data.table werden etwas anders ausgeführt. Am Anfang des Artikels habe ich beschrieben, welche Argumente in eckigen Klammern stehen data.table.

DT[i,j,by]

Wo:
ich - wo, d.h. Filtern nach Zeilen
j - select|update|do, d.h. Spalten auswählen und konvertieren
nach - Datengruppierung

Auswählen von Spalten in R: data.table

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

Variable .SD ermöglicht Ihnen den Zugriff auf alle Spalten und .SDcols Filtern Sie die erforderlichen Spalten mithilfe regulärer Ausdrücke oder anderer Funktionen, um die Namen der benötigten Spalten zu filtern.

Auswählen von Spalten in Python, Pandas

So wählen Sie Spalten nach Namen aus pandas es reicht aus, eine Liste ihrer Namen anzugeben. Und um Spalten mithilfe regulärer Ausdrücke nach Namen auszuwählen oder auszuschließen, müssen Sie die Funktionen verwenden drop() и filter(), und Argument Achse = 1, mit dem Sie angeben, dass Spalten und nicht Zeilen verarbeitet werden müssen.

Um ein Feld nach Datentyp auszuwählen, verwenden Sie die Funktion select_dtypes(), und in Argumente das oder ausschließen Übergeben Sie eine Liste von Datentypen, die den Feldern entsprechen, die Sie auswählen müssen.

Spalten in Python auswählen: Pandas

# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])

Zeilen filtern

Beispielsweise kann die Quelltabelle Daten aus mehreren Jahren enthalten, Sie müssen jedoch nur den letzten Monat analysieren. Auch hier verlangsamen zusätzliche Leitungen den Datenverarbeitungsprozess und verstopfen den PC-Speicher.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Filtern von Zeilen in R: tydyverse, dplyr

В dplyr Die Funktion wird zum Filtern von Zeilen verwendet filter(). Als erstes Argument wird ein Datenrahmen verwendet. Anschließend werden die Filterbedingungen aufgelistet.

Geben Sie beim Schreiben logischer Ausdrücke zum Filtern einer Tabelle in diesem Fall die Spaltennamen ohne Anführungszeichen und ohne Deklaration des Tabellennamens an.

Wenn Sie zum Filtern mehrere logische Ausdrücke verwenden, verwenden Sie die folgenden Operatoren:

  • & oder Komma – logisches UND
  • | - logisches ODER

Filtern von Zeilen in R: dplyr

# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)

Filtern von Zeilen in R: data.table

Wie ich oben bereits geschrieben habe, in data.table Die Syntax der Datenkonvertierung ist in eckige Klammern eingeschlossen.

DT[i,j,by]

Wo:
ich - wo, d.h. Filtern nach Zeilen
j - select|update|do, d.h. Spalten auswählen und konvertieren
nach - Datengruppierung

Das Argument wird zum Filtern von Zeilen verwendet i, wobei die erste Position in eckigen Klammern steht.

Der Zugriff auf Spalten erfolgt in logischen Ausdrücken ohne Anführungszeichen und ohne Angabe des Tabellennamens.

Logische Ausdrücke sind auf die gleiche Weise miteinander verknüpft wie in dplyr durch die Operatoren & und |.

Filtern von Zeilen in R: data.table

## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]

Strings in Python filtern: Pandas

Nach Zeilen filtern in pandas ähnlich dem Einfiltern data.table, und erfolgt in eckigen Klammern.

In diesem Fall erfolgt der Zugriff auf Spalten zwingend durch Angabe des Namens des Datenrahmens; dann kann der Spaltenname auch in Anführungszeichen in eckigen Klammern angegeben werden (Beispiel df['col_name']) oder ohne Anführungszeichen nach dem Punkt (Beispiel df.col_name).

Wenn Sie einen Datenrahmen nach mehreren Bedingungen filtern müssen, muss jede Bedingung in Klammern gesetzt werden. Logische Bedingungen werden durch Operatoren miteinander verknüpft & и |.

Strings in Python filtern: Pandas

# Фильтрация строк таблицы
### фильтрация строк по одному условию
ga_nov[ ga_nov['source'] == "google" ]
### фильтр по двум условиям соединённым логическим и
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### фильтр по двум условиям соединённым логическим или
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]

Gruppierung und Aggregation von Daten

Eine der am häufigsten verwendeten Operationen bei der Datenanalyse ist die Gruppierung und Aggregation.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Die Syntax zum Ausführen dieser Vorgänge ist auf alle von uns überprüften Pakete verteilt.

In diesem Fall nehmen wir als Beispiel einen Datenrahmen titanisch, und berechnen Sie die Anzahl und die durchschnittlichen Kosten der Tickets je nach Kabinenklasse.

Gruppierung und Aggregation von Daten in R: Tidyverse, Dplyr

В dplyr Die Funktion dient der Gruppierung group_by()und für die Aggregation summarise(). Tatsächlich, dplyr Es gibt eine ganze Familie von Funktionen summarise_*(), aber der Zweck dieses Artikels besteht darin, die grundlegende Syntax zu vergleichen, sodass wir uns nicht in einen solchen Dschungel begeben.

Grundlegende Aggregationsfunktionen:

  • sum() — Zusammenfassung
  • min() / max() – Minimal- und Maximalwert
  • mean() - arithmetische Mittel
  • median() - Median
  • length() - Menge

Gruppierung und Aggregation in R: dplyr

## dplyr
### группировка и агрегация строк
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

In Funktion group_by() Wir haben die Tabelle als erstes Argument übergeben titanisch, und zeigte dann das Feld an P-Klasse, nach dem wir unsere Tabelle gruppieren werden. Das Ergebnis dieser Operation mit dem Operator %>% als erstes Argument an die Funktion übergeben summarise()und fügte zwei weitere Felder hinzu: Passagiere и avg_price. Im ersten Fall die Funktion verwenden length() berechnete die Anzahl der Tickets und im zweiten die Funktion mean() erhielt den durchschnittlichen Ticketpreis.

Gruppierung und Aggregation von Daten in R: data.table

В data.table Das Argument wird zur Aggregation verwendet j die eine zweite Position in eckigen Klammern hat, und zur Gruppierung by oder keyby, die den dritten Platz einnehmen.

Die Liste der Aggregationsfunktionen ist in diesem Fall identisch mit der in beschrieben dplyr, Weil Dies sind Funktionen aus der grundlegenden R-Syntax.

Gruppierung und Aggregation in R: data.table

## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

Gruppierung und Aggregation von Daten in Python: Pandas

Gruppieren pandas ähnlich zu dplyr, aber die Aggregation ist nicht ähnlich dplyr gar nicht data.table.

Verwenden Sie zum Gruppieren die Methode groupby(), in die Sie eine Liste von Spalten übergeben müssen, nach denen der Datenrahmen gruppiert wird.

Zur Aggregation können Sie die Methode verwenden agg()welches ein Wörterbuch akzeptiert. Die Wörterbuchschlüssel sind die Spalten, auf die Sie die Aggregationsfunktionen anwenden, und die Werte sind die Namen der Aggregationsfunktionen.

Aggregationsfunktionen:

  • sum() — Zusammenfassung
  • min() / max() – Minimal- und Maximalwert
  • mean() - arithmetische Mittel
  • median() - Median
  • count() - Menge

Funktion reset_index() Im folgenden Beispiel wird es verwendet, um verschachtelte Indizes zurückzusetzen pandas Der Standardwert ist nach der Datenaggregation.

Symbol ermöglicht es Ihnen, zur nächsten Zeile zu wechseln.

Gruppierung und Aggregation in Python: Pandas

# группировка и агрегация данных
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

Vertikale Verbindung von Tabellen

Eine Operation, bei der Sie zwei oder mehr Tabellen derselben Struktur verbinden. Die von uns geladenen Daten enthalten Tabellen ga_nov и ga_dec. Diese Tabellen sind im Aufbau identisch, d.h. haben die gleichen Spalten und die Datentypen in diesen Spalten.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Dies ist ein Upload von Google Analytics für die Monate November und Dezember. In diesem Abschnitt werden wir diese Daten in einer Tabelle zusammenfassen.

Tabellen in R vertikal verbinden: Tidyverse, Dplyr

В dplyr Mit der Funktion können Sie 2 Tabellen zu einer zusammenfassen bind_rows(), wobei Tabellen als Argumente übergeben werden.

Filtern von Zeilen in R: dplyr

# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)

Tabellen in R vertikal verbinden: data.table

Es ist auch nichts Kompliziertes, nutzen wir es rbind().

Filtern von Zeilen in R: data.table

## data.table
rbind(ga_nov, ga_dec)

Tabellen in Python vertikal verbinden: Pandas

В pandas Die Funktion wird zum Verbinden von Tabellen verwendet concat(), in die Sie eine Liste von Frames übergeben müssen, um sie zu kombinieren.

Strings in Python filtern: Pandas

# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])

Horizontale Verbindung von Tischen

Eine Operation, bei der Spalten aus der zweiten Tabelle per Schlüssel zur ersten Tabelle hinzugefügt werden. Es wird häufig verwendet, wenn eine Faktentabelle (z. B. eine Tabelle mit Verkaufsdaten) mit einigen Referenzdaten (z. B. den Kosten eines Produkts) angereichert wird.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Es gibt verschiedene Arten von Verknüpfungen:

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

In der zuvor geladenen Tabelle titanisch wir haben eine Kolumne Geschlecht, was dem Geschlechtscode des Passagiers entspricht:

1 - weiblich
2 - männlich

Außerdem haben wir eine Tabelle erstellt – ein Nachschlagewerk Geschlecht. Für eine bequemere Darstellung der Daten zum Geschlecht der Passagiere müssen wir den Namen des Geschlechts aus dem Verzeichnis hinzufügen Geschlecht zum Tisch titanisch.

Horizontale Tabellenverknüpfung in R: Tidyverse, Dplyr

В dplyr Für das horizontale Fügen gibt es eine ganze Familie von Funktionen:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

Das in meiner Praxis am häufigsten verwendete ist left_join().

Als erste beiden Argumente benötigen die oben aufgeführten Funktionen zwei Tabellen zum Verknüpfen und als drittes Argument by Sie müssen die zu verbindenden Spalten angeben.

Horizontale Tabellenverknüpfung in R: dplyr

# объединяем таблицы
left_join(titanic, gender,
          by = c("Sex" = "id"))

Horizontale Verknüpfung von Tabellen in R: data.table

В data.table Mithilfe der Funktion müssen Sie Tabellen nach Schlüssel verknüpfen merge().

Argumente für die Funktion merge() in data.table

  • x, y – Tabellen zum Verbinden
  • by – Spalte, die der zu verknüpfende Schlüssel ist, wenn sie in beiden Tabellen denselben Namen hat
  • by.x, by.y – Spaltennamen, die zusammengeführt werden sollen, wenn sie in den Tabellen unterschiedliche Namen haben
  • all, all.x, all.y – Join-Typ, all gibt alle Zeilen aus beiden Tabellen zurück, all.x entspricht der LEFT JOIN-Operation (belässt alle Zeilen der ersten Tabelle), all.y – entspricht der RIGHT JOIN-Operation (belässt alle Zeilen der zweiten Tabelle).

Horizontale Verknüpfung von Tabellen in R: data.table

# объединяем таблицы
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

Horizontaler Tabellen-Join in Python: Pandas

Sowie im data.tableIn pandas Die Funktion wird zum Verbinden von Tabellen verwendet merge().

Argumente der Funktion merge() in Pandas

  • wie – Verbindungstyp: links, rechts, außen, innen
  • on – Spalte, die ein Schlüssel ist, wenn sie in beiden Tabellen denselben Namen hat
  • left_on, right_on – Namen von Schlüsselspalten, wenn sie in Tabellen unterschiedliche Namen haben

Horizontaler Tabellen-Join in Python: Pandas

# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

Grundlegende Fensterfunktionen und berechnete Spalten

Fensterfunktionen haben eine ähnliche Bedeutung wie Aggregationsfunktionen und werden auch häufig in der Datenanalyse verwendet. Aber im Gegensatz zu Aggregationsfunktionen ändern Fensterfunktionen nicht die Anzahl der Zeilen des ausgehenden Datenrahmens.

Welche Sprache soll ich für die Arbeit mit Daten wählen – R oder Python? Beide! Migration von Pandas zu Tidyverse und data.table und zurück

Im Wesentlichen teilen wir mithilfe der Fensterfunktion den eingehenden Datenrahmen nach einem bestimmten Kriterium in Teile auf, d. h. durch den Wert eines Feldes oder mehrerer Felder. Und wir führen in jedem Fenster arithmetische Operationen durch. Das Ergebnis dieser Operationen wird in jeder Zeile zurückgegeben, d. h. ohne die Gesamtzahl der Zeilen in der Tabelle zu ändern.

Nehmen wir zum Beispiel den Tisch titanisch. Wir können berechnen, wie viel Prozent der Preis für jedes Ticket in seiner Kabinenklasse lag.

Dazu müssen wir in jeder Zeile den Gesamtpreis eines Tickets für die aktuelle Kabinenklasse ermitteln, zu der das Ticket in dieser Zeile gehört, und dann den Preis jedes Tickets durch den Gesamtpreis aller Tickets derselben Kabinenklasse dividieren .

Fensterfunktionen in R: Tidyverse, Dplyr

Um neue Spalten hinzuzufügen, ohne die Zeilengruppierung zu verwenden, in dplyr dient der Funktion mutate().

Sie können das oben beschriebene Problem lösen, indem Sie Daten nach Feldern gruppieren P-Klasse und Summieren des Feldes in einer neuen Spalte Fahrpreis. Heben Sie als Nächstes die Gruppierung der Tabelle auf und teilen Sie die Feldwerte Fahrpreis zu dem, was im vorherigen Schritt passiert ist.

Fensterfunktionen in R: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

Fensterfunktionen in R: data.table

Der Lösungsalgorithmus bleibt derselbe wie in dplyr, müssen wir die Tabelle nach Feldern in Fenster aufteilen P-Klasse. Geben Sie in einer neuen Spalte den Betrag für die Gruppe aus, die jeder Zeile entspricht, und fügen Sie eine Spalte hinzu, in der wir den Kostenanteil jedes Tickets in seiner Gruppe berechnen.

Um neue Spalten hinzuzufügen data.table Bediener anwesend :=. Nachfolgend finden Sie ein Beispiel für die Lösung eines Problems mithilfe des Pakets data.table

Fensterfunktionen in R: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

Fensterfunktionen in Python: Pandas

Eine Möglichkeit, eine neue Spalte hinzuzufügen pandas - Nutzen Sie die Funktion assign(). Um die Ticketkosten nach Kabinenklasse zusammenzufassen, ohne Zeilen zu gruppieren, verwenden wir die Funktion transform().

Nachfolgend finden Sie ein Beispiel für eine Lösung, die wir zur Tabelle hinzufügen titanisch die gleichen 2 Spalten.

Fensterfunktionen in Python: Pandas

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

Entsprechungstabelle für Funktionen und Methoden

Nachfolgend finden Sie eine Entsprechungstabelle zwischen den Methoden zur Durchführung verschiedener Operationen mit Daten in den von uns betrachteten Paketen.

Beschreibung
ordentlichversum
Datentabelle
Pandas

Daten werden geladen
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Datenrahmen erstellen
tibble()
data.table()
dict() + from_dict()

Spalten auswählen
select()
Argument j, zweite Position in eckigen Klammern
wir übergeben die Liste der erforderlichen Spalten in eckigen Klammern / drop() / filter() / select_dtypes()

Zeilen filtern
filter()
Argument i, erste Position in eckigen Klammern
Wir listen die Filterbedingungen in eckigen Klammern auf / filter()

Gruppierung und Aggregation
group_by() + summarise()
Argumente j + by
groupby() + agg()

Vertikale Vereinigung von Tabellen (UNION)
bind_rows()
rbind()
concat()

Horizontale Verbindung von Tabellen (JOIN)
left_join() / *_join()
merge()
merge()

Grundlegende Fensterfunktionen und Hinzufügen berechneter Spalten
group_by() + mutate()
Argument j mit Hilfe des Operators := + Argument by
transform() + assign()

Abschluss

Vielleicht habe ich in dem Artikel nicht die optimalsten Implementierungen der Datenverarbeitung beschrieben, daher würde ich mich freuen, wenn Sie meine Fehler in den Kommentaren korrigieren oder die im Artikel gegebenen Informationen einfach durch andere Techniken für die Arbeit mit Daten in R/Python ergänzen.

Wie ich oben geschrieben habe, bestand der Zweck des Artikels nicht darin, jemandem seine Meinung darüber aufzuzwingen, welche Sprache besser ist, sondern darin, die Möglichkeit zu vereinfachen, beide Sprachen zu lernen oder, falls erforderlich, zwischen ihnen zu wechseln.

Wenn Ihnen der Artikel gefallen hat, freue ich mich über neue Abonnenten Youtube и Telegramm Kanäle.

Опрос

Welche der folgenden Pakete nutzen Sie bei Ihrer Arbeit?

In den Kommentaren können Sie den Grund für Ihre Wahl schreiben.

An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.

Welches Datenverarbeitungspaket verwenden Sie (Sie können mehrere Optionen auswählen)

  • 45,2%Tidyverse19

  • 33,3%data.table14

  • 54,8%Pandas23

42 Benutzer haben abgestimmt. 9 Benutzer enthielten sich der Stimme.

Source: habr.com

Kommentar hinzufügen