Ich werde es als Memorandum schreiben, wenn ich * pandas * benutze. Das sagt die Antwort hier.
df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Grand Total']).T])
df = pd.concat([df,pd.DataFrame(df.sum(axis=1),columns=['Total'])],axis=1)
Die Grundlagen von * pandas * sind im offiziellen Handbuch zusammengefasst, so dass es in ca. 10 Minuten gelesen werden kann.
Als Testdaten verwenden wir Wetterinformationen aus der Vergangenheit, die von der Meteorologischen Agentur heruntergeladen werden können. Die Wetterbedingungen für Tokio für ein Jahr (Januar bis Dezember 2013) werden monatlich summiert und die Summe der Zeilen und Spalten berechnet.
Meteorological Agency | Frühere meteorologische Daten herunterladen
Stellen Sie die unabhängige Python-Bibliothek in pyvenv
zur Verfügung.
$ PYVENV_DIR=$HOME/.pyvenv/data-analytics
$ pyvenv-3.4 $PYVENV_DIR
$ source $PYVENV_DIR/bin/activate
$ pip install pandas
Nennen wir die von der Meteorologischen Agentur heruntergeladene Datei "weather-tokyo-2013.csv". Da es schwierig ist, mit * pandas * beim Herunterladen umzugehen, wird eine Vorverarbeitung durchgeführt.
>>> import pandas as pd
# Read CSV file, whose "day" column is parsed with `dateutil.parser.parse`.
>>> fname = 'weather-tokyo-2013.csv'
>>> df = pd.read_csv(fname, parse_dates=['day'])
# Check DataFrame overview.
>>> df.dtypes
>>> df.head(3)
>>> df.describe()
Ich konnte bestätigen, dass die CSV-Datei in * DataFrame * geladen wurde.
Extrahieren Sie dann den Teil "Monat" aus der Spalte "Tag" und fügen Sie ihn der Spalte "Monat" hinzu. Die Spalte "Tag" wird beim Lesen der CSV als Datum und Uhrzeit erkannt, sodass Sie die Datums- / Uhrzeit-API verwenden können.
>>> df['month'] = df['day'].apply(lambda x: x.month)
>>> grouped = df.groupby(['weather_day', 'month'])['day'].count()
>>> type(grouped)
>>> grouped.index
>>> grouped.head(3)
Der Rückgabewert von groupby
ist * Series *. Verwenden Sie daher die unstack
-Methode, um ihn in * DataFrame * zu konvertieren. Auf diese Weise können Sie die Zeilen- und Spaltensummen im Eröffnungsprozess berechnen, in diesem Fall die monatlichen Summen für die Wetterübersicht.
>>> monthly = grouped.unstack()
# Add "Total" column on each row.
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly.sum(axis=1), columns=['Total'])],
axis=1)
# Add "Grand Total" row on each column.
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly.sum(axis=0), columns=['Grand Total']).T])
Neben einfachen Summen können Sie auch nach Zeilen- oder Spaltennamen filtern, um sie zu addieren. In Anbetracht der Tatsache, dass ein Tag mit "Regen" in der Wetterlage ein Regentag und ein Tag mit "Fein" ein sonniger Tag ist, kann der Indexname zur Berechnung wie folgt verwendet werden. (Da die tatsächlichen Daten Wetter wie "sonniger vorübergehender Regen" enthalten, gibt es Tage, an denen es dupliziert wird.)
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly[monthly.index.map(lambda x: 'Regen' in x)].sum(axis=0), columns=['Rainy']).T])
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly[monthly.index.map(lambda x: 'Fein' in x)].sum(axis=0), columns=['Fine']).T])
Schreiben Sie abschließend die aggregierten Ergebnisse in eine Textdatei. Sie können den Header, den Indexnamen usw. mit optionalen Argumenten steuern. Beispielsweise wird das Trennzeichen durch * sep * angegeben.
>>> fname = 'weather-tokyo-2013-monthly-weather_name.csv'
>>> monthly.to_csv(fname, sep=',')
Überprüfen Sie anschließend das Ergebnis mit einer Tabellenberechnungssoftware wie Excel.
Sie können die Datendatei in Excel öffnen und das Diagramm zeichnen, aber Sie können auch in Python mit * matplotlib * zeichnen. Wenn Sie es für eine Weile verwenden möchten, verwenden Sie * ipython *. Es wird die Aufgaben der Grafikverarbeitung hinter den Kulissen ausführen.
$ pip install matplotlib ipython
$ ipython
Sie befinden sich jetzt in der interaktiven IPython-Shell. Lesen Sie die soeben exportierten Daten und zeichnen Sie eine Grafik des monatlichen Übergangs zwischen sonnigen und regnerischen Tagen.
In [1]: import pandas as pd
In [2]: pd.options.display.mpl_style = 'default'
In [3]: fname = 'weather-tokyo-2013-monthly-weather_name.csv'
In [4]: df = pd.read_csv(fname, index_col=0)
In [5]: df.T[['Fine', 'Rainy']][:12].plot(color=['r', 'b']).set_xlabel('Month')
Out[5]: <matplotlib.text.Text at 0x106cb89e8>
Ein solches Diagramm sollte in einem separaten Fenster gezeichnet werden.
Da es im Juni regnet, regnet es viel (weniger als die Hälfte der Tage), und Sie können sehen, dass es im Januar fast keine Regentage gibt. Das Wetter ändert sich leicht im Oktober, aber es scheint immer noch mehr Sonnentage als Regentage zu geben. Da die groben Aggregationsbedingungen leicht zu implementieren und die Schwankungen leicht zu verstehen sind, aggregieren wir bei der Durchführung einer detaillierten Analyse die Werte der Wetterübersicht nach deren Kategorisierung.
Recommended Posts