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

本文書は、2019年の日本の人工呼吸器等本体1の輸入額のデータを用いる。

データは、『財務省貿易統計』から得た。人工呼吸器等本体は第90類のHSコード’901920000’に該当する。『財務省貿易統計』の「普通貿易統計>品別国別表>輸入>2019年12月」のページからcsvファイル(ik-100h2019i018.csv)をダウンロードして、各国の重心の緯度経度を手作業で追加して本文書で用いるcsvファイル(trade.csv)を作成した。

日本は、金額ベースでは、アメリカ合衆国(179.3億円、シェア36%)、オーストラリア (93.2億円、シェア19%)、中華人民共和国 (55.4億円、シェア11%)、 ニュージーランド(25.1億円、シェア5%)、ドイツ(19.1億円、シェア4%)の5カ国から最も多く人工呼吸器等本体を輸入していた。

  • 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")
# 世界地図
library(rworldmap)
worldMap <- getMap()
  
plot(worldMap)

2 地理ファイルをデータに変換する

2.1 パッケージのインストール

- 以下のコードでパッケージsfをインストールする。インストール途中に、Consoleで「Do you want to proceed? [Y/n]」と聞かれたら、Consoleに「y」をキーボードで入力する。

install.packages("sf")

2.2 fortify()関数

  • ここで使うggplot2fortify()関数は、空間オブジェクトを、ggplot2で描画できるようにデータに変換する関数である。以下のページに簡単な解説がある。
  • Fortify method for map objects
  • fortify()関数は、変数として、緯度経度(long, lat)のほかに、groupとして国名を生成する。
# ggplot2で地図を描画したり、データ処理を行うため。
library(tidyverse)
#library(data.table)
#library(sf)

mapworld_df <- fortify(worldMap) 

head(mapworld_df)
##       long      lat order  hole piece          id         group
## 1 61.21082 35.65007     1 FALSE     1 Afghanistan Afghanistan.1
## 2 62.23065 35.27066     2 FALSE     1 Afghanistan Afghanistan.1
## 3 62.98466 35.40404     3 FALSE     1 Afghanistan Afghanistan.1
## 4 63.19354 35.85717     4 FALSE     1 Afghanistan Afghanistan.1
## 5 63.98290 36.00796     5 FALSE     1 Afghanistan Afghanistan.1
## 6 64.54648 36.31207     6 FALSE     1 Afghanistan Afghanistan.1

3 地図の描画

  • scale_colour_distillerで使える色:Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd

  • direction = 1で色が濃いいほど、貿易額が増えるように設定。

  • 貿易フローの形を直線にしたい場合は、geom_curve()の代わりにgeom_segment()を使う。

  • 南極などを除くために、coord_sf(xlim = c(-150, 150), ylim = c(80, -60), expand = TRUE)と設定。

  • color = import で、貿易額でフローの曲線の色を変えている。

  • linewidth = import/10で、貿易額でフローの曲線の幅を変えている。

  • geom_curveshow.legend = FALSEとすると、凡例を非表示にする。

# 地図作成
  ggplot() + 
    geom_polygon(data = mapworld_df, 
               aes(long, lat, group = group), 
                 fill = "white", colour = "grey50") +
    geom_curve(data = trade, 
               aes(x = longitude.x, y = latitude.x, 
                   xend = longitude.y, yend = latitude.y, 
                   color = import, linewidth = import/10),
                   #show.legend = FALSE,
                 arrow = arrow(length = unit(0.01, "npc"))) +
    scale_colour_distiller(palette = "Blues", direction = 1, 
               name="輸入額", guide = "colorbar") +
    scale_linewidth(name = "輸入額", guide = "legend") +
    coord_sf(xlim = c(-150, 150), ylim = c(80, -60), expand = TRUE) 

# 保存
ggsave("trade_flow_ggplot2.png", width = 8, height = 4, dpi = "print")

補論:財務省貿易統計の単位

なお、『財務省貿易統計』では1000円単位で貿易額が計上されている。2

例えば、アメリカからの輸入額は「17927956」とcsvファイルに記載されてある。この記載額を1000倍することで、1円単位に直せる。億円単位に直すには、100000で割れば良い。

# 1円単位に変換
17927956*1000
## [1] 17927956000
# 億円単位に変換(1)
17927956*(1000/100000000)
## [1] 179.2796
# 億円単位に変換(2)
17927956/100000
## [1] 179.2796

参考にしたサイト


  1. オゾン吸入器、酸素吸入器、エアゾール治療器、人工呼吸器その他の呼吸治療用機器↩︎

  2. 貿易統計の金額はどのような基準で計上されるのですか。運賃・保険料・関税額等が含まれますか。↩︎