2018年8月28日火曜日

Jupyterで日本の人口推移データをグラフ化する

Jupterでe-statsから人口データをダウンロードしてグラフ表示するには、以下のコードを実行します

〇コード
%matplotlib inline
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import requests
import re
import pandas

#※データ取得ページ
#組織 厚生労働省 人口動態調査_人口動態統計_確定数_人口_年次_2016年 1_年次・性別人口
#http://www.data.go.jp/data/dataset/mhlw_20171204_0015/resource/53d97e92-5f10-4fcf-ab3b-a08c898f09c1

# download data and cleansing
url = "http://www.e-stat.go.jp/SG1/estat/GL08020103.do?_csvDownload_&fileId=000008018753&releaseCount=1"
table = False
rows = []
for line in requests.get(url).iter_lines():
  # SJISとして読み込む
  row = line.decode('SJIS')
  # 「総数」含まれている行から実データ
  if '総数' in row:
    table = True
  # ヘッダー1列目を「year」に修正
  row = re.sub('^,.*', 'year,total,male,female', row)
  # 西暦上2桁を修正
  row = re.sub('^ ', '19', row)
  # その他の位置の全角スペースを消す
  row = re.sub(' ', '', row)
  # 空行を除く
  if len(row) == 0:
    continue
  if table == True:
    rows.append(row)

filename = "population-data.csv"
with open(filename, mode='w') as outfile:
  outfile.write("\n".join(rows))

df = pandas.read_csv(filename)
df2 = df.loc[:,['year','male','female']]
ax = df2.set_index('year').plot()
ax.get_yaxis().set_major_formatter(
    ticker.FuncFormatter(lambda y, p: format(int(y), ',')))
plt.legend(loc='best')
plt.show()

〇出力画像



○関連情報
・requestsパッケージに関する他の記事はこちらを参照してください。

0 件のコメント:

コメントを投稿