Хотели бы вы сделать цветовую карту хороплета в R? До недавнего времени работа с геопространственными объектами была немного более сложной, чем со многими другими типами данных. Это потому, что объекты R «Пространственные данные полигонов» были структурированы примерно так, если вы запустили команду R str (), чтобы увидеть их структуру:
Снимок экрана: структура объекта 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 штатов, потому что карта увеличена, чтобы охватить всю Аляску и Гавайи.
Снимок экрана карты в R, созданной с помощью пакета tmap
Статическая карта со всеми 50 состояниями немного сложна для просмотра.
Есть несколько способов справиться с этим. Для статических карт вы можете временно увеличить масштаб, удалив Аляску, Гавайи и Пуэрто-Рико (что происходит, если вы увеличите масштаб до смежных 48) с помощью:
contig_48 <- subset (wagemap,! (NAME% в% c («Аляска», «Гавайи», «Пуэрто-Рико»)))
и затем сопоставление contig_48:
tm_shape (contig_48) + tm_polygons ("Median.Wage", id = "NAME") Снимок экрана статической тематической карты, созданной в 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?