E-statAPIを使ってPythonで分析をしてみる

## 初めに

gaccoにて、統計学入門を受講して、e-statの紹介の講義を受講してみました。

試しに、e-statAPIを使ってみましたので、
簡単に使い方を説明したいと思います。

# E-statのページ

https://www.e-stat.go.jp

こちらのページでそのままデータを分析することもできますが、応用して使える様に
なるためにAPIを利用してJupyter Notebook上で分析できる様になりたいと思います。

詳細は、詳しい使い方は以下のページを参照して頂き、ここではとりあえず動かしてみてみるという内容を記載します。

https://qiita.com/yumaloop/items/efc4c8981510b78dd560

## ユーザー登録

APIを利用するには、まずユーザー登録が必要です。

[eStats API](https://www.e-stat.go.jp/api/)のページにアクセスして、ユーザー登録を行った後、マイページから「API機能（アプリケーションID発行）」を選択して、アプリケーションIDを発行します。

上記については、他の解説ページと内容が異なっており（e-stat内の説明ページも誤っていました。）、最近ページ構成が変わったのではないかと思います。

APIの使い方については、[API仕様](https://www.e-stat.go.jp/api/api-info/e-stat-manual3-0)を参照してください。

ここでは、家計調査を利用して、各家計のさつまいもの消費に関するデータの確認した内容について記載します。

## Pythonコード

```python
import urllib
import requests
import csv
import pandas as pd
import matplotlib.pyplot as put

appID = ***** #取得したアプリケーションIDを記載
```



CSVファイルとして、ターゲットデータをダウンロードする。

```python
# csv生成

def get_csv(params_dict):
    
    base_url = "https://api.e-stat.go.jp/rest"
    
    params_str = urllib.parse.urlencode(params_dict)
    version = "3.0"

    url = (
        f"{base_url}/{version}"
        f"/app/getSimpleStatsData?{params_str}"
        )
    r = requests.get(url)
    with open(target_file, 'w', encoding='utf-8') as f:
        f.write(r.content.decode('utf-8'))
```

```python
# 家計データのターゲットコードを取得する（今回はさつまいも）

params_dict = {
        "cdCat01":"010512010", #さつまいもを表すコード（コードはe-statの統計ページで確認してください)
        "appId": appID,
        "lang": "J",
        "statsDataId": "0003348239", # 家計調査を表すコード、こちらも実際のe-statの統計ページを確認してください。
        "metaGetFlg": "Y",
        "cntGetFlg": "N",  # Yにすると件数のみ、Nにすると統計データ
        "explanationGetFlg": "N",
        "annotationGetFlg":"Y",
        "sectionHeaderFlg":2 # 説明ようのヘッダーを除外する場合は2
}

get_csv(params_dict)

df = pd.read_csv(target_file)
```

CSVファイルをデータフレームにまとめて格納する(都道府県ごとのデータに分割する）

```python
df_all = pd.DataFrame()
i = 0

for name, group in df[df['世帯区分（年次－二人以上の世帯）'] == '二人以上の世帯（2000年～）'].groupby('地域区分'):

    if i ==0:
        df_all = group[['品目分類（2020年改定）','時間軸（年次）','value']].rename(columns={'value':name}).reset_index(drop=True)

    else:
        tmp_df = group[['value']].rename(columns={'value':name}).reset_index(drop=True)
        df_all = pd.concat([df_all,tmp_df],axis=1)
    i += 1
    
```

```python
fig = plt.figure(figsize=(8,12))


ax1 = fig.add_subplot(2,1,1)

plt.ylim(0,1600)
plt.xticks(rotation=90)

ax1.plot(df_all['時間軸（年次）'].dropna(),df_all['01100 札幌市'].dropna(),label='Sapporo')
ax1.plot(df_all['時間軸（年次）'].dropna(),df_all['02201 青森市'].dropna(),label='Aomori')
ax1.plot(df_all['時間軸（年次）'].dropna(),df_all['03201 盛岡市'].dropna(),label='Moriokai')


ax2 = fig.add_subplot(2,1,2)
ax2.plot(df_all['時間軸（年次）'].dropna(),df_all['全国'][:14],label='all')
ax2.plot(df_all['時間軸（年次）'].dropna(),df_all['13100 東京都区部'][:14],label='Tokyo')
ax2.plot(df_all['時間軸（年次）'].dropna(),df_all['27100 大阪市'][:14],label='Osaka')

plt.ylim(0,1600)
ax1.legend()
plt.xticks(rotation=90)
ax2.legend()

fig.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004109/71897cf7-9398-3506-d744-6a289f9ddf4e.png)


## 考察

別の課題でちょっと調べてみたのですが、北国（北海道、青森、岩手）などので2019年からさつまいも
の消費が増えているっぽい（東京も少し同じ傾向があるかもしれません。）ことがわかりました。

このくらいの分析であれば、API使わない方が早いと思いますが、他のデータと組み合わせたりといったことなると、APIの利用が推奨されるかと思います。

本来であれば、CSVよりJSONのAPIを利用した方が汎用性がありそうですが、今回は手早く結果をみてみたかったのでCSVをダウンロードしてみてみました。