---
title: "Vital records of Ukraine (for the first half of 2022)"
date: "9/26/2022"
output:
flexdashboard::flex_dashboard:
theme: paper
source_code: embed
---
```{r}
packages <- c("tidyverse", "flexdashboard",
"crosstalk", "leaflet", "DT","httr","readxl","dplyr","stringr","rgdal","RColorBrewer","htmltools","geojsonio","sf")
if (length(setdiff(packages, rownames(installed.packages()))) > 0) {
install.packages(setdiff(packages, rownames(installed.packages())), repos = "http://cran.us.r-project.org")
}
library(geojsonio)
library(tidyverse)
library(flexdashboard)
library(crosstalk)
library(leaflet)
library(DT)
library(httr)
library(readxl)
library(dplyr)
library("stringr")
library(rgdal)
library(RColorBrewer)
library(htmltools)
library(sf)
library(tigris)
```
```{r echo=FALSE,message=FALSE,warning=FALSE, include=FALSE}
#load and save data 2022
url = 'https://minjust.gov.ua/files/general/2022/08/19/20220819103738-19.xlsx'
httr::GET(url, write_disk(tf <- tempfile(fileext = "2022.xlsx")))
df_2022 <- read_excel(tf,1L,skip=2)
df_all <-df_2022 %>%select(2,4:7,9)%>%
slice(-(1:3),-(31:34))%>%
dplyr::rename(Region=1,
Birth=2,
Deaths=3,
Marriage=4,
Divorce=5,
`Change name`=6)
df_all$Divorce <-as.numeric(df_all$Divorce)
#pivot longer
df_all<-pivot_longer(df_all,cols=2:6,names_to="Vital record",values_to="Number of records")
df_all$Region <- print(str_replace_all(df_all$Region, "[[*]]", ""))
#delete special characters
Region_EN<-c("Kherson Oblast",
"Volyn Oblast",
"Rivne Oblast",
"Zhytomyr Oblast",
"Kyiv Oblast",
"Chernihiv Oblast",
"Sumy Oblast",
"Kharkiv Oblast",
"Luhansk Oblast",
"Donetsk Oblast",
"Zaporizhia Oblast",
"Lviv Oblast",
"Ivano-Frankivsk Oblast",
"Zakarpattia Oblast",
"Ternopil Oblast",
"Chernivtsi Oblast",
"Odessa Oblast",
"Mykolaiv Oblast",
"Autonomous Republic of Crimea",
"Vinnytsia Oblast",
"Khmelnytskyi Oblast",
"Cherkasy Oblast",
"Poltava Oblast",
"Dnipropetrovsk Oblast",
"Kirovohrad Oblast",
"Kyiv",
"Sevastopol")
Region_UA<-c("Херсонська",
"Волинська",
"Рівненська",
"Житомирська",
"Київська",
"Чернігівська",
"Сумська",
"Харківська",
"Луганська",
"Донецька",
"Запорізька",
"Львівська",
"Івано-Франківська",
"Закарпатська",
"Тернопільська",
"Чернівецька",
"Одеська",
"Миколаївська",
"Автономна Республіка Крим",
"Вінницька",
"Хмельницька",
"Черкаська",
"Полтавська",
"Дніпропетровська",
"Кіровоградська",
"м.Київ",
"м. Севастополь")
Region_trans<-data.frame(Region_EN,Region_UA)
df_all2<-dplyr::left_join(df_all,Region_trans,by=c("Region"="Region_UA"))
#load and unzip geo data of Ukraine
geojson_path <- 'https://github.com/wmgeolab/geoBoundaries/raw/6b002b1eee2fd9599f1a3af8fe076d694e6decee/releaseData/gbOpen/UKR/ADM1/geoBoundaries-UKR-ADM1_simplified.geojson'
# Read GeoJSON, convert to sf class, add random data as values
Ukraine_geo <- geojson_read(x = geojson_path, what = "sp") %>%
st_as_sf(Ukraine_geo_geojson)
Ukraine_geo<-geo_join(Ukraine_geo,df_all2,"shapeName","Region_EN",how ="left")%>%
rename("Region (Eng)"="shapeName",
"Region (Ua)"="Region")%>%
select(c(1,7:9))
View(Ukraine_geo$`Vital record`)
Ukr<- SharedData$new(Ukraine_geo)
```
Vital records {data-icon="ion-stats-bars"}
=====================================
Column {data-width=200}
-------------------------------------
### **Vital records are records of life events kept under governmental authority, including birth certificates, marriage licenses, separation agreements, divorce and death certificates.**
```{r filter_section}
filter_select(
id = "Region",
label = "Region",
sharedData = Ukr,
group = ~`Region (Eng)`
)
bscols(
filter_checkbox(
id = "Vital record",
label = "Vital record",
sharedData = Ukr,
group = ~`Vital record`
)
)
bscols(
filter_slider(
id = "Number of records",
label = "Number of records",
sharedData = Ukr,
column = ~`Number of records`,
step = 500,
round = FALSE,
sep = "",
ticks = FALSE
)
)
```
Column {data-width=500}
-------------------------------------
### Vital records by regions of Ukraine
```{r interactive_map}
labels<-
pal<-colorBin(palette="BuPu",domain = Ukraine_geo$`Number of records`, bins = 5)
Ukr%>%leaflet()%>%
addProviderTiles(providers$CartoDB.Positron)%>%
setView(lat =49.00000,lng=30.5238,zoom=6)%>% addPolygons( color="#9e8181",weight=1,
fillColor = ~ pal(`Number of records`),
fillOpacity = 0.8,
highlight= highlightOptions(
weight = 5,
color = "#666666",
fillOpacity = 0.7,
bringToFront = TRUE),
label = lapply(paste('<p>',Ukraine_geo$`Region (Eng)`, '</p>',
'<p>',"Number of records: ",
Ukraine_geo$`Number of records`, '</p>'),HTML)
)%>%
addLegend(pal=pal,
values=Ukraine_geo$`Number of records`,
position="bottomright",
title = "Number of vital records",
opacity = 1)
```
Column {data-width=300}
-------------------------------------
### Table
```{r filterable_table}
datatable(Ukr, options = list(
pageLength = 25,
selection="multiple"))
```