Картографирование в R стало намного проще

Хотели бы вы сделать цветовую карту хороплета в R? До недавнего времени работа с геопространственными объектами была немного более сложной, чем со многими другими типами данных. Это потому, что объекты R «Пространственные данные полигонов» были структурированы примерно так, если вы запустили команду R str (), чтобы увидеть их структуру: Хотели бы вы сделать цветовую карту хороплета в R

Снимок экрана: структура объекта R

Структура фрейма данных пространственных полигонов в R, без простых функций

Непространственные данные - такие как уровни безработицы, которые вы, возможно, захотите отобразить по округам - находятся в специальных слотах @data, которые были незнакомы многим пользователям R. Слоты были не так уж сложны, но они были еще одной вещью для изучения.

Благодаря Простые функции для R Проект, однако, можно представить геопространственные данные в том, что очень похоже на обычный фрейм данных.

Вот как выглядят те же данные в виде простого объекта объектов:

Вот как выглядят те же данные в виде простого объекта объектов:

Снимок экрана: структура объекта R

Более удобочитаемая структура простого объекта R объекта.

Данные теперь находятся в том, что кажется «обычным» фреймом данных R; геопространственные данные помещаются в специальный столбец списка, содержащий географические данные. Это облегчает объединение наборов данных, таких как занятость или средняя заработная плата, с шейп-файлом, содержащим географические данные.

Я покажу вам один способ сделать это, используя простые функции R, создавая карту средней заработной платы для ИТ-менеджеров по штатам. Как и в случае практически любого реального анализа и визуализации, большая часть проекта включает сбор и очистку данных. Как только данные будут в правильном формате, само отображение будет на одном дыхании. Если вы хотите перейти к разделу картирования, перейдите прямо к шагу 4.

Однако сначала убедитесь, что вы установили и загрузили два пакета сопоставления:

install_packages ("tmap") библиотека install_packages ("tmaptools") библиотека ("tmap") ("tmaptools")

1. Загрузите файл географии штатов США и импортируйте его в R. (Существует несколько популярных форматов геопространственных файлов. Для этого урока я буду использовать шейп-файлы.)

Самый простой способ сделать это - пакет Тигра от Кайла Уокера.

Для этого проекта вам потребуется версия для разработки tigris от GitHub, а не более старая версия, доступная в CRAN, поскольку версия CRAN еще не поддерживает простые функции. Если у вас уже есть пакет devtools R в вашей системе, вы можете установить более новый tigris с помощью devtools :: install_github ('walkerke / tigris'). Если у вас нет devtools, вы можете сначала установить devtools, либо облегченный установочный пакет GitHub, называемый удаленными. Я предлагаю выбрать пульты; Вы можете установить это в своей системе с помощью install.packages ("remotes"). Затем установите tigris с помощью remotes :: install_github ('walkerke / tigris') и загрузите его с библиотекой ("tigris").

Чтобы импортировать шейп-файл штатов США в R с Tigris в качестве простого объекта объектов, просто запустите команду:

us_geo <- состояния (class = "sf")

Обратите внимание, что states () без class = "sf" вернет фрейм данных пространственных полигонов, а не простой объект объектов.

Больше информации о возможностях пакета Тигр на Сайт Тигра GitHub ,

Если у вас есть проблемы с этим, как у меня иногда возникали проблемы с API Бюро переписей на этой неделе, вы можете загрузить файл формы вручную с сайта шейп-файлов картографической границы TIGER здесь: https://www.census.gov/geo/maps-data/data/cbf/cbf_state.html , Выберите файл cb_2015_us_state_20m.zip, загрузите и разархивируйте его.

Или загрузите и разархивируйте файл в R, используя код:

download.file ("http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_state_20m.zip", destfile = "states.zip") unzip ("states.zip")

(Предполагается, что файл загружен в ваш рабочий каталог. Если нет, обязательно укажите полный путь к вашему zip-файлу).

Затем прочитайте географическую информацию в объект R с именем us_geo с помощью

us_geo <- read_shape ("cb_2015_us_state_20m.shp", as.sf = TRUE, stringsAsFactors = FALSE)

2. Импортируйте данные, которые вы хотите отобразить. Я пошел в Бюро статистики труда США Статистика по трудовой занятости Страница запроса выбрал «Одно занятие для нескольких географических областей», а затем выбрал «Менеджеры компьютерных и информационных систем» по географическому типу «Состояние», «Все штаты в этом списке», «Годовая средняя заработная плата» в качестве типа данных и Excel в качестве выходных данных.

Если вы откроете файл, вы увидите 3 строки метаданных вверху (R будет считать объединенные строки 2, 3 и 4 как одну строку) и 4 строки внизу. Я переместил сноски на отдельную вкладку и пропустил первые 3 строки при импорте (нет простого способа пропустить строки в конце).

Мне нравится пакет rio для чтения данных. Если у вас его нет, вы можете установить его с помощью install.packages ("rio").

wages <- rio :: import ("mydatafile.xlsx", skip = 3)

Имена столбцов электронной таблицы несколько недружественны - в обоих есть пробелы, поэтому я изменю их

имена (заработная плата) <- c («Площадь», «Median.Wage»)

Что еще более важно, столбец заработной платы импортируется как символьные строки, а не числа, я думаю, из-за лишних пробелов в данных. Я обрезал пустое пространство, а затем преобразовал Median.Wages в числа с

wages $ Median.Wage <- trimws (wages $ Median.Wage) wages $ Median.Wage <- as.numeric (wages $ Median.Wage)

К сожалению, названия штатов в этих данных выглядят как «Алабама (0100000)» вместо «Алабама».

Есть несколько способов избавиться от (01000000) и аналогичного текста в названиях состояний. Самый надежный способ - с помощью регулярного выражения - удалить все, что не является альфа-символом. Этот код делает так:

wages $ State <- gsub ("[^ [: alpha:]]", "", область $ wages)

Но если вы еще не готовы к регулярным выражениям в R, вы можете просто посчитать количество символов в (#######) части каждого имени состояния (их 9) и удалить это число символы в конце каждого названия штата. Формат для подстановки строки - substr (thestring, startIndex, stopIndex). Здесь нам нужна только часть строки, которая начинается с первого символа и заканчивается последним символом - 9:

заработная плата $ State <- substr (заработная плата $ Area, 1, nchar (заработная плата $ Area) - 9)

Теперь данные в столбце Состояние заработной платы в зарплате соответствуют именам состояний в столбце ИМЯ us_geo.

Наконец, избавьтесь от любых строк, где Median.Wages недоступны:

заработная плата <- заработная плата [! is.na (wages $ Median.Wage),]

Или, если вы используете пакет dplyr (мои предпочтения):

wages <- dplyr :: filter (wages,! is.na (Median.Wage))

3. Объедините (объедините) файлы геопространственных данных и данных. Это легко сделать с помощью функции append_data () пакета tmaptools:

wagemap <- append_data (us_geo, wages, key.shp = "NAME", key.data = "State")

4. Наконец, создайте свою карту. Эта часть невероятно проста с помощью функции tmap qtm () (quick theme map):

qtm (wagemap, fill = "Median.Wage")

Или с более надежной функцией tmap ():

tm_shape (wagemap) + tm_polygons ("Median.Wage", id = "NAME")

Часть id = "NAME" на самом деле не нужна для этой карты, но она полезна для следующего шага.

Для этой карты немного сложно увидеть смежные 48 штатов, потому что карта увеличена, чтобы охватить всю Аляску и Гавайи.

Для этой карты немного сложно увидеть смежные 48 штатов, потому что карта увеличена, чтобы охватить всю Аляску и Гавайи

Снимок экрана карты в R, созданной с помощью пакета tmap

Статическая карта со всеми 50 состояниями немного сложна для просмотра.

Есть несколько способов справиться с этим. Для статических карт вы можете временно увеличить масштаб, удалив Аляску, Гавайи и Пуэрто-Рико (что происходит, если вы увеличите масштаб до смежных 48) с помощью:

contig_48 <- subset (wagemap,! (NAME% в% c («Аляска», «Гавайи», «Пуэрто-Рико»)))

и затем сопоставление contig_48:

tm_shape (contig_48) + tm_polygons ("Median.Wage", id = "NAME") tm_shape (contig_48) + tm_polygons (Median Снимок экрана статической тематической карты, созданной в R

Статическая карта средней заработной платы в США для компьютеров и менеджеров ИС, созданная с помощью пакета R tmap.

Для презентаций, есть отличный Учебник tmap по созданию вставок для Аляски и Гавайев.

Но лучший вариант для исследования данных и публикации в Интернете:

5. Создайте интерактивную карту с двумя простыми строками кода.

Сюжет оригинальной версии 50 штатов плюс Пуэрто-Рико снова:

tm_shape (wagemap) + tm_polygons ("Median.Wage", id = "NAME")

Чтобы сделать это интерактивным, вам просто нужно переключить режим tmap с «plot», который является статическим, на «view», который является интерактивным, с помощью функции tmap_mode ():

tmap_mode ( "вид")

Затем, чтобы заново нарисовать последнюю карту, запустите last_map (). Это оно! Вы должны иметь масштабируемую интерактивную карту, где нажатие на состояние дает подробные данные.

Пакет отображения буклета R имеет гораздо больше возможностей для настройки интерактивной карты, чем предлагает интерактивный режим tmap. Кроме того, пакет листовок позволяет сохранять интерактивные карты в виде отдельных файлов HTML. Хорошая новость: легко превратить интерактивную карту tmap в объект листовки, а затем запустить на нем любые дополнительные функции листовки. Сохраните карту tmap в переменную

my_interactive_map <- tm_shape (wagemap) + tm_polygons ("Median.Wage", id = "NAME")

а затем превратить его в объект листовки с помощью функции tmap_leaflet ()

my_interactive_map <- tmap_leaflet (my_interactive_map)

С помощью пакета htmlwidgets сохраните карту с помощью saveWidget (my_interactive_map, "mymap.html"). Ниже вы можете увидеть версию карты, которую я центрировал и увеличил с помощью функции setView () листовки после загрузки пакета листовки:

my_interactive_map <- my_interactive_map%>% setView (-96, 37.8, zoom = 4) Интерактивная карта, созданная с помощью пакетов tmap и буклета R.

Для больше на tmap, проверьте Tmap в двух словах виньетка , Информацию о возможностях листовок смотрите в сайт листовки ,

Хотели бы вы сделать цветовую карту хороплета в R?
Комментарии к этой заметке больше не принимаются.


декабрь, 2011
пн вт ср чт пт сб вс
      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  

Финансы. Инвестирование и правильное вложение средств. банки