Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rを使ったオープン地理空間情報データの活用 / FOSS4G Hokkaido 2017

Rを使ったオープン地理空間情報データの活用 / FOSS4G Hokkaido 2017

2017年7月1日に開催されたFOSS4G北海道2017での発表資料です。

# 要旨
これまで、地理空間データ処理を行うためのプログラミング言語として、Pythonが広く利用されています。その一方で、R言語もまた、地理空間データを扱うための機能を備えている点についてはあまり知られていません。R言語は主に統計解析の用途で利用されるオープンソースのプログラミング言語ですが、パッケージと呼ばれる機能拡張を利用することで、Pythonに劣らない操作が可能になります。本公演では、R言語を利用してできる地理空間データの操作や表現方法の可能性とその利点について、オープンデータを例に紹介します。

Uryu Shinya

July 01, 2017
Tweet

More Decks by Uryu Shinya

Other Decks in Programming

Transcript

  1. վΊͯɺͱ͸Կ͔ The best thing about R is that it was

    written by statisticians. The worst thing about R is that it was written by statisticians. - http://blog.revolutionanalytics.com/2015/06/why-has-r-been-so-successful.html ౷ܭղੳ͕ಘҙͳΦʔϓϯιʔεͷπʔϧ ݴޠ ࡞ਤɺػցֶशɺ΢ΣϒΞϓϦέʔγϣϯ։ൃ·Ͱ෯޿͘ѻ͏ wIUNMXJEHFUT IUUQXXXIUNMXJEHFUTPSH +BWB4DSJQUϥΠϒϥϦͷҠ২ w4IJOZ IUUQTIJOZSTUVEJPDPN ΢ΣϒΞϓϦέʔγϣϯϑϨʔϜϫʔΫ ػೳ֦ு ύοέʔδ ϥΠϒϥϦ ͷಋೖʹΑΓɺ࣮ߦՄೳͳྖҬ͕޿͕Δ
  2. ஍ཧۭؒ৘ใσʔλΛѻ͏ɹɹύοέʔδ $3"/5BTL7JFX"OBMZTJTPG4QBUJBM%BUB IUUQTDSBOSQSPKFDUPSHWJFX4QBUJBM ར༻໨తʹԠͨ͡ओཁύοέʔδͷҰཡ ͷύοέʔδ wશൠʜTG TQBUTUBU NBQUPPMT  wՄࢹԽUNBQ

    NBQWJFX HHNBQ wۭؒ౷ܭֶHTUBU TQEFQ TQ#BZFT wੜଶֶWFHBO BEF BEFIBCJUBU ʜ ͸ओཁύοέʔδ UNBQύοέʔδͰ࡞ͬͨ২ੜਤ΋Ͳ͖ IUUQVSJCPIBUFOBCMPHDPNFOUSZ
  3. FTUBUBQJύοέʔδF4UBU"1*Λ3͔Βར༻ 平成27年国勢調査 人口等基本集計 総務省統計局 library(estatapi) このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、 サービスの内容は国によって保証されたものではありません。 df.pops <- estat_getStatsData(

    appId = <API_TOKEN>, statsDataId = "0003148500", cdCat01 = c("00710")) UBC@DPEF දষ߲໨ DBU@DPEF BSFB@DPEF ஍Ҭʢʣ ࣌ؒ࣠ ೥࣍ VOJU WBMVF  ਓޱ   શࠃ ೥ ਓ   ਓޱ   શࠃࢢ෦ ೥ ਓ   ਓޱ   શࠃ܊෦ ೥ ਓ 
  4. LPLVEPTVVDIJ ࠃ౔਺஋৘ใμ΢ϯϩʔυαʔϏε8FC"1*ϥούʔ library(kokudosuuchi) getKSJSummary() JEFOUJpFS UJUMF pFME pFME BSFB5ZQF "

    ࡾେ౎ࢢݍܭը۠Ҭ ੓ࡦ۠Ҭ େ౎ࢢݍ  " ౎ࢢ஍Ҭ ࠃ౔ʢਫɾ౔஍ʣ ౔஍ར༻  " ࣗવެԂ஍Ҭ ஍Ҭ อޢอશ 
  5. # devtools.install_github("uribo/jpndistrict") 本パッケージが提供する行政区域データおよび市区町村役場データは 国土交通省国土政策局「国土数値情報(行政区域データ 平成27年4月1日時点のデータ)http://nlftp.mlit.go.jp/ksj/gml/ datalist/KsjTmplt-N03.html 」、「国土数値情報(市区町村役場データ 平成26年8月31日時点のデータ) http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-P34.html」をもとに瓜生真也が編集・加工を行ったものです。 そのため、このデータを利用した二次著作物を作成する際は、国土数値情報の利用約款に準拠するものとします。

    library(jpndistrict) (sp.df01 <- spdf_jpn_pref(admin_name = "北海道")) QSFG@OBNF DJUZ@OBNF@ DJUZ@OBNF DJUZ@OBNF@GVMM DJUZ@DPEF ๺ւಓ ࡳຈࢢ தԝ۠ ࡳຈࢢ தԝ۠ 1101 ๺ւಓ ࡳຈࢢ ๺۠ ࡳຈࢢ ๺۠ 1102 ๺ւಓ ࡳຈࢢ ౦۠ ࡳຈࢢ ౦۠ 1103 ๺ւಓ ࡳຈࢢ നੴ۠ ࡳຈࢢ നੴ۠ 1104 ๺ւಓ ࡳຈࢢ ๛ฏ۠ ࡳຈࢢ ๛ฏ۠ 1105 ฏ੒೥݄೔࣌఺ͷσʔλ IUUQOMGUQNMJUHPKQLTKHNMEBUBMJTU,TK5NQMU/IUNM KQOEJTUSJDUࠃ౔਺஋৘ใ ߦ੓۠Ҭσʔλ
  6. FTUBUBQJͱKQOEJTUSJDUΛ૊Έ߹Θͤͯ library(tidyverse) library(sf) sf.pops <- sp.df01 %>% st_as_sf() %>% mutate(city_code

    = as.character(city_code)) %>% left_join(df.pops %>% filter(表章項目 == "人口"), by = c("city_code" = "area_code")) ggplot() + geom_sf(data = sf.pops, aes(fill = value)) + scale_fill_gradientn(colors = sf.colors(10))
  7. IUUQXXXQSFGIPLLBJEPMHKQTTKTLPQFOEBUBPQFOEBUBIUN ๺ւಓΦʔϓϯσʔλΧλϩάͷ ϖʔδΛεΫϨΠϐϯά library(rvest) x <- read_html("http://www.pref.hokkaido.lg.jp/ss/jsk/opendata/opendata.htm") df.opd <- x

    %>% html_table(fill = TRUE) %>% .[[3]] x %>% html_nodes(css = '#open_data > tbody > tr:nth-child(222) > td:nth-child(3) > a') %>% html_text() # [1] "森林計画関係資料(GIS用データ)" (link.url <- x %>% html_nodes(css = '#open_data > tbody > tr:nth-child(222) > td:nth-child(3) > a') %>% html_attr(name = "href")) # [1] "http://www.pref.hokkaido.lg.jp/sr/srk/OPD.htm"
  8. ৿ྛܭըؔ܎ࢿྉͷར༻ # 森林に関するデータ df.forest <- readr::read_csv( "09留萌/留萌森林簿データ(コード置換版).csv", locale = readr::locale(encoding

    = "cp932")) df.rumoi <- read_sf("09留萌/09留萌_小班.shp") %>% select(KEYCODE, 市町村コー, 林班, 計画区コー, GISAREA, NO, LUX, ID, geometry) %>% filter(between(ID, 9010000001, 9010001000)) %>% st_simplify() %>% inner_join(df.forest, by = c("KEYCODE", "林班")) quartzFonts( HiraMaru = quartzFont(rep("HiraMaruProN-W4", 4))) theme_set( ggthemes::theme_map(base_size = 12, base_family = "HiraMaruProN-W4")) ggplot() + geom_sf(data = df.rumoi, aes(fill = 林種))
  9. Ͱ஍ཧۭؒॲཧඪ४஍Ҭϝογϡ library(jpmesh) meshcode_to_latlon(5133) lat_center long_center lat_error long_error 1 34.3333333333 133.5

    0.3333333333 0.5 latlong_to_meshcode(34.583333, 133.875, order = 2) [1] 513367 ࠃཱ؀ڥݚڀॴ஛த͞Μͷίʔυ IUUQUBLFOBLBBLJPPSHFUDNFTIDPEFJOEFYIUNMΛݩʹ ݸਓͰ ։ൃɻ KQNFTI Ң౓ܦ౓͔Βϝογϡͷ૬ޓม׵ LN͔ΒNϝογϡ·ͰରԠ Nͦͷ͏ͪରԠ
  10. Ͱ஍ཧۭؒॲཧࢪઃ෼ྨ library(dbscan) d <- df.tgt %>% select(longitude, latitude) %>% mutate_all(scale)

    %>% as.matrix() db <- dbscan(d, eps = 1, minPts = 3) db ## DBSCAN clustering for 1813 objects. ## Parameters: eps = 1, minPts = 3 ## The clustering contains 4 cluster(s) and 1 noise points. ## ## 0 1 2 3 4 ## 1 1756 43 3 10 ## ## Available fields: cluster, eps, minPts df.tgt %<>% mutate(cluster = db$cluster) library(factoextra) fviz_cluster(db, d, stand = FALSE, geom = "point", ggtheme = theme_minimal())
  11. Ͱ஍ཧۭؒॲཧࢪઃ෼ྨ # 指定した箇所周辺の「施設名」を返す関数 (res <- find_neighbor_places(df.inbs, 135.7355, 35.0302, distance =

    100)) ## [1] "京都" "北野天満宮" ## [3] "北野天満宮 (Kitano Tenman-gu)" "北野天ડ܅" QMBDF@OBNF DPSSFDU@OBNF EJTUBODF ๺໺ఱຬٶ ๺໺ఱຬٶ  ๺໺ఱຬٶ ,JUBOP5FONBOHV ๺໺ఱຬٶ  ๺໺ఱડ܅ ๺໺ఱຬٶ  ژ౎ ๺໺ఱຬٶ  จࣈྻͷฤूڑ཭Λར༻ͯ͠ਫ਼౓޲্Λ໨ࢦ͢ ϙΠϯτ͔ΒϙϦΰϯΛ࡞੒ ϙϦΰϯʹؚ·ΕΔ౤ߘΛ ࢪઃ಺Ͱͷ౤ߘͱ൑ఆ