- はじめに
- アメリカ地質調査所、および同研究所が提供する世界で発生した地震データのスプレッドシート
- leafletパッケージを使って、地震データを地図上に表示させる
- 地震マップ可視化の自作関数化
- まとめ
- 参考資料
はじめに
R言語を使った、オープンデータと地図可視化というテーマで記事執筆してみました。
オープンデータとしては、 アメリカ地質調査所が提供する、世界中の地震データを活用させてもらいました。 このオープンデータは、CSVデータのURL指定で簡単なスクレイピングで取得できるので楽ちんで利用できます。
オープンデータの関連記事
アメリカ地質調査所、および同研究所が提供する世界で発生した地震データのスプレッドシート
アメリカ地質調査所(USGS)は、 アメリカ合衆国政府の科学研究機関の一つで、 水文科学、生物学、地質学、地理学の4つの主要な科学分野についての ナチュラル・ハザードを対象とする調査研究を幅広く行なっているらしいです。
今回、USGSが提供している地震データのスプレッドシートを利用させてもらいます。
同研究所HPの「Real-time Notifications, Feeds, and Web Services」 の「Spreadsheet Format」項目から地震データが得られます。
過去何日かと、どの程度のマグニチュード(M)範囲の地震データを取得するかで、 対象データのURLが変わってきます。
以下に、各地震データのURLを示します。
過去1日地震データのスプレッドシートURL
Past Day | URL |
---|---|
Significant Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_day.csv |
M4.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.csv |
M2.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.csv |
M1.0+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_day.csv |
All Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.csv |
過去7日地震データのスプレッドシート
Past 7 Days | URL |
---|---|
Significant Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.csv |
M4.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.csv |
M2.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.csv |
M1.0+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_week.csv |
All Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.csv |
過去30日地震データのスプレッドシート
Past 30 Days | URL |
---|---|
Significant Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv |
M4.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_month.csv |
M2.5+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv |
M1.0+ Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_month.csv |
All Earthquakes | https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv |
今回、過去30日のM4.5+の地震データを使用することにします。
スプレッドシートには、 発生日時、緯度・軽度、マグニチュードに加えて、 関連するメタデータも付随しています。
leafletパッケージを使って、地震データを地図上に表示させる
実行環境
以下のMac/RStudioの実行環境で行なっています。
#RStudioターミナル上のR環境 R version 4.1.2 (2021-11-01) -- "Bird Hippie" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin17.0 (64-bit)
関連パッケージのインストール
地図表示には、leafletパッケージを用いています。
Leafletは、インタラクティブマップ表示のための人気のJavaScriptライブラリの1つで、Leaflet for R
はR環境で簡単に使えるように設計されています。
The New York Times や The Washington Post から GitHub や Flickr まで、 またOpenStreetMap や Mapbox、CartoDB などの GIS 専門サイトでも使用されています。
インストール方法はCRANとGitHubからの選べる2タイプです。
#CRANパッケージのインストール(安定版) install.packages("leaflet") library(leaflet) ##GitHubパッケージのインストール(開発版) install.packages("devtools") devtools::install_github("rstudio/leaflet") library(leaflet) #その他パッケージ install.packages("htmltools") library(htmltools)
今回は、CRANパッケージの方を使用しました。
USGSの地震スプレッドシート(csvダイル)を読み込み
上記の通り、過去30日のM4.5+地震のCSVデータを使います。
地震データの緯度・経度の位置情報をもとに、 地震の発生場所を地図上にプロットして、各メタデータもポップアップできるようにします。
要するに、 世界のどこで、どの程度の地震が発生したのかを地図上に可視化してみます。
さて、R環境で実行していきます。
#地震データのURL定義 csv_path <- "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_month.csv" #CSV読み込み Earthquakes <- read.table(file=csv_path, header = T, sep = ",") #ヘッダー表示 head(Earthquakes) # time latitude longitude depth mag magType nst gap dmin rms net #1 2022-08-16T08:34:12.247Z -22.4001 170.3261 34.758 5.0 mb 37 115 2.671 1.18 us #2 2022-08-16T07:13:09.474Z 10.2714 125.5214 78.941 4.6 mb 49 116 3.182 1.14 us #3 2022-08-16T07:09:48.807Z -54.8013 158.5708 10.000 5.2 mb 27 93 0.377 0.67 us #4 2022-08-16T07:02:09.836Z -21.6775 -178.5008 438.673 4.5 mb 64 91 3.113 0.65 us #5 2022-08-16T03:46:26.016Z -31.3193 -177.8050 10.000 4.7 mb 20 151 2.053 0.97 us #6 2022-08-16T03:44:36.298Z 13.2068 -89.5779 59.953 4.6 mwr 38 193 0.462 0.57 us # id updated place type #1 us6000ib98 2022-08-16T08:53:12.040Z southeast of the Loyalty Islands earthquake #2 us6000ib8x 2022-08-16T07:58:07.066Z 8 km SSW of Tubajon, Philippines earthquake #3 us6000ib8t 2022-08-16T07:52:45.069Z Macquarie Island region earthquake #4 us6000ib8s 2022-08-16T07:41:25.040Z Fiji region earthquake #5 us6000ib81 2022-08-16T04:17:21.040Z Kermadec Islands region earthquake #6 us6000ib7v 2022-08-16T05:58:35.878Z El Salvador earthquake # horizontalError depthError magError magNst status locationSource magSource #1 11.41 5.995 0.094 38 reviewed us us #2 10.96 7.416 0.066 69 reviewed us us #3 7.60 1.869 0.122 22 reviewed us us #4 12.56 6.868 0.057 90 reviewed us us #5 11.91 1.968 0.126 19 reviewed us us #6 5.96 5.740 0.071 19 reviewed us us
地図プロットの作成には、実際に、 2列目のlatitude(緯度)、3列目のlongitude(経度)、5列目のmag(マグニチュード)、place(場所)などのメタデータを使っていきます。
地震データの地図表示 (1) clusterOptions無しで作図する
leafletパッケージで地図プロットを描く際に、 マーカーのclusterOptionsのON/OFFで結構見た目が変わってしまいます。
そこで、それぞれの条件で、マップ表示を作成することにしました。
まずは、clusterOptionsが「OFF」の場合で実行していきます。
#地図の下準備 #head(Earthquakes) Earthquakes <- Earthquakes[rev(order(Earthquakes$mag)),] map <- leaflet::leaflet(Earthquakes) %>% addTiles() #取得時間: addControl用のタイトルhtml作成 tim <- base::substr(Earthquakes[rev(order(Earthquakes$time)),][1,1], start=1, stop=16) title <- tags$p(tags$style("p {color: black; font-size:12px}"), tags$b(tim)) ##ラベル作成 Lab <- paste0("日時: ", Earthquakes$time, "<br>", "場所: ", Earthquakes$place, "<br>", "マグニチュード: ", Earthquakes$mag, "<br>", "深さ: ", Earthquakes$depth) #マーカーサイズ(1) size1 <- (2^Earthquakes$mag)*600 #カラーパレット pal <- leaflet::colorNumeric(palette="Reds", domain=Earthquakes$mag) #地図作成: clusterOptions無し map1 <- map %>% addProviderTiles(providers$OpenMapSurfer) %>% addCircles(lng=~longitude,lat=~latitude, radius=size1, color=~pal(Earthquakes$mag), weight=1, stroke = TRUE, fillOpacity = 0.4, popup = Lab, label = ~as.character(mag), labelOptions = labelOptions(noHide = F, direction = 'center', textOnly = T)) %>% addMiniMap(position="bottomright", width = 75, height = 75) %>% addLegend(position='topright', pal=pal, values=~Earthquakes$mag, title="mag", opacity = 0.6) %>% addControl(title, position = "bottomleft" ) #地図表示 map1 #地図の保存 htmlwidgets::saveWidget(map1, "./map1.html", selfcontained = F)
地震データの地図表示 (1)の出力例
図下のURLをクリックするとhtmlマップが表示され、ズームイン・ズームアウトもできます。
バヌアツあたりの拡大マップです。
地震データの地図表示 (2) clusterOptions有りで作図する
続いて、clusterOptionsが「ON」の場合で実行していきます。
#マーカーサイズ(2) size2 <- (2^Earthquakes$mag)/2 #地図作成: clusterOptions有り map2 <- map %>% addProviderTiles(providers$OpenMapSurfer) %>% addCircleMarkers(lng=~longitude,lat=~latitude, radius=size2, color="#09f", weight=1, clusterOptions = markerClusterOptions(), popup=Lab, label = ~as.character(mag), labelOptions = labelOptions(noHide = T, direction = 'center', textOnly = T) ) %>% addMiniMap(position="bottomright", width = 75, height = 75) %>% addControl(title, position = "bottomleft" ) #地図表示 map2 #地図の保存 htmlwidgets::saveWidget(map2, "./map2.html", selfcontained = F)
地震データの地図表示 (2)の出力例
図下のURLをクリックするとhtmlマップが表示され、ズームイン・ズームアウトもできます。
日本の関東地方を拡大してみました。
地震マップ可視化の自作関数化
以下の実行で、上記と同じマップが得られます。
#ブラウザでRコードを見る browseURL("https://gist.github.com/kumeS/47785a19a29e0f943b0a3ea695ddf8cf") #自作関数のソース source("https://gist.githubusercontent.com/kumeS/47785a19a29e0f943b0a3ea695ddf8cf/raw/db58c921e62863b45566758c6afed61395512f4c/Earthquakes.map.R") #Type=1: 地図作成でclusterOptions無し Earthquakes.map(Type=1) #Type=2: 地図作成でclusterOptions有り Earthquakes.map(Type=2) #Type=3: 地図作成 old-version Earthquakes.map(Type=3)
まとめ
今回、R環境下で地図を描く時に便利なツールとして、 leafletパッケージを紹介しました。 地震データ以外のオープンデータと組み合わせることで、 様々なシーンで活用できそうです。
また、kazutanさんの公開ページや公式ドキュメントも見ると、色々と参考になります。