Column

Області

Міста

Column

---
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() ```