Сопоставление данных о землетрясениях из 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.

Image description

Приступим к извлечению признаков из этих данных:

features = data['features']
Image description

Теперь мы создадим различные списки и заполним их с помощью цикла 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)
Image description

Теперь мы имеем данные о землетрясениях, организованные в 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 выводится на экран, делая данные о землетрясениях наглядными.

Image description

Если вы хотите сделать карту темной, то это можно сделать с помощью следующего фрагмента кода:

turkey_map = folium.Map(location=turkey_coord, zoom_start=5.5, tiles='cartodbdark_matter')
Image description
+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *