Python:結婚適齢期女性が最も余っている都市を探し出す

pandasを使って、日本の市町村別人口データの中から、高齢化が進んでいる市町村と、結婚適齢期人口の男女比で、女性人口が多い市町村を抽出する。

スポンサーリンク

データの下準備

先ず、このサイトから必要なデータを漁ってくる。

import pandas as pd

df = pd.read_excel('jappopage.xls',encoding='cp932',skiprows=1)
df.drop(['団体コード'],axis=1,inplace=True)
df.head(3)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 55~59 60~64 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上
0 合計 NaN 127707259 5024936 5387161 5538141 6004284 6359291 6524487 7621589 7714169 9727763 7788090 6658215 5231303 3356963 1545490 418962 66959
1 合計 NaN 62298889 2576059 2761895 2838085 3076958 3262515 3352604 3808343 3814894 4715129 3648372 2970975 2131085 1156847 407334 71414 8148
2 合計 NaN 65408370 2448877 2625266 2700056 2927326 3096776 3171883 3813246 3899275 5012634 4139718 3687240 3100218 2200116 1138156 347548 58811

3 rows × 25 columns

35歳未満人口と65歳以上人口の列を追加する。

df['35歳未満'] = df[['0~4歳','5~9','10~14','15~19','20~24','25~29','30~34']].sum(axis=1)
df['65歳以上'] = df[['65~69','70~74','75~79','80~84','85~89','90~94','95~99','100歳以上']].sum(axis=1)
df.head(2)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上 35歳未満 65歳以上
0 合計 NaN 127707259 5024936 5387161 5538141 6004284 6359291 6524487 9727763 7788090 6658215 5231303 3356963 1545490 418962 66959 42157348 34793745
1 合計 NaN 62298889 2576059 2761895 2838085 3076958 3262515 3352604 4715129 3648372 2970975 2131085 1156847 407334 71414 8148 21608206 15109304

2 rows × 27 columns

65歳以上人口を35歳未満人口で割った若年高齢比の列を追加する。

df['若年高齢比'] = df['65歳以上']/df['35歳未満']
df.head(2)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上 35歳未満 65歳以上 若年高齢比
0 合計 NaN 127707259 5024936 5387161 5538141 6004284 6359291 6524487 7788090 6658215 5231303 3356963 1545490 418962 66959 42157348 34793745 0.825330
1 合計 NaN 62298889 2576059 2761895 2838085 3076958 3262515 3352604 3648372 2970975 2131085 1156847 407334 71414 8148 21608206 15109304 0.699239

2 rows × 28 columns

スポンサーリンク

高齢化が進んだ都道府県と市町村を抽出する

若年高齢比が高い市町村を抽出することで、高齢化が進んだ市町村が分かる。

aged_city=df[((df['若年高齢比']) > 1) & (df['性別']=='計')]
aged_city.sort_values(by='若年高齢比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上 35歳未満 65歳以上 若年高齢比
1782 群馬県 甘楽郡南牧村* 1935 12 24 18 34 28 42 159 232 245 211 116 26 6 204 1190 5.833333
1773 群馬県 多野郡神流町* 1921 16 28 33 29 42 42 175 215 220 165 83 25 0 241 1111 4.609959
4824 奈良県 吉野郡川上村* 1467 26 20 19 20 30 40 150 145 154 139 73 21 1 192 846 4.406250
1368 福島県 大沼郡金山町* 2135 26 25 42 64 50 39 195 207 240 198 139 45 7 298 1248 4.187919
5718 高知県 長岡郡大豊町* 3817 61 67 55 76 72 79 321 394 451 350 161 38 6 519 2137 4.117534
3303 長野県 下伊那郡天龍村* 1355 20 15 28 33 39 29 118 139 183 128 63 27 3 203 806 3.970443
4767 奈良県 宇陀郡御杖村* 1690 13 17 30 46 55 48 131 177 196 123 82 17 6 249 925 3.714859
1371 福島県 大沼郡昭和村* 1294 21 21 25 33 20 36 116 106 143 140 84 21 1 197 722 3.664975
630 青森県 東津軽郡今別町* 2759 36 31 58 73 58 67 251 266 283 187 73 15 5 393 1428 3.633588
5385 山口県 熊毛郡上関町* 2867 46 56 55 72 54 77 260 268 301 252 128 42 5 445 1596 3.586517

10 rows × 28 columns

どの町村も人口が少ないので、人口10万人以上の市に限定して抽出する。

aged_city=df[((df['若年高齢比']) > 1) & (df['性別']=='計') & (df['総数'] >= 1e5)]
aged_city.sort_values(by='若年高齢比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上 35歳未満 65歳以上 若年高齢比
42 北海道 小樽市 118948 2885 3573 4043 4874 4608 3983 10037 8773 7129 4807 2309 628 86 28491 46195 1.621389
4329 大阪府 大阪市西成区 107840 2400 2675 2806 3472 5245 5016 9679 8858 6535 3228 1202 304 59 26285 41457 1.577211
5781 福岡県 北九州市門司区 100304 3273 3932 4072 4293 3898 3759 7640 6691 5692 3955 1844 501 98 27615 35959 1.302155
762 岩手県 一関市 119273 3604 4423 4995 5415 4311 4152 7410 7300 6975 5402 2584 675 95 32358 41308 1.276593
39 北海道 函館市 262519 7772 8767 9584 10979 10453 10378 19271 16497 13765 9019 3987 1018 153 70194 88829 1.265479
1131 山形県 酒田市 104317 3342 3803 4314 4516 3701 3861 7031 6372 5814 4231 1842 476 58 28166 35515 1.260917
1728 群馬県 桐生市 113745 3053 3832 4394 5409 5278 4502 9012 7743 6092 3951 1835 494 87 31219 39202 1.255710
5826 福岡県 大牟田市 116578 4003 4490 4577 4972 4765 4817 8118 7356 6412 4649 2524 754 131 33133 41283 1.245978
24 北海道 札幌市南区 138707 4108 4859 5119 6021 6352 5534 10212 8537 6781 4529 1986 545 83 38244 46094 1.205261
5256 広島県 尾道市 139214 4584 5373 5597 6100 6061 5948 10602 8808 7684 5480 2756 776 120 40381 48591 1.203313

10 rows × 28 columns

高齢化の進んだ都道府県を抽出する。

aged_city=df[((df['若年高齢比']) > 1) & (df['性別']=='計') & (df['総数'] >= 5e5)]
aged_city.sort_values(by='若年高齢比',ascending=False)
都道府県名 市区町村名 性別 総数 0~4歳 5~9 10~14 15~19 20~24 25~29 70~74 75~79 80~84 85~89 90~94 95~99 100歳以上 35歳未満 65歳以上 若年高齢比
1023 秋田県* NaN 1015057 29227 34835 38846 42746 37017 36497 68832 63293 60642 43288 19386 4577 609 265286 354971 1.338069
5652 高知県* NaN 725289 24969 27444 29375 33194 29836 27962 51642 42840 37775 28455 14660 4123 678 207215 244306 1.178998
5328 山口県* NaN 1396197 50483 56710 59171 64624 61077 57844 99159 85339 71610 49483 23549 6874 1106 417616 461935 1.106124
591 青森県* NaN 1308707 43073 47902 53190 61010 53793 52213 85815 74722 66804 42890 18196 4253 551 375402 408815 1.089006
5016 島根県* NaN 691225 27224 28953 30101 32148 29269 28749 45057 37995 37826 28229 14436 4411 665 210308 228232 1.085227
738 岩手県* NaN 1264329 43442 49065 53363 58894 51732 52664 79266 73460 66259 46155 21113 5273 811 371503 399210 1.074581
1119 山形県* NaN 1106984 38712 43758 47593 52075 45975 46142 67640 61711 58122 43410 21127 5159 663 329787 353539 1.072022
5400 徳島県* NaN 757377 27217 29656 31188 34625 33122 32713 48481 41890 37734 26811 12956 3186 548 227263 239245 1.052723
4830 和歌山県* NaN 975074 34618 38610 40862 46705 44202 42705 66185 58031 48089 32559 15550 4170 724 295701 307004 1.038224
5568 愛媛県* NaN 1394339 50789 57663 60169 65123 61074 60274 91540 78325 67171 48331 23422 6563 1101 425362 437454 1.028428
2694 新潟県* NaN 2281291 80739 90489 95861 106204 101780 100087 143559 126235 110788 79476 39283 10998 1714 692022 705995 1.020192
3 北海道* NaN 5339539 181591 201119 213206 231870 237421 242677 350940 302582 244066 160558 73360 20168 3143 1587539 1618695 1.019625
2838 富山県* NaN 1069512 37827 41876 46117 50656 49559 47566 75180 60505 49702 34755 16759 4724 765 326904 331297 1.013438
6375 大分県* NaN 1169158 45546 49967 50586 54535 53267 50934 75687 65210 57513 40759 19963 5323 844 365020 365917 1.002457

14 rows × 28 columns

人口500万人超の北海道を別にすれば、人口の少ない県ほど高齢化が進んでいる。子供が生まれないから人口が減るわけだから、高齢化が進むのは当たり前と言えば当たり前の話である。

スポンサーリンク

結婚適齢期女性が余っている市町村を抽出する

結婚適齢期をどこで線引きするかが難しい。一昔前なら16歳〜28歳だったのだろうが、今は18歳〜34歳とすべきなのか、あるいは、晩婚化が進んでいるので39歳まで適齢期年齢を引き上げるべきなのか判断に迷うところである。しかしながら、33歳を過ぎると高齢出産と言われているので、やはり、35歳未満が女性の結婚適齢期年齢の限界だと思われる。

df['15〜34'] = df[['15~19','20~24','25~29','30~34']].sum(axis=1)

都道府県、市町村、女性数、男性数のデータフレームを別個構築する

fem = df['性別']=='女'
mal = df['性別']=='男'
f = df[fem][['都道府県名','市区町村名','15〜34']]
m = df[mal][['都道府県名','市区町村名','15〜34']]
f.rename(columns={'15〜34':'Female'}, inplace=True)
m.rename(columns={'15〜34':'Male'}, inplace=True)
df1 = pd.merge(f,m,how='inner',on=['都道府県名','市区町村名'])
df1.head(2)
都道府県名 市区町村名 Female Male
0 合計 NaN 12774943 13432167
1 北海道* NaN 490966 500657

男女比の列を作る

df1['男女比'] = df1['Female']/df1['Male']
df1.head(2)
都道府県名 市区町村名 Female Male 男女比
0 合計 NaN 12774943 13432167 0.951071
1 北海道* NaN 490966 500657 0.980643

結婚適齢期女性余剰市町村を抽出する

fem_city=df1[((df1['男女比']) > 1)]
fem_city.sort_values(by='男女比',ascending=False).head()
都道府県名 市区町村名 Female Male 男女比
828 東京都 青ヶ島村 21 15 1.400000
104 北海道 上川郡東川町 854 646 1.321981
1693 島根県 隠岐郡海士町* 210 162 1.296296
1100 長野県 下伊那郡売木村* 38 30 1.266667
590 群馬県 多野郡上野村* 96 76 1.263158

青ヶ島村が最も適齢期女性余りの村のようである。今度は、男女比が1.2を超えている適齢期女性が最も多い市を抽出する。

fem_city=df1[((df1['男女比']) > 1.2)]
fem_city.sort_values(by='Female',ascending=False).dropna().head(10)
都道府県名 市区町村名 Female Male 男女比
1937 福岡県 福岡市中央区 28512 22579 1.262766
1386 京都府 京都市東山区 3975 3308 1.201632
2194 鹿児島県 南さつま市 3086 2564 1.203588
104 北海道 上川郡東川町 854 646 1.321981
1693 島根県 隠岐郡海士町* 210 162 1.296296
590 群馬県 多野郡上野村* 96 76 1.263158
1100 長野県 下伊那郡売木村* 38 30 1.266667
828 東京都 青ヶ島村 21 15 1.400000

結婚適齢期女性が一番余っている都市を抽出する。

df1['男女差'] = df1['Female']-df1['Male']
fem_city=df1[((df1['男女差']) > 1.2)]
fem_city.sort_values(by='男女差',ascending=False).dropna().head(10)
都道府県名 市区町村名 Female Male 男女比 男女差
1934 福岡県 福岡市 192775 181519 1.062010 11256
2 北海道 札幌市 207179 196557 1.054040 10622
2181 鹿児島県 鹿児島市 65578 59346 1.105011 6232
1937 福岡県 福岡市中央区 28512 22579 1.262766 5933
777 東京都 世田谷区 109734 103851 1.056648 5883
3 北海道 札幌市中央区 28692 25163 1.140246 3529
780 東京都 杉並区 75356 71959 1.047207 3397
1425 大阪府 大阪市 315593 312589 1.009610 3004
1381 京都府 京都市 154985 152489 1.016368 2496
1527 兵庫県 宝塚市 23136 20763 1.114290 2373

福岡県福岡市と北海道札幌市が、最も結婚できる確率が高い二大都市のようである。既婚女性のほとんどが30歳前に結婚している事実を考えると、結婚時の年齢が男の方が全国平均で2歳上というデータを考慮に入れる必要はないだろう。

スポンサーリンク
スポンサーリンク