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

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

Показатель: “кризисный индекс качества жизни”.

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

# загрузка пакетов
# library('R.utils')               # gunzip() для распаковки архивов 
library('sp')                    # функция spplot()
library('ggplot2')               # функция ggplot()
library('RColorBrewer')          # цветовые палитры
require('rgdal')                 # функция readOGR()
## Loading required package: rgdal
## Warning: package 'rgdal' was built under R version 3.6.3
## rgdal: version: 1.4-8, (SVN revision 845)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20
##  Path to GDAL shared files: C:/Users/Admin/Documents/R/win-library/3.6/rgdal/gdal
##  GDAL binary built with GEOS: TRUE 
##  Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
##  Path to PROJ.4 shared files: C:/Users/Admin/Documents/R/win-library/3.6/rgdal/proj
##  Linking to sp version: 1.4-1
library('broom')                 # функция tidy()
## Warning: package 'broom' was built under R version 3.6.3
require('dplyr')                 # функция join()
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library('scales')                # функция pretty_breaks()
library('mapproj')               # проекции для карт
## Warning: package 'mapproj' was built under R version 3.6.3
## Loading required package: maps
## Warning: package 'maps' was built under R version 3.6.3
## установка и сборка пакета «gpclib»
## установить RTools (recommended) отсюда:
## http://cran.r-project.org/bin/windows/Rtools/
# install.packages('gpclib', type = 'source')
library('gpclib')
## General Polygon Clipper Library for R (version 1.5-6)
##  Type 'class ? gpc.poly' for help
library('maptools')
## Warning: package 'maptools' was built under R version 3.6.3
## Checking rgeos availability: FALSE
##      Note: when rgeos is not available, polygon geometry     computations in maptools depend on gpclib,
##      which has a restricted licence. It is disabled by default;
##      to enable gpclib, type gpclibPermit()
# разрешить использовать полигональную геометрию, которая защищена лицензией 
gpclibPermit()
## Warning in gpclibPermit(): support for gpclib will be withdrawn from maptools at
## the next major release
## [1] TRUE
# распаковка данных (архив в ./data)
unzip('./data/gadm36_RUS_shp.zip', exdir = './data/RUS_adm_shp')

# прочитать данные уровней 0, 1
Regions0 <- readOGR("./data/RUS_adm_shp/gadm36_RUS_0.shp", stringsAsFactors = F)
## OGR data source with driver: ESRI Shapefile 
## Source: "D:\Desktop\school\8 sem\R\data\RUS_adm_shp\gadm36_RUS_0.shp", layer: "gadm36_RUS_0"
## with 1 features
## It has 2 fields
Regions1 <- readOGR("./data/RUS_adm_shp/gadm36_RUS_1.shp", stringsAsFactors = F)
## OGR data source with driver: ESRI Shapefile 
## Source: "D:\Desktop\school\8 sem\R\data\RUS_adm_shp\gadm36_RUS_1.shp", layer: "gadm36_RUS_1"
## with 83 features
## It has 10 fields
par(mfrow = c(1, 2))
par(oma = c(0, 0, 0, 0))
par(mar = c(0, 0, 1, 0))
plot(Regions0, main = 'adm0', asp = 1.8)
plot(Regions1, main = 'adm1', asp = 1.8)

par(mfrow = c(1, 1))

Карта-хороплет для численности населения в регионах ПФО

slotNames(Regions1)
## [1] "data"        "polygons"    "plotOrder"   "bbox"        "proj4string"
# слот data
head(Regions1@data)
##   GID_0 NAME_0   GID_1        NAME_1
## 0   RUS Russia RUS.1_1        Adygey
## 1   RUS Russia RUS.2_1         Altay
## 2   RUS Russia RUS.3_1          Amur
## 3   RUS Russia RUS.4_1  Arkhangel'sk
## 4   RUS Russia RUS.5_1    Astrakhan'
## 5   RUS Russia RUS.6_1 Bashkortostan
##                                                                                     VARNAME_1
## 0           Adygea|Adygeya|Adygheya|Republic of Adygeya|Adygeyskaya A.Obl.|Respublika Adygeya
## 1                                                                              Altayskiy Kray
## 2                                                                            Amurskaya Oblast
## 3                                       Arcangelo|Archangel|Archangelsk|Arkhangelskaya Oblast
## 4                                                             Astrachan|Astrakhanskaya Oblast
## 5 Bashkir|Bashkiriya|Bashkirskaya A.S.S.R.|Republic of Bashkortostan|Respublika Bashkortostan
##                                       NL_NAME_1     TYPE_1 ENGTYPE_1 CC_1
## 0             Республика Адыгея Respublika  Republic <NA>
## 1                   АлтаР\271СЃРєРёР\271 РєСЂР°Р\271       Kray Territory <NA>
## 2               Амурская область     Oblast    Region <NA>
## 3     Архангельская область     Oblast    Region <NA>
## 4       Астраханская область     Oblast    Region <NA>
## 5 Республика БаС\210кортостан Respublika  Republic <NA>
##   HASC_1
## 0  RU.AD
## 1  RU.AL
## 2  RU.AM
## 3  RU.AR
## 4  RU.AS
## 5  RU.BK
# head(Regions1@polygons)
colnames(Regions1@data)
##  [1] "GID_0"     "NAME_0"    "GID_1"     "NAME_1"    "VARNAME_1" "NL_NAME_1"
##  [7] "TYPE_1"    "ENGTYPE_1" "CC_1"      "HASC_1"
# преобразуем кодировку
Encoding(Regions1@data$NL_NAME_1) <- 'UTF-8'
Regions1@data$NL_NAME_1[1:10]
##  [1] "Республика Адыгея"           "Алтайский край"             
##  [3] "Амурская область"            "Архангельская область"      
##  [5] "Астраханская область"        "Республика Башкортостан"    
##  [7] "Белгородская область"        "Брянская область"           
##  [9] "Республика Бурятия"          "Республика Чечено-Ингушская"
# делаем фрейм с координатами для ggplot
Regions.points <- fortify(Regions1, region = 'NAME_1')

Оставляем только регионы ПФО и присоединяем показатель “Кризисный индекс качества жизни”.

reg.names.ПФО <- c('Bashkortostan','Kirov','Mariy-El','Mordovia','Nizhegorod',
                   'Orenburg','Penza','Perm','Samara','Saratov','Tatarstan','Udmurt', 
                   "Ul'yanovsk",'Chuvash')  
Regions.points <- Regions.points[Regions.points$id %in% reg.names.ПФО, ]
head(Regions.points)
##            long      lat  order  hole piece            id           group
## 228832 57.43663 51.71517 228832 FALSE     1 Bashkortostan Bashkortostan.1
## 228833 57.43743 51.65982 228833 FALSE     1 Bashkortostan Bashkortostan.1
## 228834 57.42258 51.62980 228834 FALSE     1 Bashkortostan Bashkortostan.1
## 228835 57.33423 51.58929 228835 FALSE     1 Bashkortostan Bashkortostan.1
## 228836 57.25275 51.56111 228836 FALSE     1 Bashkortostan Bashkortostan.1
## 228837 57.22923 51.56889 228837 FALSE     1 Bashkortostan Bashkortostan.1
df.pop <- read.csv2('./reg_CFO_ik.csv', stringsAsFactors = F)
Regions.points <- merge(Regions.points, df.pop, by = 'id')
Regions.points <- Regions.points[order(Regions.points$order), ]

График spplot

Карта-хороплет регионов РФ, входящих в состав Приволжского федерального округа, построенная функцией spplot() по данным сборников “Регионы России” за последний доступный год 16, показатель “Кризисный индекс качества жизни”.

# работаем с Regions1, добавляем статистику
Regions1@data <- merge(Regions1@data, df.pop, 
                       by.x = 'NAME_1', by.y = 'id', all.x = T)

mypalette <- colorRampPalette(c('whitesmoke', 'blue'))
spplot(Regions1, 'kikzh.2016',
       col.regions = mypalette(20), # цветовая шкала
       main = 'Кризисный индекс качества жизни в 2016 г.',
       # (20 градаций)
       col = 'coral4', # цвет контурных линий
       par.settings = list(axis.line = list(col = NA)) 
)

# пример окончен, удаляем большой объект из памяти
rm(Regions1)

График ggplot2

Статистика за 2010 год.

gp <- ggplot() + 
  geom_polygon(data = Regions.points, 
               aes(long, lat, group = group, fill = kikzh.2010)) +
  geom_path(data = Regions.points, 
            aes(long, lat, group = group),
            color = 'coral4') +
  coord_map(projection = 'gilbert') +
  scale_fill_distiller(palette = 'OrRd',
                       direction = 1,
                       breaks = pretty_breaks(n = 5)) +
  labs(x = 'Долгота', y = 'Широта', 
       title = 'Кризисный индекс качества жизни в 2010 г.')
# выводим график
gp