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

Анализ эпидемиологической ситуации в мире с помощью библиотеки folium

Время прочтения: 3 мин.

Открытые данные от Университета Джона Хопкинса можно найти в свободном доступе на гитхабе (ссылка).

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

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

import pandas as pd 
import folium
df = pd.read_csv("02-15-2021.csv")

Создадим базовую карту, чтобы посмотреть на нашу первую карту. Для нее укажем тип, первичную локацию, размер приближения.

m = folium.Map(tiles = 'Stamen Terrain', location = [56.3287, 44.002], min_zoom = 10)
m

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

url = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data'
country_shapes = f'{url}/world-countries.json'

folium.Choropleth(
    geo_data = country_shapes,
    min_zoom = 2,
    name = 'Covid-19',
    data = df,
    columns = ['Country_Region', 'Confirmed'],
    key_on = 'feature.properties.name',
    fill_color = 'OrRd',
    nan_fill_color = 'black',
    legend_name = 'Total Confirmed COVID cases',
).add_to(m)

m

Также мы можем добавить на карту маркеры с подробной информацией о данной части карты. Они кликабельны, поэтому при нажатии будут показывать нужные нам данные. Будем показывать там количество заболевших. Оставим только нужные столбцы и нарисуем нанесем маркеры на карту.

df_geo = df[['Lat', 'Long_', 'Confirmed']]
df_geo = df_geo.dropna()

m = folium.Map(tiles = 'Stamen Terrain', min_zoom = 1.5)

for i in range(df_geo.shape[0]):
  m.add_child(folium.CircleMarker(location = [df_geo['Lat'].iloc[i], df_geo['Long_'].iloc[i]], radius=1, 
                                    popup = 'Confirmed: {}'.format(int(df_geo['Confirmed'].iloc[i]), weight = 1), 
                                    color = 'red'))
m

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

Советуем почитать