1 緯度経度付き貿易データ

  • trade.csv
  • origins: USA, Australia, China, New Zealand, Germanyの5カ国
  • destinations: Japanのみ
  • import: 上記5カ国から日本への輸出額
  • longitude.x latitude.x: 輸出国の緯度経度
  • longitude.y latitude.y: 輸入国(日本)の緯度経度。(137.96, 37.54)。
library(readr)
trade <- read_csv("trade.csv")
head(trade)
## # A tibble: 5 × 7
##   origins     destinations import longitude.x latitude.x longitude.y latitude.y
##   <chr>       <chr>         <dbl>       <dbl>      <dbl>       <dbl>      <dbl>
## 1 USA         Japan         17.9       -113.        45.7        138.       37.5
## 2 Australia   Japan          9.32       134.       -25.7        138.       37.5
## 3 China       Japan          5.54       104.        36.6        138.       37.5
## 4 New Zealand Japan          2.51       171.       -41.8        138.       37.5
## 5 Germany     Japan          1.91        10.4       51.1        138.       37.5

オンラインでデータ読み込む場合は、以下のコード。

trade <- read_csv("https://ayumu-tanaka.github.io/teaching/trade.csv")

2 航路一括処理 with geosphereパッケージ

trade.csvのデータから複数の国の間をつなぐ航路を一括作成する。

  • 緯度と経度で表される点と点の間をつなぐ点の集合を求める
  • gcIntermediate()という関数は、2地点の航路を求める。
  • addStartEnd = TRUE は出発点と到着点を結果の中に含めることを指定。
  • 日米間で日付変更線またぐため、breakAtDateLine=TRUEと設定。
  • trade[,4:5]trade[,6:7]は輸出国と輸入国の緯度経度。

3 準備

library(readr)
trade <- read_csv("trade.csv")

library(geosphere)

flows <- gcIntermediate(trade[,4:5], trade[,6:7], sp = TRUE, addStartEnd = TRUE, breakAtDateLine=TRUE) 

#輸入データ
flows$import <- trade$import
#輸出国
flows$origins <- trade$origins
#輸入国
flows$destinations <- trade$destinations

4 データ確認

  • オブジェクトflowsは通常のデータと異なる地理的データ
> head(flows)
class       : SpatialLinesDataFrame 
features    : 5 

5 地図(1) 基礎

#地図描画に必要なパッケージの読み込み
library(leaflet)
#グラフを描く際に色を指定するためのパッケージの読み込み
library(RColorBrewer)

#貿易フローの矢印をクリックした時にラベル(輸出国、輸入国、貿易額)が出てくるように設定。
#paste0()は複数の文字列を結合する関数。
countrylabel <- paste0(flows$origins, " to ", 
                flows$destinations, ': ', 
                as.character(flows$import))

#輸出国別に貿易フローの矢印の色分け指定(4色、Set2は色調の種類)
pal <- colorFactor(brewer.pal(4, 'Set2'), flows$origins)
#参考:https://stats.biopapyrus.jp/r/graph/rcolorbrewer.html

#貿易フロー地図の描画
#データはflows、ウェイトは輸入額。輸出国別に色分け。
#(1) 基礎編 「~」はベクトルであることを示す
leaflet() %>%
  addTiles() %>% #規定の地図背景を使う
  addPolylines(data = flows, weight = ~import, label = countrylabel, 
               group = ~origins, color = ~pal(origins))  #貿易フローのライン

6 地図(2) 応用

leaflet() %>%
  addProviderTiles('CartoDB.Positron') %>% #サードパーティーの地図背景を使う
  addPolylines(data = flows, weight = ~import, label = countrylabel, 
               group = ~origins, color = ~pal(origins)) %>% #貿易フローのライン
  addLayersControl(overlayGroups = unique(flows$origins), 
                   options = layersControlOptions(collapsed = FALSE)) #貿易フローのラインを操作するボタン