[PYTHON] Beispiel für eine effiziente Datenverarbeitung mit PANDAS

zunaechst

PANDAS ist die beste Datenverarbeitungsbibliothek für Datenwissenschaftler. Es muss jedoch darauf geachtet werden, Leistungsprobleme beim Umgang mit Millionen von Datenzeilen zu vermeiden. Dieses Mal möchte ich einige Techniken vorstellen, die ich in meiner Arbeit gelernt habe.

DataFrame Da PANDAS eine spaltenorientierte Datenstruktur ist, können wir jede Spalte gut verarbeiten. Es wird empfohlen, einen "DataFrame" im Format "1 Datensatz 1 Zeile" zu erstellen und alle messbaren Werte (Luftfeuchtigkeit, Preis, Koordinaten usw.) für jede Spalte für jede Spalte festzulegen.

Bei einer großen Datenverarbeitungsmenge wird die Leistung jedoch erheblich verringert, wenn für jede Zeile eine Schleifenverarbeitung durchgeführt wird. In diesem Artikel möchte ich eine intelligente Methode zum Hinzufügen von Daten unter Berücksichtigung der Leistung vorstellen.

Erstellen Sie zunächst eine Beispieltabelle.

data = {'Team': ['Tiger', 'Tiger', 'Rabbit', 'Rabbit', 'Cat',
   'Cat', 'Cat', 'Cat', 'Tiger', 'Human', 'Human', 'Tiger'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df= pd.DataFrame(data)
print(team_dashboard)
'''
      Team  Rank  Year  Points
0    Tiger     1  2014     876
1    Tiger     2  2015     789
2   Rabbit     2  2014     863
3   Rabbit     3  2015     673
4      Cat     3  2014     741
5      Cat     4  2015     812
6      Cat     1  2016     756
7      Cat     1  2017     788
8    Tiger     2  2016     694
9    Human     4  2014     701
10   Human     1  2015     804
11   Tiger     2  2017     690
'''

print(df.columns) #Spaltenbezeichnung abrufen
'''
Index(['Team', 'Rank', 'Year', 'Points'], dtype='object')
'''

print(df.index) #Zeilenindex abrufen
'''
RangeIndex(start=0, stop=12, step=1)
'''

Der DataFrame verfügt über eine spezielle Liste namens index. Im obigen Beispiel sind die Elemente, die jede Spalte darstellen, auf der linken Seite als "[" Team "," Rang "," Jahr "," Punkte "] und 0, 1, 2, 3, ... gekennzeichnet. Hat einen Zeilenindex, der jede Zeile darstellt.

groupby() groupby wird verwendet, wenn Sie Daten mit demselben Wert erfassen und gemeinsame Operationen für jede Gruppe ausführen möchten. Obwohl es zu einem Standard in der Datenverarbeitung geworden ist, ist das Gruppieren nach zunächst recht schwierig, da es verschiedene Verwendungszwecke hat. Schauen wir uns ein Beispiel an. Wenn Sie den Spaltennamen in die Methode "groupby ()" einfügen, wird das Objekt "GroupBy" zurückgegeben.


#1 Ebene
df_g = df.groupby(by=['Team'])
print(df_g.groups)
'''
{'Cat': Int64Index([4, 5, 6, 7], dtype='int64'),
 'Human': Int64Index([9, 10], dtype='int64'),
 'Rabbit': Int64Index([2, 3], dtype='int64'),
 'Tiger': Int64Index([0, 1, 8, 11], dtype='int64')}
'''

#2 (Plural) Etiketten
df_g = df.groupby(by=['Team', 'Year'])
print(df_g.groups)
'''
{('Cat', 2014): Int64Index([4], dtype='int64'),
 ('Cat', 2015): Int64Index([5], dtype='int64'),
 ('Cat', 2016): Int64Index([6], dtype='int64'),
 ('Cat', 2017): Int64Index([7], dtype='int64'),
 ('Human', 2014): Int64Index([9], dtype='int64'),
 ('Human', 2015): Int64Index([10], dtype='int64'),
 ('Rabbit', 2014): Int64Index([2], dtype='int64'),
 ('Rabbit', 2015): Int64Index([3], dtype='int64'),
 ('Tiger', 2014): Int64Index([0], dtype='int64'),
 ('Tiger', 2015): Int64Index([1], dtype='int64'),
 ('Tiger', 2016): Int64Index([8], dtype='int64'),
 ('Tiger', 2017): Int64Index([11], dtype='int64')}
'''

Auf diese Weise können Sie sehen, welche Spalte sich in welcher Gruppe in Form von {Spaltenbezeichnung: [Zeilenbezeichnung, Zeilenbezeichnung, ...]} befindet. Für jedes Etikett wird eine Zeilenindexliste mit Daten gespeichert, die von demselben Etikett gehalten werden.

Um die Daten in der Gruppe abzurufen, übergeben Sie übrigens den Gruppenschlüssel an get_group ().

df_oneGroup = df_g.get_group('Rabbit')
print(df_oneGroup)
'''
     Team  Rank  Year  Points
2  Rabbit     2  2014     863
3  Rabbit     3  2015     673
'''

df_oneGroup = df_g.get_group(('Cat', 2014))
print(df_oneGroup)
'''
  Team  Rank  Year  Points
4  Cat     3  2014     741
'''

Tatsächlich wird "get_group ()" nur zum Debuggen verwendet, aber mit dem "GroupBy" -Objekt können Sie verschiedene Operationen für jede Gruppe ausführen. Rufen Sie beispielsweise die mean () -Methode auf, um den jährlichen Rang und die Punkte für jedes Team zu mitteln. Es werden viele andere Methoden bereitgestellt, z. B. "sum ()" und "mode ()". Übrigens setzt as_index = False die Standardgruppenbezeichnung auf [0, 1, 2, ..., n] zurück.

df_mean = team_dashboard.groupby(by=['Team', 'Year']).mean()
print(df_mean)
'''
              Rank  Points
Team   Year              
Cat    2014     3     741
       2015     4     812
       2016     1     756
       2017     1     788
Human  2014     4     701
       2015     1     804
Rabbit 2014     2     863
       2015     3     673
Tiger  2014     1     876
       2015     2     789
       2016     2     694
       2017     2     690
'''

df_mean = team_dashboard.groupby(by=['Team', 'Year'], as_index=False).mean()
print(df_mean)
'''
      Team  Year  Rank  Points
0      Cat  2014     3     741
1      Cat  2015     4     812
2      Cat  2016     1     756
3      Cat  2017     1     788
4    Human  2014     4     701
5    Human  2015     1     804
6   Rabbit  2014     2     863
7   Rabbit  2015     3     673
8    Tiger  2014     1     876
9    Tiger  2015     2     789
10   Tiger  2016     2     694
11   Tiger  2017     2     690
'''

Verwenden Sie agg (), um mehrere Zeilen für jede Gruppe zurückzugeben

Wie beim vorherigen "GroupBy.mean ()" können Sie den numerischen Wert für jede Gruppe abrufen. Wenn Sie jedoch den numerischen Wert für jede Gruppe separat abrufen möchten, verwenden Sie "agg ()" (Aggregration). Für die Aggregation verwendete Funktionen können mit Zeichenfolgen, Numpy-Methoden, selbst erstellten Funktionen und Lambda-Ausdrücken aufgerufen werden. Um "agg ()" zu verwenden, definieren Sie es in "dict ()" und übergeben Sie es wie folgt.

'''
  location   col1  col2  col3  col4
0        a   True     2     1     4
1        a  False     6     2     6
2        b   True     7     6     3
3        b   True     3     3     4
4        b  False     8     4     6
5        c   True     9    57     8
6        d  False     1    74     9
'''
func_dict = {'col1': lambda x: x.any(),         #Bestätigung des fehlenden Zustands
             'col2': np.mean,                   #durchschnittlich
             'col3': np.sum,                    #gesamt
             'col4': lambda S: S.mode()[0]}     #Häufigster Wert
df_agg = df.groupby('location').agg(func_dict).reset_index()
print(df_agg)
'''
  location   col1  col2  col3  col4
0        a   True     4     3     4
1        b   True     6    13     3
2        c   True     9    57     8
3        d  False     1    74     9
'''

Konvertieren Sie kategoriale Variablen mit cut () in Zahlen an beliebigen Grenzwerten

Einführung von "cut ()", das Daten nach dem angegebenen Grenzwert kategorisiert. Beispielsweise ist es einfach, die gesamten Daten in fünf Kategorien zu unterteilen, z. B. "Mitternacht, Morgen, Mittag, Nachmittag und Nacht".

prods = pd.DataFrame({'hour':range(0, 24)})
b = [0, 6, 11, 12, 17, 24]
l = ['Mitternacht', 'a.m.','Mittag', 'Nachmittag', 'Nacht']
prods['period'] = pd.cut(prods['hour'], bins=b, labels=l, include_lowest=True)
print(prods)

'''
    hour   period
0 0 Mitternacht
1 1 Mitternacht
2 2 Mitternacht
3 3 Mitternacht
4 4 Mitternacht
5 5 Mitternacht
6 6 Mitternacht
7 7 Uhr
8 8 Uhr
9 9 Uhr
10 10 Uhr
11 11 Uhr
12 12 mittag
13 13 Uhr
14 14 Uhr
15 15 Uhr
16 16 nachmittag
17 17 Uhr
18 18 Nacht
19 19 Nacht
20 20 Nacht
21 21 Nacht
22 22 Nacht
23 23 Nacht
'''

Gruppieren und verarbeiten Sie Zeitreihendaten mit resample ()

Sagen wir diesmal "Berechnen Sie die kumulierte Anzahl von Fällen pro Stunde". Ich denke, ich werde versuchen, hier "pd.cumsum ()" zu verwenden. Erstellen Sie daher im Voraus eine "num_ride_1h" -Spalte und geben Sie "1" ein. Nach einer stündlichen Gruppierung nach "resample ()" in der Zeitstempelspalte kann jede Gruppe durch Aufrufen der "cumsum ()" - Methode abgeschlossen werden.

df_raw= make_classification(n_samples, n_features+1)
df_raw['timestamp'] = random_datetimes_or_dates(start, end, n=n_samples)
df_raw['num_ride_1h'] = 1
print(df_raw)
'''
       var_0     var_1     var_2  class           timestamp  num_ride_1h
0   1.062513 -0.056001  0.761312      0 2020-09-21 00:01:57            1
1  -2.272391  1.307474 -1.276716      0 2020-09-21 00:14:49            1
2  -1.470793  1.245910 -0.708071      2 2020-09-21 00:17:46            1
3  -1.827838  1.365970 -0.933938      0 2020-09-21 00:25:13            1
4  -1.115794 -0.045542 -0.830372      0 2020-09-21 00:31:45            1
..       ...       ...       ...    ...                 ...          ...
95  0.247010  0.903812  0.448323      0 2020-09-21 23:29:25            1
96 -0.665399  1.861112  0.063642      1 2020-09-21 23:32:51            1
97  0.875282  0.028704  0.649306      2 2020-09-21 23:36:21            1
98  2.159065 -1.155290  1.238786      0 2020-09-21 23:37:23            1
99  1.739777 -1.775147  0.748372      2 2020-09-21 23:56:04            1
'''

df_raw['num_ride_1h'] = df_raw.resample('1H', on='timestamp')['num_ride_1h'].cumsum()

'''
       var_0     var_1     var_2  class           timestamp  num_ride_1h
0  -1.331170 -0.274703  0.809738      1 2020-10-11 00:10:54            1
1  -1.373495 -1.067991  1.738302      1 2020-10-11 00:14:24            2
2  -1.471448  0.216404  0.296618      0 2020-10-11 00:43:29            3
3  -2.282394 -1.528916  2.605747      1 2020-10-11 00:48:52            4
4   0.162427  0.524188 -0.663437      2 2020-10-11 00:51:23            5
..       ...       ...       ...    ...                 ...          ...
95  1.197076  0.274294 -0.759543      1 2020-10-11 22:23:50            3
96 -0.459688  0.646523 -0.573518      0 2020-10-11 23:00:20            1
97  0.212496  0.773962 -0.969428      2 2020-10-11 23:11:43            2
98  1.578519  0.496655 -1.156869      1 2020-10-11 23:14:31            3
99  1.318311 -0.324909 -0.114971      0 2020-10-11 23:46:46            4

'''

Sie können auch pd.Grouper () verwenden. Beide können das gleiche Ergebnis erzielen.

df_raw['num_ride_1h'] = df_raw.groupby(pd.Grouper(key='timestamp', freq='1h'))['num_ride_1h'].cumsum()

Schließlich

Es gibt einige andere Beispiele, die ich vorstellen möchte, aber dieses Mal möchte ich hier enden. Wenn ich die nächste Gelegenheit habe, werde ich die Datenverarbeitung einführen, die sich auf Zeitreihendaten konzentriert.

** [Quand Co., Ltd.] ** Quand Co., Ltd., wo ich arbeite, arbeitet an Upgrades der lokalen Industrie. Bitte schau es dir an. http://quando.jp/

Recommended Posts

Beispiel für eine effiziente Datenverarbeitung mit PANDAS
Datenverarbeitungstipps mit Pandas
Datensätze mit Pandas verarbeiten (1)
Datenvisualisierung mit Pandas
Datenmanipulation mit Pandas!
Daten mit Pandas mischen
[Pandas] Grundlagen der Verarbeitung von Datumsdaten mit dt
Parallele Verarbeitung mit Parallel von Scikit-Learn
Verarbeiten Sie CSV-Daten mit Python (Zählverarbeitung mit Pandas)
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Pandas: Ein sehr einfaches Beispiel für DataFrame.rolling ()
Behandeln Sie 3D-Datenstrukturen mit Pandas
Best Practices für den Umgang mit Daten mit Pandas
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten
Pandas Daten lesen
Verwenden Sie Dekorateure, um eine erneute Ausführung der Datenverarbeitung zu verhindern
Implementieren Sie "Data Visualization Design # 3" mit Pandas und Matplotlib
Beispiel für das Abrufen eines Zugriffstokens von Mastodon mit authorisation_code
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Asynchrone Verarbeitung mit Arduino (asynchrone Verarbeitung von Verarbeitungsanforderungen von Linux)
Aggregieren Sie VIP-Werte von Smash Bra mit Pandas
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
Automatische Erfassung von Aktienkursdaten mit Docker-Compose
Praxis der Erstellung einer Datenanalyseplattform mit BigQuery und Cloud DataFlow (Datenverarbeitung)
Pandas-Grundlagen für Anfänger ② Übersicht über die Daten
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
Einfaches Implementierungsbeispiel für eine Art der Datenerweiterung
Beispiel für das Lesen und Schreiben von CSV mit Python
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Python-Version)
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Holen Sie sich Amazon RDS (PostgreSQL) -Daten mithilfe von SQL mit Pandas
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
Seien Sie vorsichtig beim Lesen von Daten mit Pandas (geben Sie dtype an)
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
So geben Sie die CSV eines mehrzeiligen Headers mit Pandas aus
Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Zusammenfassung der beim Extrahieren von Daten verwendeten Pandas-Methoden [Python]
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung