api-data-fetcher について
経済学者向けに、FRED、World Bank、IMF、BLS、OECD などの経済データ API からデータを取得する、文書付き Python コードを生成するスキルです。API キーの管理、エラー処理、データ整形を扱います。
主な機能
- 01経済データ API の選定ガイド
- 02Python コードの生成
- 03環境変数による API キー管理
- 04エラー処理とデータ整形
- 05系列の説明と改定の確認
活用シーン
- 01マクロ経済指標の取得
- 02複数ソースからの独自データ作成
- 03定期データ更新の自動化
- 04国際比較パネルデータの取得
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ meleantonio/ awesome-econ-ai-stuff --skill api-data-fetcherインストール後、Claude Code で/api-data-fetcherを入力して読み込まれたか確認します。
同梱ファイルindex.md
詳細
API データフェッチャー
目的
このスキルは、FRED(Federal Reserve Economic Data)、World Bank、IMF、BLS、OECD などの主要な経済データ API からデータを取得する際に、エコノミストを支援します。適切なエラー処理を備えた、クリーンでドキュメントが整った Python コードを生成します。
使用する場面
- マクロ経済指標をダウンロードするとき
- 複数のソースからカスタムデータセットを構築するとき
- 継続中のプロジェクト向けにデータ更新を自動化するとき
- 国際比較のパネルデータを取得するとき
手順
ステップ 1:データ要件を特定する
ユーザーに次のことを尋ねます。
- どのようなデータが必要ですか?(GDP、失業率、インフレ率など)
- どの期間と頻度ですか?
- どの国・地域ですか?
- 希望する出力形式は何ですか?(CSV、DataFrame など)
ステップ 2:適切な API を選択する
| データの種類 | 最適なソース | パッケージ |
|---|---|---|
| 米国のマクロ経済データ | FRED | fredapi |
| 世界の開発データ | World Bank | wbdata |
| 労働統計 | BLS | bls |
| 国際比較データ | OECD | pandasdmx |
| 金融データ | Yahoo Finance | yfinance |
ステップ 3:クリーンなコードを生成する
以下を含めます。
- API キーの処理(環境変数)
- API 呼び出しの失敗に対するエラー処理
- データのクリーニングと形式設定
- 系列の定義に関するドキュメント
出力例
"""
Economic Data Fetcher
=====================
Downloads macroeconomic data from FRED and World Bank APIs.
Requires: fredapi, wbdata, pandas
Setup: Set FRED_API_KEY environment variable
Get a free key from: https://fred.stlouisfed.org/docs/api/api_key.html
"""
import os
import pandas as pd
from datetime import datetime, timedelta
from typing import List, Optional, Dict
# ============================================
# FRED Data Fetcher
# ============================================
def fetch_fred_series(
series_ids: List[str],
start_date: str = "2000-01-01",
end_date: Optional[str] = None,
api_key: Optional[str] = None
) -> pd.DataFrame:
"""
Fetch time series data from FRED.
Parameters
----------
series_ids : list of str
FRED series IDs (e.g., ['GDP', 'UNRATE', 'CPIAUCSL'])
start_date : str
Start date in YYYY-MM-DD format
end_date : str, optional
End date (defaults to today)
api_key : str, optional
FRED API key (defaults to FRED_API_KEY env var)
Returns
-------
pd.DataFrame
DataFrame with date index and series as columns
Example
-------
>>> df = fetch_fred_series(['GDP', 'UNRATE'], '2010-01-01')
"""
try:
from fredapi import Fred
except ImportError:
raise ImportError("Install fredapi: pip install fredapi")
# Get API key
api_key = api_key or os.environ.get('FRED_API_KEY')
if not api_key:
raise ValueError(
"FRED API key required. Set FRED_API_KEY environment variable "
"or pass api_key parameter. Get a key at: "
"https://fred.stlouisfed.org/docs/api/api_key.html"
)
fred = Fred(api_key=api_key)
end_date = end_date or datetime.now().strftime('%Y-%m-%d')
# Fetch each series
data = {}
for series_id in series_ids:
try:
series = fred.get_series(
series_id,
observation_start=start_date,
observation_end=end_date
)
data[series_id] = series
print(f"✓ Downloaded {series_id}")
except Exception as e:
print(f"✗ Failed to download {series_id}: {e}")
# Combine into DataFrame
df = pd.DataFrame(data)
df.index.name = 'date'
return df
# Common FRED series for economists
FRED_SERIES = {
# GDP and Output
'GDP': 'Gross Domestic Product',
'GDPC1': 'Real GDP',
'GDPPOT': 'Real Potential GDP',
# Labor Market
'UNRATE': 'Unemployment Rate',
'PAYEMS': 'Total Nonfarm Payrolls',
'CIVPART': 'Labor Force Participation Rate',
# Prices
'CPIAUCSL': 'Consumer Price Index',
'PCEPI': 'PCE Price Index',
'CPILFESL': 'Core CPI',
# Interest Rates
'FEDFUNDS': 'Federal Funds Rate',
'DGS10': '10-Year Treasury Rate',
'T10Y2Y': '10Y-2Y Treasury Spread',
# Money and Credit
'M2SL': 'M2 Money Stock',
'TOTRESNS': 'Total Reserves',
}
# ============================================
# World Bank Data Fetcher
# ============================================
def fetch_world_bank_data(
indicators: Dict[str, str],
countries: List[str] = ['USA', 'GBR', 'DEU', 'FRA', 'JPN'],
start_year: int = 2000,
end_year: Optional[int] = None
) -> pd.DataFrame:
"""
Fetch indicator data from World Bank.
Parameters
----------
indicators : dict
Dict mapping indicator codes to names
e.g., {'NY.GDP.PCAP.CD': 'gdp_per_capita'}
countries : list of str
ISO 3-letter country codes
start_year : int
Start year
end_year : int, optional
End year (defaults to current year)
Returns
-------
pd.DataFrame
Panel data with country and year
Example
-------
>>> indicators = {
... 'NY.GDP.PCAP.CD': 'gdp_per_capita',
... 'SP.POP.TOTL': 'population'
... }
>>> df = fetch_world_bank_data(indicators, ['USA', 'GBR'])
"""
try:
import wbdata
except ImportError:
raise ImportError("Install wbdata: pip install wbdata")
end_year = end_year or datetime.now().year
all_data = []
for indicator_code, indicator_name in indicators.items():
try:
# Fetch data
data = wbdata.get_dataframe(
{indicator_code: indicator_name},
country=countries,
)
data = data.reset_index()
all_data.append(data)
print(f"✓ Downloaded {indicator_name}")
except Exception as e:
print(f"✗ Failed to download {indicator_name}: {e}")
# Merge all indicators
if all_data:
df = all_data[0]
for other_df in all_data[1:]:
df = df.merge(other_df, on=['country', 'date'], how='outer')
# Filter years
df['year'] = pd.to_datetime(df['date']).dt.year
df = df[(df['year'] >= start_year) & (df['year'] <= end_year)]
return df
return pd.DataFrame()
# Common World Bank indicators
WORLD_BANK_INDICATORS = {
# Income and Growth
'NY.GDP.PCAP.CD': 'GDP per capita (current US$)',
'NY.GDP.PCAP.KD.ZG': 'GDP per capita growth (%)',
'NY.GDP.MKTP.KD.ZG': 'GDP growth (%)',
# Population
'SP.POP.TOTL': 'Population, total',
'SP.URB.TOTL.IN.ZS': 'Urban population (%)',
# Trade
'NE.TRD.GNFS.ZS': 'Trade (% of GDP)',
'BX.KLT.DINV.WD.GD.ZS': 'FDI, net inflows (% of GDP)',
# Human Capital
'SE.XPD.TOTL.GD.ZS': 'Education expenditure (% of GDP)',
'SH.XPD.CHEX.GD.ZS': 'Health expenditure (% of GDP)',
# Inequality
'SI.POV.GINI': 'Gini index',
'SI.POV.DDAY': 'Poverty headcount ratio ($1.90/day)',
}
# ============================================
# Usage Example
# ============================================
if __name__ == "__main__":
# Example 1: Fetch US macro data from FRED
us_macro = fetch_fred_series(
series_ids=['GDP', 'UNRATE', 'CPIAUCSL', 'FEDFUNDS'],
start_date='2010-01-01'
)
print("\nUS Macro Data (FRED):")
print(us_macro.tail())
# Save to CSV
us_macro.to_csv('data/us_macro_fred.csv')
print("\nSaved to data/us_macro_fred.csv")
# Example 2: Fetch cross-country data from World Bank
indicators = {
'NY.GDP.PCAP.CD': 'gdp_per_capita',
'SP.POP.TOTL': 'population',
'NY.GDP.MKTP.KD.ZG': 'gdp_growth'
}
cross_country = fetch_world_bank_data(
indicators=indicators,
countries=['USA', 'GBR', 'DEU', 'FRA', 'JPN', 'CHN', 'IND', 'BRA'],
start_year=2000
)
print("\nCross-Country Data (World Bank):")
print(cross_country.head(10))
# Save to CSV
cross_country.to_csv('data/cross_country_wb.csv', index=False)
print("\nSaved to data/cross_country_wb.csv")
要件
Python パッケージ
pip install fredapi wbdata pandas
API キー
- FRED:https://fred.stlouisfed.org/docs/api/api_key.html から無料のキーを取得できます
- World Bank:キーは不要です
- BLS:https://www.bls.gov/developers/ から無料のキーを取得できます
環境変数を設定します。
export FRED_API_KEY="your_key_here"
ベストプラクティス
- API キーは環境変数に保存する - コードに直接記述しないでください
- 一括ダウンロードにはレート制限を追加する
- API の呼び出しを繰り返さずに済むよう、データをローカルにキャッシュする
- ソースにある系列の定義を記録する
- リアルタイムデータの改訂を確認する
よくある落とし穴
- ❌ スクリプトに API キーを直接記述する
- ❌ API のレート制限に対処しない
- ❌ データのビンテージや改訂を無視する
- ❌ 適切な処理をせずに異なる頻度のデータを混在させる
参考資料
変更履歴
v1.0.0
- FRED と World Bank に対応して初回リリース
コメント
Markdown 対応