Розпарсити сайт Мінфіна і зібрати зарплати по областях:
library(dplyr)
library(tidyr)
library(lubridate)
library(rvest)
library(plotly)
page_link <- "http://index.minfin.com.ua/index/average/?"
# будемо збирати за ці роки, бо більш на сайті немає здаєтсья
year_list <- 2010:2017
Запускаємо цикл по роках
all_salary <- purrr::map_df(
.x = year_list,
.f = ~{
page_link_ <- paste0(page_link, .x)
page_data <- page_link_ %>%
xml2::read_html() %>%
rvest::html_nodes("table.line") %>%
rvest::html_table()
result <- dplyr::bind_rows(
page_data[[1]] %>%
dplyr::rename_all(dplyr::funs(c("region_name", 1:6, "delete"))) %>%
dplyr::select(-delete) %>%
dplyr::slice(-1) %>%
tidyr::gather(
key = date_for_report_month,
value = salary,
-region_name
) %>%
dplyr::mutate(
salary = as.numeric(salary),
date_for_report_year = .x,
date_for_report = lubridate::ymd(
paste(date_for_report_year, date_for_report_month, "01")
)
)
,
page_data[[2]] %>%
dplyr::rename_all(dplyr::funs(c("region_name", 7:12, "delete"))) %>%
dplyr::select(-delete) %>%
dplyr::slice(-1) %>%
tidyr::gather(
key = date_for_report_month,
value = salary,
-region_name
) %>%
dplyr::mutate(
salary = as.numeric(salary),
date_for_report_year = .x,
date_for_report = lubridate::ymd(
paste(date_for_report_year, date_for_report_month, "01")
)
)
) %>%
dplyr::arrange(region_name, date_for_report)
return(result)
}
)
all_salary
## # A tibble: 2,616 x 5
## region_name date_for_report_month salary date_for_report_year
## <chr> <chr> <dbl> <int>
## 1 Винницкая 1 1501 2010
## 2 Винницкая 2 1531 2010
## 3 Винницкая 3 1594 2010
## 4 Винницкая 4 1631 2010
## 5 Винницкая 5 1753 2010
## 6 Винницкая 6 1915 2010
## 7 Винницкая 7 1911 2010
## 8 Винницкая 8 1828 2010
## 9 Винницкая 9 1942 2010
## 10 Винницкая 10 1881 2010
## # ... with 2,606 more rows, and 1 more variables: date_for_report <date>
Побудуємо графік по Тернопільській області:
all_salary %>%
dplyr::arrange(region_name, date_for_report) %>%
tidyr::drop_na() %>%
dplyr::filter(region_name == "Тернопольская") %>%
plotly::plot_ly() %>%
plotly::add_lines(x = ~date_for_report, y = ~salary)
Побудуємо графік по Україні:
all_salary %>%
dplyr::arrange(region_name, date_for_report) %>%
tidyr::drop_na() %>%
dplyr::filter(region_name == "Украина") %>%
plotly::plot_ly() %>%
plotly::add_lines(x = ~date_for_report, y = ~salary)