不動産取引の統計解析レポートを書きたくて、探索的データ分析(EDA:Explanatory Data Analysis)を実行したので、メモ程度に記事を書きます。
今回は不動産取引価格情報検索サービスからデータを取得します。
同サービスは、国土交通省の提供するサービスです。
実際の不動産取引結果を、不動産鑑定士が取引を特定出来ない様に加工して表示してくれるシステムです。
国が提供するデータなので、安心して利活用出来ます。
では早速、沖縄県の不動産取引状況を見ていきましょう。
ダウンロードするデータは以下です。
期間:2005年第三四半期~2023年第一四半期
対象地区:沖縄県全市区町村
全データ数:40,652件

47_Okinawa Prefecture_20053_20231 データ
.csv
Download CSV • 8.22MB
まずはCSVデータの読み込みです。何故かUTF-8とshift-jisでエラーが出ましたが、cp932で読み込みできたので、先に進みます。
import pandas as pd
estate = pd.read_csv("47_Okinawa Prefecture_20053_20231.csv",encoding="cp932")
estate

全体の情報を見てみます。
確かに40,652件の行数があります。
列数は30列です。
from rich.pretty import pprint
pprint(estate.info())

次に欠損値の確認です。
40,652件すべてのデータが揃っている項目は、場所を表す市区町村と取引価格、面積、取引時期の4項目のみでした。
estate.isnull().sum()

また、数値データのはずですが、objectで記載されたデータが散見されたので、修正コードを入れます。こちらの記事が参考になりました。
# https://qiita.com/teru-saitou/items/264b29de13f6abbb666a#1-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
dicto = {
"30分?60分":45,
"1H?1H30":75,
"2H?":120,
"1H30?2H":105
}
estate['最寄駅:距離(分)'] = estate['最寄駅:距離(分)'].replace(dicto).astype(float)
area = {
"2000㎡以上":2000,
"5000㎡以上":5000
}
estate["面積(㎡)"] = estate["面積(㎡)"].replace(area).astype(float)
estate["間口"] = estate["間口"].replace("50.0m以上",50).astype(float)
floor_area = {
"10m^2未満":9,
"2000㎡以上":2000,
}
estate["延床面積(㎡)"] = estate["延床面積(㎡)"].replace(floor_area).astype(float)
修正後のデータの統計量を見てみます。
# 指数表記を無効化
pd.options.display.float_format = '{:.2f}'.format
estate.describe()

取引価格の最小値は300円。最大値は4,300,000,000円。
坪単価の最小値は19円。最大値は6,200,000円。
競売や転用不可の農地や林地などが影響しているのかもしれませんが、取引価格にはかなり差がある様子です。
次に宅地やマンションなどの物件の種類の割合を見てみます。
40,652件の取引の中でも48%は土地取引となっています。
農地や中古マンションの取引はそれぞれ全体の18%、6%と比較的少数です。
不動産という高額商品の特性上、業者や一部のお金持ちで売買が活発に行われている様子が窺われます。

次は市区町村別に、取引件数を見ていきます。
1位は那覇市。2位はうるま市。3位は宮古島市。という順番です。3位の宮古からは、やはりリゾート地の転売といった、バブル感を感じられます。
estate["市区町村名"].value_counts()

都市計画上の取引数を見ていきましょう。
1位は区域外の都市計画区域。2位は第1種低層住居専用地域。3位は第1種中高層住居専用地域。
これらから、一般家庭や移住者などの住居用区域での売買が活発なことが分かります。

少し切り口を変えて、取引総額を市区町村順に見てみます。
1位は那覇市。2位は浦添市。3位は沖縄市という結果になりました。
import plotly.express as px
fig = px.treemap(
data_frame=estate,
values='取引価格(総額)',
path=['市区町村名'],
color='種類',
title='Treemap',
)
fig.show()

次に、取引状況ですが、ここ最近の多いのか?それとも少し前の2015年あたりの取引量の方が多いのか?時系列に見ていきます。
結論から申し上げますと、意外にも取引件数自体にはあまり変化が無いということでした。
さすがに2008年のリーマンショックは2,000件以下と売買は低調です。
しかし2010年以降は一貫して、年間2,500件程度の取引は行われている様です。
# 「取引時点」列を年と四半期に分割して新しい列を追加
estate[['年', '四半期']] = estate['取引時点'].str.split('年|第|四半期', expand=True)[[0, 2]]
estate["Date"] = pd.to_datetime(estate["年"])
import plotly.express as px
fig = px.histogram(
data_frame=estate,
x='Date',
title='Histogram (category)'
)
fig.show()
