恒星間ボトルメール

Interstellar Message in a Bottle

2021年末ATPランキング解析【②国籍編】

今回からは、ランキングデータを実際に解析していく。

前回の前処理編はこちら

emrdkn.hatenablog.com

カウントデータ作成

まず、前処理済みのcsvファイルに対して、以下のRスクリプトを実行し、各国の選手数のカウントデータを作成した。

library(tidyverse)
library(maps)
library(countrycode)

rank <- read.csv("atp_year_end_rank_2021_all_after.csv", header=TRUE)

cnt <- rank %>% 
  group_by(country) %>% 
  summarize(count = n()) %>% 
  arrange(-count)

以降で用いるパッケージmapscountrycodeもここで読み込んでいることに注意。

カウントデータ

FIELD1 country count
1 USA 203
2 FRA 167
3 ITA 160
4 GER 102
5 ARG 101
6 ESP 99
7 RUS 83
8 JPN 78
9 GBR 69
10 AUS 67
11 BRA 54
12 IND 49
13 CZE 46
14 NED 42
15 BEL 36
16 SRB 36
17 UKR 36
18 ROU 34
19 SUI 33
20 CHN 31
21 POL 31
22 POR 30
23 SWE 30
24 CAN 29
25 KOR 29
26 AUT 28
27 ISR 26
28 COL 25
29 SVK 23
30 CHI 20
31 CRO 20
32 BUL 19
33 TPE 18
34 MEX 15
35 RSA 15
36 TUR 15
37 GRE 14
38 HUN 14
39 BLR 13
40 KAZ 13
41 PER 13
42 LTU 12
43 SLO 12
44 THA 12
45 ECU 11
46 UZB 11
47 NZL 10
48 BIH 9
49 BOL 9
50 DEN 9
51 EST 9
52 MAR 9
53 TUN 9
54 DOM 7
55 EGY 7
56 FIN 7
57 GEO 6
58 LAT 6
59 ZIM 6
60 MKD 5
61 URU 5
62 IRL 4
63 MNE 4
64 NOR 4
65 ALG 3
66 BAH 3
67 CYP 3
68 HKG 3
69 KUW 3
70 LUX 3
71 MDA 3
72 MON 3
73 PAR 3
74 GHA 2
75 IRI 2
76 JOR 2
77 LIB 2
78 MAS 2
79 NGR 2
80 PHI 2
81 SGP 2
82 SYR 2
83 VEN 2
84 ANT 1
85 BAR 1
86 BDI 1
87 BEN 1
88 CIV 1
89 CRC 1
90 CUW 1
91 ESA 1
92 GUA 1
93 HAI 1
94 INA 1
95 JAM 1
96 KEN 1
97 MAD 1
98 NAM 1
99 NMI 1
100 PAK 1
101 QAT 1
102 SEN 1
103 SMR 1
104 TOG 1
105 VIE 1

国コードの変換(IOC to ISO3C)

上のカウントデータの国コードは、基本的にIOCのコードであった。

countrycodeパッケージを用いて、以下のコードを実行し、IOCをISO3Cのコードに変換した。

cnt <- cnt %>% 
  mutate(iso3c = countrycode(sourcevar = country, origin = "ioc", destination = "iso3c"))

ただし、カウントデータ中のCUW(キュラソー)、LIB(レバノン)、NMI(北マリアナ諸島)はうまく変換することができなかった。 これらの国は上の表中で太字で示している。

キュラソーレバノン北マリアナ諸島のISO3C国コードはそれぞれ、CUW、LBN、MNPである。そこでコード直書きで変換した。

cnt[cnt$country=="CUW", 3] = "CUW"
cnt[cnt$country=="LIB", 3] = "LBN"
cnt[cnt$country=="NMI", 3] = "MNP"

世界地図データの用意

mapsパッケージを用いて、世界地図データを用意する。

そして、世界地図データにおいて、国名をISO3C国コードに変換する。

ただ、16の国・地域(Ascension Island, Azores, Barbuda, Bonaire, Canary Islands, Chagos Archipelago, Grenadines, Heard Island, Kosovo, Madeira Islands, Micronesia, Saba, Saint Martin, Siachen Glacier, Sint Eustatius, Virgin Islands)で変換が失敗した。

これらの国・地域に2021年末の時点でATP選手はいないため、この問題は無視した。

world <- map_data("world")

world <- world %>% 
  mutate(iso3c = countrycode(sourcevar = region, origin = "country.name", destination = "iso3c"))

world[world$group==668, 7] <- "HKG"

ここで、ATPは香港を一つの地域として扱うが、世界地図データでは中国として扱われる。それゆえ、世界地図データのほうでも、香港に「HKG」のコードを与えた。

カウントデータと世界地図データのマージ

世界地図データに対して、ISO3Cの列をキーとして、カウントデータをleft_join()した。

joined <- left_join(world, cnt, by = "iso3c")

ここで、以下のコードを実行して、マージされたデータの中にしっかり105の国・地域の選手数の情報が含まれているかを確認した。

joined_countries <- joined %>% 
  filter(is.na(count) == FALSE) %>% 
  select(country) %>% 
  distinct()

joined_countries <- joined_countries[1:length(joined_countries$country), 1]

original_countries <- cnt$country

setequal(original_countries,joined_countries)

地図の描画

joined %>% 
  ggplot() +
  ggtitle("国別 ATP選手 人数") +
  geom_polygon(aes(x = long, y = lat, group = group, fill = count),
               colour = "black", size = 0.1) + 
  scale_fill_continuous(name = "count", low = "lightpink", high = "darkred")

地図

完成した地図はこちらである。

f:id:emrdkn:20211228201449p:plain
国別ATP選手数

人数の自然対数をとった地図はこちらである。

f:id:emrdkn:20211228203526p:plain
対数バージョン

まとめ

国コードをキーとして、世界地図データに注目データをマージして、地図を描いた。

人口あたりの選手数に関しても地図を描くことが今後の課題である。

参考ページ

shohei-doi.github.io


おまけ

キュラソーの選手はこちら

www.atptour.com

レバノンの選手はこちら

www.atptour.com

www.atptour.com

北マリアナ諸島の選手はこちら

www.atptour.com