土地の値段を扱いたいとき、公的に手に入るデータは大きく2種類あります。とです。名前が似ているので混同されがちですが、性質がまったく違います。
前者は、国が選んだ地点について「この土地は1平方メートルあたりいくらが妥当か」を毎年評価したものです。実際に売買が行われていなくても値が付きます。地点は固定されているので、同じ場所の推移を長期で追えます。
後者は、実際に売買された取引の記録です。実勢を反映していますが、取引が無い場所には何もありません。さらに個人が特定されないよう、面積や価格が丸められています。この丸めが分析に効いてきます。
丸めが単価の計算を歪める
取引価格情報では、面積が「100平方メートル」のように区切りの良い値に丸められ、価格も同様に丸められています。ここから単価を出すと、丸めの誤差が割り算で拡大します。
面積が小さいほど影響が大きくなります。実際の面積が55平方メートルなのに50と記録されていれば、単価は1割ほど高く出ます。小さい物件ばかりを集めて平均を取ると、系統的にずれた数字になります。
| 項目 | 公示地価 | 取引価格情報 |
|---|---|---|
| 値の性質 | 評価額(理論値) | 実際の取引価格 |
| 取引が無い場所 | 値が付く | 何も無い |
| 地点の継続性 | 同じ地点を毎年評価 | 取引のあった場所だけ |
| 精度 | 丸められていない | 面積・価格とも丸め済み |
| 更新の頻度 | 年1回 | 四半期ごと |
「土地の価格」という同じ名前の列に両方を入れると、評価額と取引価格が混ざります。片方は理論値、片方は実績なので、平均を取っても意味のある数字になりません。出所を示す列を必ず持たせてください。
地点をどう突き合わせるか
どちらのデータも場所の情報を持っていますが、粒度が違います。公示地価は具体的な地点、取引価格情報は町名までといった粗さです。そのまま結合しようとしても鍵が合いません。
共通の粒度に揃えるなら、が最も確実です。ただしこのコードは市町村合併で変わるので、古いデータを扱うときは時点を意識する必要があります。合併前のコードで集計した数字と、合併後の数字は直接比較できません。
import pandas as pd
def normalize_muni_code(s: pd.Series) -> pd.Series: """自治体コードは 5 桁(または 6 桁)の文字列。 数値として読むと先頭ゼロが落ち、北海道の 01xxx が 1xxx になる。""" out = s.astype(str).str.strip()
# すでに数値として読まれてしまっている場合を救う out = out.where(out.str.len() >= 5, out.str.zfill(5))
if not out.str.fullmatch(r"\d{5,6}").all(): bad = out[~out.str.fullmatch(r"\d{5,6}")].unique()[:5] raise ValueError(f"自治体コードの形式が不正: {list(bad)}") return out配信の形と、取得の頻度
公示地価は年1回の公表なので、取得も年1回で足ります。取引価格情報は四半期ごとに更新されるので、こちらは定期的に取りに行くことになります。更新の頻度が違うものを同じ処理でまとめて取ろうとすると、無駄な取得が増えます。
配信の形は のダウンロードとの両方があります。 があるなら条件で絞れるので、必要な地域だけを取れます。全件をダウンロードして手元で絞るより、相手の負荷も自分の待ち時間も小さくなります。
取得したものは、で読んだあと年ごとに分けて保存しておくと扱いやすくなります。年1回しか変わらないデータを毎回全期間読み直す必要はありません。
import pandas as pd
def to_price(s: pd.Series, unit: str) -> pd.DataFrame: """価格の列を数値にしつつ、単位を列として残す。 単位を列名に埋め込むだけだと、結合したときに失われる。""" if unit not in ("yen", "10k_yen"): raise ValueError("yen か 10k_yen を指定してください")
v = ( s.astype(str) .str.replace(",", "", regex=False) .str.strip() .replace({"": None, "-": None}) ) return pd.DataFrame({"price": pd.to_numeric(v, errors="coerce"), "price_unit": unit})どちらを使うかは問いで決まる
「この地域の土地は値上がりしているか」を長期で見たいなら公示地価です。地点が固定されているので、同じ場所を比較できます。取引価格情報だと、年によって取引された場所が違うため、場所の違いが値動きに見えてしまいます。
逆に「いま実際にいくらで売れているか」を知りたいなら取引価格情報です。評価額は実勢とずれることがあるので、取引の実態を見たい用途には向きません。問いを先に決めてから、データを選んでください。
地理データ全般の扱いについては データの宝石箱 EP.20 で扱っています。次回は、時間の粒度が細かい公的データを見ます。
土地の価格は、地域差が非常に大きいデータです。全国平均を出しても、都心と地方のどちらの実態も表しません。集計の単位を先に決めてから取りにいくほうが、無駄な取得を避けられます。
なお、どちらのデータも土地に関するものです。建物を含む価格を見たい場合は、また別の情報が要ります。分析の対象が土地なのか建物込みなのかで、使うデータが変わります。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。