Die für jedes Jahr aggregierten Werte werden für jeweils 10 Jahre zusammengefasst.
Setze die Klasse mit cut
of pandas
und aggregiere mit groupby
.
Die verwendeten Daten sind das CSV-Format des vom Statistikamt des Ministeriums für innere Angelegenheiten und Kommunikation veröffentlichten Excel "Bevölkerung nach Alter".
Löschen Sie zur Vereinfachung der Verwendung die Beschreibungszeile oben in den Daten, die Notiz unten sowie die Zeilen "100+" und "Unbekannt". Die angepasste Datei lautet "populations-by-age.csv".
Laden Sie zuerst die Module "numpy" und "pandas". Ich habe auch eine Einstellung hinzugefügt, um das Diagramm in IPython zu zeichnen.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.options.display.mpl_style = 'default'
Lesen Sie die CSV-Datei. Geben Sie die erste Spalte als Index an. Überprüfen Sie nach dem Lesen den Datentyp.
df = pd.read_csv('population-by-age.csv', index_col='age')
print df.dtypes
y1920 int64
y1930 int64
y1940 int64
y1950 int64
y1960 int64
y1970 int64
y1980 int64
y1990 int64
y2000 int64
y2010 int64
dtype: object
Lassen Sie uns außerdem den Anfang und das Ende sowie die Statistiken überprüfen. Die Anzeige entfällt.
print df.head(3)
print df.tail(3)
print df.describe()
Verwenden Sie cut
, um die Klasse festzulegen.
Wenn Sie die Klassenbreite ändern möchten, passen Sie das dritte Argument von "range" an. Das Einschließen oder Nichteinschließen beider Enden der Klasse ist als Option angegeben. Wechseln Sie entsprechend zwischen den Optionen * include_lowest * und * right *.
labels = [ "{0} - {1}".format(i, i + 9) for i in range(0, 100, 10) ]
c = pd.cut(df.index, np.arange(0, 101, 10),
include_lowest=True, right=False,
labels=labels)
print df.groupby(c).sum()
y1920 y1930 y1940 y1950 y1960 y1970 y1980
0 - 9 14314635 16778220 17961607 20728122 17049068 16965066 18547450
10 - 19 11520624 13340649 15816378 17267585 20326076 16921989 17231873
20 - 29 8533259 10367140 11756837 13910662 16527810 19749434 16882381
30 - 39 7020188 7798498 9370143 10250310 13555835 16578939 19973312
40 - 49 5902331 6332741 7041270 8487529 9835689 13217564 16427887
50 - 59 4074855 5046797 5446760 6137697 7842597 9230197 12813527
60 - 69 2968342 2977915 3782574 4074610 5092019 6709761 8429928
70 - 79 1378630 1478319 1541314 1967261 2518482 3401952 5059662
80 - 89 236419 315624 338472 354836 638738 879221 1503633
90 - 99 13657 13997 18567 16258 32043 65629 118391
y1990 y2000 y2010
0 - 9 13959454 11925887 10882409
10 - 19 18533872 14034777 11984392
20 - 29 16870834 18211769 13720134
30 - 39 16791465 16891475 18127846
40 - 49 19676302 16716227 16774981
50 - 59 15813274 19176162 16308233
60 - 69 11848590 14841772 18247422
70 - 79 6835747 10051176 12904315
80 - 89 2665908 4147012 6768852
90 - 99 286141 688769 1318463
So konnte ich alle 10 Jahre die für jedes Altersjahr aggregierten Werte aggregieren.
Aggregatfunktionen können zusätzlich zu "sum" angegeben werden, und es können mehrere Aggregatfunktionen angegeben werden. Lassen Sie uns die folgenden Ergebnisse überprüfen.
print df.groupby(c).agg(['count', 'min', 'max', 'mean', 'std'])
Da es schwierig ist, die Beziehung nur zu den oben genannten Zahlen zu verstehen, erstellen Sie ein Diagramm, um einen Überblick über die Zahlen zu erhalten. Versuchen Sie, sie nebeneinander anzuordnen, um die * gestapelten * Optionen beim Zeichnen zu vergleichen.
fig, axes = plt.subplots(ncols=2)
df.groupby(c).sum().plot(kind='bar', ax=axes[0])
df.groupby(c).sum().T.plot(kind='bar', stacked=True, ax=axes[1])
Betrachtet man alle 10 Jahre, so nimmt die Bevölkerung über 60 Jahre in jüngerer Zeit zu. Auf der anderen Seite können wir sehen, dass die Bevölkerung junger Menschen zurückgeht. Wenn wir uns die gestapelten Grafiken ansehen, können wir sehen, dass die Bevölkerung von 1920 bis 2000 stetig zugenommen hat, aber bis 2010 zurückgegangen ist. Bei der Erzeugungsverteilung nimmt das Verhältnis des oberen Teils des Balkens im Diagramm zu.
Nachdem wir nun einen allgemeinen Trend haben, werden wir jede Reihe des ursprünglichen Datenrahmens zeichnen. Wenn Sie es einfach zeichnen, wird es chaotisch. Zeichnen wir es also als separates Diagramm für jedes Jahr. Diesmal ist die Variable "Achsen" zweidimensional. Seien Sie also vorsichtig, wenn Sie den Array-Index angeben.
fig, axes = plt.subplots(nrows=5, ncols=2)
for i, y in enumerate(['y1920', 'y1930', 'y1940', 'y1950', 'y1960']):
df[y].plot(ax=axes[i, 0])
axes[i, 0].set_title(y)
if y != 'y1960':
axes[i, 0].get_xaxis().set_visible(False)
for i, y in enumerate(['y1970', 'y1980', 'y1990', 'y2000', 'y2010']):
df[y].plot(ax=axes[i, 1])
axes[i, 1].set_title(y)
if y != 'y2010':
axes[i, 1].get_xaxis().set_visible(False)
Wenn Sie sich die einzelnen Grafiken ansehen, können Sie die Auswirkungen des Babybooms erkennen. Sie können auch sehen, dass die Zahl der Geburten seit dem zweiten Babyboom zurückgegangen ist und dass sich die Basis älterer Menschen seit 1970 erweitert hat (die Lebensdauer wurde verlängert).
Recommended Posts