FREDはセントルイス連邦準備銀行の提供する経済統計データのデータベースである。ここから経済指標(今回は米国の失業率)をPythonで取得することを試みる。「FRED python 取得」などとググってみるとpandas_datareaderやその他のライブラリを使用している例が見受けられたが、FREDのAPIのドキュメントを読んでみるとごく普通のシンプルなAPIだったので、標準ライブラリのurllibを使う無難な手法を採用した。
まずはHPにアクセスしてアカウントを作成し、API Keyを取得する。API Keyのページはアカウント作成後ページ右上の三本線 -> Myaccount -> API Keysで到達する。
API Keyを取得できたら下記のコードのAPI_KEY
の部分を書き換えて実行する。失業率ではなく他の指標を取得したい場合はその下のSERIES_ID
を変える。標準ライブラリしか使わないので事前にpip install hoge
等は不要。
import urllib.request
import json
def main():
API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SERIES_ID = "UNRATE"
URL = f"https://api.stlouisfed.org/fred/series/observations"
params = {
"api_key": API_KEY,
"file_type": "json",
"series_id": SERIES_ID
}
req = urllib.request.Request(f"{URL}?{urllib.parse.urlencode(params)}")
with urllib.request.urlopen(req) as res:
data = json.loads(res.read().decode("utf-8"))
# 取得した値がデフォルトではstr型なのでfloat型float型に変換する
for d in data["observations"]:
d["value"] = float(d["value"])
# 綺麗に表示
import pprint
pprint.pprint(data)
if __name__ == '__main__':
main()
実行結果:
{'count': 921,
'file_type': 'json',
'limit': 100000,
'observation_end': '9999-12-31',
'observation_start': '1600-01-01',
'observations': [{'date': '1948-01-01',
'realtime_end': '2024-10-04',
'realtime_start': '2024-10-04',
'value': 3.4},
{'date': '1948-02-01',
'realtime_end': '2024-10-04',
'realtime_start': '2024-10-04',
'value': 3.8},
{'date': '1948-03-01',
'realtime_end': '2024-10-04',
'realtime_start': '2024-10-04',
'value': 4.0},
(====================== 中略 ======================)
{'date': '2024-09-01',
'realtime_end': '2024-10-04',
'realtime_start': '2024-10-04',
'value': 4.1}],
'offset': 0,
'order_by': 'observation_date',
'output_type': 1,
'realtime_end': '2024-10-04',
'realtime_start': '2024-10-04',
'sort_order': 'asc',
'units': 'lin'}
参考
FREDのAPIのドキュメント: