都道府県境界データの取得

地図描画に使用する都道府県境界データ(ShapeFile)は、次の2つのサイトから取得できる。

1. 国土地理院

(1) GIS ホームページ
(2) データ形式:GML(JPGIS2.1)シェープファイル・・・デフォルトで選択されている
   → 2.政策区域行政区域 を選択
(3) データダウンロードの画面が表示されるので、必要な全国、または都道府県を選択して、「次へ」をクリック
(4) その後、測量した年度を指定し、アンケートに答え、利用約款に同意することでダウンロードが可能になる。

2. e-Stat(政府統計の総合窓口)

(1) e-Stat ホームページ
(2) トップメニューの「地図で見る」をクリック→「境界データダウンロード
(3) 「小地域」→「国勢調査」→「2015年」(2015,2010,2005,2000年のいずれか)
(4) 「町丁・字等別」→「世界測地系緯度経度・Shape形式
(5) 都道府県選択画面が表示されるので、必要なデータをダウンロードする

ggplot2 development version をインストール

ggplot2 による地図を描画するため、現バージョンにバンドルされていない geom_sf() が必要なので、development version をインストールしたい。方法は、こちらに記述されているが、R console から次のコマンドを実行する。

ところが、これがうまく行かない。
途中、2回もRtoolsのインストールが走り、延々処理した揚句の失敗が痛い!
一旦は、インストールを諦めたものの、どうしても欲しい物は欲しいのである。

思い直し、Rtoolsの何たるかものかを調べることから再開。
Rtoolsとは、Windows 環境でパーッケージをソースからインストールする際に
「C++でコンパイルするため,C++コンパイラが必要で,WindowsではRtoolsを使う」
とのこと。

Rtoolsのインストール手順は以下の通り。
(1) 既存のRtoolsをアンインストール
(2) Building R for Windows からRtoolsをダウンロード
(3) ダウンロードした RtoolsXX.exe(XX:バージョン)をダブルクリック
(4) R console から次のコマンドを入力して、gcc がインストールされていることを確認する。

以下のようなメッセージが表示されれば成功。

これで、Rtools のインストールが完了したので、先程のコマンドを実行する。

コンパイルが走るので、時間が掛るが辛抱強く終わるのを待つ。
終ったら、バージョンを確認する。

メデタシ、メデタシ?

Rで地図を描画する – mapview

Ubuntu 17.10 へインストール

Windows環境では、問題なくインストールできたが、
Ubuntuでは、延々処理した揚句、インストール失敗。
そこで、その手順を示す。
(1) libcairo2-dev のインストール
次にインストールする svglite に必要なため、最初にこれをインストールする。

(2) svglite のインストール
Rコンソールから

(3)mapview のインストール
Rコンソールから

以上

Rで地図を描画する geom_sf()

Rでshapefileを入力して、地図を描画できると言うことで、いろいろ試してみるも、
問題山積して、収拾ががつかない状況にある。
しかし、何とか解決したものだけでもメモにして残しておく。
環境は、windows7、R 3.4.4(2018/4/6時点の最新版)

geom_sf()がインストールできない

shapefileを入力するのに、従来は maptools の readShapePoly 等を使用するわけだが、現在は

と、警告が発せられる。

Googleで調べてみると、将来の方向性として sf パッケージが良さそうなので sf をインストールしてみる。
RでGISをやるときにはsfパッケージ、という世の中になるらしい。に詳しい説明があります。)
これによって、shapefileは首尾よく入力できるようにはなった。が、sf::st_read()で入力したデータは fortify でのフォーマット変換ができないので、geom_sf()を使用することになる。

これで plot を使用すれば地図の描画はできるが、ggplot2 を使用する場合は、geom_sf()を使用しなければならない。
geom_sf()は、ggplot2 の関数だが、バージョン2.2.1にはこれがバンドルされていないと言う問題がある。
インターネットを探せば、上位にこのインストールの件についての質問が為されているが、答えは何時も

で、インストールせよとのご託宣。種々調べたが、これ以外には方法がない模様。

しかし、試しに windows 環境で実行するも、結果的に失敗に終わる。断定はできないが多分無理。
Windows な人の結論、
次期バージョンを待とう!

(インストールはこちらをご覧ください。)
windowsは見捨てて、guest os の Ubuntu 17.10 で再挑戦。インストールのコマンドは全く同じ。
こちらは、問題なくインストール完了!
ggplot2 2.2.1.9000(変なバージョン番号だが問題はなし)

(「RでGISをやるときにはsfパッケージ、という世の中になるらしい。」によれば、Ubuntu 16.10 以降でなければ、いろんな問題があるらしいので注意してください。)

reshape2とtidyr

例えば、ggplot を使用して次の様な「男女別の人口推移」のグラフを作るものとします。

総務省の人口統計等からデータは入手できます。
ダウンロード後、Excelなどで次のように編集して、csv形式でとして保存するのが一般的な方法かと思います。

単純な表なので簡単に作れますが、面倒と思う人のため、次にデータを用意しておきました。

データの構成は、このように作るのが一般的と思いますが、これを上のような棒グラフでプロットするのは大変困難です。
x軸(年次)が共通で、y軸が各々男と女を別個にプロットすると重なり合ってしまうためです。回避手段(例えば、dodge を使うなど)は有るかもしれませんが、私の力量では無理です。
この問題の解決策は、データを次の通りに変更すること(が、一番手っ取り早い手段)です。

つまり、年次別に男と女の2行にしてにデータを持つことです。当然、数値が男女何れかを識別するために、変数名「男」、「女」をデータとする必要があります。(なお、この形式のデータフォーマットは、前者を wide-format、男女別に人口を持つ後者を long-format と言うのだそうです。)
力技でこのような変換もできますが、簡単に行うのがreshape2::melttidyr::gatherです。
変換方法は次の通り。
(1) reshape2::melt

(2) tidyr::gather

この2つは、全く同じことを行っていますが、tidyrの方がスピードが速いのでお勧めだそうです。

Rで行と行の計算を行う

Rで異なる行同士の演算ってどうしたものやら、全く分からない。
と言うことで、SQLite3を使おうとしたもの。(前のブログ参照)
データは、SQLite3と同じ次のテーブルを使います。

このsaleの年度間の増減を計算したい場合、
つまり、次の様な表を作成するにはどうするか?

R の場合も、「LAG」がこの問題を解くキーワードでした。
mutate内で、lag()を使用します。

実行結果は次の通り。

通常の言語では、何のこともないこのような計算が、Rではある程度の予備知識がなければ途方に暮れてしまう程、面倒なものですね。

plyr と dplyr を比較してみる

準備

両方ともに、中々インターネットを探してみても情報が少ないので、あちらこちらか情報を掻き集めて比較してみようと思う。
データには、irisやflightsは馴染みがなく、かつデータ数が多過ぎて検証が難しいので、次のサンプルを使用します。


このデータは、気象庁のページからダウンロードしたものなので、自分の居住地のものが欲しい人は、こちらからダウンロードしてください。

データ入力

(1) plyr

① 各月ごとの最高気温の平均を計算

①-1 .()関数を使用する

.()を使用します。結果は、上と同じです。

② 最高気温の平均と標準偏差を計算

③ 列の追加

最高気温の平均を列に追加します。

(2) dplyr

① 各月ごとの最高気温の平均を計算

② 最高気温の平均と標準偏差を計算

②-1 最高気温の平均と標準偏差を計算

summarise_at を使った場合。結果は、上と同じです。

②-2 最高と最低気温の平均と標準偏差を計算

③ 列の追加

最高気温の平均を列に追加します。

これを年月でグループ化してみましょう。

おまけ

条件付きデータカウント

各月別に真夏日を数えてみよう。
知らないと、意外に面倒。データ数を数えるのでcountと思いきやエラー。sumを使うのが正解だそうです。

もののついでに棒グラフで表示してみる。


取り敢えずここまで。

グラフィクスをファイルへ保存

グラフィクスのファイル保存方法

R で作成したグラフィクスのファイルを保存するには
以下の2方法があります。

(1) savePlot

画面にグラフィクスを作成後、savePot関数を呼び出す。

savePlot("filename.ext"), type="type")

(2) バッチスクリプトの使用

  1. png(…) や jpeg(…) などの関数を呼び出し、新しいグラフィクスファイルを開く。
  2. plotやその他の関連関数を呼び出し、グラフィクスイメージを作成する。
  3. dev.off()を呼び出し、グラフィクスファイルを閉じる。
png("filename.ext", width=w, height=h) # w:幅, h:高さ

【例】myPlot.png を作成する

png("myPlot.png", width=648, height=432) # サイズの指定は任意

plot(x, y, main="Scatterplot of X, Y")   # main はタイトル

dev.off()

各プラットフォームで使用できる関数のリストは

help(Devices)

で確認できます。