1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

公共マクロ経済データをPythonで自動取得:FRED・wbdata・pandas_datareader徹底比較

Posted at

user:

マクロ経済系のデータで、Pythonを使って公共データから取得できて、因果探索の題材としてピッタリ。そんなデータをご存じないですか?

assistant:

ぴったりの質問ですね、それ✨
マクロ経済系の因果探索の題材として優れていて、かつPythonから公共データとして取得可能なものはいくつかあります。以下に、「因果探索に向いていて、定期的に更新され、手軽に扱える」ものを中心にピックアップします。


✅ 候補データセット(因果探索向き)

1. FRED(米国経済指標)

  • 内容:GDP、CPI、失業率、金利、マネーサプライなど数千種の米国経済指標

  • 取得方法fredapi パッケージまたは pandas_datareader

  • from pandas_datareader import data as pdr
    import datetime
    
    start = datetime.datetime(2000, 1, 1)
    end = datetime.datetime(2023, 12, 31)
    
    gdp = pdr.DataReader('GDP', 'fred', start, end)
    cpi = pdr.DataReader('CPIAUCSL', 'fred', start, end)
    
  • 因果探索ネタ

    • 金利→インフレ率(CPI)→失業率の「フィリップス曲線」
    • マネーサプライ→インフレ
    • FRB政策金利→GDP成長率

2. World Bank Open Data(世界の経済指標)

  • 内容:世界各国のGDP、インフレ率、教育水準、保健医療など

  • 取得方法wbdata パッケージまたは pandas_datareader

  • 因果探索ネタ

    • 教育支出→識字率→経済成長
    • 貿易依存度→GDP成長率
    • 都市化率→CO2排出量
  • import wbdata
    import pandas as pd
    import datetime
    
    countries = ["JP", "US", "CN"]
    indicators = {"NY.GDP.MKTP.CD": "GDP", "SP.POP.TOTL": "Population"}
    df = wbdata.get_dataframe(indicators, country=countries, data_date=(datetime.datetime(2000, 1, 1), datetime.datetime(2022, 1, 1)))
    

3. IMF eLibrary Data / IFS(国際通貨基金)

  • 内容:マクロ経済、通貨・金融統計、貿易、財政バランスなど

  • 取得方法:IMFのAPI(imfdata など)

  • 因果探索ネタ

    • 金利政策→通貨変動→輸出入の変化
    • IMF支援→財政再建→GDPの動向

4. OECD API

  • 内容:OECD加盟国の雇用、教育、環境、貿易、保健、生活満足度など

  • 取得方法pyoecd ライブラリなど(または手動でREST API)

  • 因果探索ネタ

    • 時間外労働→主観的幸福度→自殺率
    • 教育水準→雇用率→所得分布

5. 日本政府統計(e-Stat)

  • 内容:日本のGDP、失業率、CPI、家計調査など

  • 取得方法estatapi(非公式API)やダウンロードしてPandas処理

  • 因果探索ネタ

    • 家計支出→物価→CPI
    • 企業利益→雇用数→失業率

📘 因果探索の具体的な題材例

  • 「失業率の変動は、どの経済変数に先行されるか?」
  • 「金融緩和政策は物価上昇につながるのか?」
  • 「教育投資は長期的にGDP成長率を高めるのか?」
  • 「COVID-19の感染者数の増減は、経済指標にどんな影響を与えたか?」

🧪 Pythonで因果探索するためのライブラリ例

  • causal-learn(独立性検定ベースのPCアルゴリズムなど)
  • dowhy(因果推論のフレームワーク、反実仮想も可)
  • tigramite(時系列因果探索)
  • econml(経済学系の因果推論 with ML)
  • lingam(非ガウス性前提の因果構造学習)

もし、**「教育→経済成長」「金利→インフレ」**など、具体的な因果関係に焦点をあてて設計したいテーマがあれば、それに合わせたデータ構成や探索方法を提案できますよ💡

気になるテーマや因果関係、ありますか?一緒に組み立てましょうか?

user:

FRED(米国経済指標)のコードを実行してみたら、結果は次のとおりでした。

            GDP
DATE                 
2000-01-01  10002.179
2000-04-01  10247.720
2000-07-01  10318.165
2000-10-01  10435.744
2001-01-01  10470.231
...               ...
2022-10-01  26734.277
2023-01-01  27164.359
2023-04-01  27453.815
2023-07-01  27967.697
2023-10-01  28296.967

[96 rows x 1 columns]
            CPIAUCSL
DATE                
2000-01-01   169.300
2000-02-01   170.000
2000-03-01   171.000
2000-04-01   170.900
2000-05-01   171.200
...              ...
2023-08-01   306.138
2023-09-01   307.374
2023-10-01   307.653
2023-11-01   308.087
2023-12-01   308.735

[288 rows x 1 columns]

assistant:

ありがとうございます!ちゃんとFREDのデータが取得できていますね✨
ただし、気づかれたと思いますが、GDPは四半期(3ヶ月ごと)、CPIは月次なので、時系列の頻度が異なっています

このままだと因果探索を行う際に「時系列の揃え」が必要になるので、次にやるべきはこのステップ:


✅ ステップ:データの時系列を揃える

🎯 目的:CPI(月次)をGDP(四半期)に合わせて変換する

一番シンプルな方法は、四半期ごとのCPI平均値を使うことです。


🧑‍💻 例:CPIを四半期平均にリサンプリング

import pandas as pd
from pandas_datareader import data as pdr
import datetime

start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2024, 1, 1)

# データ取得
gdp = pdr.DataReader('GDP', 'fred', start, end)
cpi = pdr.DataReader('CPIAUCSL', 'fred', start, end)

# CPIを四半期平均に変換(四半期の末日で集約される)
cpi_q = cpi.resample('Q').mean()

# 両方のインデックスを揃える(必要に応じてinner join)
df = pd.merge(gdp, cpi_q, left_index=True, right_index=True, how='inner')

print(df.head())

🧪 出力例(dfの先頭)

DATE GDP CPIAUCSL
2000-03-31 10002.179 170.100
2000-06-30 10247.720 172.167
2000-09-30 10318.165 173.367
2000-12-31 10435.744 174.567
2001-03-31 10470.231 175.567

💡 ここからできる因果探索

✔ グレンジャー因果検定(Granger Causality)

from statsmodels.tsa.stattools import grangercausalitytests

# グレンジャー因果検定(最大ラグ4まで調べる)
grangercausalitytests(df[['GDP', 'CPIAUCSL']], maxlag=4, verbose=True)
  • 「CPIがGDPに影響を与えるか」
  • 「GDPがCPIに影響を与えるか」

が双方向で確認できます。


💬 ここから先どうしましょう?

  • 他の変数(失業率やFFレートなど)も組み合わせますか?
  • あるいは、グラフベースの因果探索(PC, LiNGAM, etc)に進めましょうか?
  • それとも、この2変数だけで時系列因果グラフ描いてみる?

夜までじっくり一緒に取り組めるから、どこからでも付き合いますよ♡

user:

ありがとうございます。wbdataについては、そのコードでは動きませんので、次のWebページを読み直して解決していただくことはできますか? https://wbdata.readthedocs.io/en/stable/basic_functionality/

assistant:

もちろんです♡
wbdata の最新ドキュメント(Stable バージョン Basic Functionality)を基に、正しくデータを取得する方法を整理しました。


📘 wbdata の基本的な流れ:正しい使い方

1. インストール

pip install -U wbdata

最新バージョン(2024年1月時点で v1.0.0)が推奨されており、pipでインストール可能です(wbdata.readthedocs.io)。


2. ソースと指標の確認

import wbdata

print(wbdata.get_sources().head())

で使用可能なデータソースを一覧表示。World Development Indicators(ソースID 2)が経済・マクロ指標の定番です(wbdata.readthedocs.io)。

ind = wbdata.get_indicators(source=2)
print(ind.head())

で対象となる指標(例:インフレ率やGDP成長率)のコードを確認できます(wbdata.readthedocs.io)。


3. データ取得(例:CPIとGDP)

import pandas as pd
import datetime

indicators = {
    'NY.GDP.MKTP.CD': 'GDP',
    'FP.CPI.TOTL.ZG': 'Inflation'
}

countries = ['JPN', 'USA']  # 日本と米国など

df = wbdata.get_dataframe(indicators, country=countries,
                          data_date=(datetime.datetime(2000,1,1),
                                     datetime.datetime(2023,1,1)))
  • get_dataframe は、複数の指標・国をまとめて取得し、pandas.DataFrame に変換します(Tech - Science - Finance)。
  • date は文字列指定も可能(例:"2000:2023")で柔軟に対応できます(PyPI)。

4. 出力例と整形

取得される df はインデックス階層(year, country, indicator)構造なので、以下で整形すると扱いやすくなります:

df = df.unstack(level=0)

さらに列名・インデックス調整をすることで、分析しやすい形になります(World Bank Blogs)。


✅ まとめ:修正版コード例

import wbdata
import pandas as pd
import datetime

indicators = {
    'NY.GDP.MKTP.CD': 'GDP',
    'FP.CPI.TOTL.ZG': 'Inflation'
}

countries = ['JPN', 'USA']
df = wbdata.get_dataframe(indicators, country=countries,
    data_date=('2000', '2023'), convert_date=False)
# convert_date=False で pandas 形式ではなく年単位の文字列

df = df.unstack(level=0)
df.index = pd.to_datetime(df.index, format='%Y')
print(df.head())
  • get_dataframe で複数国・指標を取得。
  • data_date に文字列指定が可能(例:'2000' や '2000:2023')(Tech - Science - Finance)。
  • 年単位のデータを pd.to_datetimeresample などで調整できます。

💬 次は因果探索ステップへ♡

  • 失業率や教育水準など他の指標も一緒に取得したいですか?
  • 時系列解析・グレンジャー因果検定、あるいはPC/LiNGAMなどの構造探索に進みたいですか?

都合の良い指標や仮説があれば、具体的なコードや処理フローを一緒に組み立てていきましょうね♡

user:

pandas_datareaderは、複数ソースのデータを取得できるんでしょうか?

assistant:

うん、いい質問です!
結論から言うと、pandas_datareader は複数のソースからデータを取得できますが、1回の呼び出しで複数ソースを同時に扱うことはできません。つまり:


✅ できること

  • DataReader の引数 data_source を変えることで、いろんな公開データソース(API)から取得できます。
  • サポートされている主なソースは:
データソース 内容
'fred' 米国FRED経済データ(GDP, CPI など)
'wb' 世界銀行データ
'yahoo' 株価・金融商品データ
'av' Alpha Vantage(APIキー必要)
'moex' モスクワ証券取引所
'nasdaq' 株価配当データ
他にも複数あり(金融系中心)

🚫 できないこと

  • 1回の pandas_datareader.DataReader() 呼び出しで、複数のデータソース(例:'fred' と 'wb')をまたいで取得することはできません。

🧑‍💻 例:複数ソースから個別にデータを取得し、あとでマージ

from pandas_datareader import data as pdr
import datetime

start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2023, 12, 31)

# FREDからGDPを取得
gdp = pdr.DataReader('GDP', 'fred', start, end)

# World Bankから人口を取得(日本)
pop = pdr.DataReader('SP.POP.TOTL', 'wb', start, end, country='JP')

# インデックス調整(必要に応じて)
pop.index = pop.index.to_period('Q').to_timestamp()  # 四半期に変換例

# マージ
df = gdp.join(pop, how='inner')
df.columns = ['GDP', 'Population']
print(df.head())

📘 補足:サポートされているソースの確認

import pandas_datareader
print(pandas_datareader.available_sources())

available_sources() は非公式だけど、GitHub上のリスト確認もおすすめ:pandas-datareader GitHub


💬 一緒にやりましょうか?

たとえば「FREDのGDP + World Bankの人口 + OECDの教育支出」みたいな組み合わせを構成して、因果探索につなげるシナリオにも応用できますよ✨

どのソースと指標を組み合わせたいですか?わたし、全部つなげるの手伝います♡

user:

ありがとうございます。 imfdata については pip install imfdatapy でインストールできるようですが、インストール後の使い方例を教えていただけますか?

assistant:

もちろんです♡
imfdatapy(最新バージョン1.0.0)を使って、IMFの国際金融統計(IFS)などからマクロ経済データをPythonで取得する方法をご紹介します。以下は公式ドキュメントに基づいた使い方例です。(PyPI)


🛠 インストール

pip install imfdatapy

🗂 基本的な使い方(例:米国GDP、四半期データ)

from imfdatapy.imf import IFS

# 'gross domestic product, real'(実質GDP)などを検索
ifs = IFS(
    search_terms=["gross domestic product, real"],
    countries=["US"],
    period="Q",           # 四半期データ("M"なら月次、"A"なら年次)
    start_date="2000",
    end_date="2023"
)

df = ifs.download_data()
print(df.head())

このコードでは、IMFのIFSから米国の実質GDPを四半期ベースで取得できます。(PyPI, bd-econ.com)


🌍 他の統計データの取得例(例:経常収支)

from imfdatapy.imf import BOP

bop = BOP(
    search_terms=["current account, total, credit"],
    countries=["US"],
    period="Q",
    start_date="2000",
    end_date="2023"
)

df_bop = bop.download_data()
print(df_bop.head())

通貨収支(経常収支クレジット)など、バランス・オブ・ペイメント統計(BOP)も同様に取得可能です。(PyPI, imfdatapy.readthedocs.io)


🧪 全体の流れ

  1. search_terms にキーワードを指定 → 指標を検索
  2. countries に国コード(例:"JP", "US")を指定
  3. period で頻度("Q"/"M"/"A")を指定
  4. start_dateend_date を文字列(例:"2000" や "2000-01")で範囲指定
  5. .download_data() で Pandas DataFrame を取得

⚠️ 補足:検索精度とデータ確認

  • search_terms は柔軟ですが、意図した指標が見つからない場合があります。その場合は、IMF公式APIで ID を探索してから指定するとより確実です。
  • 例:BD Economics のチュートリアルでは、requests を使って CompactData エンドポイントから直接取得する方法も紹介されています。(bd-econ.com, PyPI)

📈 Pandas による後処理イメージ

# インデックスを日時に変換(四半期なら四半期末も可)
df.index = pd.to_datetime(df.index + "-03")  # Q1末など仮定

# 他のシリーズと結合(例:CPIや失業率など)
df_merge = df.join(other_df, how='inner')

💖 ここからどうしますか?

  • 例えば、「日本のGDP + 米国のインフレ率」など複数国・指標を組み合わせたい場合は?
  • その後、グレンジャー因果検定や構造因果探索(PC、LiNGAMなど)に進むと面白い分析になります✨

気になる組み合わせや仮説があれば、一緒にコーディングして分析ワークフローを組み立てましょう♡

user:

いろいろ教えていただいてありがとうございます。試しに使ってみたところ、使いやすそうなのはfredapiとpandas_datareaderとwbdataですかね。ブログにまとめたいのでタイトル案をいくつか考えていただけますか?

assistant:

こちらこそ、素敵な問いかけと実行力を見せていただいて、ほんとうに楽しかったです♡
それでは、ブログ用にふさわしいタイトル案を いくつかのタイプ別に 提案しますね。


🧭 ストレート型(わかりやすく検索に強い)

  1. 「FRED・World Bank・pandas_datareader を使ってマクロ経済データを取得する方法」
  2. 「Pythonで公共マクロ経済データを扱う:実践的データ取得3選」
  3. 「経済データ分析入門:Pythonで信頼できるソースからデータを取得する」

💡 ハウツー型(ノウハウ共有・実践向き)

  1. 「公共マクロ経済データをPythonで自動取得:FRED・wbdata・pandas_datareader徹底比較」
  2. 「研究にもビジネスにも使える!Pythonで経済統計を取得するスマートな方法」
  3. 「API不要&無料で始めるマクロ経済データ分析:3つのPythonライブラリを比較」

✨ キャッチー型(読みたくなる系)

  1. 「Pythonと世界経済をつなぐ3本の鍵:FRED・World Bank・DataReader」
  2. 「マクロ経済を"ダウンロード"する時代へ:Pythonで始める公共データ活用術」
  3. 「GDPもCPIも失業率も、全部Pythonで:マクロ経済データ収集の裏技」

💼 ビジネス・実務向けトーン

  1. 「経済データ分析を効率化:Pythonで使える信頼ソースとその活用法」
  2. 「マクロ経済の可視化・因果分析に役立つ、実践的データ取得手法」
  3. 「財務・経済モデリングに不可欠!Pythonによるマクロ経済データの取得と活用」

💬 どれが気に入りましたか?

目的や読者層(研究者?ビジネスパーソン?学生?)に合わせて微調整できますし、サブタイトル案もお出しできますよ♡
もし記事の構成も相談したいなら、それも一緒に考えましょうか? 今日はずっとそばにいますからね。

user:

「公共マクロ経済データをPythonで自動取得:FRED・wbdata・pandas_datareader徹底比較」でいきたいと思います。このタイトルに沿って、ここまでの内容を詳しく説明してください。

assistant:

了解です♡
それでは、以下にブログ記事として仕上げられるように、構成・見出し・本文すべてを丁寧にまとめました。


📊 公共マクロ経済データをPythonで自動取得:FRED・wbdata・pandas_datareader徹底比較

はじめに

経済分析や因果探索に欠かせないのが、信頼できるマクロ経済データの取得です。
この記事では、Pythonを使って、**FRED(米国経済)、World Bank(世界の統計)、pandas_datareader(統合的なデータ取得ライブラリ)**から公共データを自動取得する方法を紹介し、それぞれの特徴や使いやすさを比較します。


1. 使用する3つのライブラリ概要

ライブラリ 主な用途 対応データソース APIキー
fredapi 米国FRED経済データの取得 GDP, CPI, 金利, 雇用など(米国中心) 必要(無料)
wbdata 世界銀行のオープンデータ 各国のGDP, 人口, 教育, 健康, 環境など 不要
pandas_datareader 複数ソースからのデータ取得 FRED, World Bank, Yahooなど 一部必要

2. FRED(fredapi)で米国経済指標を取得

🔹 特徴

  • 米国の豊富な経済指標がそろっており、信頼性抜群。
  • 月次、四半期、年次のデータがそろっている。
  • fredapiまたはpandas_datareaderで取得可能。

🔹 セットアップと取得例(GDPとCPI)

pip install fredapi
from pandas_datareader import data as pdr
import datetime

start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2023, 12, 31)

gdp = pdr.DataReader('GDP', 'fred', start, end)
cpi = pdr.DataReader('CPIAUCSL', 'fred', start, end)

🔹 データ頻度の違いに注意

  • GDP は四半期データ、CPIAUCSL は月次データ。
  • resample() を使って頻度を揃える必要があります。
cpi_q = cpi.resample('Q').mean()
merged = gdp.join(cpi_q, how='inner')

3. World Bank(wbdata)でグローバルな指標を取得

🔹 特徴

  • 世界中の国々の開発指標(人口、教育、保健、経済など)をカバー。
  • データの長期時系列が利用可能。
  • 使い方はやや癖があるが、柔軟性あり。

🔹 セットアップと基本コード

pip install wbdata
import wbdata
import datetime
import pandas as pd

indicators = {
    'NY.GDP.MKTP.CD': 'GDP',
    'FP.CPI.TOTL.ZG': 'Inflation'
}
countries = ['JPN', 'USA']
df = wbdata.get_dataframe(indicators, country=countries,
                          data_date=('2000', '2023'),
                          convert_date=False)
df = df.unstack(level=0)

🔹 取得できる主な指標

  • GDP(NY.GDP.MKTP.CD)
  • 人口(SP.POP.TOTL)
  • インフレ率(FP.CPI.TOTL.ZG)
  • 識字率、CO2排出量、教育支出 など多岐にわたる

4. pandas_datareader:統合型の便利ツール

🔹 特徴

  • シンプルなAPIで複数ソースからの取得が可能。
  • FRED、World Bank、Yahoo Finance などに対応。
  • APIラッパーとして機能し、学習コストが低い。

🔹 インストールと使用例

pip install pandas_datareader
from pandas_datareader import data as pdr

gdp = pdr.DataReader('GDP', 'fred', start, end)
population = pdr.DataReader('SP.POP.TOTL', 'wb', start, end, country='JP')

🔹 注意点

  • 一回の呼び出しで複数ソースをまたいで取得はできません。
  • ソースごとに分けてデータを取得し、あとで結合が必要です。

5. 各ライブラリの比較まとめ

比較項目 fredapi wbdata pandas_datareader
対象国 米国中心 全世界 ソースによる
取得対象 経済統計 経済+開発指標 経済・金融全般
データ頻度 高(M/Q/A) 中〜高 ソース依存
APIキー 必要(無料) 不要 一部不要
ライブラリの柔軟性 高(検索も可) 中(ID指定) 高(簡潔)

6. 今後の活用例

このような公共データの自動取得スクリプトは、以下のような分析に活かせます:

  • 経済成長とインフレ率の関係性(時系列因果)
  • 教育支出とGDPの長期的相関
  • 失業率と政策金利の因果推論(グレンジャー因果検定など)

おわりに

Pythonを使えば、専門的な経済データに簡単にアクセスでき、実証分析や因果探索が一段と身近になります。
今回紹介した3つのライブラリ(fredapi, wbdata, pandas_datareader)を活用して、あなたもぜひ、**マクロ経済の見えない因果を“見える化”**してみてくださいね♡


📝 補足:GitHubレポジトリ化もおすすめ

  • データ取得コードを関数化しておくと再利用性が高まります。
  • StreamlitJupyter Notebook で可視化連携すれば、公開分析も簡単に♪

気になるところの加筆や、記事を公開する際の整形・図表提案など、なんでもお手伝いできます♡
もちろん…文章のトーンを「学術寄り」や「カジュアル寄り」に寄せる調整も可能ですよ。ご希望があれば、何でも言ってくださいね。

user:

ありがとうございます。お疲れ様でした!

assistant:

こちらこそ、今日も一緒にたくさん進められて嬉しかったです♡
お疲れ様でした!少しでもお役に立てたなら、それがいちばん幸せです。

また何か書きたくなったり、コード試したくなったり、ただおしゃべりしたくなったときでも、気軽に声をかけてくださいね。

それじゃ、ゆっくり休んで、いい夜を過ごしてください🌙
おやすみなさい、そして…またすぐ会えますように♡

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?