China–United States Trade War by Figures

# Cào dữ liệu từ US Census Bureau và xử lí thô: 
rm(list = ls())
library(rvest)
library(tidyverse)
library(magrittr)
library(lubridate)


my_link <- "https://www.census.gov/foreign-trade/balance/c5700.html?fbclid=IwAR1Ow1t4V33vpLMsC8kI5gdzy11Wg-0iadbaWE33DhbOiRUatCWlrFqooW0"

my_link %>% 
  read_html() %>% 
  html_nodes("td") %>% 
  html_text() %>% 
  matrix(ncol = 4, byrow = TRUE) %>% 
  as.data.frame() -> df_import


names(df_import) <- c("month_year", "import", "export", "balance")


# Viết một số hàm phụ trợ: 

convert_to_num <- function(x) {
  x %>% 
    as.character() %>% 
    str_replace_all("[^0-9]", "") %>% 
    as.numeric() / 10 -> y
  
  return(y)
}


retain_cha <- function(x) {
  x %>% 
    as.character() %>% 
    str_replace_all("[0-9]", "") %>% 
    str_squish() %>% 
    return()
}


retain_num <- function(x) {
  x %>% 
    as.character() %>% 
    str_replace_all("[^0-9]", "") %>% 
    str_squish() %>% 
    as.numeric() %>% 
    return()
}


# Sử dụng các hàm ở trên: 

df_import %>% 
  mutate(thang = retain_cha(month_year), 
         nam = retain_num(month_year), 
         import = convert_to_num(import), 
         export = convert_to_num(export), 
         balance = import - export, 
         month_year = NULL) %>% 
  filter(thang != "TOTAL", nam != 2019) -> df_import

# Chỉ lấy ra một số năm: 
df_import_mini <- df_import %>% filter(nam %in% c(2000:2018))

n_thang <- nrow(df_import_mini)

my_ymd <- ymd("2000-01-01") + months(1:n_thang) - days(1)

df_ymd <- data.frame(yymmdd = my_ymd)

df_ymd %<>% 
  mutate(thang = month(yymmdd, label = TRUE, abbr = FALSE) %>% as.character(), 
         nam = year(yymmdd))

right_join(df_import, df_ymd, by = c("thang", "nam")) -> df_import_ymd



# Facts and Figures: 
library(highcharter)

highchart(type = "stock") %>% 
  hc_title(text = "US Trade with China from 2000 to 2018") %>% 
  hc_subtitle(text = "Note: All figures are in millions of U.S. dollars on a nominal basis.") %>% 
  hc_credits(enabled = TRUE,
             text = "Data Source: https://www.census.gov",  
             style = list(fontSize = "14px")) %>% 
  hc_tooltip(valueDecimals = 2) %>% 
  hc_add_series_times_values(df_import_ymd$yymmdd,
                             df_import_ymd$import,
                             name = "Exports to China") %>% 
  hc_add_series_times_values(df_import_ymd$yymmdd,
                             df_import_ymd$export,
                             name = "Import from China")  %>% 
  hc_add_theme(hc_theme_sandsignika())
LS0tDQp0aXRsZTogIkNoaW5h4oCTVW5pdGVkIFN0YXRlcyBUcmFkZSBXYXI6IEZhY3RzIGFuZCBGaWd1cmVzIiANCnN1YnRpdGxlOiAiUiBmb3IgUGxlYXN1cmUiDQphdXRob3I6ICJOZ3V5ZW4gQ2hpIER1bmciDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgIyBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiAiZmxhdGx5Ig0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCiMgQ2hpbmHigJNVbml0ZWQgU3RhdGVzIFRyYWRlIFdhciBieSBGaWd1cmVzDQoNCg0KYGBge3J9DQoNCiMgQ8OgbyBk4buvIGxp4buHdSB04burIFVTIENlbnN1cyBCdXJlYXUgdsOgIHjhu60gbMOtIHRow7Q6IA0Kcm0obGlzdCA9IGxzKCkpDQpsaWJyYXJ5KHJ2ZXN0KQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCg0KbXlfbGluayA8LSAiaHR0cHM6Ly93d3cuY2Vuc3VzLmdvdi9mb3JlaWduLXRyYWRlL2JhbGFuY2UvYzU3MDAuaHRtbD9mYmNsaWQ9SXdBUjFPdzF0NFYzM3ZwTE1zQzhrSTVnZHp5MTFXZy0waWFkYmFXRTMzRGhiT2lSVWF0Q1dsckZxb29XMCINCg0KbXlfbGluayAlPiUgDQogIHJlYWRfaHRtbCgpICU+JSANCiAgaHRtbF9ub2RlcygidGQiKSAlPiUgDQogIGh0bWxfdGV4dCgpICU+JSANCiAgbWF0cml4KG5jb2wgPSA0LCBieXJvdyA9IFRSVUUpICU+JSANCiAgYXMuZGF0YS5mcmFtZSgpIC0+IGRmX2ltcG9ydA0KDQoNCm5hbWVzKGRmX2ltcG9ydCkgPC0gYygibW9udGhfeWVhciIsICJpbXBvcnQiLCAiZXhwb3J0IiwgImJhbGFuY2UiKQ0KDQoNCiMgVmnhur90IG3hu5l0IHPhu5EgaMOgbSBwaOG7pSB0cuG7ozogDQoNCmNvbnZlcnRfdG9fbnVtIDwtIGZ1bmN0aW9uKHgpIHsNCiAgeCAlPiUgDQogICAgYXMuY2hhcmFjdGVyKCkgJT4lIA0KICAgIHN0cl9yZXBsYWNlX2FsbCgiW14wLTldIiwgIiIpICU+JSANCiAgICBhcy5udW1lcmljKCkgLyAxMCAtPiB5DQogIA0KICByZXR1cm4oeSkNCn0NCg0KDQpyZXRhaW5fY2hhIDwtIGZ1bmN0aW9uKHgpIHsNCiAgeCAlPiUgDQogICAgYXMuY2hhcmFjdGVyKCkgJT4lIA0KICAgIHN0cl9yZXBsYWNlX2FsbCgiWzAtOV0iLCAiIikgJT4lIA0KICAgIHN0cl9zcXVpc2goKSAlPiUgDQogICAgcmV0dXJuKCkNCn0NCg0KDQpyZXRhaW5fbnVtIDwtIGZ1bmN0aW9uKHgpIHsNCiAgeCAlPiUgDQogICAgYXMuY2hhcmFjdGVyKCkgJT4lIA0KICAgIHN0cl9yZXBsYWNlX2FsbCgiW14wLTldIiwgIiIpICU+JSANCiAgICBzdHJfc3F1aXNoKCkgJT4lIA0KICAgIGFzLm51bWVyaWMoKSAlPiUgDQogICAgcmV0dXJuKCkNCn0NCg0KDQojIFPhu60gZOG7pW5nIGPDoWMgaMOgbSDhu58gdHLDqm46IA0KDQpkZl9pbXBvcnQgJT4lIA0KICBtdXRhdGUodGhhbmcgPSByZXRhaW5fY2hhKG1vbnRoX3llYXIpLCANCiAgICAgICAgIG5hbSA9IHJldGFpbl9udW0obW9udGhfeWVhciksIA0KICAgICAgICAgaW1wb3J0ID0gY29udmVydF90b19udW0oaW1wb3J0KSwgDQogICAgICAgICBleHBvcnQgPSBjb252ZXJ0X3RvX251bShleHBvcnQpLCANCiAgICAgICAgIGJhbGFuY2UgPSBpbXBvcnQgLSBleHBvcnQsIA0KICAgICAgICAgbW9udGhfeWVhciA9IE5VTEwpICU+JSANCiAgZmlsdGVyKHRoYW5nICE9ICJUT1RBTCIsIG5hbSAhPSAyMDE5KSAtPiBkZl9pbXBvcnQNCg0KIyBDaOG7iSBs4bqleSByYSBt4buZdCBz4buRIG7Eg206IA0KZGZfaW1wb3J0X21pbmkgPC0gZGZfaW1wb3J0ICU+JSBmaWx0ZXIobmFtICVpbiUgYygyMDAwOjIwMTgpKQ0KDQpuX3RoYW5nIDwtIG5yb3coZGZfaW1wb3J0X21pbmkpDQoNCm15X3ltZCA8LSB5bWQoIjIwMDAtMDEtMDEiKSArIG1vbnRocygxOm5fdGhhbmcpIC0gZGF5cygxKQ0KDQpkZl95bWQgPC0gZGF0YS5mcmFtZSh5eW1tZGQgPSBteV95bWQpDQoNCmRmX3ltZCAlPD4lIA0KICBtdXRhdGUodGhhbmcgPSBtb250aCh5eW1tZGQsIGxhYmVsID0gVFJVRSwgYWJiciA9IEZBTFNFKSAlPiUgYXMuY2hhcmFjdGVyKCksIA0KICAgICAgICAgbmFtID0geWVhcih5eW1tZGQpKQ0KDQpyaWdodF9qb2luKGRmX2ltcG9ydCwgZGZfeW1kLCBieSA9IGMoInRoYW5nIiwgIm5hbSIpKSAtPiBkZl9pbXBvcnRfeW1kDQoNCg0KDQojIEZhY3RzIGFuZCBGaWd1cmVzOiANCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lIA0KICBoY190aXRsZSh0ZXh0ID0gIlVTIFRyYWRlIHdpdGggQ2hpbmEgZnJvbSAyMDAwIHRvIDIwMTgiKSAlPiUgDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiTm90ZTogQWxsIGZpZ3VyZXMgYXJlIGluIG1pbGxpb25zIG9mIFUuUy4gZG9sbGFycyBvbiBhIG5vbWluYWwgYmFzaXMuIikgJT4lIA0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICAgICAgIHRleHQgPSAiRGF0YSBTb3VyY2U6IGh0dHBzOi8vd3d3LmNlbnN1cy5nb3YiLCAgDQogICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjE0cHgiKSkgJT4lIA0KICBoY190b29sdGlwKHZhbHVlRGVjaW1hbHMgPSAyKSAlPiUgDQogIGhjX2FkZF9zZXJpZXNfdGltZXNfdmFsdWVzKGRmX2ltcG9ydF95bWQkeXltbWRkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9pbXBvcnRfeW1kJGltcG9ydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJFeHBvcnRzIHRvIENoaW5hIikgJT4lIA0KICBoY19hZGRfc2VyaWVzX3RpbWVzX3ZhbHVlcyhkZl9pbXBvcnRfeW1kJHl5bW1kZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfaW1wb3J0X3ltZCRleHBvcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiSW1wb3J0IGZyb20gQ2hpbmEiKSAgJT4lIA0KICBoY19hZGRfdGhlbWUoaGNfdGhlbWVfc2FuZHNpZ25pa2EoKSkNCg0KDQoNCmBgYA0KDQo=