위키백과사전에서 List of countries by credit rating 데이터를 다운로드 받는다.
Standard & Poor’s (S&P)에서는 BBB-
이상이 투자등급, BB+
이하는 투기등급으로 정의한다.
library(tidyverse)
library(rvest)
library(janitor)
rating_url <- "https://en.wikipedia.org/wiki/List_of_countries_by_credit_rating"
snp_dat <- rating_url %>%
read_html() %>%
html_node(xpath='//*[@id="mw-content-text"]/div/table[1]') %>%
html_table() %>%
tbl_df
snp_df <- snp_dat %>%
clean_names() %>%
rename(country = country_region) %>%
separate(rating, into=c("tmp", "rating"), sep=" ") %>%
select(country, date, outlook, rating) %>%
mutate(date = lubridate::ymd(date)) %>%
mutate(rating = factor(rating, levels = c("AAA","AA+","AA","AA-","A+","A","A-","BBB+","BBB","BBB-","BB+","BB","BB-","B+","B","B-","CCC+","D","SD")))
snp_df %>%
DT::datatable()
앞서 신용등급변수(rating
)을 요인(factor) 변수로 변환시켰기 때문에 가장 높은 등급부터 가장 낮은 등급까지 자연스럽게 rating
등급표를 쉽게 작성할 수 있따.
# A tibble: 19 x 2
rating n
<fct> <int>
1 AAA 11
2 AA+ 4
3 AA 8
4 AA- 7
5 A+ 7
6 A 3
7 A- 9
8 BBB+ 6
9 BBB 6
10 BBB- 11
11 BB+ 5
12 BB 4
13 BB- 9
14 B+ 13
15 B 13
16 B- 12
17 CCC+ 1
18 D 1
19 SD 1
피치 (Fitch)에서는 BBB-
이상이 투자등급, BB+
이하는 투기등급으로 정의한다.
fitch_dat <- rating_url %>%
read_html() %>%
html_node(xpath='//*[@id="mw-content-text"]/div/table[2]') %>%
html_table() %>%
tbl_df
fitch_df <- fitch_dat %>%
clean_names() %>%
rename(country = country_region) %>%
mutate(rating = str_remove_all(rating, "[0-9]")) %>%
select(country, date, outlook, rating) %>%
mutate(date = lubridate::ymd(date)) %>%
mutate(rating = factor(rating, levels = c("AAA","AA+","AA","AA-","A+","A","A-","BBB+","BBB","BBB-","BB+","BB","BB-","B+","B","B-","CCC+","D","SD")))
fitch_df %>%
DT::datatable()
앞서 신용등급변수(rating
)을 요인(factor) 변수로 변환시켰기 때문에 가장 높은 등급부터 가장 낮은 등급까지 자연스럽게 rating
등급표를 쉽게 작성할 수 있따.
# A tibble: 17 x 2
rating n
<fct> <int>
1 AAA 11
2 AA+ 4
3 AA 7
4 AA- 3
5 A+ 7
6 A 3
7 A- 6
8 BBB+ 3
9 BBB 9
10 BBB- 9
11 BB+ 5
12 BB 4
13 BB- 13
14 B+ 7
15 B 11
16 B- 4
17 <NA> 3
Dagong은 2018년 China Securities Regulatory Commission (CSRC)에 의해서 영업정지된 것으로 나타난다.
dagong_dat <- rating_url %>%
read_html() %>%
html_node(xpath='//*[@id="mw-content-text"]/div/table[7]') %>%
html_table() %>%
tbl_df
dagong_df <- dagong_dat %>%
clean_names() %>%
mutate(rating = str_remove_all(rating, "[0-9]")) %>%
select(country, date, outlook, rating) %>%
mutate(date = if_else(str_length(date) <=8, parse_date(date, "%Y-%m"), lubridate::ymd(date))) %>%
mutate(rating = factor(rating, levels = c("AAA","AA+","AA","AA-","A+","A","A-","BBB+","BBB","BBB-","BB+","BB","BB-","B+","B","B-","CCC+","D","SD")))
dagong_df %>%
DT::datatable()
앞서 신용등급변수(rating
)을 요인(factor) 변수로 변환시켰기 때문에 가장 높은 등급부터 가장 낮은 등급까지 자연스럽게 rating
등급표를 쉽게 작성할 수 있따.
# A tibble: 18 x 2
rating n
<fct> <int>
1 AAA 6
2 AA+ 9
3 AA 3
4 AA- 6
5 A+ 6
6 A 3
7 A- 7
8 BBB+ 6
9 BBB 8
10 BBB- 8
11 BB+ 4
12 BB 3
13 BB- 9
14 B+ 2
15 B 5
16 B- 3
17 D 1
18 <NA> 10
S&P, 무디스, Dagong 신용평가사 국가신용등급을 취합한다.
snp_comp_df <- snp_df %>%
mutate(agency="S&P") %>%
rename(snp = rating) %>%
select(country, snp)
fitch_comp_df <- fitch_df %>%
mutate(agency="Fitch") %>%
rename(fitch = rating) %>%
select(country, fitch)
dagong_comp_df <- dagong_df %>%
mutate(agency="Dagong") %>%
rename(dagong = rating) %>%
select(country, dagong)
rating_dat <- full_join(snp_comp_df, fitch_comp_df) %>%
full_join(dagong_comp_df)
rating_dat %>%
DT::datatable()
앞서 신용등급변수(rating
)을 요인(factor) 변수로 변환시켰기 때문에 가장 높은 등급부터 가장 낮은 등급까지 자연스럽게 rating
등급표를 쉽게 작성할 수 있다.
rating_df <- rating_dat %>%
filter(complete.cases(.))
rating_df %>%
gather(agency, rating, -country) %>%
count(rating, agency) %>%
mutate(rating = factor(rating, levels = c("AAA","AA+","AA","AA-","A+","A","A-","BBB+","BBB","BBB-","BB+","BB","BB-","B+","B","B-","CCC+","D"))) %>%
spread(agency, n)
# A tibble: 17 x 4
rating dagong fitch snp
<fct> <int> <int> <int>
1 AAA 6 11 10
2 AA+ 8 3 4
3 AA 3 6 6
4 AA- 3 3 4
5 A+ 6 6 4
6 A 2 2 2
7 A- 7 5 6
8 BBB+ 4 3 3
9 BBB 6 9 5
10 BBB- 7 5 8
11 BB+ 3 2 2
12 BB 2 3 2
13 BB- 7 5 5
14 B+ 2 5 3
15 B 3 3 4
16 B- 2 1 4
17 D 1 NA NA
신용등급별로 신용평가사 평가한 국가별 빈도를 막대그래프로 시각화한다.
library(extrafont)
loadfonts()
rating_df %>%
gather(agency, rating, -country) %>%
count(rating, agency) %>%
mutate(rating = factor(rating, levels = c("AAA","AA+","AA","AA-","A+","A","A-","BBB+","BBB","BBB-","BB+","BB","BB-","B+","B","B-","CCC+","D"))) %>%
ggplot(aes(x=fct_rev(rating), y=n, fill=agency)) +
geom_col(position="dodge") +
labs(x="", y="국가수", fill="신용평가사", title="신용평가사가 평가한 국가별 신용등급 분포") +
theme(legend.position = "top") +
theme_minimal(base_family = "NanumGothic") +
geom_vline(xintercept = 7.5, color="red", linetype="dashed") +
coord_flip() +
scale_fill_manual(values = c("blue", "red", "green"))