../../_images/logo_R.png

R クイック スタート

Rは、統計計算とグラフィックスのためのフリーソフトウェア環境です。

このクイックスタートでは、次の方法について説明します:

  • 簡単な算術演算に R を使用する

  • シェープファイルからデータを読み込み、地図化する

  • 座標変換を行う

  • 地図上にいくつかのデータポイントをプロットする

R の起動

R は基本的にコマンドラインプログラムですが、GUI も利用できます。プロンプトで1行のコードを入力し、return キーを押すと、R インタプリタがそれを評価して結果を出力します。

ちなみに

コマンドラインはそんなに怖いものではなく、とても便利なものです。ミスタイプをしても十字キーの上下でコマンド履歴を呼び出し編集することができます。表示が止まってしまった場合は CTRL-C を入力することで復帰することができます。

Geospatial ‣ Spatial Tools ‣ R Statistics を選択します。ターミナルウィンドウが開き、R が実行されます。

簡単な算術演算から始めることができます。

> 3*2
[1] 6

> 1 + 2 * 3 / 4
[1] 2.5

> sqrt(2)
[1] 1.414214

> pi * exp(-1)
[1] 1.155727

算術関数、三角関数、統計関数のすべてが組み込まれており、 CRAN アーカイブのパッケージからさらに数千が利用可能です。

Rのメインプロンプトは > ですが、継続プロンプト + もあります。これは、Rが有効な式を作るためにさらに多くの入力を期待する場合に表示されます。閉じ括弧や閉じ括弧を忘れた場合に表示されます。

> sqrt(
+ 2
+ )
[1] 1.414214

データの構築

出力の中で、角括弧に囲まれた謎の'one'が何をしているのか、不思議に思っているかもしれません。これは、結果が1つの数値であることを示しています。Rは、1次元のベクタ、2次元の行列、多次元の配列ます。これらを生成する関数はたくさんあります。以下に簡単なシーケンスを示します。

> seq(1, 5, len=10)
[1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111
[9] 4.555556 5.000000

これで、 [9] によって、4.555が9番目の値であることがわかります。

行列を作成すると、行と列のラベルが作成されます。

> m = matrix(1:12, 3, 4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

行列の要素は、カンマで区切られた行と列のインデックスを持つ角括弧を使用して抽出できます。ベクタとして行全体を取得するには、インデックスを空白のままにします。ベクタインデックスを使用して、複数の行や列を小さな行列として取得します。

> m[2,4]
[1] 11

> m[2,]
[1]  2  5  8 11

> m[,3:4]
     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

データフレームは、PostgresやMySQLなどのRDBMSにあるような構造を反映したデータ構造です。各行はレコードとみなすことができ、カラムはデータベースのフィールドのようなものです。データベースと同様に、各フィールドは各レコードで同じ型でなければなりません。

これらは多くの点で行列のように機能しますが、$-表記法を使用して名前でカラムを取得・設定することもできます。

> d = data.frame(x=1:10, y=1:10, z=runif(10)) # z is 10 random numbers
> d
        x  y          z
    1   1  1 0.44128080
    2   2  2 0.09394331
    3   3  3 0.51097462
    4   4  4 0.82683828
    5   5  5 0.21826740
    6   6  6 0.65600533
    7   7  7 0.59798278
    8   8  8 0.19003625
    9   9  9 0.24004866
    10 10 10 0.35972749

> d$z
 [1] 0.44128080 0.09394331 0.51097462 0.82683828 0.21826740 0.65600533
 [7] 0.59798278 0.19003625 0.24004866 0.35972749

> d$big = d$z > 0.6  # d$big is now a boolean true/false value
> d[1:5,]
  x y          z   big
1 1 1 0.44128080 FALSE
2 2 2 0.09394331 FALSE
3 3 3 0.51097462 FALSE
4 4 4 0.82683828  TRUE
5 5 5 0.21826740 FALSE

> d$name = letters[1:10] # create a new field of characters
> d[1:5,]
  x y          z   big name
  1 1 1 0.44128080 FALSE    a
  2 2 2 0.09394331 FALSE    b
  3 3 3 0.51097462 FALSE    c
  4 4 4 0.82683828  TRUE    d
  5 5 5 0.21826740 FALSE    e

マップ データの読み込み

空間データ操作と統計のための多くのパッケージがあります。ここに含まれているものもあれば、CRANからダウンロードできるものもあります。

ここでは、2つのシェープファイル、つまりNatural Earthデータから国の境界と居住地を読み込みます。空間機能を利用するために、2つのアドオンパッケージを使用します。

> library(sf)           # Simple Features manipulation Library
> library(ggplot2)      # Plotting library

> countries <- st_read(dsn = "~/data/natural_earth2/ne_10m_admin_0_countries.shp")
> places <- st_read(dsn = "~/data/natural_earth2/ne_10m_populated_places.shp")
> ggplot(countries) + geom_sf()

これは私たちに世界の簡単な地図を与えます:

../../_images/r_plot1.png

このデータセットでOGRウェイがRに読み込まれると、データフレームのように多くの方法で動作するオブジェクトが返されます。admin フィールドを使用して、世界のデータをサブセット化し、英国を取得することができます。

> uk <- countries[countries$admin == 'United Kingdom',]
> ggplot(uk) + geom_sf()
../../_images/r_plot2.png

緯度を中心とした座標系に慣れているので、ここに住んでいる人には少々押しつぶされたように見えます。現在、オブジェクトには座標系が割り当てられていません。

sfパッケージからsf::st_transform関数を使用してオブジェクトを変換する前に、CRSを割り当てる必要があります。英国Ordnance SurveyのグリッドシステムであるEPSG:27700に変換します。

> ukos <- st_transform(uk,27700)
> ggplot(ukos) + geom_sf()
../../_images/r_plot2_1.png

これは、変換されたデータのベースマップをプロットします。次に、設定された場所のデータセットからいくつかの点を追加します。ここでも、目的の点をサブセット化し、Ordnance Surveyグリッド・リファレンス座標に変換します:

> ukpop <- places[places$SOV0NAME == 'United Kingdom',]
> ukpop <- st_transform(ukpop,27700)

これらの点をベースマップに追加し、(人口に比例する大きさになるように)人口の平方根の比率でシンボルをサイズ変更します、色を赤に設定し、プロットする文字を塗りつぶした丸印に設定します:

> ggplot() +
>   geom_sf(data = ukos) +                                                          # add UK shape to the map
>   geom_sf(data = ukpop,                                                           # add the Populated places
>           aes(size = ukpop$POP_MAX/100000),                       # fix size of points (by area)
>           colour = 'red', alpha = 1/5) +                          # set points colour and transparency
>   coord_sf(crs = 27700, datum= sf::st_crs(27700),         # set a bounding box
>            xlim = st_bbox(ukos[c(1,3)]),                          # for the map
>            ylim = st_bbox(ukos[c(2,4)])
>           ) +
>   ggtitle('Uk Population centre sizes') +                         # set the map title
>       theme(legend.position = 'bottom') +                         # Legend position
>           scale_size_area(name = 'Population \nin 100K')  # 0 value means 0 area + legend title

そして最終的な画像が表示されます。

../../_images/r_plot3.png

ちなみに

Rを終了するには、 q() と入力してreturnを押します。作業フォルダをRデータの画像ファイルとして保存するかどうかを尋ねるメッセージが表示されます。.RData ファイルがあるディレクトリから再度Rを起動すると、そこからすべてのデータを復元します。

ビネット(短かい解説)

以前は、Rパッケージのドキュメントは、関数ごとに簡潔に書かれたヘルプページになる傾向がありました。パッケージ作成者は、パッケージをわかりやすく紹介するために 'ビネット' を書くことが推奨されています。vignette() 関数を引数なしで実行すると、システム内のビネット の一覧を得ることができます。R空間パッケージのより技術的な紹介を見るには、 vignette("sf1") を試してみてください。

次のステップ

いまは、Rに関する一般的な情報については、公式の Introduction to R またはメインの R Project ページにあたるとよいでしょう。

Rの空間的側面の詳細については、おそらく R Spatial Task View から始めるのが最適です。

R-Spatial ページもチェックしてみてください。