韓国銀行APIを活用した経済データの可視化 - Pythonで簡単にできること

한국은행 API 홈페이지 갈무리 이미지
( 韓国銀行APIホームページの画像)

韓国銀行APIを利用すれば、経済データを簡単に照会して視覚化することができます。 特にPythonと一緒に使うと、データ分析や高度な視覚化まで可能です。今回のポストでは 韓国銀行Open APIを使用する方法を紹介し、データの可視化でインサイトを引き出すプロセスを詳しく説明します。

韓国銀行Open APIとは何ですか?

韓国銀行APIは 韓国銀行の経済統計システム(ECOS)データを開発者と研究者が簡単に使用できるように提供するサービス。です。APIを使用すると リアルタイム経済データを直接照会することができます。例えば、ウォン/ドル為替レート、Kospi指数、外国為替保有額などを簡単に取得して分析することができます。

韓国銀行APIの使用方法

1.サンプルデータ照会(テスト用)

サンプルデータは、認証キーなしで簡単なテストのためのサンプルデータです。次のようなURLを使用して、100大統計指標のうち10個のサンプルデータを照会することができます。下記のURLをコピーしてウェブブラウザのアドレスバーに入力すると、下記のような内容を確認することができます。

10個のサンプルデータ照会URL

https://ecos.bok.or.kr/api/KeyStatisticList/sample/xml/kr/1/10
10개의 샘플 데이터 조회결과 캡쳐 이미지
(10個のサンプルデータ照会結果キャプチャ画像)

2.認証キーを利用した100大統計指標の照会

100大統計指標データをすべて照会するには 認証キーを発行受けなければなりません。

  • 認証キー発行方法: 韓国銀行ECOSウェブサイトにアクセスして右上の "認証キー申請"を通じてOpenAPI認証キーの申請が可能です。申請が完了すると、電子メールでも認証キーが送信され、当該ウェブサイトのMyPageメニューで確認することができます。
  • 認証キーの使用例: 下記のURLで「認証キー」部分に確認した認証キーを入力してブラウザで確認すると、下記のように100大統計指標がxml形式で表示されます。
https://ecos.bok.or.kr/api/KeyStatisticList/인증키/xml/kr/1/100
100대 통계지표 데이터 조회결과 캡쳐 이미지
(100大統計指標データ照会結果キャプチャ画像)

Pythonを使った経済データの可視化

それでは、Pythonを使って韓国銀行APIからデータを取得して、下の図のようにPythonで可視化作業をしてみましょう。

한국은행 API 활용한 Python 시각화 결과 이미지
(韓国銀行APIを活用したPython可視化結果イメージ)

Pythonコード例

インポートリクエスト
import pandas as pd
matplotlib.pyplot を plt としてインポートします。
xml.etree.ElementTree を ET としてインポートします。

# 韓国銀行API URL及び認証キー設定
url = "https://ecos.bok.or.kr/api/KeyStatisticList/MN16GNV2T0LWMVGWNQ9K/xml/kr/1/100"

# API呼び出し及びデータ収集
response = requests.get(url)
data = response.text

# XMLデータを解析し、必要なデータを抽出します。
root = ET.fromstring(data)
rows = [].
for row in root.findall("row"):
    indicator = row.find("KEYSTAT_NAME").text
    if indicator in ["ウォン/ドル為替レート(終値)", "外貨保有額"]:
        rows.append({
            "indicator":indicator、
            "value":float(row.find("DATA_VALUE").text)、
            "unit": row.find("UNIT_NAME").text、
            "date"を取得します:pd.to_datetime(row.find("CYCLE").text, errors='coerce')
        })

# データフレームに変換
df = pd.DataFrame(rows)

# ハングル → 英語ラベルに変換
df['indicator_english'] = df['indicator'].replace({
    "ウォン/ドル為替レート(終値)":"KRW/USD Exchange Rate"、
    "外貨準備額":"Foreign Exchange Reserves"
})

# データフレームの確認
print(df)

# 二重Y軸を使用して視覚化する
fig, ax1 = plt.subplots(figsize=(10, 6))

# 最初のY軸: ウォン/ドル為替レート
exchange_rate_data = df[df['indicator'] == "ウォン/ドル為替レート(終値)"]].
ax1.bar(exchange_rate_data['indicator_english']、
        exchange_rate_data['value']、
        color='blue', label="KRW/USD Exchange Rate")

ax1.set_xlabel("Indicator")
ax1.set_ylabel("Value (KRW)", color='blue')
ax1.tick_params(axis='y', labelcolor='blue')

# 最初のY軸の棒グラフの上にラベルを追加します。
for i, value in enumerate(exchange_rate_data['value']):
    ax1.text(i, value + (value * 0.02), f"{value:,.1f}", ha='center', color='blue')

# 2番目のY軸:外国為替証拠金残高
ax2 = ax1.twinx()
reserves_data = df[df['indicator'] == "外貨準備高"]].
ax2.bar(reserves_data['indicator_english']、
        reserves_data['value']、
        color='red', label="Foreign Exchange Reserves", alpha=0.7)

ax2.set_ylabel("Value (Thousand USD)", color='red')
ax2.tick_params(axis='y', labelcolor='red')

# 2番目のY軸の棒グラフの上にラベルを追加します。
for i, value in enumerate(reserves_data['value']):
    ax2.text(i + 1, value + (value * 0.02), f"{value:,.0f}", ha='center', color='red')

# グラフのタイトルとスタイリング
plt.title(f"Bank of Korea Key Indicators ({df['date'].iloc[0].date()})")
plt.tight_layout()
plt.show()

整理する

韓国銀行APIを利用すれば、経済データを簡単に収集し、Pythonを活用して高度な可視化を実装することができます。 特に、可視化結果を通じて経済の流れをより直感的に理解することができます。データ分析と可視化は、経済的な意思決定に重要なツールになりますので、ぜひ活用してみてください。

ちなみに、他の種類のAPIを活用したPythonの分析が気になる人は PythonとCryptoCompare APIで30日間のビットコインドルのチャートを分析する 記事を参考にしてみてください!

#Python 可視化コードの詳細解説

1.ライブラリインポート

インポートリクエスト
import pandas as pd
matplotlib.pyplot を plt としてインポートします。
xml.etree.ElementTree を ET としてインポートします。
  • リクエスト:HTTPリクエストを介してAPIと通信するために使用されます。
  • パンダ:データ操作と分析のための強力なライブラリです。
  • matplotlib.pyplot:データ可視化のためのライブラリです。
  • xml.etree.ElementTree: XMLデータを解析するために使用されます。

2.APIのURL設定

url = "https://ecos.bok.or.kr/api/KeyStatisticList/MN16GNV2T0LWMVGWNQ9K/xml/kr/1/100"

韓国銀行APIのURLを設定します。このURLは、XML形式の統計データを提供します。

3.データ収集

response = requests.get(url)
data = response.text
  • requests.get(url)を介してAPIにGETリクエストを送信し、応答を レスポンスに保存します。
  • response.textを使ってXMLデータを文字列で取得します。

4.XMLデータ解析

root = ET.fromstring(data)
rows = [].
for row in root.findall("row"):
    indicator = row.find("KEYSTAT_NAME").text
    if indicator in ["ウォン/ドル為替レート(終値)", "外貨保有額"]:
        rows.append({
            "indicator":indicator、
            "value":float(row.find("DATA_VALUE").text)、
            "unit": row.find("UNIT_NAME").text、
            "date"を取得します:pd.to_datetime(row.find("CYCLE").text, errors='coerce')
        })
  • XMLデータを解析してElementTreeオブジェクトを生成します。
  • という空のリストを初期化して必要な情報を保存します。
  • 要素を繰り返しながら指標名(KEYSTAT_NAME), 値(DATA_VALUE), 単位(UNIT_NAME), 日付(CYCLE)を抽出します。
  • ここでは、「ウォン/ドル為替レート(終値)と「外貨保有額」だけを抽出してリストに追加します。

5.DataFrameの作成

df = pd.DataFrame(rows)

収集したデータをpandas DataFrameに変換して簡単に操作できるようにします。

6.英語ラベルの追加

df['indicator_english'] = df['indicator'].replace({
    "ウォン/ドル為替レート(終値":)"KRW/USD Exchange Rate"、
    "外貨準備額":"Foreign Exchange Reserves"
})

DataFrameに新しい列を追加して、ハングル指標名を英語に変換します。

7.DataFrameの確認

print(df)

DataFrameの内容をコンソールに出力して、収集したデータを確認します。

8.二重Y軸を使った可視化

fig, ax1 = plt.subplots(figsize=(10, 6))

ここで図とサブプロットを作成します。 ax1は、最初のデータセットの描画に使用されます。

最初のY軸: ウォン/ドル為替レートを描画します。
exchange_rate_data = df[df['indicator'] == "ウォン/ドル為替レート(終値)"]]
ax1.bar(exchange_rate_data['indicator_english']、
        exchange_rate_data['value']、
        color='blue', label="KRW/USD Exchange Rate")

青い棒を使用してKRW/USD為替レートの棒グラフを作成します。

最初のY軸棒グラフの上にラベルを追加
for i, value in enumerate(exchange_rate_data['value']):
    ax1.text(i, value + (value * 0.02), f"{value:,.1f}", ha='center', color='blue')

このコードは、各バーの上に対応する値を表示します。 value + (value * 0.02)は値より少し上にラベルを配置するために使用します。 f"{value:,.1f}"は値を千単位で区切り、小数点以下1桁まで表示します。

第二のY軸: 外国為替準備金を描画します。
ax2 = ax1.twinx()
reserves_data = df[df['indicator'] == "外貨準備高"].
ax2.bar(reserves_data['indicator_english']、
        reserves_data['value']、
        color='red', label="Foreign Exchange Reserves", alpha=0.7)

ここでは、2番目のy軸(ax2)を生成して ax1と同じx軸を共有するようにします。 外国為替保有額に対して赤色でバーを描きます。

2番目のY軸棒グラフの上にラベルを追加
for i, value in enumerate(reserves_data['value']):
    ax2.text(i + 1, value + (value * 0.02), f"{value:,.0f}", ha='center', color='red')

2番目のy軸のバー上にもその値を表示します。 i + 1を使用して外貨準備の位置を調整します、 value + (value * 0.02)でラベルの位置を調整します。

グラフタイトルとスタイリング
plt.title(f"韓国銀行主要指標 ({df['date'].iloc[0].date()})")
plt.tight_layout()
plt.show()

グラフのタイトルを設定し、レイアウトを調整した後、グラフを表示します。

類似の投稿