Аналитический пакет R

Создание статических картограмм

С помощью «knitr» создать html-отчёт с короткими пояснениями к данным и с двумя картами: 1. Карта-хороплет регионов РФ, входящих в состав федерального округа, указанного в варианте, построенная функцией spplot() по данным сборников “Регионы России” за последний доступный год 16. 2. Такая же карта но со статистикой за 2010 год, построенная функцией ggplot().

В отчёт включить код загрузки данных. Данные можно предварительно подготовить для отображения и сохранить в .csv файле в репозитории на github. Данные по регионам можно загрузить в R напрямую с Росстата функцией из репозитория: https://github.com/nillsondg/r_gks_stat_data. Разместить отчёт на RPubs, его код – на github, и отправить ссылки на них на почту .

Вариант-13

Южный федеральный округ, любой показатель из раздела «Население».

Состав ЮФО: Республика Адыгея, Астраханская область, Волгоградская область, Республика Калмыкия, Краснодарский край, Ростовская область, Республика Крым, г. Севастополь.

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

Загрузка файла с адм-территориальными границами РФ в формате shp и отбор регионов, входящих в ЮФО

# административная карта Российской федерации
# источник данных: 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

Построение карты по численности населения для регионов ЮФО за последний доступный год (2019) при помощи spplot

# присоединяем таблицу с данными по численности населения
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)
       })

Построение карты по численности населения для регионов ЮФО за 2010 г. при помощи ggplot2

# прочитать данные уровня 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