地理空間情報の可視化

◆地理空間データの入手と準備

ライブラリのインストール

画面上で,Packagesタブ→installから「maptools」を入力してインストールすることもできます.

install.packages("maptools")
library(maptools)

ワーキングディレクトリの設定

現在,Rが使用しているワーキングディレクトリがどこなのかをきちんと把握しておくことは非常に重要です.ダウンロードしたファイルをそのまま「ダウンロードフォルダ」等に入れっぱなしにしておくと,あとで場所がわからなくなったり,プログラムが動かなかったりします.

以下のコマンドで,現在のワーキングディレクトリを確認できます.

getwd()

ワーキングディレクトリを変えたければ,setwd()を使います.「 C:XXXX/XXXXX/XXX 」には利用したいフォルダのパスを入れてください.

setwd("C:XXXX/XXXXX/XXX")

基盤となる白地図データの入手

シェープファイルをダウンロードします.

  1. Natural Earth にアクセスして,Get the data -> Large scale data, 1:10m -> Physical -> Land -> Download landの順にクリックします.
  2. “ne_10m_land.zip”というzipファイルをダウンロードします.その際,先ほど作成した 「 C:XXXX/XXXXX/XXX 」 の下にフォルダ「data」を作って,そこで解凍することをお勧めします.解凍されるとフォルダ内に7つのファイルが出現するはずです.

問1 データの測地系:このデータの測地系は何か?「ne_10m_land.prj」ファイルの中を見て確認してみよう.また,この測地系について,日本測地系との違いを説明してみよう.

コロナウイルス感染者データの入手

  1. 都道府県別新型コロナウイルス感染者数マップ URL の画面左上から,発表された症例一覧のCSVファイルをダウンロードします(※データの更新は2020年11月で止まっていますが,2023年1月現在,ダウンロードすることは出来ます).このデータを「data」 フォルダに格納します.
  2. 「定義(Readme&FAQ)」から,データの内容,定義について確認しておいてください.

都道府県県庁所在地の緯度経度データの入手

世界測地系(WGS84)による都道府県庁所在地の緯度経度データを入手する(URL).セルが結合されている等,Rでは読み込めない形式になっているので,今回はあらかじめ形式を整えたデータを下記からダウンロードして使ってください.

https://fnakai.web.nitech.ac.jp/data/R/coronavirus/latlng_data2.xlsx

latlng_data2.xlsxの説明

自治体コード自治体コード
都道府県名都道府県名
市区名県庁所在地のある市区名
緯度 世界測地系(WGS84) による緯度
経度 世界測地系(WGS84) による経度
日本測地系緯度経度日本測地系の 緯度経度(カンマ区切り)

◆地理空間データの可視化

データの読み込み

白地図,コロナウイルス感染者データ,県庁所在地の緯度経度データの3つを読み込んでいきます.

白地図の読み込みは以下のコマンドを使います.

world <- readShapePoly("ne_10m_land.shp") 

plot()でどのようなデータか,確認してみます.

plot(world)
plot(world)の結果

問2 日本近辺だけ表示する:現状のままだと,世界中の地図が表示され,かなり広い範囲になってしまいます.日本近辺だけに絞って表示してみましょう.引数「 xlim 」「ylim」に経度,緯度の範囲を表すベクトルを与えることで範囲が指定できます.plot() 内で用いられている「lonlim」と「latlim」に適当な値を付値してみよう.

※日本の国土がおよそいくらの緯度,経度の範囲に入るかはこちらで確認できます.

https://www.gsi.go.jp/KOKUJYOHO/center.htm
lonlim = c(125,155) #日本の国土を覆う経度
latlim = c(25,45) #日本の国土を覆う緯度
plot(world,xlim=lonlim, ylim=latlim)

コロナウイルス感染者データと県庁所在地の緯度経度データを読み込みます.

日本付近の地図

問3 感染者数データの読み込み:関数read.csv()を使って,「COVID-19.csv」を読み込み,「 COVID19 」というオブジェクトに付値してみましょう.

COVID19 <- read.csv("COVID-19.csv")

「 COVID-19 」にデータが格納されているか,確認します.

COVID19

問4 県庁所在地のデータを読み込み:「latlng_data2.xlsx」を読み込み,「 Kencho 」というオブジェクトに付値してみましょう.

エクセルを読み込むためには,まずパッケージをインストールし,読み込みます.

install.packages("readxl")
library(readxl)

readxlのパッケージ内にあるread_excel()関数を使ってデータを読み込みます.

Kencho <- read_excel("latlng_data2.xlsx")

データの集計

COVID19は,1つのレコードに感染者1名分のデータが入っています.これを,都道府県ごとに集計してみます.

まずは,下記のコードを入力してみてください.

table(COVID19$受診都道府県)

問5 table関数:table()関数がどのような関数か,説明してみましょう.上記の関数の実行結果を「 PrefConsult 」というオブジェクトに付値してください.さらに, 「 PrefConsult 」 のデータ構造を確認してください.

PrefConsult <- table(COVID19$受診都道府県)
class(PrefConsult)

問6 data.frame型に変換する:as.data.frame(オブジェクト)でオブジェクトのデータ型を data.frame型に変換することができます.data.frame型に変換し,「PrefConsultdf 」に付値したうえで,class()で実行できているか確かめてください.

PrefConsultdf <- as.data.frame(PrefConsult)
class(PrefConsultdf)

二つのエクセルデータの結合

都道府県名が同じデータが同じ行になるように,テーブル結合をしてみます.以下のコマンドを実行し,結果を「latlngConsult」に付値してください.

merge(PrefConsultdf, Kencho, by.x="Var1", by.y="都道府県名", all=T)
latlngConsult <- merge(PrefConsultdf, Kencho, by.x="Var1", by.y="都道府県名", all=T)

問7 関数 merge(): 関数 merge() はどのような関数でしょうか?説明してみよう.

地図への表示

まずは,白地図を表示してみます.以下のコマンドを入力してください.日本地図が表示されるはずです.

plot(world, xlim=lonlim, ylim=latlim, axes=TRUE, xlab="Longitude", ylab="Latitude") 

次に,この白地図にコロナウイルス感染者データの PrefConsult を重ね合わせてみます. PrefConsult は,「受診都道府県」を都道府県別に数を数えたものです.以下のコマンドを入力してみてください.

points(latlngConsult$経度,
       latlngConsult$緯度,
       pch=20,
       lwd=3,
       col="red")
県庁所在地の位置

では,次のコマンドを入力するとどうなるでしょうか?

このコードでは感染者数が多い都道府県の丸が大きくなるように表示されます.

points(latlngConsult$経度,
       latlngConsult$緯度,
       pch=20,
       lwd=(latlngConsult$Freq),
       col="red")

問7 plot結果は,なぜ真っ赤になったのか?:上記のコマンドを入力すると,真っ赤な画面が現れます.なぜこうなったのか,考察し,解決策を示してください.

ヒント:x軸は経度,y軸は緯度,pchはマーカーのタイプ(●や△など)を表します.lwdは線分の幅で,値が大きいほど太くなります.「latlngConsult$Freq」はCOVID19データの受診都道府県を都道府県別に集計したものです.colは,マーカーの色を表します.

(参考)グラフィックス参考実例集:カラーパレット – RjpWiki, URL, 2020.4アクセス.