月別の総人口を適当に、それっぽく、自己満足で生成してみる（失敗した話）

## そもそも「総人口」ってなに？

国内の人の数じゃないの？っていう当たり前の話なんだけど、その当たり前を調べてみると、e-Stat の 項目定義に以下のような記述がありました。

> 総人口とは、国勢調査及び人口推計にいう「人口」をさす。（e-Stat( https://www.e-stat.go.jp/koumoku/koumoku_teigi/A )から引用）

な、なんと総人口は「国勢調査の結果」、または「人口推計」であるという事が発覚。単純に人の数ではなさそうな雰囲気。。。

国勢調査は5年に実施される調査であろうことは推測できるんだけど、じゃあ「人口推計」ってなに？っていう話なんだけど、それも調べてみると、総務省統計局( https://www.stat.go.jp/index.html )の人口推計に関するQ&A（回答）には以下のように書かれていました。

> 「我が国の人口の実態は，5年ごとに実施される国勢調査によって明らかにされます。他方，この「人口推計」は，国勢調査が行われない年における「毎月」，「毎年」の人口の状況を把握するために行っています」（総務省統計局( https://www.stat.go.jp/data/jinsui/qa-1.html )から引用）

さらに、内閣府のページ( https://www.cao.go.jp/) にもそれらしい説明がありました。ちょっと複雑ですが、 内閣府ページのトップ > 内閣府の政策 > 経済財政政策 > 経済財政諮問会議 > 専門調査会情報等 > 「選択する未来」委員会 > 選択する未来 と追っていくと、Q7に「人口推計とはどのようなものですか」という項目があって、そこには以下のように書かれていました。

> 「人口推計」は，5年毎に行われる国勢調査による人口を基礎（基準人口）として、出生・死亡（「人口動態統計」）、出入国（「出入国管理統計」）、転出入（「住民基本台帳人口移動報告」）等の人口動向から各月・各年の人口を算出するものである」（内閣府( https+//www.stat.go.jp/data/jinsui/qa-1.html )から引用）

つまり正確なのは5年に1度の国勢調査の数値で、それ以外は算出されたものであって、実際の数値とは限らないという意味ってことでしょうか。

ま、どっちであれ、私にとって根拠がどうってことはあんま関係なさそうなので、そのまま進めちゃおうと思います。

## 数値はどこからゲットする？
人口推計は、総務省統計局からゲットできそうです。今回発見した URL は「人口推計の概要、推計結果等」( https://www.stat.go.jp/data/jinsui/2.html )で、総務省統計局ホームから、統計データ > 人口推計 > 人口推計の概要、推計結果等 で到達できました。

年別しかないとおもったら、「過去の各月1日現在人口( https://www.stat.go.jp/data/jinsui/8.html )」を見ると2010年4月から2024年9月までが、月ごとのPDFになっているので、これを片っ端から取得して値を抽出していけば2009年11月から2024年3月くらいまでの月別の総数が作れそうです。
で作った結果が以下のとおりです。

```R:年月データ
library(dplyr)
library(data.table)
ps_yearmon <-
'
年月   総数  男性  女性
2010-10-01	128056	62360	65697
2010-11-01	128062	62358	65704
2010-12-01	128051	62349	65702
2011-01-01	128019	62330	65689
2011-02-01	127981	62319	65662
（以下省略）
' %>% fread %>% mutate(年月 = as.POSIXct(年月,tz="Asia/Tokyo"))
```

で以下のコードでグラフにしたのが以下のとおりです。
```R:年月データをグラフに
library(ggplot2)
(ps_yearmon %>%
ggplot(aes(x = 年月, y = 総数))
+ geom_line(color = "black", linetype = "solid", linewidth = 0.8)
+ theme_classic()
)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919778/6e35c3bb-ad4c-10ac-edec-906e65187145.png)


ふふふ、いやー、なんとなんと、適当に生成しなくってもマジな数で作れちゃいました。いやめでたしめでたしです、、、、

## うん？
なんかよく見ていると、カーブが不自然な年があるような、ないような。。。

うーーーんって悩んでても仕方ないので、ちょっと比較してみようと思います。さっきの「人口推計の結果の概要」ページ中の「II. 各年10月1日現在人口」 > 「2023年（令和5年）（令和6年4月12日公表）」 > 「結果の概要（PDF：749KB）」の中の「表２ 総人口の推移（2000年～2023年）」から年別の総計を取り出して比較してみます。で作った結果とグラフが以下のとおりです。

```R:年データ
ps_year <-
'
年	総数
2010	128057
2011	127834
2012	127593
2013	127414
2014	127237
2015	127095
2016	127042
2017	126919
2018	126749
2019	126555
2020	126146
2021	125502
2022	124947
2023	124352
' %>% fread %>%
mutate(年月 = as.POSIXct(paste(年, "10", "01", sep="-")))
```

```R:年データをグラフに
(ps_year %>%
filter(年 >= year(min(ps_yearmon$年月))) %>%
ggplot(aes(x = 年月, y = 総数))
+ geom_line(color = "black", linetype = "solid", linewidth = 0.8)
+ theme_classic()
)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919778/0cdc09f7-257b-3f19-00b0-f9c3e66494ea.png)

うーん、なんかさっきの感じと違うような。
じゃあ重ねて比較してみましょう。月別のデーターと年別のデーターで取得できた範囲が異なっているので、両データーのある`2010-10-01`から`2023-10-01`で比較することとしました。


```R:年データーと年月データーを重ねてグラフ表示
(ps_yearmon %>%
ggplot(aes(x = 年月, y = 総数))
+ geom_line(color = "black", linetype="solid", linewidth = 0.8)
+ geom_step(data=ps_year %>% filter(年 >= year(min(ps_yearmon$年月))), color = "red", linetype="solid", linewidth = 0.8)
+ theme_classic()
)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919778/afcde3eb-720e-6608-d31c-a09116eeab8f.png)

うーん、なんかやっぱ気持ち違ってるようです。スクレイピングに失敗しているんでしょうか、そもそも確定値を取り出したのがいけなかったんでしょうか。。。うーん。

改めて、PDFをよく見てみるとタイトルは人口推計でも、月によって「確定値」のものと、「人口速報を基準とする確定値」、「国勢調査を基準とする推計値」というタイトルがあることを発見しました。しかし英語のタイトルはすべて「Final estimates」のようです。どうゆう意味なんだろうと deepl で翻訳してみると「最終予想」「最終見積もり」と出てきました。

予測ってことはわかってはいたんですが、単純ではなさそうです。

## 「人口の総数」は補正される？

さらに、さっきの「人口推計の結果の概要」をスクロールしてみると「III. 国勢調査結果による補間補正人口」という項目があることを発見。でもってそのページを見てみると以下の記述が。

> 「人口推計は，平成27年国勢調査の人口を基準人口として，その後の毎月1日現在の人口を算出している（毎月公表の人口）が，令和2年10月1日現在人口と令和2年国勢調査人口とは必ずしも一致しないため，平成27年国勢調査と令和2年国勢調査の人口を基に，その間の各月の人口について補間補正を行った。今回，補間補正を行った人口は，次のとおりである。(1) 各月1日現在の全国男女,年齢別人口（2015年11月～2020年9月）(2) 各年10月1日現在の都道府県別男女,年齢別人口（2016年～2019年)」（総務省統計局( https://www.stat.go.jp/data/jinsui/2-6.html )から引用）。

な、なんと、人口推計は国勢調査結果によって、過去にさかのぼって補正される、とのことです。
でもって、そのページにはなにやら計算式が書かれています。

うーん、素直に面倒です。ただただ総人口が知りたかっただけなのに。
というかそこまで正確な数がほしいわけでもないのに。。。

## 年データーから生成しちゃえ
せっかく月別で数値をゲットしたのですが、それは忘れて、年データーから適当に生成しちゃおうと思います。

`imputeTS` っていうパッケージを使えば補完できそうなので、さっそく本当に補完できるか試してみます。

```R:補完して値を確認
library(imputeTS)
ps_mer <- ps_yearmon %>% select(年月, 総数年月=総数) %>%
	left_join(ps_year %>% select(年月, 総数), by=c("年月")) %>%
	filter(年月 >= as.POSIXct("2010-10-01")) %>%
	filter(年月 <= as.POSIXct("2023-10-01")) %>%
	arrange(年月) 

ps_mer %>%
    mutate(予測総数 = imputeTS::na_interpolation(総数, option = 'linear') %>% round) %>%
    head(20) %>% print.data.frame

         年月 総数年月   総数 予測総数
1  2010-10-01   128056 128057   128057
2  2010-11-01   128062     NA   128038
3  2010-12-01   128051     NA   128020
4  2011-01-01   128019     NA   128001
5  2011-02-01   127981     NA   127983
6  2011-03-01   127928     NA   127964
7  2011-04-01   127706     NA   127946
8  2011-05-01   127742     NA   127927
9  2011-06-01   127797     NA   127908
10 2011-07-01   127817     NA   127890
11 2011-08-01   127816     NA   127871
12 2011-09-01   127769     NA   127853
13 2011-10-01   127799 127834   127834
14 2011-11-01   127800     NA   127814
15 2011-12-01   127787     NA   127794
16 2012-01-01   127662     NA   127774
17 2012-02-01   127627     NA   127754
18 2012-03-01   127575     NA   127734
19 2012-04-01   127567     NA   127714
20 2012-05-01   127522     NA   127693
```

補完してグラフにしてみます。

```R:補完してグラフに
(ps_mer %>%
    mutate(予測総数 = imputeTS::na_interpolation(総数, option = 'linear') %>% round) %>%
	ggplot(aes(x = 年月, y = 予測総数))
	+ xlab("年月") + ylab("予測総数(linear)")
	+ geom_line(color = "black", linetype="solid", linewidth = 0.8)
	+ theme_classic()
)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919778/3b954af2-ce72-9e2c-bb38-bfb4a7ed695e.png)

`option = 'linear'` のあたりを変える曲線になったりするみたいですが今回は`liner`で進めてみます。

重ねてみます。年別の人口推計に沿った数値が生成されているようです。
```R::補完して重ねてグラフに
(ps_mer %>%
	mutate(予測総数 = imputeTS::na_interpolation(総数, option = 'linear') %>% round) %>%
	ggplot(aes(x = 年月))
		+ xlab("年月") + ylab("総数")
		+ guides(color=guide_legend(nrow=1, byrow=TRUE))
		+ geom_line(aes(y = 総数年月, color = "1"), linetype="solid", linewidth = 0.8)
		+ geom_step(data=ps_year, aes(y = 総数, color = "2"), size = 0.8)
		+ geom_line(aes(y = 予測総数, color = "3"), linetype="solid", linewidth = 0.8)
		+ scale_color_manual(values=c("1"="black","2"="red","3"="blue")
			,labels=c("1"="人口推計(確定値)(月別)", "2"="総人口の推移(結果の概要)(年別)", "3"="予測(liner)"))
		+ theme_classic()
		+ theme(legend.position = c(0.5, 0.95)
				,legend.title = element_blank()
				,legend.background = element_blank())
	)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919778/db563780-267d-0909-107a-74f8a619599d.png)

## これでよかったの？
何となくそれっぽい数値は生成できました。今回は直線的に生成しましたが曲線的な予測もできそうではあるものの、ただ、なんていうんでしょうか、どっちも綺麗すぎて、特徴的なものがなくなってしまったような、、、

例えば左の方でへこんでいるところ。何だろうと思ったらそこは2011年の4月でした。「統計Today No.52」には以下のような記述がありました。

> 東日本大震災が発生した直後の平成23年４月には、急激に減少し１億2770万８千人となりましたが、その後若干増加しています。これは、外国人人口が東日本大震災後に一時的に大きく社会減少した（23年４月は19万人の出国超過）ことが大きな要因となっているためです。（統計Today No.52( https://www.stat.go.jp/info/today/052.html )より引用）

たまたま発見した記述が本当に反映されて減ったのかはわかりませんが、月別の総数には年別からは分からない様な背景が反映されているかもしれない、と考えると、今回は「適当に」「それっぽく」というミッションはクリアできましたが、自己満足には浸れない結果となってしまいました。

ミッションコンプリートならずという結果となってしまいました。
でも楽しかったので、めでたしめでたしです。