Сопоставление данных о землетрясениях из API USGS с помощью Folium

В этой статье мы покажем, как визуализировать землетрясения с магнитудой не менее 3, произошедшие в Турции с 6 по 13 февраля, используя API, предоставленный Институтом геологических исследований США (USGS).
Импортируем необходимые библиотеки:
import requests
import pandas as pd
import folium
from folium.plugins import HeatMap
Вот краткий обзор этих библиотек:
requests: Эта универсальная библиотека позволяет выполнять такие задачи, как отправка HTTP-запросов, получение данных из Интернета, доступ к веб-страницам и подключение к API.
pandas: служит для анализа и обработки данных, позволяя выполнять запросы к наборам данных, фильтровать их, объединять, группировать и выполнять другие операции с данными.
folium: Folium используется для создания интерактивных карт и может быть установлен с помощью команды pip install folium.
folium.plugins.HeatMap: Это расширение библиотеки folium, используемое для создания карт плотности.
Далее мы определим параметры для нашего API-запроса:
start_time = '2023-02-06'
end_time = '2023-02-13'
min_magnitude = 3
latitude = 39.1458
longitude = 34.1614
max_radius_km = 1000
Теперь отправим HTTP-запрос для получения данных о землетрясении:
response = requests.get(f'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime={start_time}&minmagnitude={min_magnitude}&latitude={latitude}&longitude={longitude}&maxradiuskm={max_radius_km}')
data = response.json()
В этом коде мы используем метод requests.get() для отправки GET-запроса к USGS Earthquake API, построив URL с использованием форматирования f-строк.
В случае успешного выполнения запроса будет получен код состояния 200, как показано ниже:
<Response [200]>
Переменная data теперь содержит словарь Python с данными о землетрясениях, полученными из USGS Earthquake API в формате JSON.
Приступим к извлечению признаков из этих данных:
features = data['features']
Теперь мы создадим различные списки и заполним их с помощью цикла for:
places = []
mags = []
times = []
lats = []
lons = []
weights = []
for feature in features:
places.append(feature['properties']['place'])
mags.append(feature['properties']['mag'])
times.append(pd.to_datetime(feature['properties']['time'], unit='ms').strftime('%y:%m:%d %H:%M:%S'))
lats.append(feature['geometry']['coordinates'][1])
lons.append(feature['geometry']['coordinates'][0])
weights.append(feature['properties']['mag'])
В приведенном выше цикле мы извлекаем значения местоположения, величины, времени, широты, долготы и веса из каждой характеристики и добавляем их в соответствующие списки.
Давайте объединим эти списки в DataFrame:
df = pd.DataFrame({
'Place': places,
'Magnitude': mags,
'Time': times,
'Latitude': lats,
'Longitude': lons,
'Weight': weights
})
df.tail(10)
Теперь мы имеем данные о землетрясениях, организованные в DataFrame.
Чтобы визуализировать эти данные на карте, выполним следующие действия
turkey_coord = [39, 35]
turkey_map = folium.Map(location=turkey_coord, zoom_start=5.5)
HeatMap(data=df[['Latitude', 'Longitude', 'Weight']], radius=15).add_to(turkey_map)
for index, row in df.iterrows():
folium.CircleMarker(
location=[row['Latitude'], row['Longitude']],
radius=row['Magnitude']/2,
color='red',
fill_color='red').add_to(turkey_map)
turkey_map
This code is used to visualize earthquakes in Turkey and consists of the following steps:
Определяется список turkey_coord, представляющий собой координаты центра (широта и долгота) карты.
Карта turkey_map создается с помощью функции folium.Map(). Начальный уровень масштабирования (zoom_start) устанавливается равным 5,5.
С помощью функции HeatMap() создается тепловая карта плотности. Тепловая карта формируется на основе данных о землетрясениях, содержащихся в кадре df DataFrame, а именно столбцов Latitude, Longitude и Weight. Радиус тепловой карты устанавливается равным 15, и она добавляется к turkey_map.
В цикле for выполняется итерация по каждой строке кадра df DataFrame. Для каждого землетрясения создается круговой маркер (folium.CircleMarker). Местоположение маркера определяется значениями широты и долготы землетрясения. Радиус окружности определяется магнитудой землетрясения (Magnitude), деленной на 2. Цвет контура и заливки окружности устанавливается красным. Затем эти окружности добавляются на карту turkey_map.
Наконец, карта turkey_map выводится на экран, делая данные о землетрясениях наглядными.
Если вы хотите сделать карту темной, то это можно сделать с помощью следующего фрагмента кода:
turkey_map = folium.Map(location=turkey_coord, zoom_start=5.5, tiles='cartodbdark_matter')