LoginSignup
13
19

More than 1 year has passed since last update.

Pythonで考える少子高齢化と詐欺グラフ

Posted at

はじめに

少子高齢化が問題とされはや数十年が過ぎようとしていますが、なんとなくヤバいとは思うけれどもそれがどの程度ヤバいのかがピンとこないです。

そこで、以前からツイッターで見かける動くグラフを活用して、少子高齢化を可視化するグラフを描いてみようと思い立ちまして起稿しました。

さらっと動くグラフを作るには Flourish で作れるようですが、エンジニアとしてはプログラムで作るべきだろうということで Python で作ることにしました。

ところが、Pythonが優秀すぎて関数を2つを呼べば動くグラフができてしまったのであまりプログラマ感はなかったです。ただし、データからうまくグラフに使えるデータを抽出する点ではエンジニアやコンサル感はあったかもしれません。

人口ピラミッドのデータを入手

国立社会保障・人口問題研究所人口ピラミッドのページを見ると、平成29年時点での 1965年からの2065年(未来予測)まで人口ピラミッドの画像があります。

1965.png
2020.png
2065.png

出典:「日本の将来推計人口(平成29年推計)」(国立社会保障・人口問題研究所)

この画像から、少子高齢化ヤバいな? と伝わったでしょうか?
わたしにはあまりピンとこなかったです。

そこで、このサイトで公開されている人口ピラミッド画像の元になった Excel データ を利用してグラフを作成することにしました。

グラフで大事なのは、伝えたい事があって、それを伝えられるグラフになっているかということかと思います。データから何を抽出してグラフにするかです。やり過ぎると詐欺グラフになりますので注意が必要です。

まずはそのままのグラフを描画

動くグラフの名前は「バーチャートレース」というそうです。名前を知らずググるところで若干苦労しました。ChatGPT先生ならその場で答えてくれたかもしれないです。

グラフの名前が分かったところで、python のデータ解析の定番 pandas と、バーチャートレース描画用 bar_chart_race と、日本語化のための japanize_matplotlib をインストールします。

pip install pandas
pip install bar_chart_race
pip install japanize_matplotlib

あとは以下の様なプログラムを書けば、csvデータを読み込んでグラフの描画ができます。
グラフ化する関数の引数がとても多いので行数は多いですが、呼び出す関数は2つでよいので、本当に簡単です。

graph.py
# -*- coding: utf-8 -*-

import pandas as pd
import bar_chart_race as bcr
import japanize_matplotlib

file = 'population'

df = pd.read_csv(f'data/{file}.csv', index_col=0, parse_dates=[0])

bcr.bar_chart_race(
    df=df, 
    filename=f'./data/{file}.gif', 
    orientation='v', 
    sort='asc',
    fixed_order=False, 
    fixed_max=True,
    steps_per_period=15,
    period_length=900,
    title='出典 : 国立社会保障・人口問題研究所\n人口ピラミッドのデータ(1965~2065年)(単位1,000人)', 
    bar_size=.95, 
    shared_fontdict=None, 
    scale='linear', 
    fig=None,
    figsize=(2.5, 2),
    writer=None, 
    bar_kwargs={'alpha': .7},
    filter_column_colors=False,
    title_size=5,
    bar_label_size=5,
    tick_label_size=5
)

csv形式ではないと読み込めないのと、2系統(男性・女性)を扱えなかったので、ダウンロードした Excel を加工して、各年齢ごとの人口数を集計した csv にしました。

(csv抜粋)

year,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100+
1965,1743,1659,1614,1567,1551,1568,1600,1560,1515,1607,1696,1693,1813,1927,2054,2224,2453,2423,2295,1457,1553,1890,1841,1904,1881,1730,1523,1650,1717,1744,1684,1635,1667,1649,1622,1558,1536,1502,1464,1439,1364,1255,1171,1117,1054,1117,921,948,958,978,951,966,930,925,886,866,846,808,805,678,699,663,685,665,632,588,526,523,477,448,421,381,345,324,274,275,258,221,191,151,139,122,106,88,74,59,50,39,30,23,16,12,8,6,5,2,1,1,0,0,0
1970,1878,1863,1818,1823,1425,1768,1658,1616,1566,1551,1573,1599,1562,1520,1604,1687,1689,1793,1891,2004,2171,2386,2387,2272,1443,1546,1892,1851,1913,1887,1742,1526,1653,1715,1736,1683,1627,1657,1634,1606,1538,1494,1458,1428,1422,1343,1236,1157,1099,1043,1098,906,924,932,946,896,909,879,891,849,823,798,750,732,623,636,598,611,586,553,514,445,434,387,354,324,285,249,226,184,178,160,128,105,78,68,56,45,34,27,20,15,11,8,6,3,2,1,1,0,0
1975,1915,2030,2065,2021,1975,1916,1885,1845,1852,1443,1796,1680,1642,1592,1574,1591,1628,1583,1537,1613,1683,1673,1790,1898,2031,2199,2420,2416,2310,1455,1580,1930,1883,1944,1913,1759,1540,1662,1721,1744,1698,1632,1659,1633,1605,1539,1512,1473,1431,1410,1332,1215,1133,1078,1027,1073,878,901,905,918,887,894,857,844,803,779,744,692,672,563,567,528,527,496,458,409,353,334,291,255,225,187,158,135,105,95,80,59,45,31,24,18,13,9,7,4,2,2,1,1,1

このデータをグラフ化したものは以下となります。
population.gif

…このままだと元々の人口ピラミッドの方が分かりやすいですね。ここからが本番です。

労働人口らしきものに着目する

次に20歳から働きはじめて、およそ10歳毎に役割が変わり、65歳で定年すると仮定してデータを集計して csv を再作成し、グラフを作成することにしました。

workers1.gif

いかがでしょうか?高齢化社会が見えたでしょうか?
ただ、数字は嘘をつかないが嘘つきは数字を使うそうなのでこのグラフは注意して見る必要があるかもしれません。

生産年齢人口に着目する

Wiki : 生産年齢人口

生産年齢人口(せいさんねんれいじんこう、working-age population)とは、各国の国内で行われている生産活動に就いている中核の労働力となるような年齢の人口。OECDは15~64歳の人口と定義[1]している。

国際機関の正式な定義だと上記の様になるようです。
そうです、生産年齢を10歳刻みにしてしまったら、言い知れないヤバさは見て取れるかもしれませんが高齢化社会のヤバさを表すグラフにはなっていないのです。

ということで生産年齢人口をグラフにしました。
workers2.gif

こちらのグラフでは高齢者層1人を2人ぐらい、未来はもっと少ない人数で支えなければいけない、という話が見て取れるグラフになりました。こちらが来るべき未来のようです。β世界線1やまた別の世界線はあるでしょうか。

おわりに

今回は、Python による動くグラフの描画方法と、データの着目点と詐欺グラフについて書きました。
データの着目の仕方によっては別の未来も見えるかもしれません。

わたし達ひとりひとりにはできる事とできない事がありますが、来るべき未来を予測し、それに向けてどう行動するのかを考えるのは大事なことだと思います。

リスキリングなどバズワードで煽られるのは面倒くさいとか色々ありますが、グラフを見る限りでは65歳定年でもう働かない年金生活というのは難しそうなので進むしかなさそうです。逃げたら一つ、進めば二つです。2

おまけ

2025年にIT人材が43万人不足するらしいので、学習用の資料をgitで無料公開してます(不定期更新)。
よろしければどうぞ。

エンジニアのためのお仕事問題集

  1. シュタインズ・ゲートで観測される世界

  2. 機動戦士ガンダム水星の魔女の重要なセリフ

13
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
19