Всем привет, меня зовут Кай.
Это случилось в Желтом море некоторое время назад.5.2级
Землетрясение, в то время друзья в кругу друзей в Восточном Китае были все"шок".
Сегодня давайте заглянем в прошлое10
Распределение землетрясений в году!
1. Сбор данных
прямо в中国地震台网
можно скачать впоследние 10 летсейсмические данные.
Китайская сеть землетрясений:
все напрямуюИсторический запросВыбратьлимит времениСделав запрос, нажмитесохранить в локальномданные можно получить.
Предварительный просмотр локальных данных выглядит следующим образом:
2. Обработка данных
Во время сбора данных мы обнаружили, что полученные данные содержаливремя,величина,широта и долгота,глубинаа такжеИсходное положение. Долгота и широта находятся под картой Baidu.Учитывая, что будут различия в долготе и широте разных карт, а наш последующий рисунок использует карту Gaode, поэтому долготу и широту необходимо преобразовать здесь.
2.1 Преобразование долготы и широты
Открытая платформа AutoNavi имеет соответствующиеПреобразование долготы и широтыизAPI
, мы можем вызвать его напрямую (свободной квоты достаточно).
import requests
import pandas as pd
# 读取数据
df = pd.read_excel(r'eqList.xlsx')
longitude_list = []
latitude_list = []
# 百度地图经纬度转换为高德地图经纬度
for i , location in enumerate(df[['经度(°)','纬度(°)']].values):
location = str(location[0])+','+str(location[1])
url = 'https://restapi.amap.com/v3/assistant/coordinate/convert?'
parames = {
'locations':location,
'coordsys':'baidu',
'key':'你的key',
}
r = eval(requests.get(url, params=parames).json()['locations'])
# 经度
longitude_list.append(r[0])
# 纬度
latitude_list.append(r[1])
print(f'\r{i+1}',end='')
df['经度(°)'] = longitude_list
df['纬度(°)'] = latitude_list
Таким образом, мы успешно преобразовали координаты широты и долготы картографической системы Baidu в координаты широты и долготы картографической системы Gaode.
2.2 Обработка данных во время землетрясения
Что касается времени землетрясения, я надеюсь быть точным до месяца и часа для последующего статистического анализа.
# 转换为时间格式
df['发震时刻'] = pd.to_datetime(df['发震时刻'])
# 获取年月
df['月份'] = df['发震时刻'].apply(lambda x: str(x)[:7])
# 获取小时
df['小时'] = df['发震时刻'].dt.hour
Здесь я чувствую, что моя операция получения года и месяца немногоlow
, есть друзья, у которых есть лучшие решения, пожалуйста, оставьте сообщение, я хочу научиться.
2.3. Место землетрясения (провинция и город)
Поскольку эталонное местоположение в исходных данных не может быть легко выделено из провинции и города, я планирую использовать информацию о широте и долготе для передачи данных AutoNavi.API
чтобы получить. Обратитесь к предыдущему «».
citys = []
provinces = []
for i , location in enumerate(df[['经度(°)','纬度(°)']].values):
location = str(location[0])+','+str(location[1])
url = 'https://restapi.amap.com/v3/geocode/regeo?'
params = {
'location':location,
'key':'你的key',
'extensions':'base',
'batch':'false',
'roadlevel':0,
}
r = requests.get(url, params=params)
data = r.json()['regeocode']
city = data['addressComponent']['city']
province = data['addressComponent']['province']
if len(city)==0:
city = province
citys.append(city)
provinces.append(province)
print(f'\r{i+1}',end='')
df['城市'] = citys
df['省'] = provinces
После вышеуказанной обработки мы окончательно получили следующие данные:
3. Статистика и визуализация
В этой части мы выполняем только простой статистический вывод, а не делаем аналогичные прогнозы или другой глубокий анализ, ведь на основе имеющихся необработанных данных мы не можем сделать слишком много ценных выводов.
3.1 Количество землетрясений по годам
Количество малых и средних землетрясений
в соответствии с[2, 4.6]
Как интервал средних и малых магнитуд землетрясений,За последние 10 лет в общей сложности 6188 раз, в среднем более 600 раз в год!
# 中小地震([2,4.6])
df['年份'] = df['发震时刻'].dt.year
df_cn = df[df['省']!='[]']
df_xiao = df_cn.query('2<=`震级(M)`<=4.6')
df_xiao.groupby('年份')['发震时刻'].count().to_frame('次数').reset_index()
Разрушительные землетрясения
в соответствии с[4.7, ∞]
Как интервал средних и малых магнитуд землетрясений,За последние 10 лет в общей сложности 505 раз, в среднем более 50 раз в год!
3.2. Количество землетрясений по провинциям
Учитывая, что некоторые землетрясения происходили в акватории моря, эта акватория объединена с акваторией Китайского моря, и мы не участвуем в тех, которые происходят за рубежом.
Кроме того, мы рассматриваем толькоРазрушительное землетрясениераспространение, можно найти в нашей странеСиньцзян,Тибет,Юньнань,ТайваньиСычуаньЭто сейсмоопасная зона!
# 各省 破坏性地震
df_province = df_cn.query('`震级(M)`>=4.7').groupby('省')['发震时刻'].count().to_frame('次数').sort_values(by='次数',ascending=False).reset_index()
провинция | Разрушительные землетрясения |
---|---|
Синьцзян | 98 |
Тибет | 63 |
Юньнань | 47 |
Тайвань | 47 |
Сычуань | 45 |
Цинхай | 32 |
Ганьсу | 10 |
Цзилинь | 9 |
Внутренняя Монголия | 7 |
Гуанси | 4 |
Хубэй | 3 |
Гуандун | 2 |
Хэбэй | 2 |
Гуйчжоу | 2 |
Чунцин | 2 |
Хэйлунцзян | 2 |
Цзянсу | 1 |
Фуцзянь | 1 |
Ляонин | 1 |
Шэньси | 1 |
3.3 Количество землетрясений по городам
В моей стране233
землетрясения произошли в каждом городе, и города с наибольшим количеством землетрясений в основном сосредоточены вСиньцзян,Сычуань.
Примечание. Статистика здесь представляет собой все данные о землетрясениях.
как Синьцзян克孜勒苏柯尔克孜自治州
,和田地区
Сычуань宜宾
и雅安
Ждать
Провинция | Город | частота |
---|---|---|
Синьцзян-Уйгурский автономный район | Кызылсу Киргизский автономный округ | 491 |
Синьцзян-Уйгурский автономный район | Хотан район | 431 |
Синьцзян-Уйгурский автономный район | Аксу район | 308 |
Тибетский автономный район | Нагку | 257 |
провинция Сычуань | Ибинь Сити | 237 |
Синьцзян-Уйгурский автономный район | Кашгарская область | 234 |
Синьцзян-Уйгурский автономный район | Барин Го Юй Монгольский автономный округ | 206 |
провинция Сычуань | город Яань | 188 |
Провинция Тайвань | Провинция Тайвань | 167 |
провинция Сычуань | Аба Тибетский и Цянский автономный округ | 167 |
【ГИФ】
3.4 График рассеяния распределения землетрясений
мы только смотримРазрушительное землетрясениеРаспределение, составленное в соответствии с информацией о координатах широты и долготы.
import folium.plugins as plugins
import folium
df = df[df['震级(M)']>=4.7]
ss1 = [[latitude,longitude] for latitude,longitude in df[['纬度(°)', '经度(°)']].values.tolist()]
m = folium.Map([39.904989, 116.405285],
tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
zoom_start=6,
attr='高德')
groups = folium.FeatureGroup('')
for l,label in zip(ss1,df['参考位置'].to_list()):
groups.add_child(
folium.CircleMarker(
location=l,
radius=1,
color='red',
fill=True,
fill_color='red',
fill_opacity=0.4,
popup=folium.Popup(html=label,max_width=100),
)
)
m.add_child(groups)
m.add_child(folium.LatLngPopup())
m.save('地震分布.html')
3.5 Тепловая карта распределения адресов
Видно, что юго-западная часть Синьцзяна и восточные воды провинции Тайвань являются сейсмоопасными районами.
data_all = df[['纬度(°)', '经度(°)','震级(M)']].values.tolist()
m = folium.Map([39.904989, 116.405285],
tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
zoom_start=6,
attr='高德')
hm = plugins.HeatMap(data_all, radius=10,
gradient={.1: 'green', .6: 'yellow', 1: 'red'},
)
hm.add_to(m)
hm.save('地震热力图.html')
3.6 Ежемесячная карта распределения землетрясений за последние 10 лет (динамическая)
Примечание. Статистика здесь представляет собой все данные о землетрясениях.
【Номер видео】
код чертежа
data_move = []
date_list = df['月份'].sort_values().unique()
for month in date_list:
data_move.append(df[df['月份'] == month][['纬度(°)', '经度(°)','震级(M)']].values.tolist())
m = folium.Map([39.904989, 116.405285],
tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
zoom_start=6,
attr='高德')
time_index = df['月份'].sort_values().unique().tolist()
hm = plugins.HeatMapWithTime(data_move,
index=time_index,
radius=10)
hm.add_to(m)
hm.save('地震动态热力图.html')
4. Дополнительные знания
Карта распределения сейсмических зон
Мы фильтруем землетрясения магнитудой 5 и выше, чтобы нарисовать карту распределения следующим образом:
В основном совпадают~
Выше все содержание на этот раз, если вы заинтересованы, нажмите在看
Приватный чат Xiaobian может получитьданныеха~