e-Stat(統計局)で公開されているShapeファイルを、Rで表示する
まずはShapeファイルを入手するところから。
総務省統計局がe-Statというサイトを運営していて、そこに全国各地域のShapeファイルが公開されています。
地図で見る統計(統計GIS)
(1) 「平成22年国勢調査(小地域) 2010/10/01」を選択
(2) 「男女別人口総数及び世帯総数」にチェック
(3) 「統計表各種データダウンロードへ」ボタンをクリック
(1) 「都道府県」を選択
(2) 「市区町村」を選択
(3) 「検索」ボタンをクリック
(4) 境界データの欄に表示されている
「世界測地系緯度経度・Shape形式」のデータをクリック
ダウンロードしたzipファイルを展開すると、
xxx.shp
xxx.dbf
xxx.shx
xxx.prj
という、拡張子だけが違うファイルが4つできるんですが、これがshapeデータの1セットになります。
それぞれのファイルの中身は、シェープファイルとは? | 用語集とGISの使い方 | 株式会社パスコによると、
shp: 図形の座標が保存
dbf: 属性の情報が保存
shx: shpの図形とdbfの属性の対応関係が保存
だそうです。あと、「.prj」は測地系の情報が入っています。(テキストとして開くとそれっぽい文言が入っている)
では単純にshapeファイルをRで表示させてみましょう。
あら簡単。実質4行で表示できました。
じゃあ、いろいろやってみましょう。
coordinates()という関数は、ポリゴンの重心の位置を返してくれます。
> coordinates(x)
[,1] [,2]
0 139.4639 35.62169
1 139.5178 35.62177
2 139.5138 35.62332
3 139.5057 35.62163
4 139.4617 35.61308
... ...
そのままプロットすると↓こんな感じですね。
plot(x)
points(coordinates(x))
このshapeを読み込んだオブジェクト(SpatialPolygonsDataFrame)には、境界のポリゴンだけでなく、属性情報も入っています。
どうやら、この「MOJI」というカラムにそのポリゴンに対応する地名が入っているようです。これを地図上にプロットしてみましょう。プロット位置はさっきのやり方で求めた重心の位置にしてみます。あと、MOJIは因子型で入っているので、as.character()で文字列に変換してやる必要がありました。
plot(x)
text(coordinates(x), as.character(x@data$MOJI))
うわ、ぐちゃぐちゃ。
字を小さくしてみよう↓
plot(x)
text(coordinates(x), as.character(x@data$MOJI), cex=0.5)
今度は、字が小さくて見づらいですね。
画面に出すだけのときは、描画用のウィンドウをググッと広げると、ポリゴンは大きく、文字はそのままで表示される、見やすくなります。
直接、画像ファイルとして出力し、その際に解像度を高めに指定するというやり方もあります。
解像度やら文字の大きさやらは、お好みで調整してみてください。
他にもいろいろと遊べるのですが、長くなったので、今回はここまで。■
[2016年3月30日追記]
広いエリアの行政界シェープファイルのようなものを画像ファイルに出力するのは、けっこう無理があります。そのようなときはPDFファイルに出力すると、いい感じになります↓
Rでshapeを出力するときはPDFファイルにすると便利 - Rプログラミングの小ネタ
■
総務省統計局がe-Statというサイトを運営していて、そこに全国各地域のShapeファイルが公開されています。
地図で見る統計(統計GIS)
(1) 「平成22年国勢調査(小地域) 2010/10/01」を選択
(2) 「男女別人口総数及び世帯総数」にチェック
(3) 「統計表各種データダウンロードへ」ボタンをクリック
(1) 「都道府県」を選択
(2) 「市区町村」を選択
(3) 「検索」ボタンをクリック
(4) 境界データの欄に表示されている
「世界測地系緯度経度・Shape形式」のデータをクリック
ダウンロードしたzipファイルを展開すると、
xxx.shp
xxx.dbf
xxx.shx
xxx.prj
という、拡張子だけが違うファイルが4つできるんですが、これがshapeデータの1セットになります。
それぞれのファイルの中身は、シェープファイルとは? | 用語集とGISの使い方 | 株式会社パスコによると、
shp: 図形の座標が保存
dbf: 属性の情報が保存
shx: shpの図形とdbfの属性の対応関係が保存
だそうです。あと、「.prj」は測地系の情報が入っています。(テキストとして開くとそれっぽい文言が入っている)
では単純にshapeファイルをRで表示させてみましょう。
境界情報だけをプロット |
あら簡単。実質4行で表示できました。
じゃあ、いろいろやってみましょう。
coordinates()という関数は、ポリゴンの重心の位置を返してくれます。
> coordinates(x)
[,1] [,2]
0 139.4639 35.62169
1 139.5178 35.62177
2 139.5138 35.62332
3 139.5057 35.62163
4 139.4617 35.61308
... ...
そのままプロットすると↓こんな感じですね。
重心の位置をプロット |
points(coordinates(x))
このshapeを読み込んだオブジェクト(SpatialPolygonsDataFrame)には、境界のポリゴンだけでなく、属性情報も入っています。
> head(x@data) AREA PERIMETER ... KEN_NAME ... MOJI ... 0 206286.40 2421.068 ... 神奈川県 ... はるひ野5丁目 ... 1 67760.92 1765.906 ... 神奈川県 ... 細山6丁目 ... 2 119563.80 1457.849 ... 神奈川県 ... 細山7丁目 ... 3 225729.80 2633.794 ... 神奈川県 ... 細山 ... 4 2017504.00 11135.110 ... 神奈川県 ... 黒川 ... 5 95170.74 1569.407 ... 神奈川県 ... 細山8丁目 ... ... ... ... ... ... ... ...
どうやら、この「MOJI」というカラムにそのポリゴンに対応する地名が入っているようです。これを地図上にプロットしてみましょう。プロット位置はさっきのやり方で求めた重心の位置にしてみます。あと、MOJIは因子型で入っているので、as.character()で文字列に変換してやる必要がありました。
地名を表示させたが、文字サイズが大きすぎた |
text(coordinates(x), as.character(x@data$MOJI))
うわ、ぐちゃぐちゃ。
字を小さくしてみよう↓
文字サイズが小さいと見にくい・・・ |
text(coordinates(x), as.character(x@data$MOJI), cex=0.5)
今度は、字が小さくて見づらいですね。
画面に出すだけのときは、描画用のウィンドウをググッと広げると、ポリゴンは大きく、文字はそのままで表示される、見やすくなります。
直接、画像ファイルとして出力し、その際に解像度を高めに指定するというやり方もあります。
高解像度のpngに出力(拡大してみればいい感じです) |
解像度やら文字の大きさやらは、お好みで調整してみてください。
他にもいろいろと遊べるのですが、長くなったので、今回はここまで。■
[2016年3月30日追記]
広いエリアの行政界シェープファイルのようなものを画像ファイルに出力するのは、けっこう無理があります。そのようなときはPDFファイルに出力すると、いい感じになります↓
Rでshapeを出力するときはPDFファイルにすると便利 - Rプログラミングの小ネタ
■
コメント
コメントを投稿