axjack's blog

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.

所沢市の平成29年版統計書-2 人口(その1)-1.人口の推移から、人口の総数=男+女となっていることを確認する

はじめに

動機

昨今不正統計が話題である。ニュースを見て、我が市の統計データは大丈夫なのかと不安になったので、基礎中の基礎である人口の推移データに不備がないかを調べてみた。

やること

難しい分析をする気は毛頭無之、各年に於ける 人口の総数 = 男性の人口 + 女性の人口をRで確認するだけである。

ところで、市が提供してるのは、

  • htmlファイル
  • Excelファイル

の2形式であるが、私の手元にはExcelがないので、

  • htmlファイルから該当箇所をコピー
  • sublime で加工
  • Rで検算

を試みる。

なお、htmlファイルが公開されているのになぜ{rvest}を使わないのか、という疑問に対する回答として、htmlファイルが構造化されていないことおよびclassidが振られていないことを挙げる。htmlファイルのソースを見ればわかる通り、XPathを頑張って書くのが面倒臭い系のhtmlである。

データソース

www.city.tokorozawa.saitama.jp

コード

sublimeでの加工

1.人口の推移明治9年から平成29年行の一世帯当たり人員2.2までをコピる。続いて、以下のように検索・置換をしてCSVファイルを作成する。

1. 総数-男-女の列を取得する

検索:(.*?)   (.*?)   (.*?)   (.*?)   (.*?)   (.*?)   (.*?)   (.*?)   (.*)
置換:"\4","\5","\6"

2. 数値表現をカンマ有りからカンマ無しへと置換する

検索:(\d),
置換:\1

3. ダブルクオーテーションを削除する

検索:"
置換:

これで総数-男-女の列を数値表現カンマ区切りで加工できたので、CSVとして保存する。

Rで読み込み

先ほどのCSVtoko_jinkou.csvとしてdatフォルダに格納し、列のヘッダを"total","man","woman"と指定して読み込む。

toko_ji <- read.csv("dat/toko_jinkou.csv",col.names = c("total","man","woman"))

結果確認

以下の通り、各年に於ける人口の総数男性の人口 + 女性の人口に等しいことが確認できた。

> toko_ji$total - ( toko_ji$man + toko_ji$woman )
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[52] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

おわりに

結果確認の箇所で0じゃない要素が出てきたらどうしようと少し焦ったものの、まずは一安心。データの前処理方法は沢山あるのでいつでもさらっとスパッと書けるようにしたい。

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.