地球地図日本のシェープファイル polbnda_jpn.shpをTopoJSONファイル polbnda_jpn_ctv.topojsonに変換して、R言語 + Leafletでコロプレス。
あとはデータの結合(紐付け)ができれば、一通り終わり。
polbnda_jpn.shpに入っている2014年人口データ popを2018年人口データに替えてみる。
人口データは、住民基本台帳人口を利用した。
年次データがe-Stat(www.e-stat.go.jp/)からダウンロードできる。
追)2020年国勢調査の人口は下のページ。
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村)
追)熊本市の値が熊本市中央区の値になっていたので修正