ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics
我不了解地震方面的东西,近年来,不知道是相关新闻报道变多了,还是地震本身变多了,还是个性化推荐算法越来越厉害。不禁让我产生一个疑问:地震是不是越来越频繁了?另一个很重要的原因是检查已学数据分析方法的迁移能力,大家都有自己所学的专业,所从事的行业,时间久了,在数据和业务上沉浸,对技术、方法反而陌生了。那么,找一个自己完全不了解的领域,换换思维,练练手,应该很有趣。
除了网上搜集的地震背景信息外,下面分两个部分展开,其一是美国地震局发布的数据,包含 1973-2022 年全球 6 级以上地震(以美国为主)。其二是中国地震台网发布的数据,包含 2012-2022 年中国检测到的地震(以中国为主)。无论是美国还是中国,发布的地震数据都是以本国的地震为主,包含部分国外的地震。
经过初步了解,我先对问题「地震越来越频繁了吗?」做一下说明。地震是非常复杂的地质活动,因时因地而变,莫说预测地震,就连收集地震数据也不容易。据官方报道,过去几十年,美国、中国都在不断地提升地震的监测能力,以发现震级更小、震源更深的地震,收集更多更精确的数据。有了质量更高的数据,可以总结更精确的地震规律,从而有望将规律应用于未来的预测。本文仅有中、美两份数据,针对「地震越来越频繁了吗?」,限于数据和能力,仅做如下简略分析:
无论震级大小,统计地震次数的年度变化趋势。发现 1990 后,地震次数明显增加,但是基于现有数据,难以区分地震活动和地震监测能力影响。既然无法直接回答文章题目,就从其它维度拆解分析,总结一些地震活动的规律也好。统计地震次数随震级的分布中,发现震级越小次数越多,地震越大次数越少,大致呈现指数级衰减变化。地震监测能力在震源深度和地震震级上有体现,因此可以继续拆解,接着,按年统计各级地震数目变化趋势,然而,并没有发现明显规律。而后,统计地震活动的空间分布,发现美国地震局发布的数据不仅限于美国本土,它是将本国地震监测网络探测到的地震选择性的发布了,分为两个部分,其一是美国本土,其二是公海或地震带,比如它并不发布中国西南、西北地区的地震活动。在中国发布的地震数据上,也发现类似的选择性发布。
我对中国的地震数据更有兴趣,在粗浅地分析美国发布的地震数据后,也类似展开分析,但是补充更加详细的空间分析,具体到各省的统计。河北唐山(3时42分,凌晨睡觉)、四川汶川(14时28分,午睡时间)地震给人留下了深刻的印象,因此,统计了地震频次随时段的分布规律,然而,地震在时段上并没有表现出规律。最后,通过震级与震深的关系,发现了中国当前的地震探测能力。
因中国发布的地震数据十分有限,之后,读者可以基于更加全面的美国发布的地震数据,类似地找到美国当前的地震探测能力,以及探测能力的时间变化。再将问题「地震越来越频繁了吗?」的范围收缩到美国及周边地区,分析区域内的地震是否越来越频繁。
从 time 字段,提取年份、月份字段。
图 4.1: 1973-2022 年世界 6级以上地震次数变化趋势
从图上来看,地震确实变多了。有坛友根据美国地震局发布的信息,解释此现象是因为探测能力变强了,能发现更多的地震,而不是地震变多了。
数据集 quakes6 中记录的最大地震为 9.1 级,最小地震为 6.0 级。
下面将震级区间 \([6,9.1]\) 作 32 等分,统计每个小震级区间内的地震数量,下图展示地震震级的总体分布情况,看起来特别像指数分布。
图 4.2: 1973-2022 年世界6级以上地震情况
图 4.3: 1973-2022 年世界6级以上地震分布
从图中来看,震级之间有明显的间隔缝隙,是不连续的,实际上,震级之间的最小间隔是 0.1 级。
图 4.4: 1973-2022 年世界6级以上地震分布
图 4.5: 1973-2022 年世界6级以上地震分布
地震震源的位置、深度、震级与地震监测能力的关系究竟是怎样的呢?也许要先回答这个问题,才能搞清楚大地震是明显变多了呢,还是地震监测能力升级了呢?一般来说,设备就算是老旧点,大地震监测应该不受影响吧。
相比于箱线图,提琴图在刻画数据分布上更加精细些。
图 4.6: 1973-2022 年世界6级以上地震分布
从地震的位置来看,基本都在板块的边界或交界处。
图 4.7: 1973-2010 年世界6级以上地震分布
数据都藏在 Excel 文件的格子 Cell 里,不同列的数据类型可能不一样,甚至同一列还出现不同类型的数据,比如将数值当作文本。为了把它们提取出来,将所有字段当作字符串。先准备一个字符串提取函数,从给定的一个字符串向量中,按照匹配模式提取一部分。
从字符串向量中过滤出含表头、发震时刻、震级(M)、纬度(°)、经度(°)、深度(千米)和参考位置等字段信息的子字符串向量。
去掉多余的字符,比如成对的 <Cell></Cell>,留下想要的数据字段。
可以说,这种办法简直是把 xls 文件给砸碎了,万幸地是数据文件还可以被当作 XML 文件读取,因此只要 xls 文件坏得还不彻底,这办法总是可以用的。
那么接下来就要拼起来,拼成一个 matrix,每一行记录包含 6 个字段。字符串向量 x_str_tidy 开头 6 个元素是表头,余下的 x_str_tidy[-c(1:6)] 是观测值,长度为 65304,分成 6 列,一共 10884 行。
查看初步整理出来的数据。
根据字段的实际类型,首先做一些基本的类型转换,如下:
从「发震时刻」字段提取日期、年份、月份、发震时段等信息。
整理好的数据集 dat 如下:
接下来要做一些探索工作,首先呼应一下本文题目,是不是地震越来越频繁了呢?看一下各年各月的地震次数再说。
以年份为横轴,月份为纵轴,用不同大小的黑点表示地震次数,落纵横线交叉点上。
初步看起来,地震次数有明显增加的趋势,那是不是说地震发生越来越频繁了呢?未必,根据中国地震局发布的新闻公告,地震监测预报预警能力持续提升,还有可能是之前一些小震级、远距离的地震活动没有监测出来。那么,去掉 4.5 级及以下的小地震,相当于减少监测能力的影响,统计大一些的地震数量的变化,应该能说明一些问题。
实际情况是,中国地震台网发布的地震活动数据,除了中国境内,还有境外的,而且境外的多半是一些大地震。地震监测相当于空间上不均匀的震级采样,导致大地震貌似变多了。如果将震级大于等于 6 级的筛选出来,结果就不一样了,见下图。
所以,接下来,还要从震次随震级的分布和震级的空间分布继续分析。
下面按年分组,以0.2级为窗宽,统计震次随震级的分布。从数量上看,无感或有感的小地震是很多的,远远大于 4.5 级以上可能造成破坏的地震数量。
图 5.4: 地震次数随震级的分布
笔者不了解地质学,也不了解地球物理,下面仅从数据分析和统计的角度做个也许不恰当的猜想。小地震就像是随机扰动,而大地震才是揭示地球活动规律的。地震毕竟通常发生在地下数十至数百千米的地方,影响地震活动的主要因素恐怕是地球本身的构造,以及那些能够对地球产生影响的力量,比如月球、太阳系。因此,若想通过地震观察到地球真正的活动规律,恐怕不是小地震可以揭示的,也不是短短十来年或几十年的数据就可以观测出来的。
相比于直方图,还可以用抖动图展示每次地震的震级数据,如图所示。抖动图在散点图的基础上添加随机扰动,其疏密变化能体现震级的分布。
图 5.5: 世界近 10 年的地震分布
抖动图适合于数据点不太多的情况,比如本文这样的数据集,才 1 万多观测值。如果遇到数以10万计的数据点,点与点之间重叠覆盖的情况会变严重,疏密程度不好观察,使用直方图或下面的岭线图会更合适。
图 5.6: 世界近 10 年的地震分布
根据中国地震台网的背景信息,4.5级以上的地震才可能会对人和周围环境造成破环,下面考虑震级大于4.5级的地震分布。
图 5.7: 世界近 10 年4.5级及以上震级分布
一般大地震之后,有小的余震,按常理来说,双峰似乎是正常的现象。从数据上看,奇怪的是近年来双峰变成了单峰,这是为什么呢?难道大地震后的余震是逐级减小下去的?此处,留待读者继续探索。
接下来,要将所有的点画在图上,单凭肉眼是无法从 10000 多个数据点看出什么空间分布的。
图 5.8: 世界近 10 年的地震分布
中国地震台网发布的数据除了中国境内的地震,还包含不少境外的地震,可能是仪器位于中国境内,在距离中国比较远的地方,只有较大的地震活动才能被监测到。本节主要关心中国的情况,先根据大致的经纬度范围,粗略地将中国及周边地区圈出来,观察地震活动的空间分布。
图 5.9: 中国及周边近 10 年的地震分布
不看不知道,一看要吓一跳,似乎哪里都有地震,只是西北、西南比较多,小地震比较多。下面再将比较关心的 4.5 级以上的地震圈出来,如图。
图 5.10: 中国及周边近 10 年 4.5 级及以上的地震分布
高德地图是具有甲级测绘资质的单位,一般来说,地图数据是比较权威可靠的。数据集 china_map 包含 35 个省或自治区,10 个字段,有行政编码、行政区名、市级行政区数量、区域中心、区域边界等信息。有的地理区域含有岛屿,由多个多边形组成,整个数据集是 MULTIPOLYGON 类型。
图 5.11: 中国及周边近 10 年 4.5 级以上的地震分布
添加了国界、省级地理边界后,可以清楚地看出新疆、西藏、青海、甘肃、四川、云南、台湾地震活动比较多。下面想看看能够造成较大破坏的大地震的分布情况,即 6.5 级及以上的地震分布。
图 5.12: 中国及周边近 10 年 6.5 级及以上的地震分布
过去这 10 多年里,分布在中国境内的大地震还是比较少,主要分布在西北地区。大地震的危害往往比较大,10 年发生 10 次可不能说算少了,更何况还不止 10 次呢,幸好都在人口相对较少的西部地区,但愿都是发生在人口稀少的地区,人们也能尽量避开有危险地区,比如板块交界的活跃地带。
得益于 sf 包强大的空间数据操作能力,可以圈选出经纬度位于中国地理边界内,震级在 6.5 级及以上的地震。每个省级地理区域是 MULTIPOLYGON,首先获得 MULTIPOLYGON 的凸包,
再将每个省或自治区的凸包合并起来,组成一个更大的凸包。
接着,将地震点在中国境内的数据过滤出来。
最后,将过滤出来的地震位置画在中国地图上,见下图。
图 5.13: 中国近 10 年来的地震分布
这样就比较清晰了,不过,有的地震正好在中国与其他国家的边界周围,凸包操作有个别误伤。
地震带来的破坏程度还与发震时间有关,比如 1976 年河北唐山地震伤亡惨重的原因之一是地震发生在深夜3点42分,绝大多数人还在室内熟睡。因此,接下来还要分时段统计地震次数。把一天划分为 24 个时段,统计地震次数随时段的分布,如图。
此外,由于收集到的数据太少,才 10 年,若是有几百年的数据,说不定可以了解到整个地震活动的周期性,类似太阳黑子的活动周期那样。
再者,会不会是小地震太多,掩盖重要的地震信息?下面仅考虑 4.5 级以上的地震,如图。
震级一样的情况下,震源深度越深,破坏越小,反之,震源深度特别浅,破坏性越大。此外,地下不同的深度,对应地球不同的圈层,在不同的圈层里,地球活动起来的能量是不一样的。
图 5.17: 大陆地壳剖面图
图 5.18: 震级和震深的关系
不难看出,在地下 300 公里以后,几乎都是 5-7 级的地震,小地震没有,更大的 7-8 级地震也很少。总的来说,地下很深的位置往往发生大地震,而大地震不一定发生在地下很深的位置。
通过此图可以看出我国地震监测或感知的能力,就是说地震发生在地下50公里以上,震级3级以下是测不出来的,相当于盲区。地震发生在地下 300 公里以下,地震震级 4.8 级以下,也测不出来,也是盲区。
注意到一个有意思的数据情况,有的地震深度为 0,而且每年或多或少包含一些深度为 0 的「地震」,其实是矿震、塌陷、爆破、滑坡等,比如 2021 年地震仪监测到的一些塌陷事故。