データ取得:統計局APIへのアクセス
国家統計局の「EasyQuery」インターフェースは JSON 形式で構造化データを返却するため、requests を使って簡単に取得できる。アクセス制限を避けるため、1 回取得したらローカルにキャッシュし、連続アクセスは避ける。
import requests, re, json, time
BASE = "https://data.stats.gov.cn/easyquery.htm"
QUERY = {
"m": "QueryData",
"dbcode": "hgnd",
"rowcode": "zb",
"colcode": "sj",
"wds": "[]",
"dfwds": '[{"wdcode":"zb","valuecode":"A0A04"}]',
"k1": str(int(time.time()*1000)),
"h": "1"
}
HEADERS = {
"User-Agent": "Mozilla/5.0 (compatible; DataBot/1.0)",
"Accept": "application/json, text/plain, */*",
"Referer": BASE + "?cn=C01"
}
def fetch_stats():
resp = requests.get(BASE, params=QUERY, headers=HEADERS, verify=False, timeout=10)
resp.raise_for_status()
payload = resp.json()
# データノードから数値を抽出
series = {}
for node in payload["returndata"]["datanodes"]:
m = re.search(r"\.(\w+)_sj\.(\d{4})", node["code"])
if not m:
continue
code, year = m.groups()
series.setdefault(code, {})[int(year)] = float(node["data"]["strdata"])
# 項目名を取得
names = {
n["code"]: n["name"]
for n in payload["returndata"]["wdnodes"][0]["nodes"]
}
return series, names
データクレンジングと可視化
取得したデータを Pandas DataFrame に格納し、欠損値を補完した後、Matplotlib で折れ線グラフを描画する。
import pandas as pd
import matplotlib.pyplot as plt
series, names = fetch_stats()
df = pd.DataFrame(series).sort_index() # 行:年度、列:指標
# 単位を元に戻す(統計局は「元」で表示)
df = df / 1
# 主要項目を抽出
targets = ["A0A0401", "A0A0403", "A0A0405", "A0A0409", "A0A040F", "A0A040H"]
subset = df[targets].rename(columns=names)
ax = subset.plot(figsize=(10, 5), marker="o")
ax.set_title("全国居民消費支出の推移(2014–2023)")
ax.set_ylabel("支出額(元)")
ax.grid(alpha=0.3)
plt.tight_layout()
plt.show()
ARIMA による 2 年間予測
statsmodels の ARIMA を利用し、各支出項目に対して (p=1, d=1, q=1) のモデルを構築し 2024–2025 年を予測する。予測区間も併せてプロットすることで、信頼性を可視化する。
from statsmodels.tsa.arima.model import ARIMA
def forecast(series, steps=2):
model = ARIMA(series.dropna(), order=(1, 1, 1))
res = model.fit()
pred = res.forecast(steps=steps)
ci = res.get_forecast(steps=steps).conf_int()
return pred, ci
future = {}
for col in targets:
f, ci = forecast(df[col])
future[col] = f
future_df = pd.DataFrame(future, index=[2024, 2025]).rename(columns=names)
# 可視化
plt.figure(figsize=(12, 6))
for col in targets:
name = names[col]
plt.plot(df.index, df[col], label=f"{name}(実績)")
plt.plot(future_df.index, future_df[name], "--", label=f"{name}(予測)")
plt.title("消費支出の2年先予測(ARIMA)")
plt.ylabel("支出額(元)")
plt.legend(ncol=2)
plt.grid(alpha=0.3)
plt.show()
まとめ
統計局 API から取得した最新 10 年分の消費支出データを基に、ARIMA モデルで 2024–2025 年の支出を予測した。結果は教育・文化・娯楽や医療保健の伸びが大きく、居住費も緩やかに増加する傾向が示された。これらの知見は政策立案やビジネス戦略の参考になる。
なお、本記事は学習目的であり、大量アクセスや商用利用は禁止されている。常に robots.txt や利用規約を確認し、適切な範囲でデータを利用すること。