e-Stat APIでデータ自動取得&CSV保存!Pythonで簡単分析を始めよう!

46ba5184-6371-4895-b6ae-3080441fb851.png


ビッグデータ解析って、最初のデータ集めが大変ですよね。特に政府統計サイトからのデータって、
手作業だと面倒くさい…。そんな悩みを解決してくれるのが、Pythonを使ったe-Stat APIの自動取得です!

この記事では、Pythonを使ってe-Stat APIからデータを自動取得し、CSVファイルに保存する方法をわかりやすく解説します。さらに、**scheduleライブラリ**を使って、**自動で定期的にデータを取得する**方法も紹介します。

### 準備

まず、Pythonと必要なライブラリをインストールしましょう。

```bash
pip install requests pandas schedule
```

### e-Stat APIの利用申請

e-Stat APIを使うには、事前に利用申請が必要です。e-Statのサイトから申請を行い、アプリケーションIDを取得しましょう。

### コード解説

```python
import requests
import pandas as pd
import schedule
import time
from datetime import datetime

# データ取得&保存関数
def fetch_and_save_data(statsDataId, time_periods, appId, file_path):
# APIのURL
base_url = 'http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData'

# APIパラメータ設定
params = {
'appId': appId,
'lang': 'J',
'statsDataId': statsDataId,
'metaGetFlg': 'Y',
'cntGetFlg': 'N',
'explanationGetFlg': 'Y',
'annotationGetFlg': 'Y',
'sectionHeaderFlg': '1',
'replaceSpChars': '0',
'cdTime': ','.join(time_periods)
}

# データ取得
response = requests.get(base_url, params=params)
data_json = response.json()

# データ整形
periods = data_json["GET_STATS_DATA"]['PARAMETER']['NARROWING_COND']['CODE_TIME_SELECT'].split(',')
dftitle = pd.DataFrame(periods, columns=["日付"])

data_values = data_json["GET_STATS_DATA"]['STATISTICAL_DATA']['DATA_INF']['VALUE']
items = data_json["GET_STATS_DATA"]["STATISTICAL_DATA"]['CLASS_INF']['CLASS_OBJ'][1]['CLASS']

costlist = [data_values[i]['$'] for i in range(len(data_values))]
costlistlist = [costlist[i:i + len(time_periods)] for i in range(0, len(data_values), len(time_periods))]

categolylist = [items[i]["@name"] for i in range(len(items))]

# データフレーム作成
dfst = pd.DataFrame(costlistlist[0], columns=[categolylist[0]])
for i in range(1, len(costlistlist)):
dfst1 = pd.DataFrame(costlistlist[i], columns=[categolylist[i]])
dfst = pd.concat([dfst, dfst1], axis=1)
dfst = pd.concat([dftitle, dfst], axis=1)

# CSV保存
dfst.to_csv(file_path, encoding='utf-8-sig', index=False)
print(f"{datetime.now()} - データを保存しました: {file_path}")

# スケジュール設定関数
def schedule_data_fetch():
statsDataId = '0003348231' # 取得したい統計データID
appId = '自分のID' # e-Stat APIのアプリケーションID
time_periods = ['2020000406', '2021000406', '2022000406', '2023000406', '2024000406']
file_path = f'C:/Users/Owner/Desktop/data_{datetime.now().strftime("%Y%m%d")}.csv'

fetch_and_save_data(statsDataId, time_periods, appId, file_path)

# 毎月1日にデータ取得
schedule.every().month.at("10:00").do(schedule_data_fetch)

# スケジュール実行
while True:
schedule.run_pending()
time.sleep(60) # 1分ごとにチェック
```

**コード解説**

1. **`fetch_and_save_data` 関数:**
- e-Stat APIからデータを取得してCSVファイルに保存します。
- 引数には、取得したい統計データID (`statsDataId`)、取得期間 (`time_periods`)、アプリケーションID (`appId`)、保存ファイルパス (`file_path`) を指定します。
- APIパラメータを設定し、`requests.get` でデータを取得します。
- 取得したJSONデータを整形し、Pandasを使ってデータフレームを作成します。
- データフレームをCSVファイルに保存します。

2. **`schedule_data_fetch` 関数:**
- `fetch_and_save_data` 関数を呼び出して、データを取得&保存を実行します。
- 取得する統計データID、取得期間、アプリケーションID、保存ファイルパスなどを設定します。

3. **スケジュール設定:**
- `schedule.every().month.at("10:00").do(schedule_data_fetch)` で、毎月1日10時に `schedule_data_fetch` 関数を実行するようにスケジュール設定します。
- `schedule.run_pending()` でスケジュールされたタスクを実行し、`time.sleep(60)` で1分ごとにスケジュールをチェックします。

### メリット

- **完全自動化:** 一度設定すれば、指定した日に自動でデータを取得&保存します。
- **柔軟なスケジューリング:** `schedule` ライブラリを使えば、任意の頻度や時間にデータ取得を行うことができます。
- **データ整理の簡素化:** データの取得から保存までが一貫しているため、手動での管理が不要です。

### まとめ

この記事では、Pythonを使ってe-Stat APIからデータを自動取得し、CSVファイルに保存する方法を紹介しました。

この方法を使えば、政府統計サイトからのデータ取得が格段に楽になります。ぜひ試して、データ分析をもっと効率的に進めてみましょう!




この記事へのコメント