:Author: Barry Rowlingson :Version: osgeo-live5.0 :License: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) .. image:: ../../images/project_logos/logo-R.png :alt: project logo :align: right ******************************************************************************** Начало работы с R ******************************************************************************** R — это свободное программное обеспечение для статистических вычислений и графики. Этот документ описывает как: * использовать R для простых вычислений; * загружать данные из шейп-файла и наносить их на карту; * производить преобразования координат; * добавлять точки на карту. Запуск R ================================================================================ Чтобы запустить программу нужно: * Выбрать ``R Statistics`` из раздела меню Spatial Tools — появится окон терминала с запущенным R. Или * ввести ``R`` в окне консоли. R запустится в этом окне. Не бойтесь командной строки — она является очень мощным средством. Используйте кнопки вверх и вниз, чтобы вызывать уже введенные команды и исправлять ошибки. Используйте CTRL-C, если застряли и нужно вернуться обратно в консоль. Выход из R ================================================================================ Почти всё в R является функциями, включая функцию для выхода из программы. Введите ``q()`` и нажмите "Enter". Если вы наберёте просто ``q``, то увидите исходный код для функции ``q``. R спросит, хотите ли вы сохранить рабочую среду в специальный файл (``.RData``). Если вы снова запустите R из папки, в которой уже есть этот файл, то он автоматически восстановит оттуда все данные. Начало работы с R ================================================================================ R по сути является консольным приложением, хотя для него есть и графические интерфейсы. Вы вводите команды в консоль, нажимаете Ввод, и интерпретатор R проверяет то, что вы ввели и выводит результат. Вы можете начать с простой арифметики: :: > 3*2 [1] 6 > 1 + 2 * 3 / 4 [1] 2.5 > sqrt(2) [1] 1.414214 > pi * exp(-1) [1] 1.155727 В R встроен полный комплект стандартных арифметических, тригонометрических и статистических операций и тысячи дополнительных доступны в виде пакетов в архиве `CRAN `_. Основная системная "подсказка" в консоли выглядит так ``>``, но есть еще "подсказка" для продолжения — ``+``, она появляется, когда R ожидает от вас ещё что-либо для завершения выражения. С ней можно столкнуться, например, если вы забыли скобку или кавычку. :: > sqrt( + 2 + ) [1] 1.414214 Структура данных ================================================================================ Вы могли задаться вопросом, что же в результате показывает загадочная единица в квадратных скобках? Единица показывает, что результат — одно число. R может хранить данные в одномерных векторах, двумерных матрицах и многомерных массивах. Они создаются в процессе различных операций. Вот простой пример: :: > seq(1,5,len=10) [1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111 [9] 4.555556 5.000000 Вы можете видеть, что ``[9]`` говорит нам, что 4.555 является девятым элементом вектора. Если вы сделаете матрицу, что получите подписанные ряды и колонки: :: > m=matrix(1:12,3,4) > m [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 Элементы матрицы могут быть получены путем ввода в квадратных скобках ряда и колонки, разделенных запятой, соответствующих её значениям. Если не вводить один из индексов, будет получен весь ряд или колонка в виде вектора. Можно также запрашивать диапазон значений: :: > m[2,4] [1] 11 > m[2,] [1] 2 5 8 11 > m[,3:4] [,1] [,2] [1,] 7 10 [2,] 8 11 [3,] 9 12 Фреймы данных являются структурами, очень похожими на структуры данных СУБД, таких, как PostgreSQL или MySQL. Каждый ряд может рассматриваться как запись, а колонка — как поле в базе данных. Так же, как и в базе данных, значение в поле должно быть одинакового типа для каждой записи. Во многом эти структуры работают как матрицы, но вы можете также задавать и обращаться к колонкам, используя знак $: :: > d = data.frame(x=1:10,y=1:10,z=runif(10)) # z это 10 случайных чисел > d x y z 1 1 1 0.44128080 2 2 2 0.09394331 3 3 3 0.51097462 4 4 4 0.82683828 5 5 5 0.21826740 6 6 6 0.65600533 7 7 7 0.59798278 8 8 8 0.19003625 9 9 9 0.24004866 10 10 10 0.35972749 > d$z [1] 0.44128080 0.09394331 0.51097462 0.82683828 0.21826740 0.65600533 [7] 0.59798278 0.19003625 0.24004866 0.35972749 > d$big = d$z > 0.6 # d$big это бинарное булево значение true/false > d[1:5,] x y z big 1 1 1 0.44128080 FALSE 2 2 2 0.09394331 FALSE 3 3 3 0.51097462 FALSE 4 4 4 0.82683828 TRUE 5 5 5 0.21826740 FALSE > d$name = letters[1:10] # создать новое символьное поле > d[1:5,] x y z big name 1 1 1 0.44128080 FALSE a 2 2 2 0.09394331 FALSE b 3 3 3 0.51097462 FALSE c 4 4 4 0.82683828 TRUE d 5 5 5 0.21826740 FALSE e Загрузка геоданных ================================================================================ Существует множество модулей для управления пространственными данными и статистического анализа. Некоторые из них рассмотрены здесь, а другие можно скачать из CRAN. Давайте загрузим в R два шейп-файла — границы стран и населённые пункты из набора данных Natural Earth. Мы используем два пакета для работы с геоданными — *sp* и *maptools*: :: > library(sp) > library(maptools) > countries = readShapeSpatial("/usr/local/share/data/natural_earth/10m_admin_0_countries.shp") > places = readShapeSpatial("/usr/local/share/data/natural_earth/10m_populated_places_simple.shp") > plot(countries) Мы увидим простую карту Земли: .. image:: ../../images/screenshots/1024x768/r_plot1.png Когда OGR-совместимый набор данных загружается в R таким образом, мы получаем объект, который ведёт себя во многом как фрейм данных. Мы можем использовать поле ``ADMIN`` для выбора данных, например, только по Великобритании: :: > uk = countries[countries$ADMIN=="United Kingdom",] > plot(uk); axis(1); axis(2) .. image:: ../../images/screenshots/1024x768/r_plot2.png Результат выглядит несколько сплюснутым для тех кто, привык к другому виду карты, так как мы обычно сталкиваемся с системой координат, центрированной по какой-либо широте. В настоящее время у объекта система координат не прописана — мы можем это проверить следующим образом: :: > proj4string(uk) [1] NA ``NA`` обозначает, что данные отсутствуют. Нам нужно назначить систему координат объекту до того, как трансформировать его в другую систему координат с помощью функции *spTransform* из пакета *rgdal*. Мы будем трансформировать данные в систему координат EPSG:27700, которую использует Ordnance Survey Великобритании: :: > proj4string(uk)=CRS("+init=epsg:4326") > library(rgdal) > ukos = spTransform(uk,CRS("+init=epsg:27700")) > proj4string(ukos) [1] " +init=epsg:27700 +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894" > plot(ukos);axis(1);axis(2) Результат — карта, показывающая трансформированные данные. Теперь нам нужно добавить несколько точек из набор данных о населённых пунктах. Мы снова отберём нужные нам точки и переведём их в нужную систему координат: :: > ukpop = places[places$ADM0NAME=="United Kingdom",] > proj4string(ukpop)=CRS("+init=epsg:4326") > ukpop = spTransform(ukpop,CRS("+init=epsg:27700")) Мы добавим эти точки к нашей карте, масштабировав их по размеру в зависимости от квадратного корня населения (это сделает символ пропорциональным населению), мы также сделаем их красного цвета и используем в качестве символа "залитый" кружок: :: > points(ukpop,cex=sqrt(ukpop$POP_MAX/1000000),col="red",pch=19) > title("UK Population centre sizes") и наша конечная карта будет выглядеть так: .. image:: ../../images/screenshots/1024x768/r_plot3.png Виньетки ================================================================================ В прошлом документация по пакетам R обычно представляла собой скупые описания для каждой функции. Теперь авторам предлагается также писать так называемые "виньетки" — "дружественное к пользователю" введение в использование пакета. Если ввести команду ``vignette()`` без аргументов, то можно получить список виньеток, доступных на данный момент в системе. Попробуйте ввести ``vignette("sp")`` и вы получите техническое введение в структуры пространственных данных R, или ``vignette("spdep")`` чтобы почитать про статанализ пространственных автокорреляций. ``vignette("gstat")`` познакомит с использованием пакета *gstat* для пространственной интерполяции с использованием кригинга. Дополнительная информация ================================================================================ Общую информацию об R можно найти в официальном `Введении в R `_ или в любой другой документации с домашней страницы `Проекта R Project `_. Подробную информацию о пространственных возможностях R можно найти в `R Spatial Task View `_ Также может оказаться полезным страница `R-Spatial `_ на *sourceforge*, где можно найти полезные ссылки и информацию о листе рассылки R-sig-Geo.