Rパッケージにスターを送るパッケージ ThankYouStars を作成しました
先日 @teppeis さんが 依存しているnpmライブラリにGitHubスターを送るツール を作成されました。
それに触発され、R言語バージョンを作ってみました。
スターでパッケージ作者に感謝の気持ちを送りましょう。
続きを読むmapeditパッケージで、地図上のメッシュを選択する
前回は地域メッシュのシェープファイルを入手し可視化するところまでやりました。 今回はその続きです。
前回↓
今日の環境はMacです。
前回、新宿近辺のメッシュのみを抽出しましたが、では新宿近辺のメッシュをどうやって調べればよいのでしょうか。
おそらく最も手軽なのはWebサービスを使って、ブラウザ上で確認することだと思います。 「Geocode Viewer」 や 「地図上で標準地域メッシュを確認するページ」 が便利です。
しかし、本シリーズはRでチャレンジすることが裏テーマなので、メッシュの選択もRでやってみましょう。
mapedit
パッケージ を使うことで、地図上でフィーチャーを選択できます。
mapedit
パッケージは、フィーチャーを選択するだけでなく、線や図形を書いてsfクラスとして取得することができるので、
メッシュ以外でも便利です。
くわしくは公式のページをご覧ください。
mapedit - interactively edit spatial data in R
それでは mapedit
パッケージをインストールしましょう。
mapedit
のREADME に従い、インストールします。
mapview
パッケージは develop 版であることに注意してください。
devtools::install_github("bhaskarvk/leaflet") devtools::install_github("bhaskarvk/leaflet.extras") devtools::install_github("r-spatial/mapview@develop") devtools::install_github("r-spatial/mapedit")
次に、 sf
クラスのオブジェクトを用意します。
詳しくは、前回の記事を参照してください。
library(tidyverse) library(sf) d1 <- sf::read_sf("./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp", options=c("ENCODING=CP932”))
それでは、mapedit
パッケージを使っていきましょう。
今回は地図上のフィーチャーを選択したいので、selectFeatures()
関数を使います。
selectFeatures()
関数は v0.2.0 から追加された、比較的新しい機能のようです。
使い方は簡単で、単純に sf
クラスのオブジェクトを selectFeatures()
関数の第一引数に入れるだけです。
めっちゃラクだ…。
library(mapview) library(mapedit) mesh_shinjuku <- d1 %>% mapedit::selectFeatures()
これを実行すると、mapview
と同様に地図が開きます。
欲しいフィーチャーをクリックして選択し、右下のDoneボタンを押せば完了です。
返り値として sf
クラスが返ってくるので、その後も普通に分析可能です。
すんごいラクだ…。
> mesh_shinjuku Simple feature collection with 4 features and 13 fields geometry type: POLYGON dimension: XY bbox: xmin: 139.6875 ymin: 35.68333 xmax: 139.7125 ymax: 35.7 epsg (SRID): 4326 proj4string: +proj=longlat +datum=WGS84 +no_defs メッシュ 田 他農用地 森林 荒地 建物用地 道路 鉄道 他用地 河川湖沼 海浜 海水域 ゴルフ場 3626 53394525 0 0 73182 0 710914 219547 0 31364 10455 0 0 0 3627 53394526 0 0 94091 0 606364 146364 188181 10455 0 0 0 0 3637 53394536 0 0 0 0 919905 62721 62721 0 0 0 0 0 3636 53394535 0 0 0 0 951272 41814 0 10454 41814 0 0 0 geometry 3626 POLYGON((139.6875 35.683333... 3627 POLYGON((139.7 35.683333333... 3637 POLYGON((139.7 35.691666666... 3636 POLYGON((139.6875 35.691666... > class(mesh_shinjuku) [1] "sf" "data.frame"
新宿の4メッシュだけが入っています。
当然、このオブジェクトを mapview
すれば、該当メッシュだけが可視化されています。
mesh_shinjuku %>%
mapview
完璧ですね。 だいぶスムーズにデータ分析できそうです。
GIFアニメを作ってみました。 地図を開いてメッシュを選択し、新宿メッシュのみを可視化する様子です。 容量ギリギリだったので少し見にくいのはご容赦ください…
EDIT [解説・ボーナストラック付き国内盤] (BRC-192)
- アーティスト: マーク・スチュワート
- 出版社/メーカー: BEAT RECORDS
- 発売日: 2008/04/26
- メディア: CD
- 購入: 1人 クリック: 27回
- この商品を含むブログ (10件) を見る
【追記あり】sfパッケージでシェープファイルを読み込んでmapviewパッケージで可視化するまで
お久しぶりです。 位置情報データ分析をやっていくことになりました。 素人なので備忘録を書いていきます。 GISを使えませんが、Rなら少々できますので、限界が来るまでRでチャレンジしてみます。 周りにRで位置情報分析をする人がいない環境なので、ツッコミを欲しています。 何卒よろしくお願いいたします。
今日の環境はMacです。
まず、位置情報データを入手し、可視化することにチャレンジしてみます。 今回のお題は地域メッシュです。とにかくシェープファイルを入手することからスタートです。 位置情報系のデータは、国土数値情報ダウンロードサービスに多くのデータがあるので、今回もこちらを使用します。下記URLです。
全国分をダウンロードすると容量が大変なことになりそうなので、東京都のデータだけにしておきます。 zipを展開して任意の位置に配置します。
シェープファイルの取り扱いには sf
パッケージを使用するのが 2017年現在ナウいようです。詳しくは いつもお世話になっている @yutannihilation さんの下記ブログをご参照ください。
では、まずはシェープファイルを読み込みます。
> library(sf) > d1 <- sf::read_sf("./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp") make.names(vnames, unique = TRUE) でエラー: '<83><81><83>b<83>V<83><85>' に不正なマルチバイト文字があります wrapup 中にエラーが起こりました: '<83><81><83>b<83>V<83><85>' に不正なマルチバイト文字があります
怒られました。
sf
パッケージにおけるマルチバイト文字を含むシェープファイルを読み込む方法が結局わからなかった*1ので、今回は従来の方法のひとつである rgdal
パッケージで読み込んでから sf
パッケージで使えるクラスに変換する方針でやっていきましょう。
> library(rgdal) > d1 <- rgdal::readOGR("./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp", encoding = "Shift_JIS") %>% + sf::st_as_sf() # Convert to an sf object OGR data source with driver: ESRI Shapefile Source: "./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp", layer: "L03-a-14_5339-tky" with 6300 features It has 13 fields Integer64 fields read as strings: 田 他農用地 森林 荒地 建物用地 道路 鉄道 他用地 河川湖沼 海浜 海水域 ゴルフ場 > d1 %>% head Simple feature collection with 6 features and 13 fields geometry type: POLYGON dimension: XY bbox: xmin: 139 ymin: 35.33333 xmax: 139.075 ymax: 35.34167 epsg (SRID): NA proj4string: +proj=longlat +ellps=bessel +no_defs メッシュ 田 他農用地 森林 荒地 建物用地 道路 鉄道 他用地 河川湖沼 海浜 海水域 ゴルフ場 0 53390000 0 0 1050436 0 0 0 0 0 0 0 0 0 1 53390001 0 0 976895 0 0 0 0 0 0 0 0 73530 2 53390002 0 0 808820 241595 0 0 0 0 0 0 0 0 3 53390003 0 0 1050404 0 0 0 0 0 0 0 0 0 4 53390004 0 0 1039890 0 10504 0 0 0 0 0 0 0 5 53390005 42015 136550 829804 21008 0 0 0 21007 0 0 0 0 geometry 0 POLYGON((139 35.33333333333... 1 POLYGON((139.0125 35.333333... 2 POLYGON((139.025 35.3333333... 3 POLYGON((139.0375 35.333333... 4 POLYGON((139.05 35.33333333... 5 POLYGON((139.0625 35.333333...
いい感じです。
【追記01: 2017/06/27 20時】
コメントにてsfパッケージで読み込む方法を教えていただきました。 Macでもマルチバイト文字がきちんと表示されていました。 id:aaaazzzz036 さん、ありがとうございます。
d1 <- sf::st_read("./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp", options=c("ENCODING=CP932"))
【追記02: 2017/06/29 11時】
sf::read_sf
関数でも同じオプションでOKです。
d1 <- sf::read_sf("./Downloads/L03-a-14_5339-tky_GML/L03-a-14_5339-tky.shp", options=c("ENCODING=CP932"))
では、可視化してみましょう。
位置情報データの可視化には mapview
パッケージを使ってみます。
今後の目標としては sf
と mapview
をある程度使えるようになりたい というものがあります。
今回はお試しなので、新宿近辺の4メッシュほどを可視化してみましょう。
> library(mapview) > library(dplyr) > d1 %>% + dplyr::filter(メッシュ %in% c(53394525, 53394526, 53394535, 53394536)) %>% + mapview::mapview()
こちらもいい感じです。左のボタンからOpenStreetMapに切り替えると見やすいですね。
今の例のように、sf
パッケージも mapview
パッケージも、tidyverse系ライブラリと組み合わせて使えるのが便利すぎます。
今後も少しずつ sf
パッケージと mapview
パッケージをやっていきます。
- 作者: S‐Fマガジン編集部
- 出版社/メーカー: 早川書房
- 発売日: 2017/02/09
- メディア: ムック
- この商品を含むブログ (6件) を見る
*1:ご存知のお方は、教えていただけると幸いです…