16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事誰得? 私しか得しないニッチな技術で記事投稿!

政府の統計データをe-Stat APIとPythonを使って取得する方法

Last updated at Posted at 2023-07-07

初めに

e-Stat APIとPythonを使って、政府の統計データを取得する方法をまとめています。
データ分析のゼミで都道府県別の人口データが必要になり、データ取得をしたのですがAPIに不慣れで結構大変だった為、これからe-StatAPIを使う初めての方向けに可能な限り分かりやすくまとめようと思います。

この記事は「政府統計データの取得の仕方」と「取得した統計データをpandasのデータフレームへ変換する方法」の2つの記事に分けて書こうと思います。
pythonを使わずにデータを取得したい方は統計表IDをブラウザーで確認する方法の途中でDBからダウンロードしてください。


e-Stat APIの機能は以下のようになっています。上の3つの機能について解説しています。

  • 【統計表情報取得】    ⇒ ざっくり言うと統計表IDの取得をするよ
  • 【メタ情報取得】     ⇒ 集計事項、地域事項、分類事項等がわかるよ
  • 【統計データ取得】    ⇒ 統計データを取得できるよ
  • 【データセット登録】   ⇒ 統計データ取得時の絞り込み条件を登録する機能
  • 【データセット参照】    ⇒ 登録されたデータセットの情報を参照する機能
  • 【データカタログ情報取得】 ⇒ 調査名、表題、リンク情報等を提供する機能。
  • 【統計データ一括取得】   ⇒ 統計データ(数値データ)を一括で提供する機能

各統計データには、統計表IDが割り当てられており、そのIDを使用することで特定の統計データを取得することができます。
統計データの取得は欲しいデータの統計表IDさえ分かればすぐにできます。
なので、統計データの取得に最低限必要な機能は【統計表情報取得】と【統計データ取得】の2つの機能だけです。


目次

  • APIキーの取得
  • 統計表IDの取得
    ⇒ブラウザーで確認する方法
    ⇒APIで取得する方法
  • メタ情報取得
  • 統計データ取得

APIキーの取得(アカウント作成)

e-stat公式ページに飛びアカウント作成をしてください。必要なものはE-mailアドレスだけです。
e-stat公式サイト

スクリーンショット 2023-07-06 135450.png
ログインが出来ましたらマイページに飛んでください


スクリーンショット 2023-07-06 135645.png
マイページからAPIキー発行ページに飛びます


スクリーンショット 2023-07-06 135910.png
IDの取得に関しては下のアプリケーションIDの取得を参考にしてください。内容は、名称やURLは適当でいいよーって書いてます。これでAPIキーが発行できました。
スクリーンショット 2023-07-06 141437.png

統計表情報取得

統計データの取得には統計表IDが必要です。
統計表IDの取得の仕方は主に2つあります。

  • ブラウザーで確認する方法
  • APIで取得する方法

ブラウザーで確認する方法

例:「都道府県別人口の割合-総人口」の統計IDの確認の仕方。
スクリーンショット 2023-07-06 193612.png

  1. 統計データを探す
  2. 分野から探す
  3. 人口推移
    検索で人口推移でも大丈夫です。
    image.png
    データベースに入ります。

スクリーンショット 2023-07-06 194148.png
年次に入ってください。


スクリーンショット 2023-07-06 194501.png
都道府県別人口の割合-総人口のAPIをクリックしてください。
補足:左のDBをクリックするとCSVデータがダウンロードできます。


image.png
するとURLが出てきて、statsDataId=0003448233で数字の部分が統計表IDです。
ブラウザーでの統計表IDの確認ができました。欲しいデータが決まっている場合はこの方法が一番早いと思います。

APIで取得する方法

e-Stat API仕様書いてます。ここを見ながらの方が分かりやすいと思います。

まずは、基本的な統計表IDの取得の仕方です。

http(s)://api.e-stat.go.jp/rest/<バージョン>/app/json/getStatsList?<パラメータ群>

こちらがJSON形式の統計表IDリクエストURLになります。getStatsListが統計表IDリクエストを表しています。ここを変更すればメタ情報取得や統計データ取得のURLになります。


requestsモジュールを使って、統計表IDを取得するコードです。

import requests
APP_ID = "APIキーを入れてね"
API_URL = "http://api.e-stat.go.jp/rest/3.0/app/json/getStatsList?"

params = {
    "appId": APP_ID,
    "limit": 2, # 取得数を2つに制限
    "lang": "J" # 日本語を指定
}

response = requests.get(API_URL, params=params)
data = response.json()

image.png
統計表IDはTABLE_INFに入っています。

今回取得したのは「民間企業の勤務条件制度等調査」の統計表IDで欲しい「都道府県別人口の割合-総人口」の統計IDではないので、paramsに条件を追加して指定していきます。


まず、こちらが完成したコードです。

APP_ID = "APIキーを入れてね"
API_URL = "http://api.e-stat.go.jp/rest/3.0/app/json/getStatsList?"

params = {
    "appId": APP_ID,
    "statsCode": "00200524",
    "searchWord": "都道府県別 AND 総人口",
    "openYears": 202304,
    "limit": 2,
    "lang": "J"  # 日本語を指定
}

response = requests.get(API_URL, params=params)
data = response.json()

image.png
image.png
これは先ほどブラウザーで確認した統計表IDと同じ0003448233であることが分かります。無事取得できました。
今回新たに追加した"statsCode","searchWord","openYears"の説明をします。
少し長いので大丈夫な方は飛ばしてください。

政府統計コード(statsCode)

「都道府県別人口の割合-総人口」は総務省の人口推計の中にあります。
イメージ:各省庁データ>総務省>人口推計>都道府県別人口の割合-総人口
政府統計コード(statsCode)を指定することで人口推計を指定することができ、検索範囲をだいぶ絞り込めます。
政府統計コード一覧(2023年7月版)
image.png
00200524が人口推計を指定するための政府統計コードです。


ちなみにブラウザーでも確認できます。
image.png
image.png

検索キーワード(searchWord)

検索キーワドを指定するとファイル名をキーワド検索してくれます。
今回欲しいデータは「都道府県別人口の割合-総人口」なのでキーワドに都道府県別と総人口を指定しました。

params = {
    "appId": APP_ID,
    "statsCode": "00200524",
    "searchWord": "都道府県別 AND 総人口",
    "limit": 2,
    "lang": "J"  # 日本語を指定
}

しかし、このparamsの指定だけだと
image.png
平成19年のデータを持ってきてしまい、欲しい統計IDではないです。
そこでopenYearsを指定しました。

公開年月(openYears)

データの公開年月を指定して最新のデータを取得します。
image.png
公開日はここで確認できます。
yyyymmの形で指定してください。y:year,m:monthです。
つまり年月で指定します。

メタ情報取得

取得できた統計ID:0003448233でメタ情報を取得します。
メタ情報は統計データの構造や属性、定義などに関する情報のことです。
メタ情報を取得するためにURLの最後をgetMetaInfoに変更しています。


import requests

APP_ID = "APIキーを入れてね"
API_URL = "http://api.e-stat.go.jp/rest/3.0/app/json/getMetaInfo?"

params = {
    "appId": APP_ID,
    "statsDataId": "0003448233",
    "limit": 2,
    "lang": "J"  # 日本語を指定
}

response = requests.get(API_URL, params=params)
data = response.json()

image.png
「都道府県別人口の割合-総人口」には県別のデータが入っていることが分かります。
左の@codeが各県の単一コードです
このメタ情報をもと北海道のデータだけを取得していきます。

統計データ取得

まず、「都道府県別人口の割合-総人口」の全てのデータを取得するコードです。
URLの最後をgetStatsDataに変更しています。

import requests

APP_ID = "APIキーを入れてね"
API_URL = "http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData"

params = {
    "appId": APP_ID,
    "statsDataId": "0003448233",
    "lang": "J"  # 日本語を指定
}

response = requests.get(API_URL, params=params)
# Process the response
data = response.json()

image.png
VALUEにほしいデータが入っています。

北海道のデータ取得(cdArea)

cdAreaに北海道の単一コード:01000を指定することで、北海道が指定できます。
北海道の単一コードはメタ情報取得で確認できます。

import requests

APP_ID = "APIキーを入れてね"
API_URL = "http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData"

params = {
    "appId": APP_ID,
    "statsDataId": "0003448233",
    "cdArea": "01000",
    "lang": "J"  # 日本語を指定
}

response = requests.get(API_URL, params=params)
# Process the response
data = response.json()

image.png
北海道のデータだけを取得することができました。VALUEの中身が欲しいデータです。


しかし、データ分析をする為には、このデータの形式ではやりづらいので、json形式から必要なデータを抽出してpandasのデータフレームに変換します。完成したものがこちらです。
image.png
無事データを変換することができました。長くなりましたのでpandasのデータフレームに変換する方法の解説は次回にしようと思います。
最後までお付き合いくださりありがとうございました。

参考

どこにでもいる30代SEの学習ブログ
Pythonでe-Stat APIを使う
e-Stat APIをGoogle Colab (Python) からアクセスする
e-Stat API仕様
ChatGPTへの質問

終わりに

政府の統計データをpythonで取得するのはめっちゃ大変だったので、少しでもこの記事がお役に立てると嬉しいです。

今回は政府統計データの取得の仕方をご紹介しました。
次回は「取得した統計データをpandasのデータフレームへ変換する方法」をご紹介しようと思います。

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?