データの結合 -コロプレス(全国市町村の人口)-

 地球地図日本のシェープファイル polbnda_jpn.shpをTopoJSONファイル polbnda_jpn_ctv.topojsonに変換して、R言語 + Leafletでコロプレス。

 あとはデータの結合(紐付け)ができれば、一通り終わり。

 polbnda_jpn.shpに入っている2014年人口データ popを2018年人口データに替えてみる。

 人口データは、 
  5年毎に行われる国勢調査(……、2010年、2015年、2020年、……)
のデータが総務省統計局(www.stat.go.jp/)、e-Stat(www.e-stat.go.jp/)のサイトからダウンロードして使える。
 直近のデータは
  推計人口
が公開されているが、市町村の人口データは各都道府県にアクセスしないと分からない。
 もう1つ
  住民基本台帳に基づく人口
の年次データがe-Statからダウンロードできる。
 住民票が移されないと人口データに反映されないので、『国勢調査 + 住民基本台帳人口』の推計人口が実態に近い、とのことだが、全国の市町村の人口データがまとめられている住民基本台帳人口を利用する。

CSV + CSV

 CSVファイル同士のデータ結合は、R言語でできる。

pop2014 <- read.csv("2014pop.csv")
pop2018 <- read.csv("2018pop.csv")

で2つのCSVファイルを読み込んだ後、

poppop <- merge(pop2014,pop2018,by="adm_code",all=T)

 市町村コード adm_codeを共通カラム(列)として結合(マージ)。
 all=Tで全てのカラム結合。

write.csv(poppop,"output.csv")

で書き出し。

 CSVファイルはExcelで自在に加工できるが、adm_codeの03203など頭が0の数字が3203という具合に消されてしまうので、
 セルの書式設定表示形式 - ユーザー定義で種類を00000として保存する。

 また、市町村コードが6桁で記されている場合、下1桁が邪魔になるので、
 MIDB(6桁コード,1,5)
で、上5桁を取り出す。

TopoJSON、GeoJSON + CSV

 CSVファイルとTopoJSONファイルの結合は、mapshaperツールでできる。

 mapshaperはGeoJSON、TopoJSONの簡素化/変換ツールだが、変換だけならばnpmから

npm install -g mapshaper

でインストールしておくと便利。

 地球地図日本(の変換ファイル) polbnda_jpn_ctv.topojson

 2018年人口データ(+面積、人口密度) 2018popmen.csv
を用意して、コマンドプロンプトから

mapshaper -i polbnda_jpn_ctv.topojson -join 2018popmen.csv keys=adm_code,adm_code:str -o ctvpop2018merge.topojson

と入力すると市町村コード adm_codeを共通カラム(列)として結合(マージ)したファイル ctvpop2018merge.topojsonが出来上がる。

 なお、CSVファイルはUTF-8で作っておかないと文字化けを起こす。

mapshaper -i ○○○.geojson -join △△△.csv keys=☆☆☆,☆☆☆:str -o ×××.topojson

といった具合にGeoJSON + CSV ⇒ GeoJSON、TopoJSONも可能。

もう一度コロプレス

 データを整えるのに結構手間がかかる。

 polbnda_jpn.shpをもう少し手直し。

  •  東京23区を1つにまとめる。
     QGISの属性テーブルで、東京23区のadm_codeを全て13100に変えてからベクタ - 空間演算ツール - 融合。融合フィールドに市町村コードの列 adm_codeを指定してまとめた。
  •  滝沢市、白岡市、大網白里市、野々市市、長久手市、熊本市の市町村コードが古いままだったので、新しいものへ変更。
  •  ruyabetsu ⇒ ruyobetsu
  •  
  •  
  •  

 leafletRでコロプレス。

library(leafletR)

JPctv_style <- styleGrad(prop="H30pop", breaks=seq(0,4000000,by=500000), style.val=rev(heat.colors(8)), leg="2018年人口", fill.alpha=0.8, lwd=1, col="grey")

JPctv_map <- leaflet(data="ctvpop2018merge.topojson", title="2018pop", base.map="osm", style=JPctv_style, popup="*")

でHTML生成。

 生成されたHTMLをもう少しいじってみる。
 人口の階級幅50万人で均等に分けられているが、10万人以下1万人以上の市町村を白色、1万人以下の市町村を紫色に変えた。あと400万人以上の東京23区を赤色に変えた。

 変えた箇所はstylingの

return x > 1e+07 ? "#808080" :
x >= 3500000 ? "#FF0000" :
x >= 5e+05 ? "#FFFF40" :
x >= 1e+05 ? "#FFFFBF" :
x >= 10000 ? "#FFFFFF" :
x >= 0 ? "purple" :

とlegendの

var grades1 = [0, 10000, 1e+05 , 5e+05, 1e+06, 1500000, 2e+06, 2500000, 3e+06, 3500000, 1e+07];

日本全国市町村 2018年人口    

 人口の多い順。

  •  東京23区 9486618人
  •  横浜市 3745796人
  •  大阪市 2714484人
  •  名古屋市 2294362人
  •  札幌市 1955457人
  •  
  •  
  •  
  •  鹿児島県三島村 373人
  •  新潟県粟島浦村 351人
  •  東京都利島村 323人
  •  東京都御蔵島村 317人
  •  東京都青ヶ島村 159人
  •  (北方領土6村)

 ※ 福島県内依然帰還困難地域有り(双葉町など)。

 人口密度も同じ要領。
 計算結果をJSONファイルに入れておいたほうが楽。

日本全国市町村 2018年人口密度   

 密の順。単位は人/平方km。

  •  東京23区 15116.43
  •  埼玉県蕨市 14728.18
  •  東京都武蔵野市 13333.24
  •  東京都狛江市 12907.82
  •  東京都西東京市 12877.27
  •  
  •  
  •  
  •  北海道中川町 2.56
  •  長野県王滝村 2.45
  •  北海道幌加内町 1.97
  •  奈良県上北山村 1.82
  •  福島県檜枝岐村 1.43
  •  (北方領土6村)
MAP R
スポンサーリンク
ふシゼン
タイトルとURLをコピーしました