127.38K
Категория: ПрограммированиеПрограммирование

Установка пакетов R. Лабораторная работа 5

1.

УСТАНОВКА ПАКЕТОВ R
Перед
началом
работ
с
пространственными
данными
необходимо
установить
следующие пакеты:
sp,
raster,
install.packages(“sp”)
install.packages(“raster”)
Примечание: для дальнейшей работы вам понадобиться директория
к папке Lab5 Загрузите его пожалуйста с флеш-карты
преподавателя

2.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Пакет sp является одним из основных пакетов в работе с пространственными
данными. Пакет sp представляет пространственные данные в виде классов.
Пакет sp вводит ряд классов с именами, которые начинаются с Spatial. Для
векторных данных, основные типы являются SpatialPoints, SpatialLines
и SpatialPolygons. Эти классы представляют только геометрию. Чтобы также
хранить атрибуты, классы доступны с этими именами плюс DataFrame, например,
SpatialPolygonsDataFrame
и
SpatialPointsDataFrame.
При
обращении к любому объекту с именем, которое начинается с Spatial него,
обычно записывается Spatial*. При обращении к a SpatialPolygons
или SpatialPolygonsDataFrame объекту, который обычно используется для
записи SpatialPolygons*.

3.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Перед началом работы вам потребуется узнать о доступе ваших данных
программному обеспечению R. Для этого на командной строке наберите
следующую команду:
> getwd()
[1] "C:/Users/…/Desktop/Lab5"
Если в результате вы получите другую директорию, то вы должны будете изменить
вашу директорию чтобы вам было доступно ваши данные. Для этого вам следует
изменить директорию следующим образом:
> setwd("C:/Users/.../Desktop/Lab5")
Примечание: Обратите внимание на знаки деления они должны выглядеть таким
образом: “/”.

4.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Для использования функции Spatial и spPoints требуется установить пакеты
raster и sp.
library("sp")
library("raster")
longitude <- c(-118.7, -115.1, -116.1, -117.5)
latitude <- c(43.3, 42.6, 40.9, 44.1)
Далее создаем объект с помощью функции SpatialPoints
lonlat <- cbind(longitude, latitude)
pts <- SpatialPoints(lonlat)

5.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Используйте базовую функцию pts чтобы увидеть вид вашего объекта.
class(pts)
В окне консоли у вас выйдет информация о вашем фрейме данных
## [1] "SpatialPoints"
## attr(,"package")
## [1] "sp"

6.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Используйте еще одну базовую функцию showDefault чтобы увидеть вид
вашего объекта изнутри.
showDefault(pts)
В окне консоли у вас выйдет информация о вашем фрейме данных
## An object of class "SpatialPoints"
## Slot "coords":
##
longitude latitude
## [1,]
-118.7
43.3
## [2,]
-115.1
42.6
## [3,]
-116.1
40.9
## [4,]
-117.5
44.1
##
## Slot "bbox":
##
min
max
## longitude
-118.7
-115.1
## latitude
40.9
44.1
## Slot "proj4string":
## CRS arguments: NA

7.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Используйте функцию pts чтобы увидеть информацию об объекте.
pts
В окне консоли у вас выйдет информация о вашем фрейме данных
## class : SpatialPoints
## features : 4
## extent : -118.7, -115.1, 40.9, 44.1 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0

8.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Мы
можем
использовать
SpatialPoints
объект
для
создания
SpatialPointsDataFrame объекта. Сначала нам нужно число data.frame с
таким же количеством строк, что и геометрия.
df <- data.frame(ID=1: nrow(lonlat), precip=(latitude -30)^3)
Объедините SpatialPoints с data.frame.
ptsdf <- SpatialPointsDataFrame(pts, data = df)
ptsdf
## class : SpatialPointsDataFrame
## features : 4
## extent : -118.7, -115.1, 40.9, 44.1 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0
## variables : 2
## names : ID, precip
## min values : 1, 1295.029
## max values : 4, 2803.221

9.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Для того чтобы увидеть что находиться внутри вашего объекта зададим команду
str
str (ptsdf)
## Formal class 'SpatialPointsDataFrame' [package "sp"] with 5
slots
## ..@ data :'data.frame': 4 obs. of 2 variables:
## .. ..$ ID : int [1:4] 1 2 3 4
## .. ..$ precip: num [1:4] 2353 2000 1295 2803
## ..@ coords.nrs : num(0)
## ..@ coords : num [1:4, 1:2] -118.7 -115.1 -116.1 -117.5 43.3
...
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : NULL
## .. .. ..$ : chr [1:2] "longitude" "latitude"
## ..@ bbox : num [1:2, 1:2] -118.7 40.9 -115.1 44.1
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "longitude" "latitude"
## .. .. ..$ : chr [1:2] "min" "max"
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1
slot
## .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84
+ellps=WGS84 +towgs84=0,0,0"

10.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
…или используйте команду showDefault(ptsdf).
## An object of class "SpatialPointsDataFrame"
## Slot "data":
##
ID
precip
##
1
1 2352.637
##
2
2 2000.376
##
3
3 1295.029
##
4
4 2803.221
##
## Slot "coords.nrs":
## numeric(0)
##
## Slot "coords":
##
longitude
latitude
## [1,] -118.7
43.3
## [2,] -115.1
42.6
## [3,] -116.1
40.9
## [4,] -117.5
44.1
## Slot "bbox":
##
min
max
## longitude
-118.7 -115.1
## latitude
40.9
44.1
## Slot "proj4string":
## CRS arguments:
## +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0

11.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Создать
объект
SpatialPoints
было
легко.
Создание
объектов
SpatialLines и SpatialPolygons немного сложнее, но задание стилей
относительно просто с spLines
и
spPolygons
функциями (из
пакета raster).
Создаем координаты вершин линий и полигонов следующим образом:
lon <- c(-116.7, -120.4, -116.7, -119.5, -118.5, -120.8, 119.5, -113.7, -113.7, -110.7)
lat <- c(45.3, 42.6, 40.9, 40.1, 38.7, 38.9, 36.2, 39, 41.6,
44.9)
lonlat <- cbind(lon, lat)

12.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Используйте функцию spLine чтобы увидеть информацию об объекте.
lns <- spLines(lonlat, crs = crdref)
lns
В окне консоли у вас выйдет информация о вашем фрейме данных
## class : SpatialLines
## features : 1
## extent : -120.8, -110.7, 36.2, 45.3 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0

13.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
Cтруктура класса SpatialPolygons несколько сложна, так как она должна
учитывать возможность множественных многоугольников, каждая из которых
состоит из нескольких подполигонов, некоторые из которых могут быть
«островами».
str (pols)
## Formal class 'SpatialPolygons' [package "sp"] with 4 slots
## ..@ polygons :List of 1
## .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
## .. .. .. ..@ Polygons :List of 1
## .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
## .. .. .. .. .. .. ..@ labpt : num [1:2] -116.2 41.4
## .. .. .. .. .. .. ..@ area : num 45.3
## .. .. .. .. .. .. ..@ hole : logi FALSE
## .. .. .. .. .. .. ..@ ringDir: int 1
## .. .. .. .. .. .. ..@ coords : num [1:11, 1:2] -117 -111 -114 -114 -120
## ... .. .. .. ..@ plotOrder: int 1
## .. .. .. ..@ labpt : num [1:2] -116.2 41.4
## .. .. .. ..@ ID : chr "1"
## .. .. .. ..@ area : num 45.3
## ..@ plotOrder : int 1
## ..@ bbox : num [1:2, 1:2] -120.8 36.2 -110.7 45.3
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "x" "y"
## .. .. ..$ : chr [1:2] "min" "max"
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
## .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"

14.

РАБОТА С ВЕКТОРНЫМИ МОДЕЛЯМИ ДАННЫХ
К счастью, вам не нужно понимать, как организованы эти структуры. Главное – это
уметь понимать модели этих объектов, их геометрии (координаты), имя, системы
координат и атрибуты.
В конечном итоге мы получим график где показаны наши модели данных.
plot(pols, axes=TRUE, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)

15.

ОТОБРАЖЕНИЕ ФОНОВОЙ КАРТЫ (CHOROPLETH
MAP) С ПОМОЩЬЮ ПАКЕТА “SP”
Ниже приведен полный скрипт программы:
library("sp")
library("raster")
longitude <- c(-118.7, -115.1, -116.1, -117.5)
latitude <- c(43.3, 42.6, 40.9, 44.1)
lonlat <- cbind(longitude, latitude)
pts <- SpatialPoints(lonlat)
class(pts)
showDefault(pts)
crdref <- CRS('+proj=lonlat +datum=WGS84')
pts <- SpatialPoints(lonlat, proj4string = crdref)
pts
df <- data.frame(ID=1: nrow(lonlat), precip=(latitude -30)^3)
ptsdf <- SpatialPointsDataFrame(pts, data = df)
ptsdf
str(ptsdf)
showDefault(ptsdf)
lon <- c(-116.7, -120.4, -116.7, -119.5, -118.5, -120.8, -119.5, -113.7, -113.7, 110.7)
lat <- c(45.3, 42.6, 40.9, 40.1, 38.7, 38.9, 36.2, 39, 41.6, 44.9)
lonlat <- cbind(lon, lat)
lns <- spLines(lonlat, crs = crdref)
lns
pols <- spPolygons(lonlat, crs = crdref)
pols
str(pols)
plot(pols, axes=TRUE, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)
English     Русский Правила