Мировая сейсмическая активность за последние 30 дней: различия между версиями
Материал из Поле цифровой дидактики
Нет описания правки |
Нет описания правки |
||
| (не показано 7 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
= Мониторинг мировой сейсмической активности = | = Мониторинг мировой сейсмической активности = | ||
== | == Общая информация == | ||
* ''' | * '''Авторы:''' Студентки группы [[Категория:ИНДОР-211]] - [[Участник:PolezhaevaMA|PolezhaevaMA]], [[Участник:Самира Мохаммад|Самира Мохаммад]] | ||
* '''Дата исследования:''' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} | * '''Дата исследования:''' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} | ||
* '''Источник данных:''' USGS Earthquake Hazards Program | * '''Источник данных:''' USGS Earthquake Hazards Program | ||
* '''Период анализа:''' последние 30 дней | * '''Период анализа:''' последние 30 дней | ||
== Цель исследования == | == Цель исследования == | ||
| Строка 17: | Строка 16: | ||
# Рассчитать основные статистические показатели | # Рассчитать основные статистические показатели | ||
# Интерпретировать полученные результаты | # Интерпретировать полученные результаты | ||
== Программный код == | == Программный код == | ||
| Строка 30: | Строка 26: | ||
import json | import json | ||
# НАСТРОЙКИ - ЗЕМЛЕТРЯСЕНИЯ (USGS) | # НАСТРОЙКИ - ЗЕМЛЕТРЯСЕНИЯ (USGS) | ||
REGION_NAME = "Весь мир (M ≥ 4.5)" | REGION_NAME = "Весь мир (M ≥ 4.5)" | ||
| Строка 99: | Строка 93: | ||
print("Данные сохранены в 'earthquake_data_30days.csv'") | print("Данные сохранены в 'earthquake_data_30days.csv'") | ||
# ВИЗУАЛИЗАЦИЯ | |||
# ВИЗУАЛИЗАЦИЯ | |||
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True) | fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True) | ||
# ГРАФИК 1: Магнитуда | # ГРАФИК 1: Магнитуда | ||
axes[0].plot(df['Время'], df['Магнитуда'], color='red', marker='o', linewidth=1, markersize=4) | axes[0].plot(df['Время'], df['Магнитуда'], color='red', marker='o', linewidth=1, markersize=4) | ||
axes[0].set_title(f'Магнитуда землетрясений за последние 30 дней (M ≥ 4.5)') | axes[0].set_title(f'Магнитуда землетрясений за последние 30 дней (M ≥ 4.5)') | ||
| Строка 113: | Строка 105: | ||
axes[0].grid(True) | axes[0].grid(True) | ||
# ГРАФИК 2: Глубина | # ГРАФИК 2: Глубина | ||
colors = ['darkblue' if d < 70 else 'lightblue' for d in df['Глубина, км']] | colors = ['darkblue' if d < 70 else 'lightblue' for d in df['Глубина, км']] | ||
axes[1].bar(df['Время'], df['Глубина, км'], color=colors, alpha=0.7, width=0.04) | axes[1].bar(df['Время'], df['Глубина, км'], color=colors, alpha=0.7, width=0.04) | ||
| Строка 122: | Строка 114: | ||
axes[1].grid(True) | axes[1].grid(True) | ||
# ГРАФИК 3: Широта эпицентра | # ГРАФИК 3: Широта эпицентра | ||
axes[2].plot(df['Время'], df['Широта, °'], color='green', marker='s', linewidth=1, markersize=4) | axes[2].plot(df['Время'], df['Широта, °'], color='green', marker='s', linewidth=1, markersize=4) | ||
axes[2].set_title('Широта эпицентра (географическое смещение)') | axes[2].set_title('Широта эпицентра (географическое смещение)') | ||
| Строка 135: | Строка 127: | ||
plt.show() | plt.show() | ||
# СТАТИСТИКА | # СТАТИСТИКА | ||
print("\n" + "="*50) | print("\n" + "="*50) | ||
print("СТАТИСТИКА ЗЕМЛЕТРЯСЕНИЙ ЗА 30 ДНЕЙ") | print("СТАТИСТИКА ЗЕМЛЕТРЯСЕНИЙ ЗА 30 ДНЕЙ") | ||
| Строка 153: | Строка 144: | ||
=== График 1. Динамика магнитуды === | === График 1. Динамика магнитуды === | ||
[[Файл: | [[Файл:Магнитура.png|thumb|center|1000px|Динамика магнитуды за последние 30 дней]] | ||
'''Анализ графика магнитуды:''' | '''Анализ графика магнитуды:''' | ||
| Строка 162: | Строка 153: | ||
=== График 2. Глубина очага === | === График 2. Глубина очага === | ||
[[Файл:Глубина очага.png|thumb|center|1000px|Глубина очага землетрясения]] | |||
'''Анализ графика глубин:''' | '''Анализ графика глубин:''' | ||
* Темно-синие столбцы — землетрясения в земной коре (до 70 км) | * Темно-синие столбцы — землетрясения в земной коре (до 70 км) | ||
| Строка 168: | Строка 160: | ||
=== График 3. Широта эпицентра === | === График 3. Широта эпицентра === | ||
[[Файл:Широта эпицентра.png|thumb|center|1000px|Широта эпицентра]] | |||
'''Анализ широтного распределения:''' | '''Анализ широтного распределения:''' | ||
* Зеленая линия показывает изменение широты эпицентров во времени | * Зеленая линия показывает изменение широты эпицентров во времени | ||
| Строка 178: | Строка 171: | ||
! Показатель !! Значение | ! Показатель !! Значение | ||
|- | |- | ||
| Всего землетрясений (M ≥ 4.5) || | | Всего землетрясений (M ≥ 4.5) || 549 | ||
|- | |- | ||
| | | Максимальная магнитуда || 7.5 М | ||
|- | |- | ||
| | | Средняя магнитуда || 4.86 М | ||
|- | |- | ||
| | | Максимальная глубина || 650 км | ||
|- | |- | ||
| | | Минимальная глубина || 6 км | ||
|} | |} | ||
| Строка 203: | Строка 194: | ||
* '''Для экологии''': определены зоны повышенной сейсмической опасности | * '''Для экологии''': определены зоны повышенной сейсмической опасности | ||
* '''Для образования''': разработан учебный кейс по работе с реальными API | * '''Для образования''': разработан учебный кейс по работе с реальными API | ||
== Используемые технологии == | |||
{| class="wikitable" style="width: 100%;" | |||
|- | |||
! style="width: 20%;" | Компонент | |||
! style="width: 25%;" | Технология | |||
! style="width: 55%;" | Назначение | |||
|- | |||
| '''API''' || USGS FDSN Web Service || Получение данных о землетрясениях в реальном времени | |||
|- | |||
| '''Язык программирования''' || Python || Основной язык разработки | |||
|- | |||
| '''HTTP-запросы''' || Requests || Отправка запросов к API и получение ответов | |||
|- | |||
| '''Обработка данных''' || Pandas || Структурирование, фильтрация и анализ данных | |||
|- | |||
| '''Визуализация''' || Matplotlib || Построение графиков магнитуды, глубины и широты | |||
|- | |||
| '''Работа с JSON''' || json || Парсинг ответов API | |||
|- | |||
| '''Работа с данными''' || datetime || Вычисление временных интервалов | |||
|- | |||
| '''Формат хранения''' || CSV || Сохранение результатов для дальнейшего анализа | |||
|} | |||
== Используемые источники данных == | == Используемые источники данных == | ||
| Строка 209: | Строка 224: | ||
[[Категория:BigDataWorks]] | [[Категория:BigDataWorks]] | ||
[[Категория: | [[Категория:ИНДОР-211]] | ||
[[Категория: | [[Категория:Работы ИНДОР-211]] | ||
Текущая версия от 12:09, 14 апреля 2026
Мониторинг мировой сейсмической активности
Общая информация
- Авторы: Студентки группы - PolezhaevaMA, Самира Мохаммад
- Дата исследования: 17 апрель 2026
- Источник данных: USGS Earthquake Hazards Program
- Период анализа: последние 30 дней
Цель исследования
Проанализировать глобальную сейсмическую активность за последние 30 дней для выявления закономерностей в изменении магнитуды, глубины и географического положения эпицентров землетрясений.
Задачи проекта
- Собрать данные о землетрясениях магнитудой ≥ 4.5 через USGS API
- Обработать и структурировать данные с помощью библиотеки Pandas
- Построить три графика: динамика магнитуды, распределение глубин, широтное смещение эпицентров
- Рассчитать основные статистические показатели
- Интерпретировать полученные результаты
Программный код
import requests
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import json
# НАСТРОЙКИ - ЗЕМЛЕТРЯСЕНИЯ (USGS)
REGION_NAME = "Весь мир (M ≥ 4.5)"
# Даты: последние 30 дней
end_date = datetime.now().date()
start_date = end_date - timedelta(days=30)
# URL для USGS API
URL = (
f"https://earthquake.usgs.gov/fdsnws/event/1/query?"
f"format=geojson&"
f"starttime={start_date}&"
f"endtime={end_date}&"
f"minmagnitude=4.5&"
f"orderby=time"
)
print(f"Запрашиваем данные о землетрясениях за последние 30 дней...")
print(f"URL: {URL}")
try:
response = requests.get(URL, timeout=30)
print(f"Статус ответа: {response.status_code}")
if response.status_code == 200 and response.text.strip():
data = response.json()
print("✓ JSON успешно загружен")
else:
print("✗ Пустой ответ от сервера")
exit()
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")
exit()
except json.JSONDecodeError as e:
print(f"Ошибка парсинга JSON: {e}")
exit()
# Извлекаем данные
events = []
for feature in data.get('features', []):
props = feature['properties']
coords = feature['geometry']['coordinates']
events.append({
'Время': props['time'],
'Магнитуда': props['mag'],
'Место': props['place'],
'Широта, °': coords[1],
'Долгота, °': coords[0],
'Глубина, км': coords[2]
})
if not events:
print("Землетрясений за указанный период не найдено.")
exit()
# Создаём DataFrame
df = pd.DataFrame(events)
df['Время'] = pd.to_datetime(df['Время'], unit='ms')
df = df.sort_values('Время')
print(f"✓ Найдено {len(df)} землетрясений магнитудой ≥ 4.5")
# Сохраняем в CSV
df.to_csv('earthquake_data_30days.csv', index=False, encoding='utf-8')
print("Данные сохранены в 'earthquake_data_30days.csv'")
# ВИЗУАЛИЗАЦИЯ
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)
# ГРАФИК 1: Магнитуда
axes[0].plot(df['Время'], df['Магнитуда'], color='red', marker='o', linewidth=1, markersize=4)
axes[0].set_title(f'Магнитуда землетрясений за последние 30 дней (M ≥ 4.5)')
axes[0].set_ylabel('Магнитуда')
axes[0].axhline(y=6.0, color='orange', linestyle='--', alpha=0.7, label='Сильное (M≥6)')
axes[0].axhline(y=7.0, color='red', linestyle='--', alpha=0.7, label='Крупное (M≥7)')
axes[0].legend()
axes[0].grid(True)
# ГРАФИК 2: Глубина
colors = ['darkblue' if d < 70 else 'lightblue' for d in df['Глубина, км']]
axes[1].bar(df['Время'], df['Глубина, км'], color=colors, alpha=0.7, width=0.04)
axes[1].set_title('Глубина очага землетрясения')
axes[1].set_ylabel('Глубина, км')
axes[1].axhline(y=70, color='red', linestyle='--', alpha=0.5, label='Граница (70 км)')
axes[1].legend()
axes[1].grid(True)
# ГРАФИК 3: Широта эпицентра
axes[2].plot(df['Время'], df['Широта, °'], color='green', marker='s', linewidth=1, markersize=4)
axes[2].set_title('Широта эпицентра (географическое смещение)')
axes[2].set_ylabel('Широта, °')
axes[2].set_xlabel('Дата и время')
axes[2].axhline(y=0, color='black', linestyle='--', alpha=0.5, label='Экватор')
axes[2].legend()
axes[2].grid(True)
plt.tight_layout()
plt.savefig('earthquake_3graphs_30days.png', dpi=150, bbox_inches='tight')
plt.show()
# СТАТИСТИКА
print("\n" + "="*50)
print("СТАТИСТИКА ЗЕМЛЕТРЯСЕНИЙ ЗА 30 ДНЕЙ")
print("="*50)
print(f"Всего событий: {len(df)}")
print(f"Самое сильное: M{df['Магнитуда'].max():.1f}")
print(f"Средняя магнитуда: {df['Магнитуда'].mean():.2f}")
print(f"Самое глубокое: {df['Глубина, км'].max():.0f} км")
print(f"Самое мелкое: {df['Глубина, км'].min():.0f} км")
print(f"Средняя глубина: {df['Глубина, км'].mean():.0f} км")
print(f"Период: с {start_date} по {end_date}")
Результаты визуализации
График 1. Динамика магнитуды

Анализ графика магнитуды:
- Красная линия показывает изменение силы землетрясений во времени
- Оранжевая пунктирная линия — порог сильного землетрясения (M ≥ 6)
- Красная пунктирная линия — порог крупного землетрясения (M ≥ 7)
- Точки соответствуют отдельным сейсмическим событиям
График 2. Глубина очага

Анализ графика глубин:
- Темно-синие столбцы — землетрясения в земной коре (до 70 км)
- Голубые столбцы — глубокие землетрясения (>70 км)
- Красная пунктирная линия — граница между корой и мантией
График 3. Широта эпицентра

Анализ широтного распределения:
- Зеленая линия показывает изменение широты эпицентров во времени
- Черная пунктирная линия — экватор (0°)
- Положительные значения — северное полушарие, отрицательные — южное
Статистические результаты
| Показатель | Значение |
|---|---|
| Всего землетрясений (M ≥ 4.5) | 549 |
| Максимальная магнитуда | 7.5 М |
| Средняя магнитуда | 4.86 М |
| Максимальная глубина | 650 км |
| Минимальная глубина | 6 км |
Выводы
На основе анализа трех графиков можно сделать следующие выводы:
- По магнитуде: большинство землетрясений имеют магнитуду в диапазоне 4.5-5.5, крупные события (M≥7) происходят редко
- По глубине: преобладают неглубокие землетрясения (0-70 км), что соответствует зонам разломов земной коры
- По широте: эпицентры концентрируются в Тихоокеанском огненном кольце (между 60° ю.ш. и 60° с.ш.)
Практическая значимость
- Для науки: создана методика анализа сейсмических данных с открытым кодом
- Для экологии: определены зоны повышенной сейсмической опасности
- Для образования: разработан учебный кейс по работе с реальными API
Используемые технологии
| Компонент | Технология | Назначение |
|---|---|---|
| API | USGS FDSN Web Service | Получение данных о землетрясениях в реальном времени |
| Язык программирования | Python | Основной язык разработки |
| HTTP-запросы | Requests | Отправка запросов к API и получение ответов |
| Обработка данных | Pandas | Структурирование, фильтрация и анализ данных |
| Визуализация | Matplotlib | Построение графиков магнитуды, глубины и широты |
| Работа с JSON | json | Парсинг ответов API |
| Работа с данными | datetime | Вычисление временных интервалов |
| Формат хранения | CSV | Сохранение результатов для дальнейшего анализа |
Используемые источники данных
- USGS Earthquake Catalog: https://earthquake.usgs.gov/earthquakes/search/
- API документация: https://earthquake.usgs.gov/fdsnws/event/1/
