GIS Lecture 3: R で GIS を使う。

OSMacOSX 10.12
Fink
R3.5

3.1. Rの概要

3.2. R のインストール

$ fink install r-base35
$ fink install cran-rgdal-r35

3.3. R の使い方

すると、以下のようなメッセージが表示されます。

統計局から、04101 仙台市青葉区の世界測地系緯度経度・Shape形式をダウンロードし、解凍しておきます。

$ R-3.5
WARNING: ignoring environment value of R_HOME

R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin16.7.0 (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。 

R は多くの貢献者による共同プロジェクトです。 
詳しくは 'contributors()' と入力してください。 
また、R や R のパッケージを出版物で引用する際の形式については 
'citation()' と入力してください。 

'demo()' と入力すればデモをみることができます。 
'help()' とすればオンラインヘルプが出ます。 
'help.start()' で HTML ブラウザによるヘルプがみられます。 
'q()' と入力すれば R を終了します。 
> library(rgdal)
 要求されたパッケージ sp をロード中です 
rgdal: version: 1.3-6, (SVN revision 773)
 Geospatial Data Abstraction Library extensions to R successfully loaded
 Loaded GDAL runtime: GDAL 2.3.1, released 2018/06/22
 Path to GDAL shared files: /sw/share/gdal
 GDAL binary built with GEOS: TRUE 
 Loaded PROJ.4 runtime: Rel. 4.9.2, 08 September 2015, [PJ_VERSION: 492]
 Path to PROJ.4 shared files: (autodetected)
 Linking to sp version: 1.3-1 

では、ダウンロードした仙台市宮城野区の国勢調査データを読み込んで見ましょう。 (注: dsn がフォルダ名、layer がファイル名 (拡張子を除いたもの)です。)

> lnd<-readOGR(dsn=".",layer="h27ka04101")
OGR data source with driver: ESRI Shapefile 
Source: "/Users/baba/gisdata", layer: "h27ka04101"
with 286 features
It has 35 fields
Integer64 fields read as strings:  JINKO SETAI 
> 

ここに書かれている情報は重要です。JINKOとSETAIを文字列と認識しているようです。

> lnd$JINKO
  [1] 697  798  2535 2550 1793 2080 1078 0    220  127  47   2148 874  434  597 
 [16] 698  2585 1338 40   31   1986 2529 271  508  581  653  708  605  3763 1257
 [31] 716  1076 139  1912 1504 1383 1282 1362 933  2144 554  337  504  532  932 
 [46] 429  934  221  961  683  115  679  1148 780  2863 2991 1862 1601 1938 0   
 [61] 1063 6017 1820 2016 2162 1267 1523 1952 33   490  1160 2419 1393 476  514 
 [76] 1140 1698 109  1411 174  1427 1212 1259 1378 2294 2769 2486 1020 1123 940 
 [91] 714  1282 620  97   1573 1311 1201 542  932  2968 667  364  119  1544 579 
[106] 693  1819 1191 2048 1048 1189 665  1882 1382 1103 884  368  1830 1003 1254
[121] 965  1324 1257 1490 0    29   2275 2097 867  1400 557  1187 1592 1119 729 
[136] 200  976  1248 1536 445  2536 3050 723  778  175  1974 1441 1253 1431 2902
[151] 325  1493 1116 2504 1315 1869 1236 848  18   45   73   600  1145 1498 2375
[166] 1569 1249 1104 1385 1476 1681 315  1406 1449 1087 1501 891  760  392  1114
[181] 1366 698  2537 1241 1102 1069 1602 841  998  2269 1813 905  355  1970 1566
[196] 1837 2483 1633 777  817  571  1807 623  1099 1144 2252 1266 615  1497 441 
[211] 2582 1300 444  239  951  1129 1698 31   895  1002 1023 732  569  1712 1345
[226] 1308 1548 1256 451  92   2791 955  766  727  269  622  1448 381  978  843 
[241] 522  1452 487  417  924  777  1072 655  1201 886  771  566  337  460  1085
[256] 615  533  18   648  756  465  571  577  199  517  0    4    0    174  1011
[271] 324  1388 542  42   147  348  484  582  1    224  652  1275 614  718  297 
[286] 506 
268 Levels: 0 1 1002 1003 1011 1020 1023 1048 1063 1069 1072 1076 1078 ... 998

JINKO を整数値に変換します。

> lnd$JINKO <- as.numeric(as.character(lnd$JINKO))
> lnd$JINKO
  [1]  697  798 2535 2550 1793 2080 1078    0  220  127   47 2148  874  434  597
 [16]  698 2585 1338   40   31 1986 2529  271  508  581  653  708  605 3763 1257
 [31]  716 1076  139 1912 1504 1383 1282 1362  933 2144  554  337  504  532  932
 [46]  429  934  221  961  683  115  679 1148  780 2863 2991 1862 1601 1938    0
 [61] 1063 6017 1820 2016 2162 1267 1523 1952   33  490 1160 2419 1393  476  514
 [76] 1140 1698  109 1411  174 1427 1212 1259 1378 2294 2769 2486 1020 1123  940
 [91]  714 1282  620   97 1573 1311 1201  542  932 2968  667  364  119 1544  579
[106]  693 1819 1191 2048 1048 1189  665 1882 1382 1103  884  368 1830 1003 1254
[121]  965 1324 1257 1490    0   29 2275 2097  867 1400  557 1187 1592 1119  729
[136]  200  976 1248 1536  445 2536 3050  723  778  175 1974 1441 1253 1431 2902
[151]  325 1493 1116 2504 1315 1869 1236  848   18   45   73  600 1145 1498 2375
[166] 1569 1249 1104 1385 1476 1681  315 1406 1449 1087 1501  891  760  392 1114
[181] 1366  698 2537 1241 1102 1069 1602  841  998 2269 1813  905  355 1970 1566
[196] 1837 2483 1633  777  817  571 1807  623 1099 1144 2252 1266  615 1497  441
[211] 2582 1300  444  239  951 1129 1698   31  895 1002 1023  732  569 1712 1345
[226] 1308 1548 1256  451   92 2791  955  766  727  269  622 1448  381  978  843
[241]  522 1452  487  417  924  777 1072  655 1201  886  771  566  337  460 1085
[256]  615  533   18  648  756  465  571  577  199  517    0    4    0  174 1011
[271]  324 1388  542   42  147  348  484  582    1  224  652 1275  614  718  297
[286]  506

上二つをよく見比べてください。左寄せは文字列、右寄せは数値です。

> head(lnd@data, n=2)
   KEY_CODE PREF CITY S_AREA PREF_NAME CITY_NAME     S_NAME KIGO_E HCODE
0 041010010   04  101 001000    宮城県    青葉区     青葉町     8101
1 041010020   04  101 002000    宮城県    青葉区 あけぼの町     8101
      AREA PERIMETER H27KAxx_ H27KAxx_ID KEN KEN_NAME SITYO_NAME GST_NAME
0 132477.0  1660.062     5063       5062  04   宮城県          仙台市
1  98653.1  1768.070     2634       2633  04   宮城県          仙台市
  CSS_NAME KIHON1 DUMMY1 KIHON2  KEYCODE1 KEYCODE2 AREA_MAX_F KIGO_D N_KEN
0   青葉区   0010      -     00 101001000  1010010          M     
1   青葉区   0020      -     00 101002000  1010020          M     
  N_CITY KIGO_I       MOJI KBSUM JINKO SETAI   X_CODE   Y_CODE  KCODE1
0           青葉町    18   697   402 140.8648 38.28277 0010-00
1       あけぼの町    14   798   438 140.8643 38.28817 0020-00

では、地図としてプロットして見ます。

> plot(lnd)
> plot(lnd, col = "lightgrey") # 仙台市青葉区の人口をプロット
> sel <- lnd$JINKO > 200
> plot(lnd[ sel, ], col = "turquoise", add = TRUE) # 人口200より上をターコイズで上書き

一見、成功したように見えます。次の QGIS で作った地図と比較すると、、

めでたし、めでたし。