見出し画像

生産年齢人口の比率と地方税額の関係について(茨城県)

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

今日は表題の通り、茨城県の各市の生産年齢人口の比率と、一人当たり地方税額の関係について調べます。

一人当たり地方税は、その名の通り市町村に住む住民一人あたりの市町村税(市町村民税、固定資産税、軽自動車税etc)であり、財政力指数などと共に、自治体が提供する行政サービスを設計する上での指標の一つになります。

地方税のおよそ45%は市町村民税であり、その市町村民税のおよそ75%程度(=全体の33%程度)が個人からの税収であることから、自治体の生産年齢人口比率と一人あたりの地方税額の両者の間には相関(因果)関係が存在することが推察できます。

茨城県の各市の年齢別の人口割合の算出にはe-Statの住民基本台帳を使います。また、一人当たり地方税データはRESASより取得しました。この2つのデータを整形し、生産年齢の人口比率と一人当たり地方税の散布図を作成します。

今回もGoogle Colabを使います。まずはいつものように必要なライブラリをインポートします。

from google.colab import drive
import pandas as pd
import numpy as  np
import matplotlib.pyplot as plt

import japanize_matplotlib
japanize_matplotlib.japanize()

import seaborn as sns
sns.set(font="IPAexGothic")

drive.mount('ドライブのパス')
dir_path = 'データのパス'

地方税のデータを読み込みます。
つくば市のデータについて内容を確認してみましょう。

df = pd.read_csv('1人当たり地方税のデータファイル',encoding='Shift-JIS')
df[df['市区町村名']=='つくば市']

いわゆる”縦持ち”のデータになっています。まずはこれを”横持ち”に変換し、年度ごとの推移を見やすいようにしてみます。

dfm = pd.DataFrame(columns=['市町村名','データ種別','2013','2014','2015',
                            '2016','2017','2018','2019','2020','2021'])
years = ['2013','2014','2015','2016','2017','2018','2019','2020','2021']

df = df[df['市区町村名'].isin(cities)]

for i in range(0,len(cities)):
  dfm.loc[i,'市町村名'] = cities[i]
  dfm.loc[i,'データ種別'] = '一人当たり地方税(千円)'
  z = df[df['市区町村名']==cities[i]]['一人当たり地方税(千円)'].to_numpy()[5:]
  for j in range(0,len(years)):
    dfm.loc[i,years[j]] = z[j]
dfm

各市に2021年時点での人口比率の列を持たせます。住民基本台帳のデータを読み込み、茨城県の各市のデータだけを取り出します。

df_p = pd.read_excel('住民台帳のデータファイル',skiprows=2)
df_p = df_p[df_p['都道府県名'].isin(['茨城県','合計'])].reset_index(drop=True)

男女別の集計と合計の集計のレコードがあるため、合計のデータだけを抽出します。元のエクセルのヘッダがイマイチなフォーマットだったので人口区分のカラム名がおかしなことになってしまいましたが、元のデータと付き合わせて対応するレコードを手動で選択して生産年齢人口を計算します。

なお、生産年齢人口は15歳以上64歳未満とされることもありますが、現代においては15歳から19歳の人口については労働者の割合が少ないこともあり、20歳以上64歳未満の人口を集計することにします。


df_p = df_p[df_p['性別']=='計']
cols = ['人.5','人.6', '人.7', '人.8', '人.9', '人.10', '人.11', '人.12', '人.13']
df_p['20〜64歳人口'] = df_p[cols].sum(axis=1)
df_p['20〜64歳人口割合'] = 100*df_p['20〜64歳人口']/df_p['人']
df_p = df_p.reset_index(drop=True)

dfm['人口']=0
for i in range(0,len(dfm)):
  print(dfm.iloc[i]['市町村名'])
  try:
    dfm.loc[i,'人口']=float(df_p[df_p['市区町村名']==dfm.iloc[i]['市町村名']]['人'])
  except TypeError:
    pass

各市の地方税の推移をプロットします。今回はplotlyというライブラリを利用します。

import plotly.express as px

fig = px.line(dfm, x="年次", y="一人当たり地方税(千円)", color='市町村名',
              title='茨城県主要都市における一人当たり地方税の推移',
              width=800, height=800)

fig.update_layout(font=dict(size=18))
fig.show()

推移の傾向は市によって様々ですが、最も一人当たり地方税額の大きい神栖市と、最も小さい常陸太田市では倍以上の差があります。

次に2020年のデータを散布図にしてみます。散布図に描かれる円の大きさを人口に対応させます。

import plotly.express as px
import plotly.graph_objects as go

dfa=dfm[dfm['データ種別']=='20〜64歳人口割合']['2020']
dfb=dfm[dfm['データ種別']=='一人当たり地方税(千円)']['2020']
dfc=dfm[dfm['データ種別']=='20〜64歳人口割合']['市町村名']
dfd=dfm[dfm['データ種別']=='人口総数']['2020']

fig = px.scatter(x=dfa, y=dfb,text=dfc,
                 size = dfd,
                 trendline="ols",
                 title='20-64歳人口比率と一人当たり地方税額(茨城県)',
                 labels=dict(x='20〜64歳人口比率 [%]', y='一人当たり地方税 [千円]'),
                 width=1000, height=900)

fig.update_layout(
    font=dict(
        size=16,
    )
)

fig.show()

予想した通りですが、一人当たり地方税額と20〜64歳人口比率には、はっきりとした相関関係があることがわかりました。計算したところ、両者の相関係数は0.774となりました。一人当たり地方税は固定資産税や法人税によっても増減しますが、何よりも生産年齢人口の影響が大きいことが伺えます。東京などには大企業が集中しているため、また別の傾向がありそうです。

ところで今後の地方税を占う上では各市の20〜64歳人口比率はどのように推移していったのかも気になります。最後に各市の生産年齢人口比率の推移についてもプロットしてみます(途中のデータ整形は省略します)

from itertools import cycle
from plotly.validators.scatter.marker import SymbolValidator
from plotly.validators.scatter.line import DashValidator

line_styles_names = ['solid', 'dot', 'dash', 'longdash', 'dashdot', 'longdashdot']
line_styles = cycle(line_styles_names)

symbols_names =['circle', 'square', 'diamond', 'cross', 'x', 'pentagon', 'hexagram', 'star']
markers = cycle(symbols_names)

fig = px.line(dfm2, x="年次", y="20〜64歳人口割合", color='市町村名',
              title='茨城県の各市の20-64歳人口比率の推移',
              labels=dict(x='年次', y='20〜64歳人口比 [%]'),
              width=900, height=900)

fig.update_layout(
    font=dict(
        size=14,
    )
)

_ = fig.update_traces(mode='lines+markers')
for d in fig.data:
    d.line["dash"] = next(line_styles)
    d.marker.symbol = next(markers)
    d.marker.size = 10

fig.show()

これも想像していたとおりですが、すべての市について生産年齢人口の比率は減少しています。一般的に高齢化が進むにつれ社会保証などの行政サービスの予算が増大するとされていますので、若い世代が受けられる行政サービスへの影響が不安視されます。

今後、一人当たり地方税額の数字自体はインフレなどの影響もあり微増するかもしれませんが、個人的な思いとしてはより多くの予算を若い世代に割いて欲しいと願うばかりです。

それでは。

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