Python:在留外国人比率の高い市町村を条件別に抽出する

日本は、外国人人口が増えていると言われているが、アメリカと比べれば取るに足りない数字である。本当の移民大国であるアメリカは、今年だけで不法移民が日本の在留外国人数を余裕で超えると予想されている。

スポンサーリンク

データの下準備

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

import pandas as pd

df = pd.read_excel('jappopu.xls',encoding='cp932',skiprows=1)
df.drop(['団体コード'],axis=1,inplace=True)
df.head(2)
都道府県名 市区町村名 性別 総数 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 125209603 4939488 5316219 5479985 5898581 5990347 6144894 7513312 7634076 9668578 7746900 6628620 5212565 3347639 1541210 417681 66790
1 合計 NaN 61098245 2532151 2725286 2808241 3023594 3063840 3145791 3763071 3780235 4687403 3629399 2958695 2124031 1153934 406079 71105 8119

2 rows × 25 columns

a=[i for i in df.columns[5:25]]
b=["{}歳".format(i) for i in df.columns[5:25]]
f = ["'{}': '{}'".format(a_, b_) for a_, b_ in zip(a, b)]
f = ', '.join(f)
print(f)
'5~9': '5~9歳', '10~14': '10~14歳', '15~19': '15~19歳', '20~24': '20~24歳', '25~29': '25~29歳', '30~34': '30~34歳', '35~39': '35~39歳', '40~44': '40~44歳', '45~49': '45~49歳', '50~54': '50~54歳', '55~59': '55~59歳', '60~64': '60~64歳', '65~69': '65~69歳', '70~74': '70~74歳', '75~79': '75~79歳', '80~84': '80~84歳', '85~89': '85~89歳', '90~94': '90~94歳', '95~99': '95~99歳', '100歳以上': '100歳以上歳'
df.rename(columns={'5~9': '5~9歳', '10~14': '10~14歳', '15~19': '15~19歳', '20~24': '20~24歳', '25~29': '25~29歳', '30~34': '30~34歳', '35~39': '35~39歳', '40~44': '40~44歳', '45~49': '45~49歳', '50~54': '50~54歳', '55~59': '55~59歳', '60~64': '60~64歳', '65~69': '65~69歳', '70~74': '70~74歳', '75~79': '75~79歳', '80~84': '80~84歳', '85~89': '85~89歳', '90~94': '90~94歳', '95~99': '95~99歳'} ,inplace = True)
df.head(2)
都道府県名 市区町村名 性別 総数 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 125209603 4939488 5316219 5479985 5898581 5990347 6144894 7513312 7634076 9668578 7746900 6628620 5212565 3347639 1541210 417681 66790
1 合計 NaN 61098245 2532151 2725286 2808241 3023594 3063840 3145791 3763071 3780235 4687403 3629399 2958695 2124031 1153934 406079 71105 8119

2 rows × 25 columns

df1 = pd.read_excel('foreignerpop.xls',encoding='cp932',skiprows=1)
df1.drop(['団体コード'],axis=1,inplace=True)
df1.head(2)
都道府県名 市区町村名 性別 総数 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 2497656 85448.0 70942.0 58156.0 105703.0 368944.0 379593.0 108277.0 80093.0 59185.0 41190.0 29595.0 18738.0 9324.0 4280.0 1281.0 169.0
1 合計 NaN 1200644 43908.0 36609.0 29844.0 53364.0 198675.0 206813.0 45272.0 34659.0 27726.0 18973.0 12280.0 7054.0 2913.0 1255.0 309.0 29.0

2 rows × 25 columns

df1.rename(columns={'総数':'外国人総数','0~4歳':'0〜4','100歳以上':'100〜'},inplace=True)
df1.head(1)
都道府県名 市区町村名 性別 外国人総数 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 2497656 85448.0 70942.0 58156.0 105703.0 368944.0 379593.0 108277.0 80093.0 59185.0 41190.0 29595.0 18738.0 9324.0 4280.0 1281.0 169.0

1 rows × 25 columns

df2 = pd.merge(df,df1,how='right',on=['都道府県名','市区町村名','性別'])
df2.head(1)
都道府県名 市区町村名 性別 総数 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 125209603.0 4939488.0 5316219.0 5479985.0 5898581.0 5990347.0 6144894.0 108277.0 80093.0 59185.0 41190.0 29595.0 18738.0 9324.0 4280.0 1281.0 169.0

1 rows × 47 columns

総外国人比率の多い市町村を抽出する

先ずは日本人総数に対する外国人総数の比率が高い市町村を探し出すために、総数を外国人総数で割った外国人比列を作る。

df2['外国人比']=df2['外国人総数']/df2['総数']
df2['外国人比'].head(2)
0    0.019948
1    0.019651
Name: 外国人比, dtype: float64
city=df2[((df2['外国人比']) > 0) & (df2['総数'] >= 1e1) & (df2['性別']=='計')]
city.sort_values(by='外国人比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 60~64 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100〜 外国人比
165 北海道 勇払郡占冠村 1121.0 41.0 26.0 30.0 41.0 69.0 65.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.293488
3189 大阪府 大阪市生野区 99738.0 3438.0 3548.0 3697.0 4429.0 5456.0 5466.0 2024.0 2049.0 1728.0 1549.0 999.0 499.0 217.0 95.0 15.0 0.278460
1083 群馬県 邑楽郡大泉町 34291.0 1305.0 1362.0 1456.0 1687.0 2057.0 1882.0 239.0 128.0 77.0 19.0 12.0 2.0 0.0 0.0 0.0 0.221195
153 北海道 余市郡赤井川村 1102.0 39.0 50.0 52.0 40.0 28.0 52.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.145191
1518 東京都 新宿区 299869.0 11191.0 8845.0 7659.0 8336.0 16548.0 25027.0 904.0 484.0 253.0 170.0 118.0 43.0 30.0 8.0 2.0 0.141488
3177 大阪府 大阪市浪速区 58538.0 2084.0 1353.0 1088.0 1348.0 4020.0 7151.0 218.0 145.0 92.0 63.0 50.0 19.0 11.0 1.0 1.0 0.141447
1680 神奈川県 横浜市中区 135023.0 4597.0 4925.0 4852.0 4959.0 5751.0 6574.0 607.0 409.0 301.0 208.0 133.0 84.0 40.0 11.0 1.0 0.121757
2688 愛知県 名古屋市中区 75139.0 2593.0 1900.0 1669.0 1896.0 4813.0 7451.0 186.0 110.0 58.0 28.0 14.0 7.0 2.0 0.0 0.0 0.119898
141 北海道 虻田郡留寿都村 1841.0 77.0 78.0 82.0 75.0 109.0 86.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.112982
1554 東京都 豊島区 258101.0 9156.0 7800.0 6934.0 7691.0 14141.0 21492.0 503.0 237.0 119.0 84.0 56.0 41.0 18.0 6.0 0.0 0.112398

10 rows × 48 columns

外国人比率が高い市町村は、今後もこの比率はどんどん上昇していき、外国人が多数派になるのも時間の問題だろう。これは非常に良い傾向である。というのも、この国は、日本人だけのものではないからだ。次に、人口が1万人以下の市町村に限定してみる。

city=df2[((df2['外国人比']) > 0) & (df2['総数'] < 1e4) & (df2['性別']=='計')]
city.sort_values(by='外国人比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 60~64 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100〜 外国人比
165 北海道 勇払郡占冠村 1121.0 41.0 26.0 30.0 41.0 69.0 65.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.293488
153 北海道 余市郡赤井川村 1102.0 39.0 50.0 52.0 40.0 28.0 52.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.145191
141 北海道 虻田郡留寿都村 1841.0 77.0 78.0 82.0 75.0 109.0 86.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.112982
138 北海道 虻田郡ニセコ町 4772.0 208.0 248.0 183.0 207.0 158.0 140.0 2.0 2.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.090319
2361 長野県 北安曇郡白馬村 8562.0 283.0 341.0 368.0 414.0 354.0 265.0 7.0 7.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.079654
2511 岐阜県 加茂郡坂祝町 7644.0 337.0 342.0 326.0 346.0 373.0 412.0 17.0 9.0 6.0 4.0 1.0 0.0 0.0 0.0 0.0 0.072083
2862 愛知県 海部郡飛島村 4404.0 186.0 230.0 230.0 176.0 179.0 180.0 4.0 1.0 1.0 2.0 1.0 0.0 0.0 0.0 0.0 0.068347
2931 三重県 桑名郡 6028.0 144.0 225.0 263.0 280.0 285.0 249.0 15.0 9.0 3.0 2.0 0.0 0.0 0.0 0.0 0.0 0.062044
2934 三重県 桑名郡木曽岬町 6028.0 144.0 225.0 263.0 280.0 285.0 249.0 15.0 9.0 3.0 2.0 0.0 0.0 0.0 0.0 0.0 0.062044
2271 長野県 南佐久郡南牧村 3007.0 90.0 135.0 153.0 148.0 126.0 130.0 3.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.054872

10 rows × 48 columns

今度は、人口が1万人以上10万人未満の市町村に限定してみる。

city=df2[((df2['外国人比']) > 0) & (df2['総数'] > 1e4)  & (df2['総数'] < 1e5) & (df2['性別']=='計')]
city.sort_values(by='外国人比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 60~64 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100〜 外国人比
3189 大阪府 大阪市生野区 99738.0 3438.0 3548.0 3697.0 4429.0 5456.0 5466.0 2024.0 2049.0 1728.0 1549.0 999.0 499.0 217.0 95.0 15.0 0.278460
1083 群馬県 邑楽郡大泉町 34291.0 1305.0 1362.0 1456.0 1687.0 2057.0 1882.0 239.0 128.0 77.0 19.0 12.0 2.0 0.0 0.0 0.0 0.221195
3177 大阪府 大阪市浪速区 58538.0 2084.0 1353.0 1088.0 1348.0 4020.0 7151.0 218.0 145.0 92.0 63.0 50.0 19.0 11.0 1.0 1.0 0.141447
2688 愛知県 名古屋市中区 75139.0 2593.0 1900.0 1669.0 1896.0 4813.0 7451.0 186.0 110.0 58.0 28.0 14.0 7.0 2.0 0.0 0.0 0.119898
147 北海道 虻田郡倶知安町 14862.0 696.0 714.0 637.0 615.0 634.0 679.0 6.0 5.0 2.0 0.0 0.0 0.0 0.0 1.0 0.0 0.105639
3186 大阪府 大阪市東成区 75422.0 2906.0 2789.0 2874.0 3209.0 4174.0 5057.0 507.0 503.0 383.0 288.0 211.0 112.0 60.0 13.0 5.0 0.094018
1071 群馬県 邑楽郡 97446.0 3300.0 3896.0 4277.0 4739.0 4998.0 4578.0 266.0 141.0 87.0 21.0 12.0 2.0 1.0 1.0 0.0 0.091969
2424 岐阜県 美濃加茂市 52044.0 2531.0 2774.0 2788.0 2698.0 2536.0 2703.0 118.0 54.0 35.0 12.0 5.0 3.0 0.0 0.0 0.0 0.089520
1176 埼玉県 蕨市 68476.0 2506.0 2460.0 2386.0 2696.0 3709.0 4478.0 76.0 49.0 18.0 20.0 12.0 1.0 1.0 0.0 0.0 0.089082
3225 大阪府 大阪市中央区 90183.0 3955.0 2878.0 2243.0 2327.0 4990.0 9099.0 341.0 191.0 123.0 83.0 47.0 17.0 8.0 3.0 0.0 0.087899

10 rows × 48 columns

最後に、人口が10万人以上の市に限定してみる。

city=df2[((df2['外国人比']) > 0) & (df2['総数'] >= 1e5) & (df2['性別']=='計')]
city.sort_values(by='外国人比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 60~64 65~69 70~74 75~79 80~84 85~89 90~94 95~99 100〜 外国人比
1518 東京都 新宿区 299869.0 11191.0 8845.0 7659.0 8336.0 16548.0 25027.0 904.0 484.0 253.0 170.0 118.0 43.0 30.0 8.0 2.0 0.141488
1680 神奈川県 横浜市中区 135023.0 4597.0 4925.0 4852.0 4959.0 5751.0 6574.0 607.0 409.0 301.0 208.0 133.0 84.0 40.0 11.0 1.0 0.121757
1554 東京都 豊島区 258101.0 9156.0 7800.0 6934.0 7691.0 14141.0 21492.0 503.0 237.0 119.0 84.0 56.0 41.0 18.0 6.0 0.0 0.112398
3408 兵庫県 神戸市中央区 122306.0 4842.0 4073.0 3805.0 3963.0 6636.0 8868.0 565.0 569.0 413.0 392.0 266.0 151.0 73.0 20.0 0.0 0.103871
1560 東京都 荒川区 196080.0 8428.0 7629.0 7077.0 7053.0 9236.0 12420.0 619.0 396.0 312.0 215.0 140.0 82.0 49.0 13.0 1.0 0.094676
1515 東京都 港区 234117.0 13469.0 10259.0 7802.0 6568.0 9062.0 15186.0 700.0 367.0 201.0 141.0 90.0 55.0 20.0 6.0 4.0 0.083386
1524 東京都 台東区 181272.0 6548.0 5445.0 5076.0 5194.0 7298.0 11909.0 459.0 218.0 158.0 101.0 66.0 34.0 24.0 6.0 1.0 0.081987
1728 神奈川県 川崎市川崎区 216959.0 8509.0 8463.0 8417.0 8433.0 12131.0 14532.0 531.0 372.0 237.0 196.0 129.0 63.0 40.0 11.0 1.0 0.068515
1557 東京都 北区 327076.0 12842.0 10831.0 10041.0 10697.0 15775.0 22584.0 440.0 306.0 188.0 115.0 68.0 40.0 19.0 7.0 0.0 0.064065
1005 群馬県 伊勢崎市 200825.0 8311.0 9130.0 9881.0 10767.0 10115.0 9841.0 393.0 201.0 91.0 33.0 19.0 7.0 0.0 0.0 0.0 0.060451

10 rows × 48 columns

20歳未満の外国人比率の多い市町村を抽出する

日本人と外国人の20歳未満比の高い市町村を抽出する

df2['日本人未成年'] = df2[['0~4歳','5~9歳','10~14歳','15~19歳']].sum(axis=1)
df2['日本人高齢者'] = df2[['65~69歳','70~74歳','75~79歳','80~84歳','85~89歳','90~94歳','95~99歳','100歳以上']].sum(axis=1)
df2['外国人未成年'] = df2[['0〜4','5~9','10~14','15~19']].sum(axis=1)
df2['外国人高齢者'] = df2[['65~69','70~74','75~79','80~84','85~89','90~94','95~99','100〜']].sum(axis=1)
df2.head(2)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 80~84 85~89 90~94 95~99 100〜 外国人比 日本人未成年 日本人高齢者 外国人未成年 外国人高齢者
0 合計 NaN 125209603.0 4939488.0 5316219.0 5479985.0 5898581.0 5990347.0 6144894.0 18738.0 9324.0 4280.0 1281.0 169.0 0.019948 21634273.0 34629983.0 320249.0 163762.0
1 合計 NaN 61098245.0 2532151.0 2725286.0 2808241.0 3023594.0 3063840.0 3145791.0 7054.0 2913.0 1255.0 309.0 29.0 0.019651 11089272.0 15038765.0 163725.0 70539.0

2 rows × 52 columns

日本人・外国人の未成年・高齢者比をそれぞれ新たに作る。

df2['未成年比']=df2['外国人未成年']/df2['日本人未成年']
df2['高齢者比']=df2['外国人高齢者']/df2['日本人高齢者']
city=df2[((df2['未成年比']) > 0) & (df2['総数'] >= 1e1) & (df2['性別']=='計')]
city.sort_values(by='未成年比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 90~94 95~99 100〜 外国人比 日本人未成年 日本人高齢者 外国人未成年 外国人高齢者 未成年比 高齢者比
1083 群馬県 邑楽郡大泉町 34291.0 1305.0 1362.0 1456.0 1687.0 2057.0 1882.0 0.0 0.0 0.0 0.221195 5810.0 8734.0 1630.0 238.0 0.280551 0.027250
3189 大阪府 大阪市生野区 99738.0 3438.0 3548.0 3697.0 4429.0 5456.0 5466.0 217.0 95.0 15.0 0.278460 15112.0 31048.0 2771.0 7151.0 0.183364 0.230321
3177 大阪府 大阪市浪速区 58538.0 2084.0 1353.0 1088.0 1348.0 4020.0 7151.0 11.0 1.0 1.0 0.141447 5873.0 12219.0 925.0 382.0 0.157500 0.031263
1518 東京都 新宿区 299869.0 11191.0 8845.0 7659.0 8336.0 16548.0 25027.0 30.0 8.0 2.0 0.141488 36031.0 66398.0 5322.0 1108.0 0.147706 0.016687
1680 神奈川県 横浜市中区 135023.0 4597.0 4925.0 4852.0 4959.0 5751.0 6574.0 40.0 11.0 1.0 0.121757 19333.0 33887.0 2724.0 1187.0 0.140899 0.035028
2688 愛知県 名古屋市中区 75139.0 2593.0 1900.0 1669.0 1896.0 4813.0 7451.0 2.0 0.0 0.0 0.119898 8058.0 16276.0 1013.0 219.0 0.125714 0.013455
1071 群馬県 邑楽郡 97446.0 3300.0 3896.0 4277.0 4739.0 4998.0 4578.0 1.0 1.0 0.0 0.091969 16212.0 27816.0 1801.0 265.0 0.111091 0.009527
1176 埼玉県 蕨市 68476.0 2506.0 2460.0 2386.0 2696.0 3709.0 4478.0 1.0 0.0 0.0 0.089082 10048.0 17127.0 1066.0 101.0 0.106091 0.005897
3408 兵庫県 神戸市中央区 122306.0 4842.0 4073.0 3805.0 3963.0 6636.0 8868.0 73.0 20.0 0.0 0.103871 16683.0 30164.0 1722.0 1884.0 0.103219 0.062459
2424 岐阜県 美濃加茂市 52044.0 2531.0 2774.0 2788.0 2698.0 2536.0 2703.0 0.0 0.0 0.0 0.089520 10791.0 12618.0 1109.0 109.0 0.102771 0.008638

10 rows × 54 columns

city=df2[((df2['高齢者比']) > 0) & (df2['総数'] >= 1e1) & (df2['性別']=='計')]
city.sort_values(by='高齢者比',ascending=False).dropna().head(10)
都道府県名 市区町村名 性別 総数 0~4歳 5~9歳 10~14歳 15~19歳 20~24歳 25~29歳 90~94 95~99 100〜 外国人比 日本人未成年 日本人高齢者 外国人未成年 外国人高齢者 未成年比 高齢者比
3189 大阪府 大阪市生野区 99738.0 3438.0 3548.0 3697.0 4429.0 5456.0 5466.0 217.0 95.0 15.0 0.278460 15112.0 31048.0 2771.0 7151.0 0.183364 0.230321
3186 大阪府 大阪市東成区 75422.0 2906.0 2789.0 2874.0 3209.0 4174.0 5057.0 60.0 13.0 5.0 0.094018 11778.0 19410.0 646.0 1575.0 0.054848 0.081144
3396 兵庫県 神戸市長田区 92120.0 2880.0 3151.0 3288.0 3714.0 4222.0 4542.0 56.0 19.0 1.0 0.078463 13033.0 30743.0 787.0 1976.0 0.060385 0.064275
3063 京都府 京都市南区 94227.0 4133.0 3722.0 3651.0 3906.0 5000.0 6219.0 56.0 21.0 2.0 0.061904 15412.0 24027.0 510.0 1543.0 0.033091 0.064219
3408 兵庫県 神戸市中央区 122306.0 4842.0 4073.0 3805.0 3963.0 6636.0 8868.0 73.0 20.0 0.0 0.103871 16683.0 30164.0 1722.0 1884.0 0.103219 0.062459
3207 大阪府 大阪市西成区 99277.0 2243.0 2546.0 2699.0 3108.0 3662.0 3803.0 40.0 18.0 7.0 0.086254 10596.0 39757.0 757.0 1700.0 0.071442 0.042760
1680 神奈川県 横浜市中区 135023.0 4597.0 4925.0 4852.0 4959.0 5751.0 6574.0 40.0 11.0 1.0 0.121757 19333.0 33887.0 2724.0 1187.0 0.140899 0.035028
3174 大阪府 大阪市天王寺区 71374.0 3572.0 3432.0 3026.0 3150.0 3694.0 4506.0 4.0 3.0 1.0 0.061955 13180.0 14336.0 600.0 491.0 0.045524 0.034249
3153 大阪府 大阪市 2570850.0 101400.0 98202.0 96417.0 106500.0 133518.0 162094.0 573.0 217.0 42.0 0.051182 402519.0 662567.0 13436.0 21150.0 0.033380 0.031921
3177 大阪府 大阪市浪速区 58538.0 2084.0 1353.0 1088.0 1348.0 4020.0 7151.0 11.0 1.0 1.0 0.141447 5873.0 12219.0 925.0 382.0 0.157500 0.031263

10 rows × 54 columns

年齢層別在留外国人の総人口をグラフ化する

from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams

style.use('dark_background')
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "20"
fig, ax = subplots(figsize=(18,10))
df2.iloc[[0], range(26,47)].T.plot(kind='barh',ax=ax)
rc('xtick', labelsize=20)
rc('ytick', labelsize=20)
ax.set_ylabel('Age group',fontsize=20)
ax.set_xlabel('人口(人)',fontsize=20)
ax.legend(['人口'],loc='upper right',fancybox=True,framealpha=0.5,prop={'size': 26})
xticks(np.arange(0,4.1e5,1e5/5),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,4.1e5,1e5/5)]);

20代と30代が圧倒的に多いことが見て取れる。今後、20代の外国人人口が増え、なおかつ、この年代層の出生数が上昇すれば、外国人の子供が増えることで日本の少子化に歯止めがかかる可能性がある。そのためには、10代・20代の外国人留学生と技能実習生をどんどん受け入れる必要があることは言うまでもあるまい。