【Python】PandasとMatplotlibの勉強(1)


PandasとMatplotlibの勉強のため、人口の推移などをグラフ化してみました。

使用したデータ

www.e-stat.go.jp

の「男女別人口-全国,都道府県(大正9年~平成27年)」を使用

データの内容

f:id:ga_a_pi:20210101125509p:plain

最終アウトプット

f:id:ga_a_pi:20210101125524p:plain

ソースコード

----------ここから
#使うライブラリ

#Pandas
import pandas as pd

#matplotを読み込む
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')

#matplotの日本語版を読み込み
import japanize_matplotlib


#データを読み込む
df = pd.read_csv('c01.csv',encoding='shift-jis')
df


#dfのindexの0〜979を取り出す。
#980,981はデータが入っていない。
#1) 沖縄県は調査されなかったため,含まれていない。などの注釈が書いてある。
df=df.iloc[0:980,]
df


#都道府県コードに0A、0Bがあるので除外する
#dfの都道府県コードが0Aではない行をdfへ入れる
#dfの都道府県コードが0Bではない行をdfへ入れる
#人口(総数)に-があるので除外する
df=df[-df['都道府県コード'].isin(['0A'])]
df=df[-df['都道府県コード'].isin(['0B'])]
df=df[-df['人口(総数)'].isin(['-'])]


#dtypesでデータ型を確認する
df.dtypes
#人口(総数)がobjectになっている
#都道府県コードがobjectになっている


#人口(総数)と都道府県コードをintにする
df['人口(総数)']=df['人口(総数)'].astype(int)
df['都道府県コード']=df['都道府県コード'].astype(int)


#dtypesでデータ型を確認する
df.dtypes
#都道府県コード int64
#人口(総数) int64


#都道府県コードが1〜47のものを抽出
#(0は全国のため除外する)
df = df.query('都道府県コード < 48 and 都道府県コード > 0' )
df


#グラフを作成

#Figureを作成
fig = plt.figure()

#Axesを指定
#fig.add_subplot(行,列,場所)
ax = fig.add_subplot(1, 1, 1)

# タイトルと軸ラベルを設定
ax.set_title("都道府県別人口推移", fontsize = 14)
ax.set_xlabel("年", fontsize = 12)
ax.set_ylabel("人口", fontsize = 12)
#ax.set_xticksは棒グラフで使う。x軸ラベルの位置
#ax.set_xticks()
#ax.set_xticklabelsは棒グラフで使う。x軸ラベル
#ax.set_xticklabels(,rotation=90)
#Y軸を10の乗数の表示では無くする
ax.ticklabel_format(style='plain', axis='y')
#Y軸をカンマ区切りにする
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, loc: "{:,}".format(int(y))))
ax.grid()

# 右側の余白を調整
#fig.subplots_adjust(right=2)

# Axesにグラフを追加

for key, grp in df.groupby('都道府県名'):
x=grp['西暦(年)']
y=grp['人口(総数)']

ax.plot(x,y,label=key,marker="o")
#legend(凡例)を欄外に書く。
#bbox_to_anchor=は位置。bbox_to_anchor=(1,1)だとピタッとグラフにくっついた位置に凡例が来る
#borderaxespad=は凡例の周りの余白
#ncol=は凡例の列数
ax.legend(bbox_to_anchor=(1.05,1.05),
loc='upper left',
borderaxespad=1,
ncol=3
)

plt.show()

----------