「REST API」を使い日本の不動産取引価格推移を通貨別に確認する方法について解説
OANDAのREST API(以下、API)を使って、日本の不動産取引価格推移を通貨別に確認する方法について解説します。
通貨データはOANDAのAPIより取得し、不動産取引価格は地域経済分析システム(RESAS:リーサス)のAPIを利用して情報を収集します。
日本円で見ると上昇傾向にある日本の不動産取引価格ですが、別の通貨で見ると違った見え方をします。
事前準備
OANDAのREST API
PythonでAPIを利用するためには、次の2点が必要です。
- 1.APIトークンの発行
- 2.oandapyV20のインストール
詳細については、以下の記事で解説しています。
ぜひご参照ください。
参考記事: Pythonで「REST API」を使用するまでの4つの手順について解説
地域経済分析システム(RESAS:リーサス)のAPI
地域経済分析システム(RESAS:リーサス)のAPIを利用するためには、APIキーが必要です。
こちらから利用登録することで、APIキーを取得できます。
登録が完了すると、メールによる認証に進みます。
メールにあるリンクをクリックすると、登録が完了されてAPIキーが付与されます。
地域経済分析システム(RESAS:リーサス)から不動産取引価格データを取得する
最初に地域経済分析システム(RESAS:リーサス)から、日本の不動産取引価格データを取得します。
APIの概要
まずは、APIの概要について確認しておきます。
インプット
データを取得するために必要なインプットは、次の通りです。
Name | Description | Required |
---|---|---|
year | 年度 指定可能年度:2009~2020年 |
true |
prefCode | 都道府県コード | true |
cityCode | 市区町村コード 「すべての市区町村」を選択する場合は「-」を送ります。 |
true |
displayType | 表示種類 1:土地(住宅地) 2:土地(商業地) 3:中古マンション等 4:農地 5:林地 |
true |
地域経済分析システム(RESAS:リーサス)「不動産取引価格」より抜粋
都道府県や市区町村を指定することができ、さらに表示種類として土地(住宅地)や中古マンションなどを指定することができます。
アウトプット
アウトプットは、次の通りです。
Name | Description |
---|---|
/resuli/prefCode | 対象の県コード |
/result/prefName | 対象の県名 |
/result/CityCode | 対象の市区町村コード |
/result/cityCode | 対象の市区町村名 |
/result/yearCode | 年 |
/result/displayType | 表示内容 |
/result/years/year | 年度 |
/result/years/value | 不動産取引価格(免責あたり平均価格) |
地域経済分析システム(RESAS:リーサス)「不動産取引価格」より抜粋
/result/years/valueが、今回の目的となる不動産取引価格のデータです。
面積あたりの平均価格を取得できます。
例として、2020年の東京都の不動産取引価格を取得してみます。
表示種類は、土地(住宅地)としました。
APIキーはheadersのX-API-KEY、各パラメータはparamsで指定します。
import requests
from bs4 import BeautifulSoup
import json
api_key = "APIキーを設定してください"
url = "https://opendata.resas-portal.go.jp/api/v1/townPlanning/estateTransaction/bar"
headers={
"X-API-KEY": api_key
}
params = {
"year": 2020,
"prefCode": 13, #東京都
"cityCode": "-",
"displayType": 1,
}
r = requests.get(url, params=params, headers=headers)
j = json.loads(r.text)
print(j)
yearsの中に、不動産取引価格のデータが格納されていることが確認できます。
各年の不動産取引価格データを収集する
APIの概要が確認できたので、各年の不動産取引価格データを収集していきます。
2009年から2020年までの、東京都の土地(住宅地)データを収集しました。
import requests
from bs4 import BeautifulSoup
import json
import pandas as pd
data = []
for year in [i for i in range(2009, 2021)]:
headers={
"X-API-KEY": api_key
}
params = {
"year": year,
"prefCode": 13, #東京都
"cityCode": "-",
"displayType": 1,
}
r = requests.get(url, params=params, headers=headers)
j = json.loads(r.text)
data.append(j.get("result").get("years")[0])
# DataFrameに変換
df_real_state = pd.DataFrame(data)
# indexをyearとして、カラム名をJPYに変更
df_real_state = df_real_state.set_index("year").rename(columns={"value": "JPY"})
グラフで可視化する
結果をグラフで確認してみます。
import matplotlib.pyplot as plt
import matplotlib
import japanize_matplotlib
df_real_state.plot(figsize=(16, 8))
# 目盛りの設定
plt.xticks(range(2009, 2021))
plt.grid()
# ラベルの定義
plt.xlabel("year")
plt.ylabel("不動産価格")
# y軸目盛りをカンマ区切りで表示
plt.gca().get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
右肩上がりに上昇しているのが確認できます。
特に2014年〜2019年にかけて、大きく上昇しています。
上昇率をわかりやすくするために、2009年の値を100とした相対値で表示してみます。
import matplotlib.pyplot as plt
import matplotlib
import japanize_matplotlib
# 相対値に変換
df_real_state_relative = df_real_state / df_real_state.iloc[0] * 100
df_real_state_relative.plot(figsize=(16, 8))
# 目盛りの設定
plt.xticks(range(2009, 2021))
plt.grid()
# ラベルの定義
plt.xlabel("year")
plt.ylabel("不動産価格 (2009を100とした相対値)")
# y軸目盛りをカンマ区切りで表示
plt.gca().get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
最大で30%ほど上昇していることが確認できます。
この値が別の通貨で見るとどれくらい変化するのかをみていきましょう。
各通貨の為替データを準備する
次に各通貨の為替データを準備します。
ここではUSD/JPY、HKD/JPY、GBP/JPY、CHF/JPYを使用します。
為替データの取得
まずは各通貨の月足データを取得して、終値のみを結合します。
OANDAのREST APIを使って為替データを取得する方法については、こちらの記事でも解説しています。
import oandapyV20.endpoints.instruments as instruments
from oandapyV20 import API
# APIトークンの定義
account_id = "アカウントIDを設定してください"
access_token = "APIトークンを設定してください"
# パラメータの設定
params = {
"granularity": "M", # ローソク足の間隔
"from": "2009-01-01", # 開始日時
"price": "M", # B: Bid, A:Ask, M:Mid
}
df_list = []
# 各通貨の月足データを取得
for instrument in ["USD_JPY", "HKD_JPY", "GBP_JPY", "CHF_JPY"]:
# API用のクラスを定義
client = API(access_token=access_token, environment="practice")
# 為替データを取得
r = instruments.InstrumentsCandles(instrument=instrument, params=params)
client.request(r)
# 為替データを格納するためのリストを定義
price_data = []
# データを1つずつ取り出してprice_dataに格納する
for row in r.response["candles"]:
# 辞書を定義
data = {}
# dataに格納する
data["datetime"] = row["time"]
data.update(row["mid"])
data["volume"] = row["volume"]
# price_dataに追加する
price_data.append(data)
# DataFrameに変換する
df = pd.DataFrame(price_data)
# カラム名の定義
columns = {
"o": "open",
"h": "high",
"l": "low",
"c": "close"
}
# カラム名の変更
df.rename(columns=columns, inplace=True)
# datetimeの型変換
datetime_format = "%Y-%m-%dT%H:%M:%S.000000000Z"
df["datetime"] = pd.to_datetime(df["datetime"], format=datetime_format)
# datatimeをindexに指定
df.set_index("datetime", inplace=True)
# 数値データをfloatに変換
df = df.astype(float)
# 通貨ペア名の定義
key = instrument.replace("_", "/")
# カラム名の変換とリストへのAppend
df_list.append(df.rename(columns={"close": key})[key])
# データの結合
df_fx = pd.concat(df_list, axis=1)
df_fx.head()
これで、各通貨の為替データの用意が完了しました。
参考記事: Pythonで「REST API」から為替データを取得する方法について解説
データの整形
次にデータの整形を行います。
今回は最終的に年次データとなるので、各年の年末のデータのみを利用します。
12月31日のデータのみを抽出して、yearをindexに指定します。
# 年末データのみを抽出
df_fx = df_fx[df_fx.index.strftime("%m%d")=="1231"]
# datetimeからyearを抽出
df_fx["year"] = df_fx.index.year
# yearをindexに変更
df_fx = df_fx.set_index("year")
df_fx.head()
これで、為替データの準備が完了しました。
各通貨における不動産取引価格を比較する
必要なデータが揃ったので、ここから各通貨における不動産取引価格を比較していきます。
データセットの用意
まずは用意したデータから、比較のために必要なデータセットを準備します。
それぞれの通貨における不動産取引価格を計算して、df_real_stateに追加していきます。
for col in df_fx.columns:
df_real_state[col] = df_real_state["JPY"] / df_fx[col]
df_real_state.head()
次に、2009年の値が100となるように相対値を計算します。
相対値とすることで、通貨別に横並びで比較できます。
df_real_state_relative = df_real_state / df_real_state.iloc[0] * 100
df_real_state_relative.head()
これで、比較のために必要なデータの準備が完了しました。
各通貨における不動産取引価格の推移をグラフで比較する
最後に、用意したデータをグラフで比較します。
import matplotlib.pyplot as plt
import matplotlib
import japanize_matplotlib
df_real_state_relative.plot(figsize=(16, 8))
# 目盛りの設定
plt.xticks(range(2009, 2021))
plt.grid()
# ラベルの定義
plt.xlabel("year")
plt.ylabel("不動産価格 (2009を100とした相対値)")
# y軸目盛りをカンマ区切りで表示
plt.gca().get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
これで、各通貨における不動産取引価格の推移を比較することができました。
日本円で見ると、2012年からは右肩上がりだった不動産取引価格も、別の通貨で見ると見え方が変わってきます。
ドル円で見ると2012年以降は円安が大きく進んだこともあり、不動産価格は2009年から10%も上昇していないことがわかります。
香港ドルも概ねドル円と同じ推移をしています。
ポンド円やスイスフランは、少し違う動きです。
このように、1つのデータでも通貨が変われば全く違った見え方をします。
OANDAの為替データを利用すれば、このようなデータの見方にも活用することができます。
本記事の執筆者:TAT
本記事の執筆者:TAT | 経歴 |
---|---|
2016年大学院卒業後、外資系IT企業に入社。 その後は金融情報→不動産テック→アドテク企業で、Pythonを用いたプロセスオートメーション、ダッシュボード開発、データ分析、AI開発などの業務に従事。 プログラミングや株式投資に関する情報を発信する「気ままなブログ」を運営中。 |
「REST API」をさらに学びたい方へオススメのコンテンツ
OANDA証券では、「REST API」に関する記事を豊富に提供しています。
「REST API」を利用するための手順、プログラミング言語の一つPythonを使い「REST API」を使用するまでの手順など、初心者の方向けコンテンツも豊富にあるので、APIを使った取引を始めてみたい方はぜひ参考にしてください。
ただしAPIを利用した取引は、OANDA証券の口座開設+いくつかの条件があります。
事前に確認を行い、ぜひOANDA証券の口座を開設し「REST API」を使った取引をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。