2012年11月5日
                    FOSS4G 2012 Tokyo
                   @東京大学柏キャンパス




RでGIS ハンズオンセッション


NPO法人オープンコンシェルジュ/OSGeo.JP
         星田侑久
Rについて
    R
    http://www.r-project.org/

    R(wikipedia)
    http://ja.wikipedia.org/wiki/R%E8%A8%80%E8
    %AA%9E

    Rjpwiki
    http://www.okada.jp.org/RWiki/

    RでGIS
    http://www.okada.jp.org/RWiki/?%A3%D2%A4
    %C7%A3%C7%A3%C9%A3%D3


2
Rについて
    商用版はS-PLUS
    いいところ
     データ量が多くても平気
     扱える分析手法が豊富
     やろうと思えば空間情報を用いた分析は
    いろいろできる



3
Rのインストール
    windows, mac, linuxで動作可能
    http://cran.md.tsukuba.ac.jp/




4
とりあえず動かしてみる
    # xに1を代入
    x <- 1
    x
    # yに1を代入
    y <- 2
    y
    # xとyを足したものをzに代入
    z <- sum(x, y)
    z



5
使用するデータ
    【地図で見る統計(統計GIS)】
    http://www.e-stat.go.jp/SG2/toukeichiri/TopFrame.do?fromPage=init&toPage=download

    ①平成22年国勢調査(小地域)
     東京都目黒区、世界測地系平面直角第9系、shp
    ②住宅の建て方別世帯数(小地域)
     東京都目黒区、txt

    【国土数値情報ダウンロードサービス】
    http://nlftp.mlit.go.jp/ksj/gml/gml_datalist.html

    ③鉄道データ、世界測地系緯度経度、shp

6
概要
    1.データのインポート
    2.データの結合
    3.データ加工
    4.グラフの描画
    5.クラスター分析
    6.主題図の作成



7
パッケージのインストール(オフライン)

    パッケージ
    ●R言語のプログラムを配布用の形式に保存したもの
    ●関数やデータセット、リファレンスマニュアルなどがひ
    とまとめにされた、いわば出来合いのアプリケーション・
    関数ライブラリ・データベース

    #パッケージが格納されているフォルダの確認
    .libPaths()

    上記のフォルダにPackageフォルダ内のデータをコピー



8
パッケージのインストール(オンライン)

    #パッケージのインストール
    install.packages(“maptools”)

    #パッケージの読み込み
    library(maptools)




9
作業ディレクトリの設定
     #作業ディレクトリの設定
     setwd("フルパス")
     c:¥temp → c:¥¥temp
             → c:/temp

     #windowsの場合
     ¥WORK¥win

     #mac、linuxの場合
     ¥WORK¥mac
10
データのインポート
     #shpをインポート
     #目黒区
     meguro01 <- readShapePoly("h22ka13110.shp")
     #座標系の設定
     proj4string(meguro01) <-
     CRS("+init=epsg:2451")
     #画面に表示
     plot(meguro01)
     #ヘッダーの表示
     names(meguro01)
     #サマリーの表示
     summary(meguro01)


11
投影変換
     EPSGコード
       地理座標系をあらわすコード
     http://spatialreference.org/
     https://sites.google.com/site/gistoolboxes/

     meguro02 <-
      spTransform(
         meguro01,
         CRS = CRS("+init=epsg:4612"))



12
データのインポート
     #dbfをインポート
     dbf01 <- read.dbf("h22ka13110.dbf")
     #属性データをインポート
     txt01 <-
     read.csv("tblT000577C13110.txt")
     #型の違いを確認
     class(meguro02)
     #カラムへのアクセス
     meguro02$KEY_CODE

13
データの結合
     #単純にmergeすると型が変わる
     tmp <- merge(meguro02, txt01,
     by="KEY_CODE")
     class(tmp)

     #sort=Fオプションが大切
     meguro03 <- meguro02
     meguro03@data <-
          merge(meguro02@data,
                txt01,
                by="KEY_CODE", sort=F)
14
ひとやすみ
     #関数のhelp
     help(readShapePoly)

     各パッケージのドキュメント
     http://cran.r-project.org/web/packages/maptools/maptools.pdf
     http://cran.r-project.org/web/packages/sp/sp.pdf




15
データ加工
     #演算
     #数値型に変換して演算
     #一戸建て世帯割合=一戸建て世帯/世帯数
     meguro03$p000577002 <-
     as.numeric(as.character(meguro03$T000577002)) /
     as.numeric(as.character(meguro03$T000577001))




16
データ加工
     #欠損値を0埋め
     meguro03$p000577003 <-
           ifelse(is.na(meguro03$p000577003),
                  0,
                  meguro03$p000577003)
     #確認
     subset(meguro03@data,
            KEY_CODE == 13110001004,
            c(T000577001,T000577002,T000577003,T000577004,
              T000577005,T000577006,T000577007,T000577008,
              T000577009))
     #基本統計量
     summary(as.numeric
             (as.character
              (meguro03@data$T000577003)))

17
グラフの描画
     #ヒストグラム
     hist(meguro03$p000577002,
          xlim=c(0, 1), ylim=c(0, 20),
          main="ikkodate", xlab="pro",
          col="purple")

     #散布図
     plot(meguro03$p000577002,
          meguro03@data$p000577004,
          xlab="pro_ikkodate", ylab="pro_kyoudou",
          main="scatter plot",
          cex=1, pch=20, col="green",
          xlim=c(0, 1), ylim=c(0, 1))
18
クラスター分析
     #クラスター分析に投入する項目を抽出
     cluster01 <-
        meguro03@data[,
          c("p000577002","p000577003","p000577005",
            "p000577006","p000577007","p000577008",
            "p000577009")]

     #クラスター分析の実行
     cluster02 <- pam(cluster01, k=3)

     #クラスター分析の結果を図形データに結合
     meguro03$cluster.nm <- cluster02$clustering




19
クラスター分析の結果の解釈
     #クラスターのグループごとに一戸建世帯割合を集計
     (平均)
     barplot(
       by(
          meguro03$p000577002,
          meguro03$cluster.nm,
          mean),
       main="ikkodate")

     #1;共同住宅3~5階建が多い
     #2;一戸建が多い
     #3;共同住宅6~階建が多い
20
主題図の作成
     #shpへエクスポート
     writePolyShape(meguro03, "cluster.shp")

     #閾値の数
     class <- classIntervals(meguro03$cluster.nm, 3)

     #色の設定
     colcode <- findColours(class, brewer.pal(3,"Accent"))

     #凡例のラベル
     names(attr(colcode, "table"))[1] <- "1"
     names(attr(colcode, "table"))[2] <- "2"
     names(attr(colcode, "table"))[3] <- "3"



21
主題図の作成
     #PDFへ出力、日本語も使えるように
     pdf("meguro.pdf",family = "Japan1GothicBBB")
     #クラスター分析の結果を格納したレイヤー
       plot(meguro03,
             xlim=c(139.6496,139.7295),
             ylim=c(35.5973,35.6734),
             col=colcode,
             axe=TRUE)
     #地図のタイトル
       title("目黒区")

22
主題図の作成
     #レイヤーの重ね合わせ
      par(new=T)
     #線路レイヤー
      plot(railroad,
           xlim=c(139.6496,139.7295),
           ylim=c(35.5973,35.6734),
           col="black",
           lwd=1)
     #レイヤーの重ね合わせ
      par(new=T)

23
主題図の作成
     #駅レイヤー
      plot(station,
           xlim=c(139.6496,139.7295),
           ylim=c(35.5973,35.6734),
           col = "red",
           lwd = 3)
     #レイヤーの重ね合わせ
      par(new=T)
     #地図の凡例
      legend(139.6496,35.6734,
              legend=names(attr(colcode, "table")),
              fill=attr(colcode, "palette"),
              cex=0.6,
              bg='gray')


24
主題図の作成
     #町丁目名のラベル、ハロー
       invisible(
          text(getSpPPolygonsLabptSlots(meguro03),
               labels=as.character(meguro03$MOJI),
               cex=0.25,
               col="white",
               font=2))
       invisible(
          text(getSpPPolygonsLabptSlots(meguro03),
               labels=as.character(meguro03$MOJI),
               cex=0.25,
               col="black",
               font=1))
     #PDF出力の終了
     dev.off()

25
参考書籍
     谷村 晋         古谷知之
     地理空間データ分析    Rによる空間データの統計分析




26

RでGISハンズオンセッション

  • 1.
    2012年11月5日 FOSS4G 2012 Tokyo @東京大学柏キャンパス RでGIS ハンズオンセッション NPO法人オープンコンシェルジュ/OSGeo.JP 星田侑久
  • 2.
    Rについて R http://www.r-project.org/ R(wikipedia) http://ja.wikipedia.org/wiki/R%E8%A8%80%E8 %AA%9E Rjpwiki http://www.okada.jp.org/RWiki/ RでGIS http://www.okada.jp.org/RWiki/?%A3%D2%A4 %C7%A3%C7%A3%C9%A3%D3 2
  • 3.
    Rについて 商用版はS-PLUS いいところ データ量が多くても平気 扱える分析手法が豊富 やろうと思えば空間情報を用いた分析は いろいろできる 3
  • 4.
    Rのインストール windows, mac, linuxで動作可能 http://cran.md.tsukuba.ac.jp/ 4
  • 5.
    とりあえず動かしてみる # xに1を代入 x <- 1 x # yに1を代入 y <- 2 y # xとyを足したものをzに代入 z <- sum(x, y) z 5
  • 6.
    使用するデータ 【地図で見る統計(統計GIS)】 http://www.e-stat.go.jp/SG2/toukeichiri/TopFrame.do?fromPage=init&toPage=download ①平成22年国勢調査(小地域) 東京都目黒区、世界測地系平面直角第9系、shp ②住宅の建て方別世帯数(小地域) 東京都目黒区、txt 【国土数値情報ダウンロードサービス】 http://nlftp.mlit.go.jp/ksj/gml/gml_datalist.html ③鉄道データ、世界測地系緯度経度、shp 6
  • 7.
    概要 1.データのインポート 2.データの結合 3.データ加工 4.グラフの描画 5.クラスター分析 6.主題図の作成 7
  • 8.
    パッケージのインストール(オフライン) パッケージ ●R言語のプログラムを配布用の形式に保存したもの ●関数やデータセット、リファレンスマニュアルなどがひ とまとめにされた、いわば出来合いのアプリケーション・ 関数ライブラリ・データベース #パッケージが格納されているフォルダの確認 .libPaths() 上記のフォルダにPackageフォルダ内のデータをコピー 8
  • 9.
    パッケージのインストール(オンライン) #パッケージのインストール install.packages(“maptools”) #パッケージの読み込み library(maptools) 9
  • 10.
    作業ディレクトリの設定 #作業ディレクトリの設定 setwd("フルパス") c:¥temp → c:¥¥temp → c:/temp #windowsの場合 ¥WORK¥win #mac、linuxの場合 ¥WORK¥mac 10
  • 11.
    データのインポート #shpをインポート #目黒区 meguro01 <- readShapePoly("h22ka13110.shp") #座標系の設定 proj4string(meguro01) <- CRS("+init=epsg:2451") #画面に表示 plot(meguro01) #ヘッダーの表示 names(meguro01) #サマリーの表示 summary(meguro01) 11
  • 12.
    投影変換 EPSGコード 地理座標系をあらわすコード http://spatialreference.org/ https://sites.google.com/site/gistoolboxes/ meguro02 <- spTransform( meguro01, CRS = CRS("+init=epsg:4612")) 12
  • 13.
    データのインポート #dbfをインポート dbf01 <- read.dbf("h22ka13110.dbf") #属性データをインポート txt01 <- read.csv("tblT000577C13110.txt") #型の違いを確認 class(meguro02) #カラムへのアクセス meguro02$KEY_CODE 13
  • 14.
    データの結合 #単純にmergeすると型が変わる tmp <- merge(meguro02, txt01, by="KEY_CODE") class(tmp) #sort=Fオプションが大切 meguro03 <- meguro02 meguro03@data <- merge(meguro02@data, txt01, by="KEY_CODE", sort=F) 14
  • 15.
    ひとやすみ #関数のhelp help(readShapePoly) 各パッケージのドキュメント http://cran.r-project.org/web/packages/maptools/maptools.pdf http://cran.r-project.org/web/packages/sp/sp.pdf 15
  • 16.
    データ加工 #演算 #数値型に変換して演算 #一戸建て世帯割合=一戸建て世帯/世帯数 meguro03$p000577002 <- as.numeric(as.character(meguro03$T000577002)) / as.numeric(as.character(meguro03$T000577001)) 16
  • 17.
    データ加工 #欠損値を0埋め meguro03$p000577003 <- ifelse(is.na(meguro03$p000577003), 0, meguro03$p000577003) #確認 subset(meguro03@data, KEY_CODE == 13110001004, c(T000577001,T000577002,T000577003,T000577004, T000577005,T000577006,T000577007,T000577008, T000577009)) #基本統計量 summary(as.numeric (as.character (meguro03@data$T000577003))) 17
  • 18.
    グラフの描画 #ヒストグラム hist(meguro03$p000577002, xlim=c(0, 1), ylim=c(0, 20), main="ikkodate", xlab="pro", col="purple") #散布図 plot(meguro03$p000577002, meguro03@data$p000577004, xlab="pro_ikkodate", ylab="pro_kyoudou", main="scatter plot", cex=1, pch=20, col="green", xlim=c(0, 1), ylim=c(0, 1)) 18
  • 19.
    クラスター分析 #クラスター分析に投入する項目を抽出 cluster01 <- meguro03@data[, c("p000577002","p000577003","p000577005", "p000577006","p000577007","p000577008", "p000577009")] #クラスター分析の実行 cluster02 <- pam(cluster01, k=3) #クラスター分析の結果を図形データに結合 meguro03$cluster.nm <- cluster02$clustering 19
  • 20.
    クラスター分析の結果の解釈 #クラスターのグループごとに一戸建世帯割合を集計 (平均) barplot( by( meguro03$p000577002, meguro03$cluster.nm, mean), main="ikkodate") #1;共同住宅3~5階建が多い #2;一戸建が多い #3;共同住宅6~階建が多い 20
  • 21.
    主題図の作成 #shpへエクスポート writePolyShape(meguro03, "cluster.shp") #閾値の数 class <- classIntervals(meguro03$cluster.nm, 3) #色の設定 colcode <- findColours(class, brewer.pal(3,"Accent")) #凡例のラベル names(attr(colcode, "table"))[1] <- "1" names(attr(colcode, "table"))[2] <- "2" names(attr(colcode, "table"))[3] <- "3" 21
  • 22.
    主題図の作成 #PDFへ出力、日本語も使えるように pdf("meguro.pdf",family = "Japan1GothicBBB") #クラスター分析の結果を格納したレイヤー plot(meguro03, xlim=c(139.6496,139.7295), ylim=c(35.5973,35.6734), col=colcode, axe=TRUE) #地図のタイトル title("目黒区") 22
  • 23.
    主題図の作成 #レイヤーの重ね合わせ par(new=T) #線路レイヤー plot(railroad, xlim=c(139.6496,139.7295), ylim=c(35.5973,35.6734), col="black", lwd=1) #レイヤーの重ね合わせ par(new=T) 23
  • 24.
    主題図の作成 #駅レイヤー plot(station, xlim=c(139.6496,139.7295), ylim=c(35.5973,35.6734), col = "red", lwd = 3) #レイヤーの重ね合わせ par(new=T) #地図の凡例 legend(139.6496,35.6734, legend=names(attr(colcode, "table")), fill=attr(colcode, "palette"), cex=0.6, bg='gray') 24
  • 25.
    主題図の作成 #町丁目名のラベル、ハロー invisible( text(getSpPPolygonsLabptSlots(meguro03), labels=as.character(meguro03$MOJI), cex=0.25, col="white", font=2)) invisible( text(getSpPPolygonsLabptSlots(meguro03), labels=as.character(meguro03$MOJI), cex=0.25, col="black", font=1)) #PDF出力の終了 dev.off() 25
  • 26.
    参考書籍 谷村 晋 古谷知之 地理空間データ分析 Rによる空間データの統計分析 26