news 2026/10/14 2:47:18

1969年前中国历史地震目录:字段拆解、数据清洗与典型应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1969年前中国历史地震目录:字段拆解、数据清洗与典型应用

搞地震数据处理或者地质灾害分析的人,大概都体会过翻历史资料的痛苦:纸质地方志、散落的档案、不同年代出版的地震目录汇编,格式口径五花八门,连地震时间都有农历公历、地方时区之分。我去年做区域地震活动性分析的时候,前期最耗时的反而是数据整理,直到拿来了CnOpenData的这份"中国1969年前历史地震目录信息表",整个数据准备周期一下子缩短了大半。这篇就围绕这份数据集,聊聊它到底装了什么内容、字段是怎么组织的、使用时有哪些容易踩的坑,以及我实际清洗分析过程中的一些具体操作,希望能给正在找历史地震数据的人省点时间。

1. 这份数据到底装了什么

1.1 1969年这个时间分界线是怎么来的

先解释一个最直观的问题:为什么偏偏是1969年之前。这个时间节点并不是拍脑袋定的,它跟我国地震观测能力的转折有直接关系。在上世纪六十年代后期之前,国内虽然已经有了一些零散的地震台站,比如东部沿海城市在二十世纪初就开始有仪器记录,但整体覆盖范围很小,台网没有形成统一的运行规范和编目标准,各地记录到的地震参数经常对不上。而到了1969年前后,国家层面的地震观测台网逐步走向统一调度,地震目录的编目口径开始趋于一致,震级测定、定位方法也有了相对统一的流程。换句话说,1969年之后的目录来自仪器观测为主、口径相对统一的时代,而1969年之前的地震记录,来源复杂、测定方法多样,恰恰是最需要整理和标注源信息的部分。

这份目录就是把这些早期地震事件归拢成结构化表格的成果。它的时间跨度覆盖了从有文字记载以来一直到1969年的漫长时期,空间范围聚焦中国大陆及周边区域。对做研究的人来说,1969年以前的记录恰恰是研究长期地震活动规律所必需的——只靠现代几十年的仪器记录,很难看清大地震的复发周期和空间迁移规律。

1.2 这份数据的核心价值与适用人群

历史地震目录的价值在于"把史料变成数据"。原始史料里的地震记载长什么样?很多地方志里的记载是"某县地大震,墙屋倾颓,压死人畜无算"这种定性描述,没有仪器参数,没有经纬度,更没有震级。要把这些信息变成可供统计分析的量化数据,需要做大量考证工作:确定发震年份、判断震中大概位置、根据破坏记载的范围反推震级和烈度。

所以这份目录解决的核心问题,是把一百多条甚至更多的历史地震事件,整理成包含时间、地点、震级、烈度等关键字段的表格,让你可以直接用数据分析工具去处理。适合的人群很明确:

  • 做地震危险性评估、区划研究的工程师和研究人员,需要长历史目录来估计地震复发周期;
  • 做灾害史、历史地理研究的学者,需要把地震事件和历史文献记载对应起来;
  • 做地质相关课程设计、论文分析的学生,需要一个结构可靠的基础数据集作为分析起点;
  • 做数据可视化和科普内容的人,想展示历史地震的时空分布。

2. 字段结构拆解:每条地震记录里有什么

2.1 核心字段及含义

拿到数据集第一步肯定是看字段结构。这类历史地震目录常见的字段大致如下表所示,你拿到手后可以逐一核对:

字段类别典型字段说明
时间信息年、月、日、时、分部分早期记录只有年月,甚至只有年份
空间信息经度、纬度早期记录精度较低,可能只精确到度
震级震级数值、震级类型常见有面波震级、体波震级、里氏震级等
烈度震中烈度通过历史破坏记载估算,多为罗马数字或整数值
震源深度深度值早期记录多缺失,仪器记录后才有系统深度
地点参考地名可能包含历史地名与现代地名对照
来源史料来源或参考文献用于追溯数据出处,方便核验
备注破坏情况、余震说明部分目录会描述具体震害信息

不同版本的目录字段命名可能差异很大,有的叫"震级Ms",有的直接写"震级",有的还会多出"等震线面积""有感范围"这类字段。我的建议是第一步先打印字段清单,逐个对照数据说明文档确认含义,尤其要确认经度纬度的坐标系统是不是同一套。

2.2 震级与烈度的换算逻辑

历史地震没有仪器记录,那震级是怎么来的?这是理解这份数据的关键。早期目录里很多震级并不是直接测出来的,而是通过震中烈度或者等震线资料反推的。烈度反映的是地震对地表和建筑物的破坏程度,可以通过史料中的描述来进行评定,比如"房屋倒塌十之二三""地裂数尺,涌沙出水"这类记载,可以和烈度评定标准相对应。

有了烈度之后,再通过经验公式转换成震级。常见的经验关系式大致形如M = a × I0 + b,不同的研究区域和资料年代会给出不同的系数。这里要特别注意,这种换算得到的震级本身带有不小的不确定性,同一历史地震在不同目录里震级相差0.3到0.5级是很正常的。所以我在分析时一般不会把历史地震的震级当成精确值,而是当作一个量级级别的估计。

2.3 历史地名的处理

历史地震地点记录还有个特殊问题:地名演变。史料里记载的县名、府名、州名跟今天完全不是一回事,同一地点在不同朝代还可能反复改名。比较好的目录会同时给出历史地名和现代地名,甚至附上对应的经纬度。如果你拿到的表里只有历史地名,就要另外准备一份历史地名辞典做映射。

我自己的习惯是保留原始地名字段不做修改,另起一列放标准化后的现代地名或者直接以经纬度为准。不要在原字段上直接覆盖,因为后续如果发现映射错误,你还能回到原始记录重新核对。

3. 数据清洗与统计实操流程

3.1 读入数据与初步检查

拿到Excel或CSV格式的数据后,第一步自然是读入并做初步体检。我用Python的pandas库,代码很简单:

import pandas as pd df = pd.read_excel("pre1969_earthquake.xlsx") # 按实际文件名调整 print(df.shape) print(df.columns.tolist()) print(df.head(10))

看到列名之后别急着分析,先把每个字段的缺失情况摸一遍:

missing_summary = df.isnull().sum() print(missing_summary[missing_summary > 0])

历史数据的缺失率通常不低,尤其是震源深度和发震时刻这类字段,早期记录大量空缺,这本身就是一个信息。先搞清楚哪些字段能用、哪些字段基本是空的,再决定后续分析策略。

3.2 时间字段标准化

接下来需要把时间字段统一成标准格式。历史地震数据的时间有几个常见坑:一是年号纪年,古代记录里经常是"明万历三十四年"这种写法,需要先换算成公历年份;二是农历和公历混用,部分记载用的是农历日期;三是很多记录只有年份没有月日。处理思路是先把能解析的字段解析出来,不能解析的保留原值并标注缺失原因。

# 示例:从"1909-09-21"字符串中提取标准时间 df["date_std"] = pd.to_datetime(df["日期"], errors="coerce") df["year"] = df["date_std"].dt.year df["month"] = df["date_std"].dt.month

这里用errors="coerce"的目的,是把无法解析的日期变成缺失值,后面再单独处理。对只有年份的记录,可以直接取年份字段单独分析,日期的缺失不影响年尺度上的统计。

3.3 震级字段的统一处理

震级类型不统一是所有历史地震目录的通病。早期目录里可能同时混着面波震级、体波震级和经过烈度换算的推定震级,这些值放在一起直接统计是有问题的。我在处理时的做法是:先看数据列的类型标注,如果有"震级类型"或类似字段,就按类型分组统计;如果没有,则结合资料说明推断主震级类型。

# 按震级区间分档统计 bins = [0, 3, 4, 5, 6, 7, 8, 10] labels = ["<3", "3-4", "4-5", "5-6", "6-7", "7-8", ">=8"] df["mag_bin"] = pd.cut(df["震级"], bins=bins, labels=labels, right=False) print(df["mag_bin"].value_counts().sort_index())

分档统计可以快速看出数据分布是否合理,也能帮你判断是否有异常值,比如震级为0或超过9的记录,通常需要回头核对原始来源。

3.4 空间分布与基础统计

清洗完时间、震级和经纬度之后,就可以做基础的空间分析了。我会先画一张震中空间分布散点图,看看数据在空间上是否覆盖了预期区域。历史地震的记录存在严重的不均匀性:东部地区因为文献记录相对丰富,早期地震记载很多,西部的记录则明显偏少,这不代表西部地震少,而是人口稀少、文献缺失导致的历史记录盲区。分析时要把这种"观测偏差"放在心上,不能直接把历史目录的频次当成真实地震活动水平。

import matplotlib.pyplot as plt plt.figure(figsize=(10, 8)) sc = plt.scatter(df["经度"], df["纬度"], c=df["震级"], cmap="hot_r", s=8, alpha=0.7) plt.colorbar(sc, label="震级") plt.xlabel("经度") plt.ylabel("纬度") plt.title("1969年前历史地震震中分布") plt.show()

如果用地图底图,建议叠加今天的省界或板块边界线做参照,这样更容易看出地震带的位置关系,比如南北向的地震带走向是否清晰。

4. 使用中的常见坑与排查实录

4.1 同一地震出现多条重复记录

历史目录最容易遇到的问题之一,就是同一地震被重复收录,或者被分拆成多条。造成这种情况的原因主要在于古代通讯不便,不同地方的记录者对同一个事件的描述差异很大,后人编目时如果没有仔细比对,可能把一个地震当成了两个。排查方法是按时间、震中位置和震级做聚类匹配:设定一个合理的时间窗口(比如前后1天)和空间距离阈值(比如经纬度差不超过1度),把满足条件的记录列出来人工比对。

# 按年份和经纬度粗略查重 dup_check = df[df.duplicated(subset=["year", "经度", "纬度"], keep=False)] print(dup_check.sort_values(["year", "经度", "纬度"]))

查重时要注意,某些年份确实可能在同一区域短时间发生多次地震,所以别机械地删重复数据,一定要结合震级和备注信息判断。

4.2 经纬度精度不足的问题

早期地震的震中位置,很多是根据史料记载的破坏范围推断出来的,存在明显误差。有的记录经纬度只精确到整数度,意味着实际震中可能偏离几十公里。对做大尺度空间统计的人来说这可能可以接受,但如果你要精确分析某条地震与断层的空间关系,就必须谨慎。我的处理原则是:在结果图中把这种不确定性体现出来,比如给震中位置画误差范围圈,或者在做空间匹配时把容差设定得大一些。

4.3 目录间口径不一致

不同来源的目录对同一地震的记载可能不一致,震级差异0.5级、日期相差几天的现象并不罕见。遇到这种情况,我的建议是不要试图"调和"出一个唯一答案,而是选择一条主目录作为分析基准,遇到关键事件时再交叉核对其他目录,把差异写入备注。分析时还可以做一个敏感性检验:用不同的震级值重新计算相关统计量,看看会不会改变主要结论。如果结论对0.5级的震级差都很敏感,那这个结论本身就站不住脚。

4.4 缺失值的处理策略

历史数据的缺失是常态,不能简单删除。我常用的策略是分场景处理:

  • 震源深度缺失严重(常超过一半),直接放弃该字段,不参与建模;
  • 发震时刻缺失,按天粒度分析即可,不追求精确时刻;
  • 震级缺失的记录,在统计频率时不能直接丢弃,否则会低估地震活动水平。可单独统计一个"有震级记录"子集,和全量时间分布对照。

其实缺失信息本身就是历史数据的重要特征,它反映了特定时期资料记录能力的高低,在做长期趋势分析时要把记录完备性因素纳入考虑。

5. 典型应用场景与延伸思路

5.1 历史地震目录用于活动性参数计算

地震活动性分析里常用的震级-频度关系,就是经典的b值分析。完整的目录,尤其是长历史目录,对估计低震级段的完整性有帮助。把历史目录和现代仪器目录拼接使用时,一定要注意两个时段的数据完整性和震级口径差异,最好先做完整性分析,确定各自可靠的震级下限,再做拼接。否则统计结果会被人为的目录变化误导。

5.2 空间可视化用于近代地震格局展示

把历史地震震中按时间分色画在地图上,能直观看到地震活动在不同时期的空间迁移。这种图很适合作为区域地震构造分析的前置参考。我自己做过一次按世纪分组的动画式分布图,能看到不同时期的地震记录重心明显不同,早期集中在东部文献发达地区,往近代逐渐转向西部。这个变化既有真实地震活动的因素,也有记录能力变化的影响,解读时要同时考虑两方面。

5.3 与其他资料的交叉验证

历史地震目录不应该孤立使用。把它和地质构造资料、现代仪器记录、历史人口分布数据放在一起交叉分析,可以做很多有意思的工作。比如研究某条活动断裂的历史地震复发间隔,或者评估一个区域内历史大地震与现代地震活动的关系。我印象比较深的是目录里有一条震级超过8级的明代特大地震记录,把它和当地断层调查结果对照之后,整个区域的地震危险性认识都会变得立体起来。

提示:在论文或报告中引用历史地震数据时,一定要说明数据来源、版本和编目口径,同时注明早期震级为估算值。这是基本的学术规范,也是对自己分析结论负责。

6. 实操中的一些经验补充

最后分享几个我自己用这份数据时的实操细节。第一,拿到表先看有没有"数据备注"或"参考文献"这类列,别嫌它烦,查数据时它是最有用的线索。第二,做空间图时建议把震级标成点的大小和颜色,同时也要把烈度单独做一张图,烈度信息对历史地震的破坏程度评估比震级更直接。第三,如果要做长周期趋势分析,建议先统计每个年代的记录条数和人口分布对照,避免把记录能力提升误解为地震增多。

还有一个小技巧是建议把整理后的数据保存一份轻量级的中间格式,比如去掉冗长备注的简化版,方便后续反复加载画图。每次重新从原始表读取清洗,既慢又容易因为代码改动产生不一致。

历史地震数据这份工作,做得越细,越能体会到记录背后的考证工作量。好的数据目录确实能把大量前期工作省下来,但数据的局限性和不确定性同样要心里有数。希望这篇基于实际操作经验的梳理,能让你在拿到这份目录后少走一些弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 2:46:25

CDL网表与LVS实战:从语法到版图提取的避坑指南

简介&#xff1a;电路描述语言&#xff08;CDL&#xff09;教学演示文稿围绕C17基准电路&#xff0c;系统讲解如何用该语言描述电路结构、连接关系和逻辑功能&#xff0c;面向数字电路课程学习者、EDA入门者及需要完成电路描述实验报告的学生。内容先梳理语法规则&#xff0c;将…

作者头像 李华
网站建设 2026/10/14 2:46:22

WP 0CTF 2016 piapiapia

1.进入网站首页登录框页面&#xff0c;思路弱密码-->SQL注入-->寻找注册接口等敏感信息(FindSomething、全局搜索关键字、dirsearch)-->测试逻辑漏洞..经过dirsearch扫描尝试发现存在源码泄露www.zip,解压到本地2.源码审计通读源码&#xff0c;梳理业务流程注册登录填…

作者头像 李华
网站建设 2026/10/14 2:45:21

加班后的回程路上,更适合先听完《妈妈,我失业了》

傍晚下班路上&#xff0c;中学生&#xff0c;把耳机音量调到刚好盖住走廊声在便利店门口抽一口冷气再进门。歌词里「走不出了」写的就是这种说不清又不甘心的时刻——《妈妈&#xff0c;我失业了》接住的&#xff0c;正是这截情绪。词曲&#xff1a;小熊歌&#xff5c;演唱&…

作者头像 李华
网站建设 2026/10/14 2:44:20

微信小程序+Java后端真实联调Demo:火车票查询完整闭环

简介&#xff1a;本资源是一套完整的微信小程序仿智行火车票12306系统实战项目&#xff0c;面向Java后端与小程序全栈初学者及进阶开发者&#xff0c;聚焦铁路订票类业务场景的工程化落地。项目采用SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架构建稳定后端服务&…

作者头像 李华
网站建设 2026/10/14 2:44:00

飞书接入OpenClaw与阿里百炼:搭建团队AI问答机器人实战

如果你跟我一样&#xff0c;每天绝大部分工作都泡在飞书里——聊需求、传文档、对排期、收通知——那你一定遇到过这种烦躁瞬间&#xff1a;明明刚想起一个问题想问问AI&#xff0c;却要切出聊天窗口&#xff0c;打开浏览器&#xff0c;找到模型平台&#xff0c;把问题粘进去&a…

作者头像 李华