FishingMapのRコード、LinkedOpenDataの読み込みとMapVisualization

author: Unadon (見習い飯炊き兵) 動作環境:Mac OS Sierra 10.12.1; R version3.3.1; rstan 2.10.1

 

はじめに

Linked Open Dataの使い方をしったので、 関東の釣り場情報データをRで地図描画してみます。

Fishing Map with R

パッケージの読み込み

パッケージは”ggmap”,”ggplot2”,”leaflet”の3つで描画、

“XML”でxmlファイルを取得、データフレーム化します。 なお、2017年1月17日現在、最新のggplotの一部関数が、パッケージ間で対応していない現象が確認されています。

コード内に記入している手順に従って、githubからパッケージを再インストールし、Rstudioを再起動してからlibraryを読み込んでください。

##########################################
# R: Mapping Visualization with leaflet
##########################################
invisible({rm(list=ls());gc();gc()})


#2017年1月16日現在、ggmapとggplotの対応が取れてないので、以下から再インストール
#Rstudioを再起動すること
#devtools::install_github("dkahle/ggmap")
#devtools::install_github("hadley/ggplot2")
#devtools::install_github("rstudio/leaflet")

library(leaflet) #インタラクティブなMapping Visualization
library(ggplot2) 
library(ggmap) #ggplotのMap版
library(XML) #xmlデータのScraping

データの取得

#データの取得--------------------------------------------------------
#reference データ取得元情報
#http://lodcu.cs.chubu.ac.jp/SparqlEPCU/project.jsp?projectID=kanto_fishing_spot
#関東の釣り場情報を集めた公開データ(LOD)を利用する

#直接xmlファイルをwebで呼び出してデータ取得、データフレーム化
#APIからリクエストを渡してxmlで取得するお作法的コード projectIDを指定した後は、取得するファイル形式を指定。今回はxml
res<-xmlToDataFrame("http://lodcu.cs.chubu.ac.jp/SparqlEPCU/RDFServer.jsp?reqtype=api&project=kanto_fishing_spot&output=xml")

#文字列のデータフレームになるので、経度と緯度を実数に変換
res$long<-as.numeric(res$long)
res$lat<-as.numeric(res$lat)

位置情報(緯度と経度)を含む、釣り場情報が取得されました。

#データ構造の確認
str(res)

str(res)
'data.frame':	144 obs. of  14 variables:
 $ parking-fee: chr  "" "" "1000円" "" ...
 $ lat        : num  35.2 35.3 35.1 35.2 35.2 ...
 $ makie      : chr  "" "" "" "" ...
 $ area       : chr  "三浦半島" "東京湾" "三浦半島" "三浦半島" ...
 $ address1   : chr  "横須賀市" "横須賀市" "三浦市" "横須賀市" ...
 $ fish       : chr  "メゴチ, シロギス, マハゼ, メバル, メジナ, クロダイ, ウミタナゴ" "メバル, カサゴ, ウミタナゴ, メゴチ, シロギス,カレイ" "ハゼ, メゴチ, イシモチ, シタビラメ, シロギス, ウミタナゴ, ヒイラギ, イワシ, アジ" "メバル, ムラソイ, カサゴ, メジナ, シロギス, クロダイ, アジ, アオリイカ" ...
 $ title      : chr  "佐島沖堤" "野島防波堤・青灯" "大浦海岸" "久留和港" ...
 $ toilet     : chr  "なし" "なし" "なし" "あり" ...
 $ prefecture : chr  "神奈川県" "神奈川県" "神奈川県" "神奈川県" ...
 $ description: chr  "テトラ帯は釣り禁止。投げ釣りの際は船の邪魔にならないように注意" "" "" "釣り禁止エリアあり" ...
 $ parking    : chr  "なし" "なし" "あり(有料)" "あり(有料)" ...
 $ luar       : chr  "" "" "" "" ...
 $ long       : num  140 140 140 140 140 ...
 $ nageturi   : chr  "" "" "" "" ...

データ加工

地図のマーカーをクリックした時に出る情報は「1列分」だけのため、必要な情報を一列に集約する

library(tidyverse)
#データの加工-----------------------------------------------------------
#一列のデータしかポップアップできないので、必要情報(characterの列)を結合して一列に
info <- res %>% tidyr::unite('unite', c(title,fish,description), sep=':')

地図描画

#インタラクティブな地図描画--------------------------------------------------------
#現在ggmapとplotlyが対応してないので、leafletパッケージを使う
#reference
#http://spatioanalytics.com/


#leafletパッケージが勝手に緯度(lat)経度(long)を抜き出し、最適化して描画する
fishingMap<-leaflet(info) %>% 
    addTiles() %>% 
    addMarkers(popup=c(info$unite)) #uniteに格納した情報をポップアップ

#描画
fishingMap

#Viewr タブのshow in new windowアイコンをクリックして大画面で見るべし
#マーカーをクリックしてポップアップされた情報を確認してみよう

#fin

最後に

今回使用したデータは関東の釣り場情報でしたが、 他にもLinked Open Dataからは色々なデータを取得することができます。

緯度経度の情報と釣れる魚の情報が手に入ったので、沿岸部の魚の生息分布とかを推定してみても面白いかなぁ。

またやってみます。

Enjoy!!

Written on January 17, 2017