茨城県の各都市の公示地価の推移について

こんにちは。つくばに住む研究者です。

今回は地価のデータを取り扱います。地価には国土交通省による公示地価や国税庁が発表する路線価のほかに、各都道府県が発表する基準地価や過去の取引時の価格である実勢価格など様々ありますが、多くは公示地価が基準となっているため、今回は代表的な地価として公示地価について見ていきます。

今回の目標は、茨城県の各市区町村の地価の平均について、最近の15年のデータを折れ線グラフにして比較してみることにします。

まずは下記から国交省の地価公示データを取得します。

CSV形式の地価データをダウンロードし、いつものようにGoogle Driveに置いてColabでアクセスできるようにします。必要なライブラリもまとめてインポートするとこんな感じです。

!pip install japanize-matplotlib --q
from google.colab import drive
import pandas as pd
import numpy as  np
import matplotlib.pyplot as plt
import japanize_matplotlib
japanize_matplotlib.japanize()

drive.mount('/content/drive')
dir_path = '/content/drive/MyDrive/Colab Notebooks/Data/2023_07/'

実際に地価のデータを読み込んでみます。pandasのread_csvでそのまま読み込もうとするとエンコードのエラーになりますので、'SHIFT-JIS'を指定して読みましょう。

df = pd.read_csv(dir_path+'L01-2023P-2K_08.csv',encoding='SHIFT-JIS')
df.head(3)

無事に読み込めました。128列もあるので画面には表示しきれません。
表には、基準値の緯度や経度(秒表記)、年次、市区町村、所在地(住所)や過去の時点での地価などの情報が入っています。

今回の目的は「茨城県の各市区町村ごとに、最近の15年の地価の平均を折れ線グラフにする」ということなので、この中から、過去の15年にわたって連続でデータが存在する基準点だけを取り出します。そのためには、「選定年次ビット」を使います。これは41桁の0または1からなる数字で、過去41年の中で基準点に選定された場合、年度に対応した桁が1になるように作られています。例えば「00000000000000000000000000011111111111111」であれば下から14個分「1」が並んでいますので、過去14年間は基準点となっており、それよりも過去には基準点に選ばれていないということになります。正規表現を使って、過去に15個分の「1」が並んでいる基準点だけに絞り込みます。

df['選定年次ビット'] = df['選定年次ビット'].astype('str')
df_last15 = df[df['選定年次ビット'].str.contains('.*11111111111111')]

簡単のため、市区町村と過去15年分の地価データだけをもつdf_last15というデータフレームを作ります。

target = ['市区町村名',
          'H21価格','H22価格','H23価格','H24価格','H25価格','H26価格',
          'H27価格','H28価格','H29価格','H30価格','H31価格','R2価格','R3価格','R4価格','R5価格']

df_last15 = df_last15[target]

dfに含まれるユニークな市区町村を取り出し、それぞれの市区町村の平均値を使って折れ線グラフを作ります。

# 平均値
cities = df_last15['市区町村名'].unique()

fig = plt.figure(figsize=(20,10))
years = range(2008,2023) 
plt.xticks(years)

for city in cities:
  plt.plot(years, df_last15[df_last15['市区町村名']==city].mean()[1:],label=city)

plt.legend()
2008~2023年の各市区町村の基準地点の公示地価の平均値の推移

縦軸の単位は1平方メートルあたりの価格です。市区町村の数が多いため見づらくなりましたが、これで各市区町村の基準地の公示地価の平均値の推移を折れ線グラフにすることができました。
ほとんどの都市について、2009年のリーマンショック以降から数年間は下落傾向でしたが、近年ではほとんどが横ばいのようです。上から2つの水色と茶色は、それぞれ守谷市とつくば市で、この2都市では平均値が上昇していることがわかりました。平均値を見ると守谷市は茨城県内では最も地価が高いようです。他には、水戸、取手なども地価が高いことがわかります。

ところで、基準点の選定は国交省が行うことであり、実験などで得られるランダムなサンプルとは違って非常に人為的です。市区町村ごとに基準点の数も大きく違いますので、単純な平均値だけの観測では実態を捉えきれない可能性があります。念の為、平均値以外にも中央値や最大値についても確認してみましょう。先のグラフを書くときの.mean()を.median()にすると中央値で、.max()を使うと最大値で描写できます。複数の基準点が合致する場合があるので、numeric_onlyをTrueにして実行します。

中央値は以下のようになります。

2008~2023年の各市区町村の基準地点の公示地価の中央値の推移

最大値は以下のようになります。

2008~2023年の各市区町村の基準地点の公示地価の最大値の推移

中央値のグラフをみると守谷市はダントツです。中央値と平均値の乖離が大きいデータについては分布もよく確認する必要があります。また、最大値のグラフからは、2018年ごろまでは水戸市が最も高い地価でしたが、その後はつくば市と入れ替わっていることが分かりました。

茨城県内で人口の多い幾つかの都市について、市内の基準点の公示地価のばらつきを確認してみましょう。水戸市、つくば市、日立市、ひたちなか市、土浦市、守谷市についてバイオリンプロットを作成します。

import seaborn as sns

fig = plt.figure(figsize=(12, 8), dpi=100)
ax = fig.add_subplot(1, 1, 1)

cities = ['水戸','つくば','日立','ひたちなか','土浦','守谷']

ax.violinplot([df_last15['R5価格'],
              df_last15[df_last15['市区町村名']==cities[0]]['R5価格'],
              df_last15[df_last15['市区町村名']==cities[1]]['R5価格'],
              df_last15[df_last15['市区町村名']==cities[2]]['R5価格'],
              df_last15[df_last15['市区町村名']==cities[3]]['R5価格'],
              df_last15[df_last15['市区町村名']==cities[4]]['R5価格'],
              df_last15[df_last15['市区町村名']==cities[5]]['R5価格']])
              
ax.set_xticks([1,2,3,4,5,6,7])
ax.set_xticklabels(['全体', cities[0],cities[1],cities[2],cities[3],cities[4],cities[5]])
plt.show()
各都市の基準点の公示地価のばらつき

バイオリンプロットはデータのばらつきを比較する上で役立ちます。どうやら各都市の基準点の選定にはばらつきが大きいようです。

次回は実際の地図上での位置関係について確認します。


この記事が気に入ったらサポートをしてみませんか?