用Python分析过去10年地震分布~
点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
夕阳无限好,只是近黄昏。
大家好,我是才哥。
前段时间在黄海海域发生了5.2级
地震,当时朋友圈华东一带的朋友们都“震动”了。
今天,就带大家一起看看过去10
年里地震的分布情况!
目录:
1. 数据获取
2. 数据处理
2.1. 经纬度转换
2.2. 发震时刻数据处理
2.3. 地震所在地(省市)
3. 统计与可视化
3.1. 历年地震数
3.2. 各省地震数
3.3. 各城市地震数
3.4. 地震分布散点图
3.5. 地址分布热力图
3.6. 近10年每月地震分布图(动态)
4. 补充知识
1. 数据获取
直接在中国地震台网
就可以下载到过去10年的地震数据。
中国地震台网:
https://news.ceic.ac.cn/index.html?time=1637318776
大家直接在历史查询里选择时间范围进行查询后,点击保存到本地即可获取数据。
存在本地的数据预览如下:
2. 数据处理
在数据获取的时候, 我们发现获取的数据包含时间、震级、经纬度、深度以及参考位置。而经纬度是百度地图下的,考虑到不同地图的经纬度会存在差异,而我们后续绘图采用的是高德地图,所以这里需要对经纬度进行转换。
2.1. 经纬度转换
高德开放平台有对应的经纬度转换的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
如此,我们就成功将百度地图系的经纬度坐标转换为了高德地图系的经纬度坐标。
2.2. 发震时刻数据处理
对于发震时刻来说,我希望的是精确到月份以及小时,用于后续统计分析。
# 转换为时间格式
df['发震时刻'] = pd.to_datetime(df['发震时刻'])
# 获取年月
df['月份'] = df['发震时刻'].apply(lambda x: str(x)[:7])
# 获取小时
df['小时'] = df['发震时刻'].dt.hour
这里我感觉我的获取年月的操作有点low
,有小伙伴有更好的方案还请留言哈,我要学习。
2.3. 地震所在地(省市)
由于在原始数据中参考位置无法便捷的解析出省和市,我这边打算用经纬度信息通过高德的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 = provincecitys.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 foliumdf = 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级以上地震绘制分布图如下:
基本吻合~
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
Python中encode和encoding的区别是什么?
手把手教你使用openpyxl库从Excel文件中提取指定的数据并生成新的文件(附源码)
手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)
盘点3种Python网络爬虫过程中的中文乱码的处理方法
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~
用Python分析过去10年地震分布~相关推荐
- python分析股票主力_筹码分布及计算原理
我们先做这样一个假设: 某公司有16股股票,这16股被3个不同的投资者持有.股东A曾在10元价位上买过3股,而后又在11元价位上买了6股:而股东B则在12元的持仓成本上买进了4股:股东C,在13元上买 ...
- Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?
作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...
- Python小题:一只兔子躲进了10个环形分布的洞中的一个
问题描述 一只兔子躲进了10个环形分布的洞中的一个.狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞去找:也没有找到,就隔2个洞,到第6个洞去找:以后每次多一个洞去找兔子--这样下去,如果一直找不到 ...
- Python学习笔记(40)~10个随机分布的坐标点
10个随机分布的坐标点 Demo #!/usr/bin/python3 from random import uniform''' uniform(a,b)生成[a,b)内的一个随机数 '''r=[( ...
- Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?
来源 | CDA 数据分析师 责编 | Carol Show me data,用数据说话. 今天我们聊一聊<创造营2020>各个小姐姐,点击下方视频,先睹为快: 最近可以追的综艺真是太多 ...
- 用Python分析淘宝2000款避孕套,得出这些有趣的结论
我们在上一篇的时候已经将淘宝数据爬取下来了,但是并没有做数据分析.所以今天这篇文章就是教大家如何去分析数据,得出一些有用的结论! Python语言相比其他语言的优势在哪里?猪哥认为是数据分析和人工智能 ...
- 'python program'.count('p')的值是_如何用Python分析泰坦尼克号生还率?
原标题:如何用Python分析泰坦尼克号生还率? 1912年当时世界上最大的豪华客轮泰坦尼克号在处女航中撞上冰山沉没,船上船员及乘客共有2224人,只有710人生还.当灾难突然降临时,所有人的生死瞬间 ...
- Python分析《我们与恶的距离》豆瓣剧评
Python分析<我们与恶的距离>豆瓣剧评 <我们与恶的距离>是一部非常有深度的台剧.演员的演技无可挑剔,剧情编排也很新颖,而且逻辑严谨,剧情环环相扣,不拖泥带水.剧中出了很 ...
- Python分析5000+抖音大V,发现大家都喜欢这类视频
写在前面 最近,我在知乎上看到一个关于抖音的问题. 里面提到了,目前我国人均每天刷短视频110分钟. 1 看这数据,看来我又被平均了. 不过老实说,只要一打开抖音,确实是有一种停不下来的感觉- 所以还 ...
最新文章
- PyTorch中的MIT ADE20K数据集的语义分割
- c++ ofstream 文件不存在_使用C语言中的头文件有什么技巧和注意事项吗?为什么不直接包含C文件呢?...
- thinkphp学习笔记7—多层MVC
- viewflipper动画切换屏幕
- python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案
- Tomcat(1)介绍、jdk安装、安装Tomcat ​ 配置Tomcat监听80端口
- 元宵节快乐 | 启明云端邀您一起猜灯谜了
- 分享 - 普通程序员如何转向AI方向
- 一步步构建大型网站架构(转)
- Windows Server 2008 配置使用动态IP和备用地址
- java求数组和值_用java编写数组求和,array[]和ArrayList()?
- 网站竞价推广抗恶意点击及屏蔽特定地区IP实例
- 网上购物系统功能业务逻辑导图_功能流程说明_OctShop
- 为什么你的ASO效果不好_ASO优化重要吗
- SRE岗位理解(上篇)—读SRE实战手册有感
- 记一次对网络抖动经典案例的分析
- 学计算机还是机电一体,上技校学计算机应用好还是机电一体化好?
- 初级第七旬06—初级课程第七旬试题
- java 文件服务器搭建_NFS文件共享服务器的搭建
- Java基础-数组01
热门文章
- Google安全浏览算法更新:屡教不改的站点将被屏蔽30天
- icloud无法注销,icloud服务中keyChain钥匙串无法关闭问题的解决。
- 计量经济学Stata-自用笔记
- 当前计算机技术在制图,浅谈计算机技术在测绘工程制图中的应用张琪平(原稿)...
- 如何解决word文档报错打不开呢?
- GEE——本地矢量无法上传到GEE中?Error: Projection exception. Ensure the projection is specified correctly
- 基于数学形态学的道路裂缝病害检测
- 白话空间统计之:Moran's I(莫兰指数)
- Windows HOOK 按键工具类
- Java 基础--封装