---
title: "Наявне населення України"
output:
flexdashboard::flex_dashboard:
orientation: columns
theme: lumen
# vertical_layout: fill
source_code: embed
---
```{r setup, include=FALSE}
library(flexdashboard); library(dplyr); library(readr); library(readxl);
library(leaflet); library(plotly); library(ggplot2); library(magrittr);
library(forcats); library(tidyr); library(ggthemes);
# дані по населенню міст
popDataCityCoord <- readxl::read_excel(path = "data1.xlsx", sheet = "popCity")
# glimpse(popDataCityCoord)
# завантажуємо полігони для областей (кордони областей), завантажується за допомогою raster::getData()
dataPoliginForMap <- readr::read_rds(path = "GADM_2.8_UKR_adm1.rds")
# завантажуємо дані по к-сті населення областей по місяцях (держстат надає дані на перший день місяця, я замінив на останній, наприклад, 2017-02-01 --> 2017-01-31)
dataStatisticsForMap <- readxl::read_excel(path = "data1.xlsx",sheet = "popRegion") %>%
dplyr::mutate(dateForReport = as.Date(dateForReport))
controlDate <- max(dataStatisticsForMap$dateForReport)
# об"єнуємо полігони областей і дані по населенню (візьмемо кількості на 2017-01-31)
dataPoliginForMap@data %<>%
dplyr::left_join(filter(dataStatisticsForMap, dateForReport == controlDate), c("NAME_1" = "regionNameEng"))
# popupForMap <- paste0(
# "Область: ", dataPoliginForMap@data$regionNameUkr, "
",
# "Населення: ", dataPoliginForMap@data$population, "
",
# "Контрольна дата: ", controlDate
# )
colorForStatistics <- leaflet::colorQuantile(palette = "Greens", domain = NULL, n = 5)
# map <- leaflet() %>%
# addProviderTiles("CartoDB.Positron") %>%
# setView(lng = 30.940531, lat = 49.328890, zoom = 6) %>%
# addPolygons(
# data = dataPoliginForMap,
# # layerId = ~id,
# fillColor= ~colorForStatistics(population),
# fillOpacity = 0.4, weight = 0.5, color = "black",
# popup = popupForMap,
# # при наведенні на область - вона буде підсвічуватись
# highlight = highlightOptions(
# weight = 3,
# color = "#666",
# dashArray = "",
# fillOpacity = 0.7,
# bringToFront = TRUE)
#
# )
regionName <- dataPoliginForMap$regionNameUkr # Список регіонів
regionNameColor <- colorForStatistics(dataPoliginForMap$population) # кожному регіону присвоюємо колір в залежності від к-сті населення
# малюємо карту
map1 <- leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(lng = 30.940531, lat = 49.328890, zoom = 6)
# на кожному кроці додаємо по одній області, щоб потім можна було тицяти кнопочки
for (i in 1:length(regionName)) {
df <- dataPoliginForMap[dataPoliginForMap@data$regionNameUkr %in% regionName[i], ]
map1 <- map1 %>%
addPolygons(
data = df, fillOpacity = 0.4, weight = 0.5, color = "black", fillColor = regionNameColor[i],
group = regionName[i], # ВАЖЛИВО! треба вставити назву області, щоб кнопочки називались правильно
popup = paste0(
"Область: ", df@data$regionNameUkr, "
",
"Населення: ", df@data$population, "
",
"Контрольна дата: ", controlDate
),
highlight = highlightOptions(
weight = 3, color = "#666", dashArray = "", fillOpacity = 0.7, bringToFront = TRUE)
)
}
map1 <- map1 %>%
# додаємо кнопочки
addLayersControl(
overlayGroups = regionName, options = layersControlOptions(collapsed = FALSE)
)
```
Column {data-width=650 .tabset}
-----------------------------------------------------------------------
### Області
```{r}
# map
map1
```
### Міста
```{r}
popColorForCity <- colorFactor(palette = c("#4682B4", "#82B446"), domain = c("місто", "смт"))
mapCity <- leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(lng = 30.940531, lat = 49.328890, zoom = 6) %>%
# addPolygons(
# data = dataForPlotPopulation(), weight = 1, fillColor = "grey", color = "black", fill = F
# ) %>%
addCircleMarkers(
lng = popDataCityCoord$lon,
lat = popDataCityCoord$lat,
radius = popDataCityCoord$population/100000,
color = popColorForCity(popDataCityCoord$typeOfCityName),
fillColor = popColorForCity(popDataCityCoord$typeOfCityName),
weight = 1.5, opacity = 0.5,
popup = paste0(
"", popDataCityCoord$typeOfCityName, ": ", popDataCityCoord$cityName, "
",
"населення: ", popDataCityCoord$population, "
"
)
)
mapCity
```
Column {data-width=350}
-----------------------------------------------------------------------
###
```{r, fig.width=8}
# Гістограмка
# glimpse(dataStatisticsForMap)
dataStatisticsForMap %>%
dplyr::filter(dateForReport == "2017-01-31") %>%
tidyr::drop_na(population) %>%
ggplot(aes(x = fct_reorder(regionNameUkr, population), y = round(population / 1000, 1))) +
# geom_bar(stat = "identity") +
geom_point(col = "tomato2", size = 4) +
geom_segment(aes(
x = fct_reorder(regionNameUkr, population),
xend = fct_reorder(regionNameUkr, population),
y = min(round(population / 1000, 1)),
yend = max(round(population / 1000, 1))
), linetype = "dashed", size = 0.1, col = "grey80") +
labs(x = "", y = "К-сть населення, тис. осіб") +
coord_flip() +
# ggthemes::theme_solarized()
theme_classic()
```
###
```{r, fig.width=8}
# Динаміка України
dfPlot <- dataStatisticsForMap %>%
dplyr::filter(regionNameUkr == "Україна") %>%
tidyr::drop_na(population) %>%
dplyr::arrange(dateForReport) %>%
dplyr::mutate(population = round(population / 1000, 1))
# для червоненьких точок
dfPlot2 <- dfPlot %>%
filter(dateForReport %in% range(dateForReport))
breaksX <- dfPlot$dateForReport[seq(1, nrow(dfPlot), 12)]
labelX <- lubridate::year(breaksX)
ggplot(data = dfPlot, aes(x = dateForReport, y = population)) +
geom_line() +
# geom_point(alpha = 0.7) +
geom_point(data=dfPlot2, aes(x = dateForReport, y = population, label = population),
size = 4, col = "tomato2") +
geom_text(data=dfPlot2, aes(x = dateForReport, y = population, label = population), hjust=0.3, vjust=-0.7) +
scale_x_date(breaks = breaksX, labels = labelX) +
labs(title = unique(dfPlot$regionNameUkr), x = "", y = "К-сть населення, тис. осіб", subtitle = "Місячні дані") +
theme_minimal()
```