Использование Geopandas и Geoplot

На моей предыдущей работе мне приходилось довольно часто строить карты. Никогда не было особенно простого способа сделать это, поэтому я решил проверить свои навыки Python, чтобы создать карту. По пути я столкнулся с несколькими лежачими полицейскими, но в конце концов смог создать карту, которую намеревался сделать. Я считаю, что с большей практикой картографирование в Python станет очень простым. Первоначально я наткнулся на Geopandas и Geoplot для картографирования, которые я использую здесь, однако есть и другие библиотеки Python, которые создают более качественные карты, такие как Folium.

Решите, что сопоставлять

Во-первых, вы должны решить, что вы хотите нанести на карту и на каком географическом уровне находится эта информация. Я заинтересован в применении науки о данных к проблемам окружающей среды и устойчивости, поэтому я решил взглянуть на некоторые данные на уровне округов Национального управления океанических и атмосферных исследований (NOAA) для Соединенных Штатов. Я специально выбрал максимальную температуру по месяцам для каждого округа.

Во-вторых, вам нужно собрать данные. С веб-сайта данных климатического отдела NOAA я смог получить нужные мне данные, щелкнув ссылку на набор данных nClimDiv. После распаковки этих данных в локальную папку я был готов двигаться дальше.

В-третьих, вам нужно собрать правильный шейп-файл для построения ваших данных. Если вы не знаете, что такое шейп-файлы, эта ссылка поможет объяснить их назначение. Мне удалось получить шейп-файл уровня округа США из базы данных шейп-файлов TIGER/Line переписи населения США. Загрузите нужный набор данных и сохраните его в той же локальной папке, что и данные, которые вы хотите построить.

Подготовка карты

Шейп-файл

Как упоминалось выше, я использовал библиотеки Python Geopandas и Geoplot. Кроме того, я обнаружил, что мне также нужны установленные библиотеки Descartes. Чтобы установить эти библиотеки, мне пришлось запустить следующие команды bash с моего терминала:

Теперь вы сможете импортировать эти библиотеки, как и любую другую библиотеку Python (например, «импортировать pandas как pd»). Для загрузки в Shapefile вы можете использовать следующий метод Geopandas (gpd):

Файл данных

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

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

  • 02: Аляска
  • 15: Гавайи
  • 60: Американское Самоа
  • 66: Гуам
  • 69: Марианские острова
  • 72: Пуэрто-Рико
  • 78: Виргинские острова

Давайте сначала взглянем на шейп-файл:

Вы можете увидеть все округа в прилегающих Соединенных Штатах.

Слияние шейп-файла и набора данных

Шейп-файл и набор данных должны иметь общий столбец, чтобы сопоставлять данные для сопоставления. Я решил сопоставить по кодам FIPS. Чтобы создать коды FIPS в шейп-файле:

Чтобы создать коды FIPS в данных округа (Примечание: для простоты я отфильтровал данные только за 2018 год):

Наконец, чтобы объединить шейп-файл и набор данных:

Наконец, мы можем сопоставить данные с шейп-файлом. Я использовал метод geoplot.choropleth для отображения данных о максимальной температуре на шкале. Чем темнее красный цвет, тем выше была максимальная температура в данном округе. Карта создана на август 2018 года.

Вы можете видеть, что мы смогли нанести данные на карту графства США! Я надеюсь, что эта демонстрация поможет!

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

Первоначально опубликовано на http://github.com.