ython国家地震台网地震数据集完整分析pyechartsplotly,分析强震次数震级分布震级震源关系发生位置发生时段最大震级平均震级小能日记

编写这篇文章是为了记录自己是如何分析地震数据集,使用模块,克服一系列 \(bug\) 的过程。如果你是 \(python\) 初入数据分析的小白,那么这篇文章很适合你。阅读栏目时建议不要跳过任何步骤,从头看到尾你会收获很多。

\(Python\) 版本 \(3.10.2\),使用模块(包含两个主流绘图库)

读取数据集的方式很简单,由于列名为中文且带有特殊符号,我们这里对其进行简化全部修改为英文。可以直接修改 \(dataframe\) 的属性。或者使用 \(rename\) 方法。

一般来说中国地震台网中心提供的数据比较权威,不会有问题。但是为了以防万一,我们还是要进行数据清理,删除空行、重复行。

可以看出数据还是比较可靠的。

注册高德地图个人开发者,申请API,选择 Web服务。申请完成后查看开发文档,选择坐标转换。

比较以下两种方式获取的数据

可以看到 \(.values\) 返回的是可迭代的 \(numpy\) 数组对象。我们就可以按照接口规定的方式发送请求了。

Return a Numpy representation of the DataFrame.

Only the values in the DataFrame will be returned, the axes labels will be removed.

通过测试接口拿到的 \(json\) 中,我们关心的数据是 \(regeocode\) -> \(addressComponent\) -> \(city、province\)

循环遍历然后把省份城市加到两个数组内,最后再绑定到 \(dataframe\) 的两个新列上。

这部分代码的意思是假如拿到的 \(city\) 为空,应当把省份给 \(city\),否则会出现数据缺省。

引入编写的工具库函数,进行测试。警告如下

SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

变量 \(df\)(df_test) 其实是一个“标签”(描述符)而不是一个“容器”。截取数据的前三行,\(df\) 实际是一个指向 \(data\) 前三行的描述符,在内存中并没有为 \(df\) 分配新的地址存储希望截取的数据。

因此针对 \(df\) 的修改,会产生警告。因为 \(df\) 既没有数据也没有列名,其指向的是 \(data\) 的前三行。

这就是 \(python\) 所谓的“链式索引”(chained indexing)而引起的错误或警告。

但 \(python\) 比较聪明,为了防止报错退出程序,会自己拷贝一份我们希望截取的内容,使 \(df\) 指向拷贝的数据块,才能完成变更列名以及完成后面的计算。

解决方法是在截取数据的语句后加一个 \(.copy()\) 复制一份数据给 \(df\) 。

还是原来的代码,这里我们限定一些列防止行输出过长。

成功通过接口处理数据!

因为接口有使用次数限制,为了方便后续调试。我们将 \(6000\) 多行数据统一转换,保存为 \(csv\) 文件。这也会加快 \(pandas\) 模块读取数据集的速度。

有部分境内但没有明确城市省份的地震统一归为其他(一般为海域、边境地区)。 对 \(city、province\) 进行替换

这段代码放在末尾,用于一次性生成完整的 \(html\) 文件,具体可参考

\(pyecharts\) 和 \(plotly\) 分开写在两个文件中,引入需要的库。

M>=4.5级的属于可造成破坏的地震,但破坏轻重还与震源深度、震中距等多种因素有关。发震时刻、震级、震中统称为"地震三要素"。

统计 \(12\) 年内各地区发生 \(M>=4.5\) 强震的次数。

只考虑省份,不考虑境内其他地方,通过 \(query\) 进行过滤,再用 \(groupby\) 进行分组。

由于 \(pyecharts\) 地图模块的省份名必须是短省份名,否则将无法正确显示。为 \(utils\) 工具包编写如下函数,原理是根据字典查询并返回短省份名。

通过统计2010-2022年各省份 M>= 4.5 地震次数

需要注意的是使用 \(items()\) 获取的迭代器只能完整迭代一次。再次迭代会得到空数组。

category_gap=8 为各个柱体的间隔距离。

使用 \(lambda\) 匿名函数处理每行字段震级化为整数再进行 \(groupby\) ,速度较慢,后续有新方法会更新。

通过统计2010-2022年国内地震震级分布

使用 \(sort\_values\) 对特定列排序,并给定 \(ascending\) 参数要求降序排序,最后挑选前十个。

这里需要注意如果不使用 \(tolist()\) 会出现如下错误

通过统计2010-2022年中国前十大地震

\(symbol\_size\) 为点的大小。\(min\_=3\) 将图表前部分剔除。因为数据集的数据 \(M>=3\)。

通过震级震源深度散点图

需要注意的是给定一个 \(mapbox\_style\) 否则图表将无法正常显示。

结合全球地震带分布图分析,可以看出热力图轮廓与全球地震带分布图轮廓非常相似。基本上吻合。强地震大部分都发生在板块交界处。

这里用了另外一种方法,比上面的方法更加简洁,并明确指定了初始化图表的中心方位。

我国位于亚欧大陆东部,太平洋的西岸地区,两大地震带对于我国都有影响。我国的西南地区的喜马拉雅山脉和横断山脉地区就是地中海-喜马拉雅地震带经过的区域,亚欧板块和印度洋板块在南北方向上碰撞挤压,形成一系列呈东西走向的地震断裂带,以及横断山脉地区南北走向的地震断裂带。与此有关的地震带包括喜马拉雅地震带、青藏高原地震带、西北地震带、南北地震带、腾冲-澜沧地震带、滇西地震带和滇东地震带。

我国西部地区总体而言是地震相对高发的地区,包括西藏自治区、青海省、新疆维吾尔自治区、甘肃省、宁夏回族自治区、四川省和云南省等地都有较高的地震风险,其中越靠近地中海-喜马拉雅地震带,地震风险越高,比如说云南、四川、西藏等地区都是地震高风险省区。此外,我国东部海域地区又处在环太平洋地震带通过的地区,亚欧板块和太平洋板块在东西方向上相互挤压,形成一系列东北西南走向的地震断裂带。与此有关的地震带包括环太平洋地震带、东南沿海地震带和华北地震带。

相对而言环太平洋地震带离我国的距离比地中海-喜马拉雅地震带要远一些,因此,总体影响要小一些,但是某些地区地震活跃程度却非常高,比如我国的台湾省刚好地处环太平洋地震带,是我国地震频率最高的省份。除此之外广东省、福建省、安徽省、江苏省、山东省、河北省、河南省、山西省、陕西省、北京市、天津市、辽宁省、吉林省和黑龙江省都有地震带的分布。除去以上省份,我们发现内蒙古自治区、上海市、浙江省、江西省、湖北省、湖南省、贵州省和广西壮族自治区基本上没有地震带涉及,也就是地震风险相对较低的省份。

为了能够使用特殊日期函数,必须进行整列的日期转换。

需要注意图表属性 \(x\_axis\) 必须是字符串数组,否则将不能正常显示。

按月份来看每月地震次数在 30~90 次的范围波动。可通过方差判断各年月地震次数波动。

偶尔会有地震次数高峰期,可能是因为地壳活动过于强烈。

这里引入了 \(Jscode\) 特殊化要显示的标签。前面数据我们需要获取到字典数组。\(total\) 实际上是在计算行数。

THE END
0.滚动丨云南大理州漾濞县发生多次地震已致3人死亡中国地震台网正式测定:5月21日23时23分在云南大理州漾濞县(北纬25.60度,东经99.98度)发生4.5级地震,震源深度8千米。 5月21日23时27分发布: 中国地震台网正式测定:5月21日23时22分在云南大理州漾濞县(北纬25.66度,东经99.88度)发生3.5级地震,震源深度8千米。 jvzquC41yy}/isgyu4dqv3ep1yuc}nercmfu87243664;4pgymy89f:7dl8/;5494<947xjvor
1.基于SpringBoot和HeatMap的全球地震热力图可视化实践本文介绍了如何利用SpringBoot和HeatMap.js插件,结合中国地震台网数据,对全球地震带进行4.7级以上破坏性地震的热力图反演,展示了地震活动的分布情况。同时,文章提供了地震信息查询和热力图展示的详细步骤。 目录 前言 一、关于热力图 1、HeatMap简介 2、属性和方法介绍 jvzquC41dnuh0lxfp0tfv8~gncthmrsiyw€vj~4ctvodnn4fgvgjn|4358?65@>4
2.探访地震预警“福建经验”:强研发立法规促服务他表示,通过多年扎实推进地震科技创新,福建省地震局已完成具有自主知识产权的地震预警和烈度速报技术系统研发,建成地震预警、地震速报、烈度速报、大震破裂参数速报等实时处理技术系统和面向社会服务、秒级推送的地震预警信息技术系统。在省级地震台网中率先开展地震预警与烈度速报示范运行,实现地震发生首个台站触发后5-10jvzquC41yy}/eqnpcpkxu7hqo0io1ps1427:19;/4759:@9:464tj}rn