Как сделать картограмму в робуре

Обновлено: 04.07.2024

Введение

  • Покажем динамику среднедушевого дохода населения и Центральному и Приволжскому федерельным округам
  • Покажем на карте РФ распределение по субъектам РФ среднедушевого дохода за 2010

Анализ данных

Для начала давайте загрузим данные и посмортим нужна ли дополнительная обработка.

  1. Адрес html страницы
  2. Номер строки, содержащей имена столбцов
  3. Номер столбца, который будет использоваться в виде индекса


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

2000.0 2001.0 2002.0 2003.0 2004.0 2005.0 2006.0 2007.0 2008.0 2009.0 2010.0 2011.0
Российская Федерация 2281 3062 3947 5167 6399 8088 10155 12540 14864 16895 18951 20755
Центральный федеральный округ 3231 4300 5436 7189 8900 10902 13570 16631 18590 21931 24645 27091
Белгородская область 1555 2121 2762 3357 4069 5276 7083 9399 12749 14147 16993 18800
Брянская область 1312 1818 2452 3136 3725 4788 6171 7626 10083 11484 13358 15348
Владимирская область 1280 1666 2158 2837 3363 4107 5627 7015 9480 10827 12956 14312

Итак, давайте приступим к выполнениию первой задачи по визуализации данных 2 округов. Чтобы получить данные, на основе которых мы построим график, необходимо выбрать интересующие нас округа (Московский и Приволжский), а затем транспонировать полученную таблицу. Сделать это можно так:


В приведенном выше коде, мы сначала фильтруем наш набор данных по нужным нам округам при момощи функции isin(), которая проверяет значение столбца в заданее заданном списке (аналог оператора IN в SQL). Затем используем функцию transpose() для транспонирования полученного набор данных и записываем результат в новый DataFrame.

Центральный федеральный округ Приволжский федеральный округ
2000 3231 1726
2001 4300 2319
2002 5436 3035
2003 7189 3917
2004 8900 4787
2005 10902 6229
2006 13570 8014
2007 16631 9959
2008 18590 12392
2009 21931 13962
2010 24645 15840
2011 27091 17282

Как можно заметить названия индексы в таблице у нас теперь равны номеру года в числовом формате. Это не очень удобно, поэтому давайте поменяем индекс на формат даты:

  1. Список новых значений индекса(может быть также названием столбца)
  2. Парамерт означает, что мы заменяем индекс в текущем наборе, если он будет False индекс не сохранится


Вывести график можно с помощью функции display():



В результате мы увидим следующее:

Построение картограммы

Ну что же с первой задачей мы справились. Теперь давайте перейдем ко второй. Для ее решения нам понадобится TopoJSON файл с картой РФ, а также справочник регионов. Подробно о том как их получить и что это такое можно почитать здесь. Для начала давайте загрузим справочник регионов с помощью read_csv, описанной в одной из предыдущих статей:

  • index_col — задает номер столбца который будет использоватся в качестве индекса
  • header — в нашем случае означает, что для определения заголовков мы не используем строки из файла
  • names — получает список, элементы которого будут названиями столбцов
  • encoding — задает кодировку в котрой хранится файл


Первая строка означает, что мы выделяем индексный столцеб в отдельную новую серию. Во втрой строке мы заменяем значения соответствующие регулярному выражению на пустые.
Теперь нам надо значения индекса заменить значениями из нового набора. Как показовалось выше, сделать это можно так:


Теперь мы можем объединить наш набор данных со справочником, чтобы получить коды регионов:


Наши данные после всех манипуляций выглядят так:

2000.0 2001.0 2002.0 2003.0 2004.0 2005.0 2006.0 2007.0 2008.0 2009.0 2010.0 2011.0 code
Белгородская область 1555 2121 2762 3357 4069 5276 7083 9399 12749 14147 16993 18800 RU-BEL
Брянская область 1312 1818 2452 3136 3725 4788 6171 7626 10083 11484 13358 15348 RU-BRY
Владимирская область 1280 1666 2158 2837 3363 4107 5627 7015 9480 10827 12956 14312 RU-VLA
Воронежская область 1486 2040 2597 3381 4104 5398 6862 8307 10587 11999 13883 15871 RU-VOR
Ивановская область 1038 1298 1778 2292 2855 3480 4457 5684 8343 9351 11124 13006 RU-IVA

Итак перейдем к непосредственному построению карты и нанесению на нее данных. Для начача нам нужно создать словарь с описание нашей карты:


Теперь давайте создадим объект нашей карты и привяжем к нему наши данные. Сделать это можно функцией Map():

  • data — набор с данными
  • geo_data — объект с нашей картой
  • projection,- проекция в которой наша карта будет отображатся
  • rotate, center, scale — параметры проекции
  • data_bind — столбец с данными, которые будут отображатся
  • data_key — поле с кодом по которому будет осуществлятся связка карты и данных
  • map_key — словарь тип

Теперь наш объект создастся корретно. Осталось поднастроить наш объект. Для начала давайте сделаем наши границы между меджу объектами менее заметными. Для этого у нас существуют метки (marks), которые являются основными строительным элементом. Подробней про них написано в документации к Vega. В нашем случае код выглядит так:


Теперь давайте зададим чтобы наши значения в зависимости от группы окрашивались в разные цвета. Сделать это можно с помощью объектов Scales, предназначенных для перевода значений данных (числовых, строковых, дат и тд) в значения для отображения (писксели, цвета, размеры). Код ниже:


Ну что же карта настроена, теперь ее можно посмотреть что у нас получилось. Как указаволось выше для этого можно использовать функцию display(), но у меня по неизвестным причинам она не сработала, поэтому я сначала выгрузил ее в итоговый json файл с помощью функции to_json():

  1. имя итогового файла
  2. html_out указывает что необходимо создать еще и html файл оболочки
  3. html_path — задает путь до html файла



В итоге наша карта будет выглядеть так:

Заключение


Сегодня я пострался показать еще один способ визуализации данных при использовании pandas. Так же хотелось бы отметить, что рассматриваемый модуль относительно молод и сейчас активно развивается. Из недостатков я бы отметил, что не все объекты отображаются при попытке вывода их прямо в IPython и отсутствие возможности выгрузить просто картинку, а не json файл, тем более что для vega такие инструменты разрабатываются

Здравствуйте, коллеги! Скажите, пожалуйста, с какой точность вы составляете ведомость фрезерования существующего покрытия автомобильной дороги? То есть на участки какой протяженности делите дорогу при условии, что скважины расположены на расстоянии 300-400 м друг от друга.

А вы как делаете? Из шага съемки можно только площадь существующего покрытия посчитать. Площадь я естественно возьму точную по съемке, а вот толщина асфальтобетона дается только через 300 м. А как вы берете толщину асфальтобетона между скважинами? Интерполируете?

Если речь идет о фрезеровании, то логично, что Вы срезаете значительно меньше существующей толщины конструкции. Посему она мне мало интересна вообще. Прежде всего мне важно верно посчитать объемы и задать картограмму фрезерования. а тут я должен ориентироваться на съемку. В среднем, шаг съемки выдают мне 20 м. Вот с таким же шагом я указываю и отметки фрезерования.

Если речь идет о фрезеровании, то логично, что Вы срезаете значительно меньше существующей толщины конструкции.

Так у вас полная разборка?
Я в таком случае при большой протяженности дороги делю на участки длиной равной расстоянию между скважинами.
Если ремонтируемый участок не превышает 0,5 км то вообще беру среднюю толщину по всем скважинам. Впринципе всех устраивает и заказчика, и экспертизу, и даже строителей.

Ну а если фрезерование на небольшую глубину, то как и dorogi-dorogi делаю с шагом съемки.
Проектирую в IndorCAD

На картограммах отдельные территориальные единицы залиты цветом, интенсивность которого соответствует величине отображаемой количественной переменной (плотность населения, уровень дохода, процент проголосовавших за определенного кандидата на выборах, и т.п.). В R подобные карты можно построить несколькими способами. Ниже будет рассмотрен один из них - при помощи пакета sp . Для воспроизведения примеров просто повторяйте описанные ниже шаги.




Шейп-файлы

Все карты мы будем строить на примере Республики Беларусь. Для начала нам потребуются т.н. "шейп-файлы" (англ. shapefile) для разных административно-территориальных единиц страны. Шейп-файл представляет собой распространенный векторный формат хранения информации о геометрическом положении и определенных атрибутах географических объектов. Несмотря на свое название, в действительности шейп-файл - это не один, а набор из нескольких файлов с одинаковым именем, но разными расширениями. Обязательными при этом являются файлы с расширениями .shp , .dbf и .shx . Я не буду описывать здесь, что содержится в каждом из этих файлов - об этом можно найти много информации в Сети (см., например, статью в Википедии и официальное техническое описание формата). Для наших целей достаточным будет представление о шейп-файле как о файле, по данным из которого можно воспроизвести контурную карту страны и/или отдельных ее территориальных единиц.

Естественно, встает вопрос о том, где можно раздобыть шейп-файлы для той или иной интересующей нас территории? Одним из бесплатных (для некоммерческого использования!) источников является Global Administrative Areas (GADM) - Глобальная база данных административных областей. В этой базе данных доступны шейп-файлы трех разных уровней пространственного разрешения, например, на уровне страны, областей и районов. Соответствующие файлы для Беларуси на сайте GADM можно получить двумя разными путями. Во-первых, мы можем сделать это "вручную", зайдя на сайт GADM и выполнив следующие шаги.


2. На открывшейся странице из выпадающих меню выбрать желаемую страну (Country) и формат скачиваемых файлов (File Format).

В меню File Format, как видно из рисунка ниже, доступны несколько опций, включая нужный нам шейп-файл (Shapefile). Обратите внимание: народ, работающий над созданием и поддержкой GADM, отлично осведомлен о распространенности и возможностях R, и, как следствие, в качестве одной из опций в меню File Format мы видим R (SpatialPolygonsDataFrame) - файл "рабочего пространства" (англ. workspace), который уже содержит шейп-файл в необходимом формате и может быть непосредственно загружен в R. Описание того, как это сделать, приведено ниже. Пока же выберем опцию Shapefile:


3. На открывшейся странице увидим карту страны, под которой находится ссылка download для скачивания zip-архива с нужными нам шейп-файлами для всех трех уровней пространственного разрешения. Сохраните этот архив ( BLR_adm.zip ) в удобном для вас месте.


4. Разархивируйте BLR_adm.zip в текущую рабочую папку R. В результате в этой папке появятся следующие файлы:


Все перечисленные файлы важны и должны находиться в одной директории. Обратите внимание на цифры в именах файлов - они помогают понять, какому уровню пространственного разрешения соответствует каждый файл. Так, файлы, в названии которых имеется 0, описывают контуры страны, 1 - контуры страны и областей, а 2 - контуры страны, областей и районов.

Для загрузки шейп-файлов следует воспользоваться функцией readShapePoly() из пакета maptools (установите его предварительно при помощи команды install.packages("maptools") ). Так, шейп-файл для первого уровня пространственного разрешения (страна, разделенная на области) можно загрузить следующим образом:

Второй способ получения шейп-файлов с сайта GADM состоит в их загрузке по URL непосредственно из R. Я предпочитаю именно этот способ и ниже буду предполагать, что им вы и воспользовались. Так, для загрузки шейп-файла с контурами страны и областей следует выполнить следующую команду:

В результате в рабочей среде R появится объект с именем gadm . Во избежание путаницы в дальнейшем, стоит сохранить этот объект, присвоив ему какое-либо более описательное имя, например Regions , а исходный объект затем просто удалить:

С точки зрения своего внутреннего устройства и представления в R, созданный нами объект Regions принадлежат к т.н. объектам класса S4 (подробнее об этом классе можно узнать здесь (англ. яз.)). Вкратце можно сказать, что такие объекты имеют сложную структуру, напоминающую структуру обычных списков R. Отдельные компоненты S4 -объектов называются слотами (англ. slots) и могут сами являться сложными объектами любого другого класса. В отличие от обычных списков, обращение к слотам S4 -объектов происходит при помощи оператора @ , а не $ . Кроме того, к слотам можно обращаться только по их именам, тогда как отдельные элементы списков мы можем индексировать также по их порядковым номерам. Имена слотов, входящих в состав Regions легко выяснить при помощи базовой R-функции slotNames() :

Наибольший интерес для нас представляют слоты " data " и " polygons ". Первый включает обычную таблицу данных (data frame), содержание которой станет понятным из приведенного ниже вывода команды Regions@data (примечание: на моем компьютере русские названия территориальных единиц не распознались - отсюда знаки . в примере ниже):

В свою очередь слот " polygons " содержит список с координатами точек, задающих контуры соответствующих территориальных единиц (в формате системы координат WGS84), а также некоторые другие атрибуты:

Разобравшись немного со структурой шейп-файлов и их представлением в R, приступим собственно к построению картограмм.


Функция spplot() из пакета sp

Пакет sp содержит функции, реализующие ряд методов и классов для пространственных данных (импорт, преобразование и экспорт данных, графические методы, и т.п.). В частности, в нем имеется функция spplot() , которая позволяет отображать на графике данные, заключенные в шейп-файле. В основе этой функции лежат высокоуровневые команды lattice - одного из популярных графических R-пакетов. Не забудьте установить sp перед его первым использованием ( install.packages("sp") ).

Для начала построим картограмму Беларуси, на которой каждая область будет залита своим цветом (цвет на этой карте будет служить просто для идентификации области - никакой другой информационной нагрузки он нести не будет). Посмотрим еще раз на названия областей (приведены оригинальные белорусские названия в написании латинскими буквами):

Таким образом, первой идет Брестская область, а за ней - Гомельская, Гродненская, Могилевская, Минская и Витебская области. Переменная NAME_1 , как видим, является фактором с 6 уровнями. Каждому их этих уровней при построении карты необходимо будет присвоить уникальный цвет. Хорошо отличимые друг от друга цвета можно подобрать, воспользовавшись одной из стандартных палитр R, например rainbow() :

Топоматик Robur позволяет создавать неограниченное количество поверхностей.

В программе есть возможность автоматического подсчета объемов между поверхностями.

Поверхности могут быть как проектные , так и слои конструктивных элементов или геологии.

Отображение характерных участков местности.

При визуализации возможно отображение:

Заливка может быть выполнена:

Трехмерная модель может отображаться в виде:

В ТопоматикRobur имеетсявстроенныймодульгеодезии,которыйпозволяетобрабатывать результаты полевых изысканий: уравнивать теодолитный ход и рассчитывать тахеометрию. Исходные данные импортируются с цифровых приборов, либо вводятся с полевых журналов в табличном виде. Поддерживаются форматы данных наиболее распространенных цифровых геодезических приборов: Sokkia, Nikon, Topcon, 3ТА5 и др.

•• Ввод данных в традиционном виде;

•• расчет разомкнутых и замкнутых теодолитных ходов с разгонкой и без разгонки невязки;

•• чтение данных с электронных приборов.

•• расчет тахеометрической съемки;

•• чтение с электронных тахеометров.

•• Расчет нивелирных ходов;

В итоге, рассчитываются координаты и отметки съемочных точек, используемых для создания поверхностей и оформления ситуации.

Геологическая модель в Топоматик Robur реализована в виде совокупности сечений. В частном случае, это продольный и поперечные профили.

В программе имеется механизм ввода, импорта и редактирования информации о геологических скважинах (выработках), созданияконтуровгеологическихслоев и привязки геологических данных к проектируемому объекту.

Геологические разрезы отображаются в рабочих окнах программы в процессе проектирования и на генерируемых чертежах.

Данные геологии используются для подсчета объемов выемок с разделением по грунтам.

В Топоматик Robur реализованы два метода трассирования: эскизное и детальное проектирование плана трассы.

Эскизное проектирование предназначено для быстрого редактирования горизонтального положения оси трассы. Ось представляется в виде набора вершин горизонтальных углов поворота. В каждый угол могут быть вписаны круговая и две переходных кривые (по Ксенодохову). Вершины углов, вместе со вписанными кривыми, перетаскиваются при помощи мыши.

Однимизнаиболеемощныхинструментов эскизного проектирования плана трассы

является режим динамического трассирования, позволяющий локально менять плановое положение оси трассы, сохраняя при этом запроектированные продольный профиль и поперечники на тех участках, где ось не менялась. Например, приувеличениирадиусакруговойкривой, как показано на рисунке, ось трассы сместится, а Топоматик Robur автоматически перепроектирует земляное полотно на изменившемсяучастке,азаграницамиизменений оноостанетсянетронутым.

Динамическое трассирование позволяет колоссально сократить время и затраты труда проектировщиков, особенно при реконструкции, обосновании инвестиций и многочисленных согласованиях проекта.

Создание черных профилей

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

Имеется возможность автоматизированного ввода информации о дождеприемных колодцах, подземных и надземных коммуникациях.

Коммуникации отображаются в рабочих окнах программы и на выходных чертежах.

Проектирование продольного профиля

Продольный профиль представляется в виде вершин вертикальных углов со вписанными в них вертикальными кривыми (по Антонову).

Топоматик Robur позволяет автоматически создавать продольный профиль по руководящей отметке и шагу проектирования. Имеется исчерпывающий набор функций для редактирования профиля, что обеспечивает чрезвычайную гибкость и удобство проектирования, особенно на сложных участках.

Для проектирования дорог в условиях городской застройки Топоматик Robur предоставляетспециальныймеханизмсозданияпродольногопрофиляпутемперемещения поперечника, а также возможность автоматического создания пилообразного продольного профиля по водоотводным лоткамвусловияхплоскогорельефа.

ТопоматикRobur позволяетиспользовать для моделирования трассы до 19 связанных продольных профилей:

Читайте также: