"Начиная"
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. Они также предоставляют примеры, которые помогут легче адаптировать функции и методы.
Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.