政府統計総合窓口 e-Stat の統計データを pandas.DataFrame
形式で取得します。
pip install pandas-estat
関数 set_appid
でアプリケーション ID を設定します。
関数 read_statslist
, read_statsdata
は、統計表情報と統計データをそれぞれ取得します。
from pandas_estat import set_appid
from pandas_estat import read_statslist
set_appid("YOUR_APPLICATION_ID")
read_statslist("00200544") # サービス産業動向調査
# TABLE_INF STAT_CODE ... SUB_CATEGORY_CODE SUB_CATEGORY
# 0 0003179100 00200544 ... 02 需給流通
# 1 0003179101 00200544 ... 02 需給流通
# 2 0003085562 00200544 ... 02 需給流通
# 3 0003085612 00200544 ... 02 需給流通
# 4 0003090498 00200544 ... 02 需給流通
# .. ... ... ... ... ...
# 137 0003412789 00200544 ... 02 需給流通
# 138 0003412790 00200544 ... 02 需給流通
# 139 0003412791 00200544 ... 02 需給流通
# 140 0003412792 00200544 ... 02 需給流通
# 141 0003412793 00200544 ... 02 需給流通
#
# [142 rows x 35 columns]
from pandas_estat import set_appid
from pandas_estat import read_statsdata
set_appid("YOUR_APPLICATION_ID")
read_statsdata("0003191203") # 事業活動の産業(中分類)別売上高(月次)【2013年1月~】
# tab_code 表章項目 cat01_code 事業活動の産業 ... 時間軸(月次) unit value annotation
# 0 001 売上高(収入額) 00000 合計 ... 2013年1月 百万円 27331888 NaN
# 1 001 売上高(収入額) 00000 合計 ... 2013年2月 百万円 27395304 NaN
# 2 001 売上高(収入額) 00000 合計 ... 2013年3月 百万円 35140562 NaN
# 3 001 売上高(収入額) 00000 合計 ... 2013年4月 百万円 28676427 NaN
# 4 001 売上高(収入額) 00000 合計 ... 2013年5月 百万円 28648626 NaN
# ... ... ... ... ... ... ... ... ... ...
# 4411 001 売上高(収入額) 20000 その他 ... 2020年4月 百万円 791637 NaN
# 4412 001 売上高(収入額) 20000 その他 ... 2020年5月 百万円 753034 NaN
# 4413 001 売上高(収入額) 20000 その他 ... 2020年6月 p 百万円 844858 NaN
# 4414 001 売上高(収入額) 20000 その他 ... 2020年7月 p 百万円 809144 NaN
# 4415 001 売上高(収入額) 20000 その他 ... 2020年8月 p 百万円 798929 NaN
#
# [4416 rows x 11 columns]
以下、全国飲食店の売上データを例に詳しく説明します。
使い方は三手順です。
- e-Stat アプリケーション ID を設定する
- 統計表情報を取得する
- 統計データを取得する
e-Stat API 機能 からユーザ登録し、マイページからアプリケーション ID を発行します。
名称は好きな名前を入力します。URL は、公開サイトで利用しない場合 http://test.localhost/
等を入力します(参考: API 利用ガイド)。
名称・URL・概要はあとから変更できます。
右の「発行」ボタンをクリックすると表示される "appId" が、e-Stat API のアプリケーション ID です。 人に漏らさないよう注意してください。
発行したアプリケーション ID は、環境変数 ESTAT_APPID
に設定するか、set_appid
で設定します。
export ESTAT_APPID="YOUR_APPLICATION_ID"
from pandas_estat import set_appid
set_appid("YOUR_APPLICATION_ID")
e-Stat API が提供する統計データは、e-Stat 提供データ から確認できます。
全国飲食店の売上のデータは、例えば「サービス産業動向調査」に入っているので、これを取得しましょう。
左の 8 桁の数字 00200544
が「政府統計コード」で、該当する統計データの一覧を得るために必要です。
関数 read_statslist
は、政府統計コードから統計データの一覧(統計表情報)を pandas.DataFrame
形式で取得します。
サービス産業動向調査の統計表情報は次の通りです。
from pandas_estat import read_statslist
statslist = read_statslist("00200544") # サービス産業動向調査
statslist
# TABLE_INF STAT_CODE ... SUB_CATEGORY_CODE SUB_CATEGORY
# 0 0003179100 00200544 ... 02 需給流通
# 1 0003179101 00200544 ... 02 需給流通
# 2 0003085562 00200544 ... 02 需給流通
# 3 0003085612 00200544 ... 02 需給流通
# 4 0003090498 00200544 ... 02 需給流通
# .. ... ... ... ... ...
# 137 0003412789 00200544 ... 02 需給流通
# 138 0003412790 00200544 ... 02 需給流通
# 139 0003412791 00200544 ... 02 需給流通
# 140 0003412792 00200544 ... 02 需給流通
# 141 0003412793 00200544 ... 02 需給流通
#
# [142 rows x 35 columns]
月次の売上高は、次の表の二行目の「事業活動の産業(中分類)別売上高(月次)【2013年1月~】」です。
一列目 TABLE_INF
の数字 0003191203
が「統計表 ID」で、統計データを得るために必要です。
statslist = statslist[statslist.CYCLE == "月次"]
statslist[["TABLE_INF", "TITLE"]]
# TABLE_INF TITLE
# 2 0003085562 事業所・企業等の産業(中分類)別売上高,従業上の地位別事業従事者数(月次)【2013年1月~】
# 5 0003191203 事業活動の産業(中分類)別売上高(月次)【2013年1月~】
# 7 0003085489 事業活動の産業(中分類)別需要の状況【2013年1月~2016年12月】
# 8 0003085521 事業活動の産業(中分類),事業所・企業等の産業(中分類)別売上高(月次)【2013年1月~12月】
# 10 0003094573 事業活動の産業(一部中分類),事業所・企業等の産業(一部中分類)別売上高(月次)【2013年...
統計表 ID から、飲食店売上高のデータを取得しましょう。
関数 read_statsdata
は、統計表 ID から統計データを pandas.DataFrame
形式で取得します。
取得された表データは次の通りです。 さまざまな産業(通信、放送、飲食店、…)の売上高やその合計が、ひとつの表に格納されています。
from pandas_estat import read_statsdata
dataframe = read_statsdata("0003191203") # 事業活動の産業(中分類)別売上高(月次)【2013年1月~】
dataframe
# tab_code 表章項目 cat01_code 事業活動の産業 ... 時間軸(月次) unit value annotation
# 0 001 売上高(収入額) 00000 合計 ... 2013年1月 百万円 27331888 NaN
# 1 001 売上高(収入額) 00000 合計 ... 2013年2月 百万円 27395304 NaN
# 2 001 売上高(収入額) 00000 合計 ... 2013年3月 百万円 35140562 NaN
# 3 001 売上高(収入額) 00000 合計 ... 2013年4月 百万円 28676427 NaN
# 4 001 売上高(収入額) 00000 合計 ... 2013年5月 百万円 28648626 NaN
# ... ... ... ... ... ... ... ... ... ...
# 4411 001 売上高(収入額) 20000 その他 ... 2020年4月 百万円 791637 NaN
# 4412 001 売上高(収入額) 20000 その他 ... 2020年5月 百万円 753034 NaN
# 4413 001 売上高(収入額) 20000 その他 ... 2020年6月 p 百万円 844858 NaN
# 4414 001 売上高(収入額) 20000 その他 ... 2020年7月 p 百万円 809144 NaN
# 4415 001 売上高(収入額) 20000 その他 ... 2020年8月 p 百万円 798929 NaN
#
# [4416 rows x 11 columns]
set(dataframe["事業活動の産業"])
# {'37通信業',
# '38放送業',
# '39情報サービス業',
# ...
# '76飲食店',
# ...
# '合計',
# ...
# 'Rサービス業(他に分類されないもの)\u3000(※「政治・経済・文化団体」、「宗教」及び「外国公務」を除く)'}
表データから、飲食店・月次のみを抽出して、日付をパースし、日付でソートします。 これで、全国飲食店の月次売上高が取得できました。単位は百万円です。
dataframe = dataframe[dataframe["事業活動の産業"] == "76飲食店"]
dataframe = dataframe[dataframe["時間軸(月次)"].str.endswith("月")]
dataframe["時間軸(月次)"] = pd.to_datetime(dataframe["時間軸(月次)"], format="%Y年%m月")
dataframe = dataframe.sort_values("時間軸(月次)")
dataframe[["時間軸(月次)", "value", "unit"]]
# 時間軸(月次) value unit
# 2392 2013-01-01 1502478 百万円
# 2393 2013-02-01 1389255 百万円
# 2394 2013-03-01 1680085 百万円
# 2395 2013-04-01 1541662 百万円
# 2396 2013-05-01 1606195 百万円
# ... ... ... ...
# 2476 2020-01-01 1660809 百万円
# 2477 2020-02-01 1509541 百万円
# 2478 2020-03-01 1342779 百万円
# 2479 2020-04-01 650055 百万円
# 2480 2020-05-01 747595 百万円
#
# [89 rows x 3 columns]
次のようにして、全国飲食店の売上高の推移がプロットできます。
import matplotlib.pyplot as plt
import seaborn
seaborn.set_style("whitegrid")
x = dataframe["時間軸(月次)"].values
y = dataframe["value"].values.astype(float) / 10e3 # 十億円
plt.figure(figsize=(12, 4))
plt.plot(x, y)
plt.title("Restaurants Monthly Revenue")
plt.xlabel("Month")
plt.ylabel("Revenue [bn JPY]")
plt.savefig("restaurants.png", dpi=300)
plt.show()
Any contributions are more than welcome.
The maintainer (simaki) is not making further enhancements and appreciates pull requests to make them. See Issue for proposed features. Please take a look at CONTRIBUTING.md before creating a pull request.
Issues and pull requests can be in English or 日本語.
このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。