С помощью «knitr» создать html-отчёт с короткими пояснениями к данным и с двумя картами: 1. Карта-хороплет регионов РФ, входящих в состав федерального округа, указанного в варианте, построенная функцией spplot() по данным сборников “Регионы России” за последний доступный год 16. 2. Такая же карта но со статистикой за 2010 год, построенная функцией ggplot().
В отчёт включить код загрузки данных. Данные можно предварительно подготовить для отображения и сохранить в .csv файле в репозитории на github. Данные по регионам можно загрузить в R напрямую с Росстата функцией из репозитория: https://github.com/nillsondg/r_gks_stat_data. Разместить отчёт на RPubs, его код – на github, и отправить ссылки на них на почту s.aksuk@kiber-guu.ru.
Южный федеральный округ, любой показатель из раздела «Население».
Состав ЮФО: Республика Адыгея, Астраханская область, Волгоградская область, Республика Калмыкия, Краснодарский край, Ростовская область, Республика Крым, г. Севастополь.
library('R.utils') # gunzip() для распаковки архивов
library('sp') # функция spplot()
library('ggplot2') # функция ggplot()
library('RColorBrewer') # цветовые палитры
require('rgdal') # функция readOGR()
library('broom') # функция tidy()
require('dplyr') # функция join()
library('scales') # функция pretty_breaks()
library('mapproj') # проекции для карт
library('gpclib')
library('maptools')
library('sf')
# разрешить использовать полигональную геометрию, которая защищена лицензией
gpclibPermit()
## [1] TRUE
# административная карта Российской федерации
# источник данных: https://mydata.biz/
# загрузка архив
file.URL <- 'https://mydata.biz/storage/download/6edf5ac83a494c05afa7f7cf9399780f/%D0%90%D0%B4%D0%BC-%D1%82%D0%B5%D1%80%D1%80%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B%20%D0%A0%D0%A4%20%D0%B2%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B5%20SHP.zip'
if (!file.exists('RUS_shp.zip')) download.file(file.URL, destfile = 'RUS_shp.zip',
mode = 'wb', cacheOK = FALSE)
# распаковка
if (!file.exists('./admin_level_4.shp')) unzip('RUS_shp.zip', overwrite = T)
# чтение данных уровня 4
Regions <- readOGR('./admin_level_4.shp')
## OGR data source with driver: ESRI Shapefile
## Source: "A:\R_8\Sasha\Practice_4\admin_level_4.shp", layer: "admin_level_4"
## with 88 features
## It has 193 fields
# имена слотов
slotNames(Regions)
## [1] "data" "polygons" "plotOrder" "bbox" "proj4string"
# картограмма России, на которой каждая область залита своим цветом
# делаем фактор из имён областей (т.е. нумеруем их)
Regions@data$name_ru <- as.factor(Regions@data$name_ru)
Regions@data$name_ru
## [1] Сумска
## [2] Камчатский край
## [3] Мурманская область
## [4] Пермский край
## [5] Свердловская область
## [6] Вологодская область
## [7] Владимирская область
## [8] Калининградская область
## [9] Челябинская область
## [10] Новгородская область
## [11] Республика Крым
## [12] Севастополь
## [13] Севастополь
## [14] Автономная Республика Крым
## [15] Ингушетия
## [16] Тверская область
## [17] Сахалинская область
## [18] Калужская область
## [19] Самарская область
## [20] Ивановская область
## [21] Орловская область
## [22] Смоленская область
## [23] Тульская область
## [24] Чукотский автономный округ
## [25] Томская область
## [26] Приморский край
## [27] Республика Карелия
## [28] Архангельская область
## [29] Мордовия
## [30] Ульяновская область
## [31] Волгоградская область
## [32] Астраханская область
## [33] Курская область
## [34] Воронежская область
## [35] Ярославская область
## [36] Новосибирская область
## [37] Ненецкий автономный округ
## [38] Республика Коми
## [39] Омская область
## [40] Башкортостан
## [41] Оренбургская область
## [42] Еврейская автономная область
## [43] Удмуртия
## [44] Татарстан
## [45] Калмыкия
## [46] Санкт-Петербург
## [47] Нижегородская область
## [48] Ленинградская область
## [49] Кировская область
## [50] Костромская область
## [51] Брянская область
## [52] Псковская область
## [53] Саратовская область
## [54] Пензенская область
## [55] Липецкая область
## [56] Амурская область
## [57] Северная Осетия - Алания
## [58] Дагестан
## [59] Чечня
## [60] Хабаровский край
## [61] Магаданская область
## [62] Ямало-Ненецкий автономный округ
## [63] Ханты-Мансийский автономный округ - Югра
## [64] Московская область
## [65] Москва
## [66] Ставропольский край
## [67] Ростовская область
## [68] Краснодарский край
## [69] Адыгея
## [70] Тамбовская область
## [71] Рязанская область
## [72] Кемеровская область
## [73] Республика Хакасия
## [74] Алтайский край
## [75] Республика Алтай
## [76] Забайкальский край
## [77] Марий Эл
## [78] Чувашия
## [79] Белгородская область
## [80] Республика Саха (Якутия)
## [81] Курганская область
## [82] Тюменская область
## [83] Тыва
## [84] Красноярский край
## [85] Бурятия
## [86] Иркутская область
## [87] Кабардино-Балкария
## [88] Карачаево-Черкесия
## 87 Levels: Автономная Республика Крым Адыгея ... Ярославская область
# отбор регионов, входящих в ЮФО
SFO <- c("Адыгея", "Калмыкия", "Республика Крым", "Краснодарский край", "Волгоградская область", "Астраханская область", "Ростовская область", "Севастополь")
Regions <- Regions[Regions@data$name_ru %in% SFO, ]
# убираем дубликат по г. Севастополь
Regions <- Regions[!duplicated(Regions@data$name_ru),]
# загрузка функции для выгрузки данных с Росстата
GKS <- source("https://raw.githubusercontent.com/nillsondg/r_gks_stat_data/master/gks.R")
# загрузка данных по численности населения
file.URL <- 'https://gks.ru/bgd/regl/b20_14p/IssWWW.exe/Stg/d01/02-01.docx'
download.file(file.URL, destfile = '02-01.docx',
mode = 'wb', cacheOK = FALSE)
dataGKS <- getTableFromDoc("./02-01.docx")
# оставляем только регионы, входящие в ЮФО
dataGKS <- dataGKS[[1]]
dataGKS_SFO <- dataGKS[36:43,]
# оставляем данные только за 2010 и 2019 гг.
dataGKS_SFO <- dataGKS_SFO[,c(1,3,12)]
# присваивание названий регионов, соответствующих названиям в переменной ru_name
dataGKS_SFO[,1] <- c("Адыгея", "Калмыкия", "Республика Крым", "Краснодарский край", "Волгоградская область", "Астраханская область", "Ростовская область", "Севастополь")
# так как до 2014 г. Республика Крым и г. Севастополь входили в состав Украины, то
# для построения карты за 2010 г. уберем их из рассмотрения
dataGKS_SFO2010 <- dataGKS_SFO[-c(3, 8), -3]
dataGKS_SFO2010[, 2] <- as.numeric(dataGKS_SFO2010[, 2])
dataGKS_SFO2019 <- dataGKS_SFO[, -2]
dataGKS_SFO2019[, 2] <- as.numeric(dataGKS_SFO2019[, 2])
# имена столбцов
colnames(dataGKS_SFO2010) <- c("name", "populationSFO")
colnames(dataGKS_SFO2019) <- c("name", "populationSFO")
# полученные фреймы по численности за 2010 и 2019 гг.
dataGKS_SFO2010
## name populationSFO
## 36 Адыгея 440
## 37 Калмыкия 289
## 39 Краснодарский край 5230
## 40 Волгоградская область 1010
## 41 Астраханская область 2607
## 42 Ростовская область 4275
dataGKS_SFO2019
## name populationSFO
## 36 Адыгея 463
## 37 Калмыкия 271
## 38 Республика Крым 1912
## 39 Краснодарский край 5676
## 40 Волгоградская область 1006
## 41 Астраханская область 2491
## 42 Ростовская область 4198
## 43 Севастополь 449
# присоединяем таблицу с данными по численности населения
Regions@data <- merge(Regions@data, dataGKS_SFO2019,
by.x = 'name_ru', by.y = "name", all.x = F, sort = F)
# задаём палитру
mypalette <- colorRampPalette(c('#fff7f3', 'purple'))
# построение карты
spplot(Regions, 'populationSFO',
col.regions = mypalette(20), # определение цветовой шкалы
col = 'dark grey', # цвет контурных линий на карте
main = 'Численность населения по региона ЮФО за 2019 г., в тыс. чел.',
panel = function(x, y, z, subscripts, ...){
panel.polygonsplot(x, y, z, subscripts, ...)
sp.text(coordinates(Regions),
Regions$name[subscripts],
cex = 0.75)
})
# прочитать данные уровня 4
Regions <- readOGR("./admin_level_4.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "A:\R_8\Sasha\Practice_4\admin_level_4.shp", layer: "admin_level_4"
## with 88 features
## It has 193 fields
# отбор регионов, входящих в ЮФО (без Крыма и Севастополя)
SFO <- c("Адыгея", "Калмыкия", "Краснодарский край", "Волгоградская область", "Астраханская область", "Ростовская область")
Regions <- Regions[Regions@data$name_ru %in% SFO, ]
# создаём столбец-ключ id для связи с другими таблицами
# (названия регионов из столбца name_ru)
Regions@data$id <- Regions@data$name_ru
# преобразовать SpatialPolygonsDataFrame в data.frame
Regions.points <- fortify(Regions, region = 'id')
# добавить к координатам сведения о регионах
Regions.df <- merge(Regions.points, Regions@data, by = 'id')
# добавляем к координатам значения показателя для заливки
dataGKS_SFO2010$id <- dataGKS_SFO2010$name
Regions.df <- merge(Regions.df, dataGKS_SFO2010[, c('id','populationSFO')])
Regions.df$populationSFO <- as.numeric(Regions.df$populationSFO)
# координаты центров полигонов (для подписей регионов)
centroids.df <- as.data.frame(coordinates(Regions))
centroids.df$id <- Regions@data$id
colnames(centroids.df) <- c('long', 'lat', 'id')
# создаём график
gp <- ggplot() +
geom_polygon(data =subset(Regions.df, !id %in% c("Адыгея")), aes(long, lat, group = group,
fill = populationSFO)) +
geom_polygon(data =subset(Regions.df, id %in% c("Адыгея")), aes(long, lat, group = group,
fill = populationSFO)) +
geom_path(data = Regions.df, aes(long, lat, group = group),
color = 'dark Grey') +
coord_map(projection = 'gilbert') +
scale_fill_distiller(palette = 4,
direction = 1,
breaks = pretty_breaks(n = 5)) +
labs(x = 'Долгота', y = 'Широта',
title = "Численность населения по региона ЮФО за 2010 г., в тыс. чел.") +
geom_text(data = centroids.df,
aes(long, lat, label = id))
# выводим график
gp