"Начиная"

GeoPandas: Практическое руководство

Картирование землетрясений с 1965 по 2016 гг.

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

В этом посте мы визуализируем значительные землетрясения, произошедшие между 1965 и 2016 годами. Набор данных доступен на Kaggle.

GeoPandas имеет две основные структуры данных: GeoDataFrame и GeoSeries. Их можно рассматривать как подклассы Series и DataFrame от Pandas.

Начнем с установки и импорта GeoPandas вместе с другими библиотеками, которые мы будем использовать.

pip install geopandas
import geopandas
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

GeoDataFrame можно создать, изменив pandas DataFrame. Таким образом, мы сначала прочитаем набор данных в DataFrame pandas.

eq = pd.read_csv("/content/earthquakes.csv")
eq.shape
(23412, 21)

Набор данных содержит более 23412 событий, большинство из которых являются землетрясениями. Мы отфильтруем DataFrame, чтобы он содержал только данные о землетрясениях.

eq = eq[eq['Type'] == 'Earthquake']

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

eq = eq[['Date', 'Time', 'Latitude', 'Longitude', 'Depth', 'Magnitude']]
eq.head()

У нас есть DataFrame, который содержит данные, местоположение, глубину и магнитуду более 20 тысяч землетрясений. Чтобы использовать GeoPandas, нам нужно преобразовать этот DataFrame pandas в GeoDataFrame.

Мы будем использовать функцию GeoDataFrame следующим образом:

gdf = geopandas.GeoDataFrame(eq, geometry=geopandas.points_from_xy(eq.Longitude, eq.Latitude))
gdf.head()

Разница между GeoDataFrame и pandas DataFrame - это GeoSeries, называемая «геометрией». Когда пространственный метод применяется к GeoDataFrame, он воздействует на столбец геометрии.

Думайте о столбце «геометрия» как о переформатированной версии значений широты и долготы.

Теперь у нас есть данные о землетрясениях, хранящиеся в GeoDataFrame. Следующим шагом будет нарисовать карту мира, что легко сделать с помощью «мира» GeoDataFrame.

world = geopandas\
.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world.columns
Index(['pop_est', 'continent', 'name', 'iso_a3', 'gdp_md_est', 'geometry'], dtype='object')

Он содержит основную информацию о странах и их местонахождении. Давайте сейчас нарисуем пустую карту мира.

world.plot(color='white', edgecolor='black', figsize=(12,8))

Чтобы нарисовать карту землетрясений, мы создадим объект Axes карты мира, а затем нарисуем землетрясения на основе столбца «геометрия».

ax = world.plot(color='white', edgecolor='black', figsize=(16,12))
gdf.plot(ax=ax, color='red', markersize=2)
plt.show()

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

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

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

Один из способов сосредоточиться на конкретной стране - отфильтровать землетрясения на основе значений широты и долготы. Значения широты и долготы для Японии даны как:

  • широта = 36,204824
  • долгота = 138,252924

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

japan_lat = 36.204824
japan_long = 138.252924
japan_eq = eq[(eq.Latitude > 30) & (eq.Latitude < 42) & (eq.Longitude > 130) & (eq.Longitude < 145)]
japan_eq = japan_eq.reset_index(drop=True)

Я настроил диапазон так, чтобы локация занимала площадь Японии. Обратите внимание, что эти значения не являются границами Японии.

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

japan_gdf = geopandas.GeoDataFrame(japan_eq, geometry=geopandas.points_from_xy(japan_eq.Longitude, japan_eq.Latitude))

Мы построим карту Японии и отметим землетрясения в japan_gdf.

ax = world[world.name == 'Japan'].plot(color='white', edgecolor='black', figsize=(12,8))
japan_gdf.plot(ax=ax, color='blue', markersize=japan_gdf['Magnitude']*4)
plt.title("Earthquakes, 1965-2016", fontsize=16)
plt.show()

Для фильтрации карты мы использовали столбец «имя» мира GeoDataFrame.

Вот итоговая карта землетрясений в Японии.

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

Заключение

GeoPandas - это функциональная библиотека, которая ускоряет процесс создания геопространственных визуализаций. Он предоставляет множество функций и методов для обогащения карт.

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

Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.