Визуализация данных, географические данные

3 способа построить географическую карту в Python Altair

Учебное пособие по визуализации данных о том, как создать три разные карты в Python Altair: картографическую карту, карту плотности точек и карту пропорциональных символов.

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

Эта статья покажет вам, как создать географическую карту с помощью библиотеки Python Altair.

В статье будет рассмотрено следующее:

  • Загрузка карты
  • Хороплет карта
  • Карта плотности точек
  • Карта пропорциональных символов

Загрузка карты

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

Создание файла topoJSON выходит за рамки этой статьи, но в Интернете уже доступно множество ресурсов, которые предоставляют готовые к использованию карты, например:

Получив файл topoJSON, вы можете загрузить его в Altair с помощью функции topo_feature():

import altair as alt

url = # url to a topoJSON file
feature = # feature name to extract

data_map = alt.topo_feature(url, feature)

Функция topo_feature() получает в качестве входных данных URL-адрес файла topoJSON и объект для извлечения. Функция представляет собой строковое значение, соответствующее дочернему элементу атрибута objects в объекте topoJSON. Чтобы получить строку функции, откройте объект topoJSON для поиска атрибута objects.

Карта хороплет

Картограмма — это географическая карта, на которой регионы окрашены в соответствии с метрикой. Например, картограмма Соединенных Штатов может показать, в каких штатах самая высокая плотность населения.

Рассмотрим набор данных Ожидаемая продолжительность жизни при рождении, выпущенный OECD Data, как открытый набор данных [1]. Используйте следующий код, чтобы нарисовать картографическую карту в Altair, показывающую ожидаемую продолжительность жизни в Европе в 2010 году:

import pandas as pd
import altair as alt

alt.data_transformers.disable_max_rows()

df = pd.read_csv('data/life_expectancy_at_birth.csv')
df = df[df['Region'] == 'Europe & Central Asia']
df = df[df['Year'] == 2010]

url = "https://raw.githubusercontent.com/deldersveld/topojson/master/continents/europe.json"

data_map = alt.topo_feature(url, "continent_Europe_subunits")

alt.Chart(data_map).mark_geoshape().encode(
    tooltip='properties.geounit:N',
    color=alt.Color('Life Expectancy:Q')
).project('mercator').properties(
    width=500,
    height=300
).transform_lookup(
    lookup='properties.geounit',
    from_=alt.LookupData(df, 'Country', ['Country', 'Life Expectancy'])
)

Используйте функцию transform_lookup(), чтобы объединить набор данных data_map и набор данных ожидаемой продолжительности жизни. Предыдущий код строит следующую карту:

Карта плотности точек

Карта плотности точек — это географическая карта, на которой каждый объект представлен точкой. Например, карта плотности точек может отображать все национальные парки Европы. Точка будет представлять каждый парк.

Рассмотрим набор данных об аэропортах, опубликованный как открытые данные сайтом OurAirports.com. Подробнее о лицензии на датасет здесь. Используйте следующий код, чтобы нарисовать карту плотности точек в Altair:

import pandas as pd
import altair as alt
alt.data_transformers.disable_max_rows()

df = pd.read_csv('data/airports.csv')
df = df[df.type == 'small_airport']

url = "https://raw.githubusercontent.com/deldersveld/topojson/master/world-continents.json"
source = alt.topo_feature(url, "continent")

base = alt.Chart(source).mark_geoshape(
    fill='lightgray',
    stroke='white'
).project('mercator').properties(
    width=800,
    height=600
)

points = alt.Chart(df).mark_circle().encode(
    longitude='longitude_deg:Q',
    latitude='latitude_deg:Q',
    size=alt.value(10),
    tooltip='name:N',
    color=alt.value('red')
)

(base + points).properties(title='Small airports in the world').configure_title(fontSize=20)

В результате вы получите следующую карту:

Карта пропорциональных символов

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

Рассмотрим снова набор данных об аэропортах, опубликованный как открытые данные на сайте OurAirports.com. Используйте следующий код, чтобы нарисовать пропорциональную карту символов в Altair:

import pandas as pd
import altair as alt
alt.data_transformers.disable_max_rows()

url = "https://raw.githubusercontent.com/deldersveld/topojson/master/world-continents.json"
source = alt.topo_feature(url, "continent")

base = alt.Chart(source).mark_geoshape(
    fill='lightgray',
    stroke='white'
).project('mercator').properties(
    width=800,
    height=600
)

df = pd.read_csv('data/airports.csv')
df = df[df.type == 'large_airport']
df2 = df.groupby(by=['iso_country'])['name'].count().to_frame().reset_index()
df2.rename(columns={'name' : 'number_of_airports'},inplace=True)

points = alt.Chart(df).mark_circle().encode(
    longitude='longitude_deg:Q',
    latitude='latitude_deg:Q',
    size=alt.Size('number_of_airports:Q', title='# airports'),
    color=alt.value('red')
).properties(
    width=500,
    height=400
).transform_lookup(
    lookup='iso_country',
    from_=alt.LookupData(df2, 'iso_country', ['iso_country', 'number_of_airports'])
)

base + points

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

На следующем рисунке показана результирующая диаграмма:

Краткое содержание

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

Altair — очень полезная библиотека для визуализации данных. Например, вы можете использовать Altair для рисования временных рядов. Прочтите эту статью, чтобы узнать о 3 способах визуализации временных рядов, о которых вы, возможно, не знали в Altair.

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

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

Статьи по Теме





Дополнительный бонус

Если вам нравится визуализация данных, как и мне, рассмотрите возможность изучения истории данных. Data storytelling — это искусство рассказывать истории с помощью данных. Если вы достаточно знаете о визуализации данных, но хотите перейти к рассказыванию историй, прочитайте книгу А. Крибель и Евы Мюррей #Makeover Monday. Читайте личную рецензию на книгу здесь.

Рекомендации

[1] ОЭСР (2023 г.), Ожидаемая продолжительность жизни при рождении (индикатор). doi: 10.1787/27e0fc9d-en (по состоянию на 18 января 2023 г.)