数値に対する演算

数値として読み取れる列を選択に対しては pandas.DataFrame.agg を使うことで平均・中央値・自分で定義した演算を一括で実行することができます。使用しているデータセットについては『総務省のデータ』の項を参照してください。

データを読み込む

import pandas as pd

df = pd.read_csv("./z-001.csv")
df.head()
Unnamed: 0Unnamed: 1平成21年度平成22年度平成23年度平成24年度平成25年度平成26年度平成27年度平成28年度平成29年度平成30年度令和元年度
02社会保障関係費29.831.232.732.731.832.833.734.434.634.434.7
13公債費18.920.319.820.920.921.421.320.620.920.620.0
24機関費11.912.511.710.611.811.711.811.411.511.911.8
35教育費11.711.911.712.111.611.711.711.711.811.811.9
46国土保全及び開発費12.011.310.610.210.910.59.910.410.510.510.8

カラム名を変更する

Unnamed:XX がわかりにくいので、これらの文字列を置換します。

repl = lambda x: x.group(0)[::-1]
df.columns = df.columns.str.replace("Unnamed:.", "列名", regex=True)
df.head()
列名0列名1平成21年度平成22年度平成23年度平成24年度平成25年度平成26年度平成27年度平成28年度平成29年度平成30年度令和元年度
02社会保障関係費29.831.232.732.731.832.833.734.434.634.434.7
13公債費18.920.319.820.920.921.421.320.620.920.620.0
24機関費11.912.511.710.611.811.711.811.411.511.911.8
35教育費11.711.911.712.111.611.711.711.711.811.811.9
46国土保全及び開発費12.011.310.610.210.910.59.910.410.510.510.8
# 列名1の列はインデックスにして削除する
df.index = df["列名1"]
df = df.drop(["列名1"], axis=1)
df.head()
列名0平成21年度平成22年度平成23年度平成24年度平成25年度平成26年度平成27年度平成28年度平成29年度平成30年度令和元年度
列名1
社会保障関係費229.831.232.732.731.832.833.734.434.634.434.7
公債費318.920.319.820.920.921.421.320.620.920.620.0
機関費411.912.511.710.611.811.711.811.411.511.911.8
教育費511.711.911.712.111.611.711.711.711.811.811.9
国土保全及び開発費612.011.310.610.210.910.59.910.410.510.510.8

列名を確認する

想定したデータ型になっているかを確認します。

df.dtypes
列名0         int64
平成21年度    float64
平成22年度    float64
平成23年度    float64
平成24年度    float64
平成25年度    float64
平成26年度    float64
平成27年度    float64
平成28年度    float64
平成29年度    float64
平成30年度    float64
令和元年度     float64
dtype: object

年度ごとに平均・中央値などを求めてみる

数値として読み取れる列を選択して、その平均や中央値を求めてみます。“list of functions and/or function names, e.g. [np.sum, ‘mean’]“ということで関数名や関数を指定すると、列ごとにそれを実行します。

df.select_dtypes("number").agg(["mean", "median", "min", "max", "sum", "var", "std"])
列名0平成21年度平成22年度平成23年度平成24年度平成25年度平成26年度平成27年度平成28年度平成29年度平成30年度令和元年度
mean4.50000015.70000015.9000015.98333315.78333315.68333315.81666715.88333315.86666715.93333315.90000015.933333
median4.50000011.95000012.2000011.70000011.35000011.70000011.70000011.75000011.55000011.65000011.85000011.850000
min2.0000009.9000008.200009.4000008.2000007.1000006.8000006.9000006.7000006.3000006.2000006.400000
max7.00000029.80000031.2000032.70000032.70000031.80000032.80000033.70000034.40000034.60000034.40000034.700000
sum27.00000094.20000095.4000095.90000094.70000094.10000094.90000095.30000095.20000095.60000095.40000095.600000
var3.50000057.36400072.2920080.60566788.29366783.05366792.61366799.489667103.422667106.434667104.080000103.862667
std1.8708297.5739038.502478.9780669.3964719.1133789.6235999.97445110.16969410.31671810.20196110.191303

年度ごとの変化を可視化する

seabornを用いてデータをプロットしてみます。平成と令和が含まれる列のみを対象に抽出してプロットします。japanize_matplotlibにより日本語を表示できるようにしています。列名は pandas.DataFrame.filterでフィルタリングしています。

import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib

data = df.filter(regex="(平成|令和).+", axis=1).T
plt.figure(figsize=(12, 4))
sns.lineplot(data=data, palette="tab10", linewidth=2.5)
plt.grid()
plt.legend()

data.head()
列名1社会保障関係費公債費機関費教育費国土保全及び開発費産業経済費
平成21年度29.818.911.911.712.09.9
平成22年度31.220.312.511.911.38.2
平成23年度32.719.811.711.710.69.4
平成24年度32.720.910.612.110.28.2
平成25年度31.820.911.811.610.97.1

png