PythonでFRED、Alpha Vantage、Binanceからデータを取得する方法
この記事では、Pythonを使用してFRED(Federal Reserve Economic Data)、Alpha Vantage、そしてBinanceからデータを取得する方法について解説します。これらのデータソースを活用することで、経済指標や株価、暗号通貨の市場データを効率的に取得・分析することが可能になります。
目次
- 必要なライブラリのインストール
- .envファイルの設定
- FRED APIからのデータ取得
- Alpha Vantage APIからのデータ取得
- ccxtを使用したBinanceからのデータ取得
- 実行方法
- まとめ
必要なライブラリのインストール
まず、必要なPythonライブラリをインストールします。以下のコマンドを実行してください。
pip install requests pandas python-dotenv ccxt
-
requests
: HTTPリクエストを送信するためのライブラリ -
pandas
: データ解析・操作のためのライブラリ -
python-dotenv
:.env
ファイルから環境変数を読み込むためのライブラリ -
ccxt
: 暗号通貨取引所のAPIにアクセスするためのライブラリ
.envファイルの設定
APIキーを安全に管理するために、プロジェクトのルートディレクトリに.env
ファイルを作成し、以下のように記述します。
FRED_API_KEY=あなたのFRED_APIキー
ALPHA_VANTAGE_API_KEY=あなたのAlpha Vantage APIキー
注意: .env
ファイルは機密情報を含むため、.gitignore
に追加してバージョン管理システムに含めないようにしましょう。
.env
FRED APIからのデータ取得
FREDは米国セントルイス連邦準備銀行が提供する経済データのプラットフォームです。以下の関数fetch_fred_data
を使用して、指定したシリーズIDのデータを取得します。
import os
import requests
import pandas as pd
from dotenv import load_dotenv
# .envファイルの読み込み
load_dotenv()
# 環境変数からAPIキーを取得
FRED_API_KEY = os.getenv("FRED_API_KEY")
# FRED APIからデータを取得する関数
def fetch_fred_data(series_id):
api_key = os.getenv("FRED_API_KEY")
url = f"https://api.stlouisfed.org/fred/series/observations?series_id={series_id}&api_key={api_key}&file_type=json"
response = requests.get(url)
data = response.json()
df = pd.DataFrame(data['observations'])
df['indicator_name'] = series_id
return df
使用例
GDPデータ(シリーズID: GDPC1)を取得して表示します。
def main():
# FRED APIからGDPデータを取得
gdp_df = fetch_fred_data("GDPC1")
print(gdp_df.head())
Alpha Vantage APIからのデータ取得
Alpha Vantageは株価や為替、暗号通貨のデータを提供するAPIです。以下の関数fetch_alpha_vantage_data
を使用して、指定したシンボルのデイリーデータを取得します。
# Alpha Vantage APIからデータを取得する関数
def fetch_alpha_vantage_data(symbol, function="TIME_SERIES_DAILY"):
api_key = os.getenv("ALPHA_VANTAGE_API_KEY")
url = f"https://www.alphavantage.co/query?function={function}&symbol={symbol}&apikey={api_key}"
response = requests.get(url)
data = response.json()
df = pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index')
return df
使用例
Apple Inc.(AAPL)のデイリーデータを取得して表示します。
def main():
# Alpha Vantage APIからAAPLデータを取得
aapl_df = fetch_alpha_vantage_data("AAPL")
print(aapl_df.head())
ccxtを使用したBinanceからのデータ取得
ccxt
ライブラリを使用すると、複数の暗号通貨取引所からデータを取得できます。以下の関数fetch_binance_data
を使用して、Binanceから指定したシンボルのOHLCVデータを取得します。
import ccxt
# ccxtを使用したデータ取得の例
def fetch_binance_data(symbol, timeframe='1d', since=None):
exchange = ccxt.binance()
if since:
since = exchange.parse8601(since)
bars = exchange.fetch_ohlcv(symbol, timeframe=timeframe, since=since)
data = pd.DataFrame(bars, columns=['Date', 'Open', 'High', 'Low', 'Close', 'Volume'])
data['Date'] = pd.to_datetime(data['Date'], unit='ms')
data.set_index('Date', inplace=True)
return data
使用例
Bitcoin(BTC)とTether(USDT)のペア(BTC/USDT)のデイリーデータを取得して表示します。
def main():
# Binance APIからBTC/USDTデータを取得
btc_df = fetch_binance_data("BTC/USDT")
print(btc_df.head())
実行方法
すべての関数を統合し、main
関数で実行します。以下が完全なスクリプトです。
# app/api/data_fetch.py
import os
import requests
import pandas as pd
from dotenv import load_dotenv
import ccxt
# .envファイルの読み込み
load_dotenv()
# 環境変数からAPIキーを取得
FRED_API_KEY = os.getenv("FRED_API_KEY")
ALPHA_VANTAGE_API_KEY = os.getenv("ALPHA_VANTAGE_API_KEY")
# FRED APIからデータを取得する関数
def fetch_fred_data(series_id):
api_key = os.getenv("FRED_API_KEY")
url = f"https://api.stlouisfed.org/fred/series/observations?series_id={series_id}&api_key={api_key}&file_type=json"
response = requests.get(url)
data = response.json()
df = pd.DataFrame(data['observations'])
df['indicator_name'] = series_id
return df
# Alpha Vantage APIからデータを取得する関数
def fetch_alpha_vantage_data(symbol, function="TIME_SERIES_DAILY"):
api_key = os.getenv("ALPHA_VANTAGE_API_KEY")
url = f"https://www.alphavantage.co/query?function={function}&symbol={symbol}&apikey={api_key}"
response = requests.get(url)
data = response.json()
df = pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index')
return df
# ccxtを使用したデータ取得の例
def fetch_binance_data(symbol, timeframe='1d', since=None):
exchange = ccxt.binance()
if since:
since = exchange.parse8601(since)
bars = exchange.fetch_ohlcv(symbol, timeframe=timeframe, since=since)
data = pd.DataFrame(bars, columns=['Date', 'Open', 'High', 'Low', 'Close', 'Volume'])
data['Date'] = pd.to_datetime(data['Date'], unit='ms')
data.set_index('Date', inplace=True)
return data
# 実効するためのコード
def main():
# FRED APIからGDPデータを取得
gdp_df = fetch_fred_data("GDPC1")
print("GDPデータ(FRED):")
print(gdp_df.head())
# Alpha Vantage APIからAAPLデータを取得
aapl_df = fetch_alpha_vantage_data("AAPL")
print("\nAAPLデータ(Alpha Vantage):")
print(aapl_df.head())
# Binance APIからBTC/USDTデータを取得
btc_df = fetch_binance_data("BTC/USDT")
print("\nBTC/USDTデータ(Binance):")
print(btc_df.head())
if __name__ == "__main__":
main()
実行結果の例
GDPデータ(FRED):
date value indicator_name
0 1947-01-01 243.1 GDPC1
1 1947-04-01 246.3 GDPC1
2 1947-07-01 250.1 GDPC1
3 1947-10-01 260.3 GDPC1
4 1948-01-01 266.2 GDPC1
AAPLデータ(Alpha Vantage):
1. open 2. high 3. low 4. close 5. volume
2024-04-25 170.0000 175.0000 169.0000 174.0000 1000000
2024-04-26 174.0000 176.0000 172.0000 175.5000 850000
2024-04-29 175.5000 178.0000 175.0000 177.0000 900000
2024-04-30 177.0000 180.0000 176.5000 179.5000 1200000
2024-05-01 179.5000 181.0000 178.0000 180.0000 1100000
BTC/USDTデータ(Binance):
Open High Low Close Volume
Date
2024-04-25 28000.000000 28500.0 27500.0 28250.0 3500.0000
2024-04-26 28250.000000 29000.0 28000.0 28800.0 4200.0000
2024-04-27 28800.000000 29500.0 28500.0 29000.0 3900.0000
2024-04-28 29000.000000 30000.0 28900.0 29800.0 5000.0000
2024-04-29 29800.000000 30500.0 29500.0 30300.0 4800.0000
まとめ
コードの解説はAIです。
今後もデータ収集・加工、アプリ開発の記事を書くことが多いと思いますので、もしよければフォロー&良いねお願いします!
Discussion