Построение геопространственных данных с помощью GeoPandas

Опубликовано: 20 Марта, 2022

GeoPandas - это инструмент с открытым исходным кодом для добавления поддержки географических данных в объекты Pandas. В этой статье мы собираемся использовать GeoPandas и Matplotlib для построения геопространственных данных.

Установка

Мы собираемся установить GeoPandas, Matplotlib, NumPy и Pandas.

 pip install geopandas
pip install matplotlib
pip install numpy
pip install pandas

Примечание. Если вы не хотите устанавливать эти модули локально на свой компьютер, используйте Jupyter Notebook или Google Colab.

Начиная

Импорт модулей и набора данных

Мы собираемся импортировать Pandas для структуры данных фрейма данных, NumPy для некоторых математических функций, GeoPandas для поддержки и обработки геопространственных данных и Matplotlib для фактического построения карт.

 импортировать панд как pd
импортировать географические карты как gpd
импортировать numpy как np
импортировать matplotlib.pyplot как plt

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

Python3

import pandas as pd
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
  
world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
world.head()

Выход:

world.head ()

Some of the other datasets to play with are ‘naturalearth_cities’ and ‘nybb’. Feel free to experiment with them later. We can use world and plot the same using Matplotlib.

Python3

world.plot()

Выход:

Мировой сюжет

Проанализировать наборы данных

Now, if we see world, we have a lot of fields. One of them is GDP estimate(or gdp_md_est). However, to show how easily data can be filtered in or out in pandas, let’s filter out all continents except Asia. 

Python3

worldfiltered = world[world.continent == "Asia"]
worldfiltered.plot(column ="gdp_md_est", cmap ="Reds")

GDP of Countries in Asia

Свойство cmap используется для отображения данных в указанном оттенке. Более темные оттенки означают более высокое значение, а более светлые оттенки - более низкое значение. Теперь давайте проанализируем данные для оценки численности населения ( pop_est ).

Python3

world.plot(column ="pop_est")

Выход:

Оценка населения

The above image is not very good in conveying the data. So let’s change some properties to make it more comprehensible. First, let’s increase the size of the figure and then set an axis for it. We first plot the world map without any data to on the axis and then we overlay the plot with the data on it with the shade red. This way the map is more clear and dark and makes the data more understandable. However, this map is still a little vague and won’t tell us what the shades mean.

Python3

fig, ax = plt.subplots(1, figsize =(16, 8))
world.plot(ax = ax, color ="black")
world.plot(ax = ax, column ="pop_est", cmap ="Reds")

Выход:

Мировое население

Давайте импортируем инструменты, которые позволяют нам делать разделители внутри сюжета. После этого мы построим график, как и раньше, но на этот раз добавим цвет лица. Свойство facecolor изменит цвет фона на установленный цвет (в данном случае голубой). Теперь нам нужно создать разделитель для создания цветовой рамки внутри графика, очень похожий на разделители в HTML. Мы создаем разделитель и устанавливаем его свойства, такие как размер, выравнивание и т. Д.

Then we need to create the color box in the divider we created. So obviously, the highest value in the color box is going to be the highest population in the dataset and the lowest value is going to be zero. 

Python3

from mpl_toolkits.axes_grid1 import make_axes_locatable
  
  
fig, ax = plt.subplots(1, figsize =(16, 8),
                       facecolor ="lightblue")
  
world.plot(ax = ax, color ="black")
world.plot(ax = ax, column ="pop_est", cmap ="Reds",
           edgecolors ="grey")
  
# axis for the color bar
div = make_axes_locatable(ax)
cax = div.append_axes("right", size ="3 %", pad = 0.05)
  
# color bar
vmax = world.pop_est.max()
mappable = plt.cm.ScalarMappable(cmap ="Reds",
                                 norm = plt.Normalize(vmin = 0, vmax = vmax))
cbar = fig.colorbar(mappable, cax)
  
ax.axis("off")
plt.show()

Выход:

Мировое население

Таким образом, в этой статье мы увидели, как мы можем использовать GeoPandas для получения геопространственных данных и их построения с помощью Matplotlib. Пользовательские наборы данных могут использоваться для анализа конкретных данных, а также могут использоваться данные по городу. Кроме того, GeoPandas можно использовать с Open Street Maps, которые предоставляют очень конкретные геопространственные данные (например, улицы, больницы в городе и т. Д.). Те же знания могут быть расширены и могут быть использованы для конкретного статистического анализа и анализа данных.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.