[PYTHON] Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln

image

Einführung

Hallo! Plötzlich tut es mir leid, aber haben Sie jemals das Wort "** Tidy Data " gehört (auf Japanisch übersetzt als " ordentliche Daten **")? Ich habe kürzlich Pandas in einem Kurs namens Pandas-Datenanalyse mit Python-Grundlagen in Safari Books Online studiert. Als ich das tat, erschien am Ende das Kapitel "Ordentliche Daten" und ich kannte diese Geschichte. Was ist "Tidy Data"? Tidy Data Von Hadley Wickham (der in der Welt von R als Gott verehrt wird). Es ist ein Konzept, das in dem Papier (2014) mit dem Namen html vorgeschlagen wurde. Das Papier hat auch eine japanische Übersetzung, die zu Beginn der Übersetzung wie folgt eingeführt wird.

Eine vollständige Übersetzung des Papiers „Tidy Data“, in dem das Konzept der „geordneten Daten“ für eine effektive Datenanalyse befürwortet wurde. Ordentliche Daten sind ein nützliches Konzept, das die Datenanalyse mit R und dergleichen erleichtert.

Tidy Data ist ein Konzept und eine Methode zum Bereinigen / Organisieren von Daten, die "80% der Arbeit eines Analysten ausmachen", so einfach und effektiv wie möglich. Das Papier wurde unter Berücksichtigung von R aus dem Hintergrund des Autors geschrieben, aber der oben erwähnte Safari Online-Kurs zeigte, wie diese Datenbereinigungsmuster in Python / Pandas implementiert werden. Ich schämte mich zu sagen, dass ich nie eine ordnungsgemäße Organisation von Datenorganisationsmethoden und -methoden in der Datenanalyse gelesen hatte, daher war es sehr inspirierend, diesen Artikel zu schreiben.

: triangular_flag_on_post: (2019/3/2) Dieser Artikel wurde im April 2017 veröffentlicht, aber Daniel Y. Chens Pandas-Buch "Pandas for Everyone" war Dozent im ursprünglichen Story-Videokurs dieses Artikels "[Grundlegende Codierung für Python-Datenanalyse / maschinelles Lernen! Einführung in die Verwendung der Pandas-Bibliothek](https://www.amazon.co.jp/Python%E3%83%87%E3%83%BC%E3%82] % BF% E5% 88% 86% E6% 9E% 90-% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E5% 9F% BA% E6% 9C% AC% E3% 82% B3% E3% 83% BC% E3% 83% 87% E3% 82% A3% E3% 83% B3% E3% 82% B0-Pandas% E3% 83% A9% E3% 82% A4% E3% 83% 96% E3% 83% A9% E3% 83% AA% E6% B4% BB% E7% 94% A8% E5% 85% A5% E9% 96% 80-Impress-Gear / dp / 4295005657 / ref = sr_1_3? S = Bücher & dh = UTF8 & qid = 1551490253 & sr = 1-3 & keywords = pandas) 2019/2 / Übersetzt und veröffentlicht am 22. Es gibt auch eine geordnete Erklärung der Daten, daher werde ich sie vorstellen. image

Zunächst empfehle ich Artikel auf Japanisch

Der Autor der Website Colourless Green Ideas erklärt die Übersetzung des Papiers und die Idee von "geordneten Daten" auf Japanisch auf sehr leicht verständliche Weise.

Was ist der Sinn von geordneten Daten (Tidy Data)?

Weitere Informationen finden Sie im Artikel "Was sind geordnete Daten" aus meiner amateurhaften Erklärung. Es ist am besten, es zu haben, aber für diejenigen, die beschäftigt sind (obwohl es sehr rau ist), werde ich es unten zusammenfassen.

[Einleitung (Atarimaes Geschichte)]: triangular_flag_on_post: (Oktober 2019) Das Erklärungsbeispiel wurde geändert [^ 1]

[^ 1]: (2019/10) Ursprünglich wurde dieser Ort als Beispiel für Größe und Gewicht der Körpermaße beschrieben, aber @acevif bemerkte, dass dies als Beispiel unangemessen ist, und ich denke, dass dies sicherlich der Fall ist. Also habe ich das Beispiel geändert. Weitere Informationen finden Sie im Kommentarbereich.

Das Folgende ist eine Liste von "Behandlungen, die an Patienten in medizinischen Einrichtungen durchgeführt werden, und den daraus resultierenden Werten". Wenn Sie das Ergebnis jeder Behandlung für jede Person wissen möchten, können Sie es in Richtung der Linie sehen. Die Ergebnisse jeder Person sind in der Zeilenrichtung angeordnet, die als "** Beobachtung " bezeichnet wird. Außerdem sind die Arten der durchgeführten Behandlungen in Reihenrichtung angeordnet. Diese werden als " Variablen **" bezeichnet. Dies ist eine Form, die für den Menschen leicht zu verstehen ist.

image

Bedeutung und Struktur der Daten Unter der Annahme, dass es eine Datengruppe (beobachteter Wert) gibt, dass "der numerische Wert des Ergebnisses der Anwendung einer bestimmten Behandlung auf jeden Patienten so war", lautet dies, wenn es tatsächlich als Datensatz ausgedrückt wird, wie folgt. Kann durch verschiedene ** Strukturen ** dargestellt werden.

image

In der oben gezeigten Struktur: eins: enthält zwei Beobachtungen pro Zeile und: zwei: enthält drei Beobachtungen pro Zeile, ganz rechts: drei: enthält nur eine Beobachtung pro Zeile ( "Als Ergebnis der an Herrn C durchgeführten Aktion X betrug der Wert 3"). Mit anderen Worten, die Form von: drei: ist ** die "Semantik" und "Struktur" der Datenübereinstimmung **. Dies ist der wichtige Punkt "geordneter Daten". In dem Artikel "Bestellte Daten" wird argumentiert, dass "dieses Formular bei der Datenanalyse einfacher zu handhaben ist (abgesehen davon, dass es für Menschen leicht zu verstehen ist)". (Warum dies einfacher zu handhaben ist, finden Sie unter "Struktur und" im Artikel "Was sind geordnete Daten". Siehe Abschnitt "Bedeutung übereinstimmender Bedeutungen")

[Mit anderen Worten, was sind "geordnete Daten"? ]] Um es extrem grob zu sagen

――Es ist einfacher, die zu analysierenden Daten zu verarbeiten, wenn die Daten analysiert werden (z. B. Aggregation oder Plotten), indem die Daten so organisiert und konvertiert werden, dass Bedeutung und Struktur übereinstimmen. ――Es ist besser, die zu analysierenden Daten richtig zu normalisieren ~

Ich denke, das bedeutet es. image

Aufräumen unordentlicher Datensätze

Listen Sie im Kapitel "Anordnung überfüllter Datensätze" im Dokument "Ordentliche Daten" fünf "allgemeine Muster überfüllter Daten (unordentliche Daten)" auf und geben Sie die Richtung jeder Datenorganisation an. Ich bin. Im Folgenden werden in diesem Artikel Beispiele vorgestellt, wie man sie tatsächlich mit Pandas organisiert.

―― Natürlich gibt es viele andere Möglichkeiten, es auf Codeebene zu implementieren, daher ist dies nur ein Beispiel. ――Für die Titelzeile habe ich den Ausdruck in der oben erwähnten japanischen Übersetzung verwendet.

1. Die Spaltenüberschrift ist ein Wert, kein Variablenname

Column headers are values, not variable names

[Beispiel]

Das Folgende ist eine Zählung der Anzahl der Personen nach "Religion" und "Einkommensgruppe" in einer bestimmten Umfrage. In der Tabelle links wird "Einkommensklasse" durch die horizontale Achse dargestellt, aber es ist nicht gut, dass die Spaltenüberschriften selbst, wie "10.000 USD oder weniger" und "10-20.000 USD", Werte enthalten. Konvertieren Sie dies in die Form von "geordneten Daten" auf der rechten Seite.

image

[Erklärung der Methode]

Diese Konvertierung kann einfach mit Pandas Schmelze durchgeführt werden.

--id_vars = Gibt die Spalte der Basisachse an ("Religion" im obigen Beispiel). --var_name = Geben Sie der Spalte einen Namen, die eine Variable sein soll ("Bereich" im obigen Beispiel). --value_name = Benennen Sie die Spalte, die der Wert sein soll ("count" im obigen Beispiel)

[Konvertierungsbeispiel mit Pandas]

python3



In [1]: import pandas as pd
#Daten lesen
In [2]: df=pd.read_excel('data/02_Religion.xls')

In [3]: print(df.head())
            religion  <$10k  $10-20k  $20-30k  $30-40k  $40-50k  $50-75k
0           Agnostic     27       34       60       81       76      137
1            Atheist     12       27       37       52       35       70
2           Buddhist     27       21       30       34       33       58
3           Catholic    418      617      732      670      638     1116
4  Don’tknow/refused     15       14       15       11       10       35

#Schmelze laufen lassen
In [4]: df_long = pd.melt(df ,id_vars='religion', var_name='range', value_name='count')

# tidy-In Datenformat konvertiert
In [5]: print(df_long.head(n=10))
                religion  range  count
0               Agnostic  <$10k     27
1                Atheist  <$10k     12
2               Buddhist  <$10k     27
3               Catholic  <$10k    418
4      Don’tknow/refused  <$10k     15
5        EvangelicalProt  <$10k    575
6                  Hindu  <$10k      1
7  HistoricallyBlackProt  <$10k    228
8       Jehovah’sWitness  <$10k     20
9                 Jewish  <$10k     19

[Beispiel 2]

Unten finden Sie einen Datensatz mit Plakat-Hit-Charts. Es enthält die Ranglistendaten der ersten Woche, der zweiten Woche usw. der Woche, die in der Tabelle aufgeführt sind, sowie Daten wie Jahr, Songtitel, Künstler usw. image

[Erklärung der Methode]

Dies wird auch in "geordnete Daten" umgewandelt. Sie können Schmelze wie in Beispiel 1 verwenden, in diesem Beispiel gibt es jedoch mehrere Achsenspalten. Geben Sie in der Liste die Spalte wie id_vars = ['Jahr', 'Künstler', 'Titel', 'Uhrzeit', 'Datum eingegeben] an. Der Rest ist der gleiche wie in Beispiel 1.

[Konvertierungsbeispiel mit Pandas]

python3


#Daten lesen
In [15]: billboard = pd.read_excel('data/04_HitChart.xls')

In [16]: print(billboard.head())
   year         artist                    track      time date.entered  wk1  wk2  wk3
0  2000          2 Pac           Baby Don’t Cry  04:22:00   2000-02-26   87   82   72
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02   91   87   92
2  2000   3 Doors Down               Kryptonite  03:53:00   2000-04-08   81   70   68
3  2000           98^0  Give Me Just One Nig...  03:24:00   2000-08-19   51   39   34
4  2000        A*Teens            Dancing Queen  03:44:00   2000-07-08   97   97   96

#Schmelze laufen lassen(id_Vars geben in Liste)
In [17]: billboard_long = pd.melt(billboard, id_vars=['year','artist','track','time','date.entered'], var_name='week', value_name
    ...: ='rank')

# tidy-In Datenformat konvertiert
In [18]: print(billboard_long.head(n=10))
   year           artist                    track      time date.entered week  rank
0  2000            2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
1  2000          2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91
2  2000     3 Doors Down               Kryptonite  03:53:00   2000-04-08  wk1    81
3  2000             98^0  Give Me Just One Nig...  03:24:00   2000-08-19  wk1    51
4  2000          A*Teens            Dancing Queen  03:44:00   2000-07-08  wk1    97
5  2000          Aaliyah            I Don’t Wanna  04:15:00   2000-01-29  wk1    84
6  2000          Aaliyah                Try Again  04:03:00   2000-03-18  wk1    59
7  2000  Adams, Yolanda             Open My Heart  05:30:00   2000-08-26  wk1    76
8  2000            2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk2    82
9  2000          2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk2    87

2. In einer Spalte werden mehrere Variablen gespeichert

Multiple variables are stored in one column

[Beispiel]

Dies sind Daten zur Tuberkulose (TB) und zeigen die Anzahl der Tuberkulose-Patienten nach "Geschlecht" und "Altersgruppe" zusätzlich zu "Land" und "Jahr". m014 bedeutet männlich (m) 0-14 Jahre alt, m1524 bedeutet männlich (m) 15-24 Jahre alt. Wenn zwei Variablen, "Geschlecht" und "Altersgruppe", auf diese Weise in einer Spalte gespeichert werden, ist es nicht gut, wenn Sie aus der Perspektive von "Geschlecht", "Altersgruppe" usw. analysieren möchten. Daher sollte die Spalte "Geschlecht" sein. Und "Altersgruppe". image

[Erklärung der Methode]

[Konvertierungsbeispiel mit Pandas]

python3


#Daten lesen
In [2]: tb = pd.read_excel('data/05_TB.xls')

In [3]: print(tb.head())
  country  year  m014  m1524  m2534  m3544  m4554  m5564   m65  mu  f014
0      AD  2000   0.0    0.0    1.0    0.0      0      0   0.0 NaN   NaN
1      AE  2000   2.0    4.0    4.0    6.0      5     12  10.0 NaN   3.0
2      AF  2000  52.0  228.0  183.0  149.0    129     94  80.0 NaN  93.0
3      AG  2000   0.0    0.0    0.0    0.0      0      0   1.0 NaN   1.0
4      AL  2000   2.0   19.0   21.0   14.0     24     19  16.0 NaN   3.0

#Schmelze laufen lassen
In [4]: tb_long = pd.melt(tb, id_vars=['country','year'], var_name='variable', value_name='value')

In [5]: print(tb_long.head(n=10))
  country  year variable  value
0      AD  2000     m014    0.0
1      AE  2000     m014    2.0
2      AF  2000     m014   52.0
3      AG  2000     m014    0.0
4      AL  2000     m014    2.0
5      AM  2000     m014    2.0
6      AN  2000     m014    0.0
7      AO  2000     m014  186.0
8      AR  2000     m014   97.0
9      AS  2000     m014    NaN

#Extrahieren Sie das erste Zeichen der Variablenspalte und fügen Sie die Spalte "Geschlecht" hinzu.
In [6]: tb_long['gender'] = tb_long.variable.str[0]

#Extrahieren Sie das zweite und die nachfolgenden Zeichen der variablen Spalte und fügen Sie die Spalte "Alter" hinzu.
In [7]: tb_long['age'] = tb_long.variable.str[1:]

#Spalten für Geschlecht und Alter wurden hinzugefügt
In [8]: print(tb_long.head(n=10))
  country  year variable  value gender  age
0      AD  2000     m014    0.0      m  014
1      AE  2000     m014    2.0      m  014
2      AF  2000     m014   52.0      m  014
3      AG  2000     m014    0.0      m  014
4      AL  2000     m014    2.0      m  014
5      AM  2000     m014    2.0      m  014
6      AN  2000     m014    0.0      m  014
7      AO  2000     m014  186.0      m  014
8      AR  2000     m014   97.0      m  014
9      AS  2000     m014    NaN      m  014

3. Variablen werden sowohl in Zeilen als auch in Spalten gespeichert

Variables are stored in both rows and columns

[Beispiel]

Dies sind die täglichen meteorologischen Daten einer Wetterstation in Mexiko (MX17004). Der erste Tag (d1), der zweite Tag (d2) und der Tag sind auf der horizontalen Achse in Bezug auf die Achsen "Jahr" und "Monat" ausgerichtet, aber in der Elementspalte sind die maximalen und minimalen Temperaturen des Tages 2 Ich habe eine als Linie. Es ist nicht gut, dass die beobachteten Fakten sowohl in Zeilen als auch in Spalten gespeichert sind. Ordnen Sie sie daher in der Form rechts an.

image

[Erklärung der Methode]

[Konvertierungsbeispiel mit Pandas]

python3


#Daten lesen
In [10]: weather = pd.read_excel('data/06_Weather.xls')

In [11]: print(weather.head())
        id  year  month element  d1    d2    d3  d4    d5  d6  d7  d8
0  MX17004  2010      1    tmax NaN   NaN   NaN NaN   NaN NaN NaN NaN
1  MX17004  2010      1    tmin NaN   NaN   NaN NaN   NaN NaN NaN NaN
2  MX17004  2010      2    tmax NaN  27.3  24.1 NaN   NaN NaN NaN NaN
3  MX17004  2010      2    tmin NaN  14.4  14.4 NaN   NaN NaN NaN NaN
4  MX17004  2010      3    tmax NaN   NaN   NaN NaN  32.1 NaN NaN NaN

#Schmelze laufen lassen
In [12]: weather_melt = pd.melt(weather,id_vars=['id','year','month','element'], var_name='day', value_name='temp')

In [13]: print(weather_melt.head(n=10))
        id  year  month element day  temp
0  MX17004  2010      1    tmax  d1   NaN
1  MX17004  2010      1    tmin  d1   NaN
2  MX17004  2010      2    tmax  d1   NaN
3  MX17004  2010      2    tmin  d1   NaN
4  MX17004  2010      3    tmax  d1   NaN
5  MX17004  2010      3    tmin  d1   NaN
6  MX17004  2010      4    tmax  d1   NaN
7  MX17004  2010      4    tmin  d1   NaN
8  MX17004  2010      5    tmax  d1   NaN
9  MX17004  2010      5    tmin  d1   NaN

# pivot_Heraufstufen des Werts der Elementspalte in eine Spalte in der Tabelle
In [14]: weather_tidy = weather_melt.pivot_table(index=['id','year','month','day'], columns='element', values='temp')

#Ich konnte promoten, aber der Index ist nicht gut
In [15]: print(weather_tidy.head(n=10))
element                 tmax  tmin
id      year month day
MX17004 2010 1     d1    NaN   NaN
                   d2    NaN   NaN
                   d3    NaN   NaN
                   d4    NaN   NaN
                   d5    NaN   NaN
                   d6    NaN   NaN
                   d7    NaN   NaN
                   d8    NaN   NaN
             2     d1    NaN   NaN
                   d2   27.3  14.4

# reset_index()Dann wird es schön
In [16]: weather_tidy_flat = weather_tidy.reset_index()

In [17]: print(weather_tidy_flat.head(n=10))
element       id  year  month day  tmax  tmin
0        MX17004  2010      1  d1   NaN   NaN
1        MX17004  2010      1  d2   NaN   NaN
2        MX17004  2010      1  d3   NaN   NaN
3        MX17004  2010      1  d4   NaN   NaN
4        MX17004  2010      1  d5   NaN   NaN
5        MX17004  2010      1  d6   NaN   NaN
6        MX17004  2010      1  d7   NaN   NaN
7        MX17004  2010      1  d8   NaN   NaN
8        MX17004  2010      2  d1   NaN   NaN
9        MX17004  2010      2  d2  27.3  14.4

4. In derselben Tabelle sind mehrere Arten von Beobachtungsbausteinen gespeichert

Multiple types of observational units are stored in the same table

[Beispiel]

Das folgende ist das Konvertierungsergebnis des Plakat-Treffer-Diagramms in Beispiel 2 von "1. Die Spaltenüberschrift ist ein Wert, kein Variablenname". Wenn Sie genau hinschauen, enthält dieser Datensatz den "Song-bezogenen Teil" und den "Ranking-bezogenen Teil" in derselben Tabelle, und der "Song-bezogene Teil" wird viele Male wiederholt. Unter dem Gesichtspunkt der "Normalisierung" scheint es besser, diese später in zwei Datensätze aufzuteilen. image

[Erklärung der Methode]

Befolgen Sie zunächst die folgenden Schritte für den "Song-bezogenen Teil".

--Erstellen Sie einen neuen DataFrame, indem Sie nur die Spalten angeben, die sich auf den Song beziehen

Befolgen Sie die nachstehenden Schritte für den "Ranking-Teil".

[Konvertierungsbeispiel mit Pandas]

python3


#Bestätigung der Daten
In [23]: print(billboard_long.head())
   year         artist                    track      time date.entered week  rank
0  2000          2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91
2  2000   3 Doors Down               Kryptonite  03:53:00   2000-04-08  wk1    81
3  2000           98^0  Give Me Just One Nig...  03:24:00   2000-08-19  wk1    51
4  2000        A*Teens            Dancing Queen  03:44:00   2000-07-08  wk1    97

#Die Daten desselben Songs werden wiederholt
In [24]: print(billboard_long[billboard_long.track =='Baby Don’t Cry'].head())
    year  artist           track      time date.entered week  rank
0   2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
8   2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk2    82
16  2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk3    72

#Erstellen Sie einen neuen DataFrame im "Song-bezogenen Teil" (wiederholter Teil überlappt sich immer noch)
In [25]: billboard_songs = billboard_long[['year','artist','track','time']]

In [26]: billboard_songs.head(n=10)
Out[26]:
   year           artist                    track      time
0  2000            2 Pac           Baby Don’t Cry  04:22:00
1  2000          2Ge+her  The Hardest Part Of ...  03:15:00
2  2000     3 Doors Down               Kryptonite  03:53:00
3  2000             98^0  Give Me Just One Nig...  03:24:00
4  2000          A*Teens            Dancing Queen  03:44:00
5  2000          Aaliyah            I Don’t Wanna  04:15:00
6  2000          Aaliyah                Try Again  04:03:00
7  2000  Adams, Yolanda             Open My Heart  05:30:00
8  2000            2 Pac           Baby Don’t Cry  04:22:00
9  2000          2Ge+her  The Hardest Part Of ...  03:15:00

#24 Zeilen x 4 Spalten
In [27]: billboard_songs.shape
Out[27]: (24, 4)

# drop_duplicates()Beseitigen Sie Doppelarbeit mit
In [28]: billboard_songs = billboard_songs.drop_duplicates()

#8 Zeilen x 4 Spalten
In [29]: billboard_songs.shape
Out[29]: (8, 4)

In [30]: print(billboard_songs.head())
   year         artist                    track      time
0  2000          2 Pac           Baby Don’t Cry  04:22:00
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00
2  2000   3 Doors Down               Kryptonite  03:53:00
3  2000           98^0  Give Me Just One Nig...  03:24:00
4  2000        A*Teens            Dancing Queen  03:44:00

#Generieren und Hinzufügen von ID-Spalten mit Seriennummern
In [31]: billboard_songs['id'] = range(len(billboard_songs))

#Fertigstellung von "Teilen im Zusammenhang mit Liedern"
In [32]: print(billboard_songs.head())
   year         artist                    track      time  id
0  2000          2 Pac           Baby Don’t Cry  04:22:00   0
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   1
2  2000   3 Doors Down               Kryptonite  03:53:00   2
3  2000           98^0  Give Me Just One Nig...  03:24:00   3
4  2000        A*Teens            Dancing Queen  03:44:00   4

#Von hier an bezog sich der Teil auf "Ranking"
#Der ursprüngliche DataFrame und die Werbetafel wurden kurz zuvor erstellt_Treten Sie dem DataFrame von Songs bei(merge)So erstellen Sie einen neuen DataFrame
In [33]: billboard_ratings = billboard_long.merge(billboard_songs, on=['year','artist','track','time'])

#ID-Spalte hinzugefügt
In [34]: billboard_ratings.head()
Out[34]:
   year    artist                    track      time date.entered week  rank  id
0  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87   0
1  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk2    82   0
2  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk3    72   0
3  2000   2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91   1
4  2000   2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk2    87   1

#Erstellen Sie einen neuen DataFrame im "Ranking-Teil".
In [35]: billboard_ratings = billboard_ratings[['id','date.entered','week','rank']]

#Abschluss des "Ranking-Teils"
In [36]: print(billboard_ratings.head(n=10))
   id date.entered week  rank
0   0   2000-02-26  wk1    87
1   0   2000-02-26  wk2    82
2   0   2000-02-26  wk3    72
3   1   2000-09-02  wk1    91
4   1   2000-09-02  wk2    87
5   1   2000-09-02  wk3    92
6   2   2000-04-08  wk1    81
7   2   2000-04-08  wk2    70
8   2   2000-04-08  wk3    68
9   3   2000-08-19  wk1    51

5. Die Bausteine einer Beobachtung werden in mehreren Tabellen gespeichert

A single observational unit is stored in multiple tables

[Beispiel]

Für die Analyse ist es unpraktisch, wenn die beobachteten Fakten separat in mehreren Datensätzen gespeichert werden. Wie unten gezeigt, werden mehrere Datensätze mit demselben Spaltenlayout zu einem verkettet. image

[Erklärung der Methode]

Dieser Fall ist einfach, da Sie nur den Datensatz zusammenfassen müssen. Wenn Sie jedoch über eine große Anzahl von Datensätzen verfügen, ist es schwierig, jeden mit pd.read_xxx () zu lesen. Wenn Sie glob verwenden, können Sie eine Liste von Dateien mit Namen abrufen, die die angegebenen Bedingungen erfüllen Ich werde dich vorstellen.

[Konvertierungsbeispiel mit Pandas]

python3


In [38]: import glob
#Liste der Dateinamen, die den Kriterien entsprechen
In [39]: concat_files = glob.glob('data/concat*')

In [40]: print(concat_files)
['data\\concat_1.csv', 'data\\concat_2.csv', 'data\\concat_3.csv']

In [41]: list_concat_df =[]
#Lesen Sie die CSV-Datei für jede Datei und fügen Sie sie der Liste von df hinzu
In [42]: for file in concat_files:
    ...:     df = pd.read_csv(file)
    ...:     list_concat_df.append(df)
    ...:
#Ich habe eine Liste mit 3 DataFrames
In [43]: print(list_concat_df)
[    A   B   C   D
0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3,     A   B   C   D
0  a4  b4  c4  d4
1  a5  b5  c5  d5
2  a6  b6  c6  d6
3  a7  b7  c7  d7,      A    B    C    D
0   a8   b8   c8   d8
1   a9   b9   c9   d9
2  a10  b10  c10  d10
3  a11  b11  c11  d11]
#Fügen Sie 3 DataFrames zu einem hinzu und indizieren Sie sie neu
In [44]: concat_df = pd.concat(list_concat_df, ignore_index=True)

In [45]: print(concat_df)
      A    B    C    D
0    a0   b0   c0   d0
1    a1   b1   c1   d1
2    a2   b2   c2   d2
3    a3   b3   c3   d3
4    a4   b4   c4   d4
5    a5   b5   c5   d5
6    a6   b6   c6   d6
7    a7   b7   c7   d7
8    a8   b8   c8   d8
9    a9   b9   c9   d9
10  a10  b10  c10  d10
11  a11  b11  c11  d11


Sie können auch in einem 1-Liner-Stil schreiben, indem Sie das unten gezeigte Listenverständnis verwenden.

python3


In [46]: concat_files = glob.glob('data/concat*')
#Hier
In [47]: list_concat_df = [pd.read_csv(csv_file) for csv_file in concat_files]
#Danach das gleiche wie im vorherigen Beispiel
In [48]: print(list_concat_df)
[    A   B   C   D
0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3,     A   B   C   D
0  a4  b4  c4  d4
1  a5  b5  c5  d5
2  a6  b6  c6  d6
3  a7  b7  c7  d7,      A    B    C    D
0   a8   b8   c8   d8
1   a9   b9   c9   d9
2  a10  b10  c10  d10
3  a11  b11  c11  d11]

In [49]: concat_df = pd.concat(list_concat_df, ignore_index=True)

In [50]: print(concat_df)
      A    B    C    D
0    a0   b0   c0   d0
1    a1   b1   c1   d1
2    a2   b2   c2   d2
3    a3   b3   c3   d3
4    a4   b4   c4   d4
5    a5   b5   c5   d5
6    a6   b6   c6   d6
7    a7   b7   c7   d7
8    a8   b8   c8   d8
9    a9   b9   c9   d9
10  a10  b10  c10  d10
11  a11  b11  c11  d11

das ist alles. Es gibt viele tippähnliche Informationen (Wie) über Schmelze () und pivot_table () von Pandas im Netz, und es war eine Lernerfahrung, aber Konzepte / Methoden (Warum und Was) wie die Artikel von Tidy Data. Ich erkannte, dass es mächtig ist, wenn es mit dem Hintergrund von kombiniert wird.

Für Ihre Information

Wir haben den Inhalt dieses Artikels als Jupyter-Notizbuch auf Github hochgeladen, damit Sie Ihre Hände bewegen und ihn erleben können. Da die Daten auch angehängt sind, funktionieren sie so wie sie sind. Wenn Sie interessiert sind, laden Sie es bitte herunter und probieren Sie es aus. ishida330/tidy-data-in-pandas

Recommended Posts

Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Datenvisualisierung mit Pandas
Datenmanipulation mit Pandas!
Daten mit Pandas mischen
Versuchen Sie, den Boden durch Rekursion herauszufordern
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
Datenverarbeitungstipps mit Pandas
So extrahieren Sie mit Pandas Daten, denen der Wert nan nicht fehlt
Einfallsreichtum beim speichersparenden Umgang mit Daten mit Pandas
Versuchen Sie, die Datentabelle von Azure SQL Server mit pyodbc zu extrahieren
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Anhängen) zu verarbeiten.
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Encoding) zu verarbeiten.
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner zu verarbeiten (Konvertierung).
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Versuchen Sie, Facebook mit Python zu betreiben
Umgang mit unausgeglichenen Daten
Vielseitige Datenerfassung mit Pandas + Matplotlib
Versuchen Sie, Daten in MongoDB abzulegen
Versuchen Sie, die cloudmonkey-CLI in python3 -1 zu konvertieren
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Ich möchte ○○ mit Pandas machen
Versuchen Sie, Audio mit M5 STACK auszugeben
Versuchen Sie Daten parallel zu Distributed TensorFlow
[Aktienkursanalyse] Lernen Sie Pandas mit Nikkei-Durchschnitt (004: Ändern Sie die gelesenen Daten in Nikkei-Durchschnitt)
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Versuchen Sie, den kürzesten Weg mit Python + NetworkX + Social Data zu lösen
Versuchen Sie, CloudWatch-Metriken mit der Python-Datenquelle re: dash abzurufen
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Drop) zu verarbeiten.
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertieren Sie Rasterdaten mithilfe von Pandas in zeilenhaltige (?) Daten
Senden Sie Daten mit Vue.js an die DRF-API
Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Erster Versuch von YDK mit Cisco IOS-XE
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Wie man Problemdaten mit Paiza liest
Behandeln Sie 3D-Datenstrukturen mit Pandas
Beispiel für eine effiziente Datenverarbeitung mit PANDAS
Best Practices für den Umgang mit Daten mit Pandas
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
Erstellen von CSV-Beispieldaten mit Hypothese
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
Extrahieren Sie die Datentabelle von Azure SQL Server mit pyodbc und versuchen Sie, sie als numpy array / pandas dataframe zu definieren
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Ich habe versucht, die Daten mit Zwietracht zu speichern
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, das Dokument der Azure-Dokumentdatenbank mit pydocumentdb zu extrahieren
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Konvertieren Sie das PDF des mobilen Suica-Nutzungsverlaufs mit tabula-py in das Pandas-Datenrahmenformat
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
Speichern Sie Daten zum Flashen mit STM32 Nucleo Board