概要
不動産価格取得に関する記事の末尾で触れた駅コードの取得について紹介します.
不動産価格情報ライブラリAPIは,国土交通省が一般公開している不動産価格を取得を目的としたAPIでPythonでも利用することができます.登録作業をすることで利用することが可能となります.
不動産価格取得時に,駅コードを指定することで,指定した駅周辺の情報を取得することもできます.
1. 駅コードファイル
不動産情報ライブラリ公式サイトの使い方によると駅コードについて,次のような説明が記載されています.
形式はNNNNNN(数字6桁) NNNNNN … 駅コード
国土数値情報の駅データ(鉄道データの下位クラス)のグループコード(N02_005g)を指定します。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v3_1.html
を参照。
実際に,参照先のwebページに進むと,たくさんファイルがあり,どれをダウンロードするべきか迷います.
一番新しい令和4年のファイルN02-22_GML.zipを選択します.
zipを展開するとN0-22で始まるファイルがいくつも現れます.今回はutf8ディレクトー内にあるN02-22_Station.shpファイルを利用します1.
2. 駅コード取得
N02-22_Station.shpファイルを読み込んで,駅データのグループコードであるN02_005gを探していきます.拡張子がshpのファイルは,GIS関連のファイルとなります.Pythonではgeopandasライブラリを利用してshpファイルを読み込みます.
インストールするライブラリ
- pip install geopandas
 
GeoPnadasの公式サイトに詳細な説明が記載されています.今回利用するのは,shpファイルを読み込むread_fileだけです.
import geopandas as gpd
filename = "./N02-22_GML/utf8/N02-22_Station.shp"
gdf = gpd.read_file(filename, encoding='utf8')
print(gdf.head())
# 	N02_001 	N02_002 	N02_003 	N02_004 	N02_005 	N02_005c 	N02_005g 	geometry
# 0 	11 	2 	指宿枕崎線 	九州旅客鉄道 	              二月田 	010112 	010112 	LINESTRING (130.63035 31.25405, 130.62985 31.2...
# 1 	23 	5 	沖縄都市モノレール線 	沖縄都市モノレール 	古島 	010127 	010127 	LINESTRING (127.70279 26.23035, 127.70309 26.2...
# 2 	24 	5 	東京臨海新交通臨海線 	ゆりかもめ 	お台場海浜公園 	004091 	004091 	LINESTRING (139.77818 35.62961, 139.77888 35.6...
# 3 	24 	5 	東京臨海新交通臨海線 	ゆりかもめ 	東京国際クルーズターミナル 	004128 	004128 	LINESTRING (139.77333 35.62109, 139.77288 35.6...
# 4 	24 	5 	東京臨海新交通臨海線 	ゆりかもめ 	テレコムセンター 	004144 	004144 	LINESTRING (139.78001 35.61791, 139.77932 35.6...
列の名前にN0_005やN0_005gが見えます.N0_005列には駅名が書かれています.N0_005g列には対応するコードが記載されています.
例
横浜駅の駅コードを取得するには,gdf["N02_005"]の値が"横浜"となる情報を抽出すれば良いので2,
gdf[gdf["N02_005"]=="横浜"]
のように表記することで表のデータを取得できます.
import geopandas as gpd
filename = "./N02-22_GML/utf8/N02-22_Station.shp"
gdf = gpd.read_file(filename, encoding='utf8')
print(gdf[gdf["N02_005"]=="横浜"])
#  	N02_001 	N02_002 	N02_003 	N02_004 	N02_005 	N02_005c 	N02_005g 	geometry
# 451 	12 	5 	みなとみらい21線 	横浜高速鉄道 	横浜 	004629 	004633 	LINESTRING (139.62275 35.46687, 139.62195 35.4...
# 477 	12 	3 	3号線 	横浜市 	横浜 	004636 	004633 	LINESTRING (139.62050 35.46462, 139.62031 35.4...
# 932 	12 	4 	本線 	京浜急行電鉄 	横浜 	004631 	004633 	LINESTRING (139.62237 35.46528, 139.62388 35.4...
# 4903 	12 	4 	本線 	相模鉄道 	横浜 	004633 	004633 	LINESTRING (139.62313 35.46693, 139.62179 35.4...
# 6057 	12 	4 	東横線 	東急電鉄 	横浜 	004628 	004633 	LINESTRING (139.62275 35.46687, 139.62195 35.4...
# 6833 	11 	2 	根岸線 	東日本旅客鉄道 	横浜 	004635 	004633 	LINESTRING (139.62170 35.46467, 139.62179 35.4...
# 7644 	11 	2 	東海道線 	東日本旅客鉄道 	横浜 	004634 	004633 	LINESTRING (139.62170 35.46467, 139.62179 35.4...
# 7649 	11 	2 	東海道線 	東日本旅客鉄道 	横浜 	004634 	004633 	LINESTRING (139.62133 35.46475, 139.62179 35.4...
表より,横浜駅の駅コードはN02_005g列を参照して004633と見つけることができます.
鎌倉駅の駅コードは
import geopandas as gpd
filename = "./N02-22_GML/utf8/N02-22_Station.shp"
gdf = gpd.read_file(filename, encoding='utf8')
print(gdf[gdf["N02_005"]=="鎌倉"])
# N02_001 N02_002 N02_003 	N02_004 	N02_005   N02_005c 	N02_005g 	geometry
# 2112 	12 	4 	江ノ島電鉄線 	江ノ島電鉄 	    鎌倉 	005059 	005055 	LINESTRING (139.55009 35.31849, 139.55009 35.3...
# 6608 	11 	2 	横須賀線 	東日本旅客鉄道 	鎌倉 	005055 	005055 	LINESTRING (139.55039 35.31826, 139.55038 35.3...
駅コードはN02_005g列の005055と見つけることができます3.
3. 不動産価格の取得
駅コードを利用して不動産価格の取得を行います.すでにAPIキーの取得が済んでいるとします.API利用については,不動産情報APIをPythonで利用してみたを参考にしてください.
基本を確認しておきます.
APIで利用するURL
URL = https://www.reinfolib.mlit.go.jp/ex-api/external/XIT001?<パラメータ>
パラメータ
- year: 取引時期(必須項目)
 - priceClassification: 価格情報区分コード 01: 不動産取引価格.02: 成約価格.
 - quarter:取引時期(四半期). 1 〜 4
 - area: 都道府県コード. 1 〜 47
 - city:市区町村コード
 - station:駅コード(N02_005gの値)
 
必須項目の取引時期と駅コードを設定すれば,駅コード周辺の不動産価格を取得できます.APIの取得キーを"1234xxxx"と表記しておきます.
具体例1.2020年横浜駅付近
2020年の横浜駅を中心とした不動産価格を取得するには,yearに2020を,stationに横浜駅のコード004633を指定し,APIを利用します4.
import requests
import pandas as pd
url = "https://www.reinfolib.mlit.go.jp/ex-api/external/XIT001"
params = {"year": 2020, "station":"004633"}
# APIキーを入力 申請して取得した値
headers = {"Ocp-Apim-Subscription-Key": "1234xxxx"}
response = requests.get(url, headers=headers, params=params)
# 取得されたデータをデータフレームにして保存する
user_data = response.json()    # 取得したjson形式をpythonの辞書に変換
df = pd.DataFrame(user_data["data"])  # データフレームにする
df.to_csv("yokohama_2020.csv",index=False)  # ファイルに保存
print(df.head())
#   PriceCategory       Type Region MunicipalityCode Prefecture Municipality  ... CityPlanning CoverageRatio FloorAreaRatio      Period Renovation Remarks
# 0     不動産取引価格情報   中古マンション等                   14102       神奈川県      横浜市神奈川区  ...         商業地域            80            500  2020年第4四半期        未改装        
# 1     不動産取引価格情報   中古マンション等                   14102       神奈川県      横浜市神奈川区  ...         商業地域            80            400  2020年第4四半期       改装済み        
# 2     不動産取引価格情報   中古マンション等                   14102       神奈川県      横浜市神奈川区  ...         工業地域            60            200  2020年第1四半期        未改装        
取得したデータはJSON形式になるので,必要に応じて変換して必要な部分を保存することとなります.サンプルコードでは,辞書に一旦変換しています.
{'status': 'OK', 'data': [{'PriceCategory': '不動産取引価格情報', 'Type': '中古マンション等', 'Region': '', 'MunicipalityCode': '14102', 'Prefecture': '神奈川県', 'Municipality': '横浜市神奈川区', 'DistrictName': '台町', 'TradePrice': '9300000', 'PricePerUnit': '', 'FloorPlan': '1K', 'Area': '15', 'UnitPrice': '', 'LandShape': '', 'Frontage': '', 'TotalFloorArea': '', 'BuildingYear': '1993年', 'Structure': '', 'Use': '', 'Purpose': 'その他', 'Direction': '', 'Classification': '', 'Breadth': '', 'CityPlanning': '商業地域', 'CoverageRatio': '80', 'FloorAreaRatio': '500', 'Period': '2020年第4四半期', 'Renovation': '未改装', 'Remarks': ''}, {'PriceCategory': '不動産取引価格情報'...
dataキーだけが必要な部分となります.データフレームに変換したいので,
df = pd.DataFrame(user_data["data"])
によって変換しています.
具体例2. 2023年鎌倉駅付近
import requests
import pandas as pd
url = "https://www.reinfolib.mlit.go.jp/ex-api/external/XIT001"
params = {"year": 2023, "station": "005055"} 
# APIキーを入力 申請して取得した値
headers = {"Ocp-Apim-Subscription-Key": "1234xxxx"}
response = requests.get(url, headers=headers, params=params)
# 取得されたデータをデータフレームにして保存する
user_data = response.json()    # 取得したjson形式をpythonの辞書に変換
df = pd.DataFrame(user_data["data"])  # データフレームにする
df.to_csv("kamakura_2023.csv",index=False)  # ファイルに保存
print(df.head())
#  	PriceCategory 	Type 	Region 	MunicipalityCode 	Prefecture 	Municipality 	DistrictName 	TradePrice 	PricePerUnit 	FloorPlan 	... 	Purpose 	Direction 	Classification 	Breadth 	CityPlanning 	CoverageRatio 	FloorAreaRatio 	Period 	Renovation 	Remarks
# 0 	成約価格情報 	宅地(土地と建物) 	NaN 	14204 	神奈川県 	鎌倉市 	浄明寺 	67000000 	NaN 	4LDK 	... 	NaN 	南 	公道 	6.0 	第1種低層住居専用地域 	40.0 	80.0 	2023年第4四半期 	NaN 	NaN
# 1 	不動産取引価格情報 	宅地(土地) 	住宅地 	14204 	神奈川県 	鎌倉市 	材木座 	130000000 	1200000.0 	NaN 	... 	住宅 	北 	市道 	1.8 	第1種中高層住居専用地域 	60.0 	200.0 	2023年第1四半期 	NaN 	NaN
# 2 	不動産取引価格情報 	宅地(土地) 	住宅地 	14204 	神奈川県 	鎌倉市 	材木座 	60000000 	890000.0 	NaN 	... 	住宅 	南 	私道 	3.0 	第1種中高層住居専用地域 	60.0 	150.0 	2023年第1四半期 	NaN 	NaN
paramsの値に2023と鎌倉の駅コードを記して完成です.鎌倉駅周辺の不動産価格なのですが,その取得範囲は,鎌倉市・逗子市の一部に広がっています.
これで,駅周辺の不動産価格マスターに一歩近づきました![]()