1. 数据集的定位与核心价值
做历史地震研究的人,大概率都遇到过同一个尴尬:想找1969年以前的震例记录,翻遍图书馆的纸质地震目录、各省地震志、内部油印资料,花了大量时间对表、抄录、比对,最后发现不同来源对同一场地震的记载竟然对不上号。有的记“某年某月某日”就给了个年号,有的用旧历纪日,有的震级标注五花八门,让人无从下手。这就是我拿到这套“CnOpenData 中国1969年前历史地震目录信息表”时,整个人精神一振的原因——终于有平台把散落四处的历史震例整理成了结构化表格。
先说数据集的定位。它是某高校数据平台发布的一套电子化历史地震目录,覆盖范围是1969年以前国内区域的地震记录,字段经过统一整理,基本囊括了地震目录的常规要素:发震时间、震中经纬度、震级、震源深度、参考地名,以及一些备注信息。从命名看,“1969年前”这个时间节点并非随意划定,而是参考了国内地震目录编研历史上的一个常用分界——现代地震仪器观测资料相对完备的年代之前,历史强震记录主要依赖史料考证和早期仪器数据,数据本身带有浓重的历史文献色彩。
它能解决什么问题?最直接的,是把“找数据”的时间压缩到接近于零。过去做历史地震活动性分析,光整理目录就能耗掉一个研究生小半学期,现在拿到结构化数据后,可以直接进入时空分布统计、震级频度拟合、b值计算这些真正的研究环节。适合的读者覆盖三类人:一是研究历史地震、地震活动性、地震区划的研究人员,二是做GIS时空分析的理科生,三是对历史地理、灾害史有好奇心的数据爱好者。
当然要泼一盆冷水:历史地震目录不是现代台网目录,它存在天然的不确定性和系统性偏差。这套目录的价值恰恰在“历史”二字——它记录的是人类对地震现象认知逐步深化的过程,而非现代地震仪的精确读数。理解这一点,才能正确使用这批数据。
顺带说一句,平台官网对字段有数据字典说明,但我实测下来,字段命名在不同批次样本里略有差异,有的版本多一个“备注”列,有的版本含“烈度”项,建议先拿到数据后做一个整体扫描再开始清洗,能省掉后面不少返工。
2. 目录结构拆解:字段含义与数据形态
拿到数据之后,第一件事不是跑代码,而是先把数据字典吃透。这个环节做得好,后续清洗和分析都能顺风顺水。根据平台样例和实际使用反馈,这套目录的核心字段可以分成三类:时间标识、空间定位、震级参数,外加若干辅助信息。
2.1 时间字段:日期与时刻的搭配逻辑
时间字段是历史目录里最微妙的。现代目录通常精确到秒,但1969年前的记录,时间精度随年代递减,年代越久远越粗糙。常见格式是“日期”和“时刻”分列,“日期”通常精确到日,“时刻”可能只有时、分,甚至空缺。部分数据集的日期还会混入农历或年号纪年,需要额外转换,不过我在这套数据里看下来,大部分回头是公历标准格式,少数早期震例带“清某帝某年”的描述性文字,需要借助历史纪年表换算。
这里有个实操细节:平台导出的日期可能是字符串类型,直接读进来是文本,排序和筛选都会出问题。清洗时至少要把它转成标准的年月日数值,并处理公元前的年份符号问题。
2.2 空间字段:经纬度的精度与坐标系统
经纬度字段是空间分析的核心。历史目录的经纬度不是GPS实测值,而是根据史料描述推断出的宏观震中,精度通常在0.1度甚至更粗,个别早期震例只有“某府”“某县附近”这样的文字定位,经纬度可能是后人按行政区中心点补填的。
使用这套数据做空间分析时,建议对经纬度设置一个“可接受精度”阈值。比如做核密度估计时,粗定位震例会在图上形成虚假区块,最好按精度分层分析。另外,平台给出的坐标大部分是十进制格式,少数可能是度分秒,清洗时要做格式识别,统一成十进制度,方便在GIS或Python中直接绘图。
2.3 震级类型:一个最容易被忽略的坑
震级字段是历史地震目录最大的坑之一。近代地震目录统一使用面波震级MS或近震震级ML,但历史记录中存在多种震级标度混用:有依据烈度估算的等效震级,有早期仪器测定的振幅震级,还有研究者根据历史烈度区资料复盘得到的推测震级。不同震级标度数值上并不严格可比,直接拿来当连续变量做统计,拟合出的分布参数会有系统性偏差。
我见过有研究者在处理这类数据时,把震级列当成数值直接灌进统计模型,结果某个历史强震由于震级标度不同被识别成离群点。这并非数据本身错误,而是标度差异。建议清洗阶段新增一列“震级来源类型”,用分类值标记实测、估测或换算,后续分析可以剔除或单独建模。
2.4 辅助字段与记录粒度
辅助字段一般包括参考地名、烈度、备注和史料来源索引。参考地名往往带有历史行政区划痕迹,比如“某县”“某州”,和现代行政区划不同,做地理编码时不能直接匹配现在的地名库,需要建立古今地名对照关系。烈度字段在部分记录中存在,备注字段则可能包含余震序列、前震行为、宏观异常等辅助描述,是定性研究的重要素材。
记录粒度上,这套数据并非按“事件”去重,而是按“条目”存储。同一个地震可能在不同史料来源中重复出现,形成多条记录,字段值略有不同。这种去重工作,就要放到数据清洗环节里仔细处理。
3. 实操准备:从下载到可分析的目录数据
拿到这套数据到真正能进行分析,中间隔着一整套数据工程流程。我把实测的流程拆成三步,每一步都有踩坑后的经验总结。
3.1 下载与格式预检
平台提供下载后,文件格式一般是CSV或Excel。我建议优先选CSV,编码选择UTF-8,避免Excel的编码兼容问题。如果你拿到的是XLSX,先另存为CSV再处理。下载完成后,打开文件前用命令行或代码做一次快速预检,统计行数、列数、缺失值比例、字段类型,建立对数据的基本体感。
这一步常用的命令很简单,比如用pandas读进来后打印info()和head(),先别急着清洗,只是看一眼。历史数据常常会在某个字段包含特殊字符,比如地名备注里的括号、引号,这会影响CSV解析,快速预检能最早发现问题。
3.2 字段标准化与缺失处理
数据清洗是历史目录的核心环节,标准化规则一定要随做随记。
时间字段处理上,统一转为ISO格式。实例代码很简单:
import pandas as pd df = pd.read_csv('historical_eq.csv', encoding='utf-8-sig') df['year'] = df['date'].str.extract(r'(\d{4})').astype(float) df['month'] = df['date'].str.extract(r'[年\-/](\d{1,2})[月\-/]') df['day'] = df['date'].str.extract(r'[月\-/](\d{1,2})日?')这里用了正则提取,是为了兼容“1969年8月17日”“1969-8-17”“1969/08/17”等多种写法。提取后转数值型,缺失月份或日的部分填充为NaN而非0,以免污染时间过滤条件。
经纬度清洗上,关键在于识别十进制和度分秒格式。
def parse_coord(value): if pd.isna(value): return None value = str(value).strip() # 度分秒格式,如 34°12'30" if '°' in value: import re parts = re.split(r'[°\'"]+', value) degrees = float(parts[0]) minutes = float(parts[1]) if len(parts) > 1 else 0 seconds = float(parts[2]) if len(parts) > 2 else 0 return degrees + minutes / 60 + seconds / 3600 return float(value)震级字段清洗时,保留原始值,另加“震级类型推测”列。推测规则不搞机器学习,用人工规则即可:字段名含ML标注为近震震级,含MS标注为面波震级,无标注且数值大于等于7的可能是MS,其他按未知处理。这个推测列不用于精确分析,只用于分层筛选。
缺失值处理上,建议以“标记缺失,不填充猜测值”为原则。历史目录的缺失具有信息含义——某时期记录缺失可能表征资料散佚,而非地震未发生,填充均值或中位数属于数据造假,会误导后续时空完整性评估。
3.3 古今地名清理与震例去重
地名清理是这项工作中最花时间的一个环节。我的做法是构建一个映射字典,将历史地名映射到现代行政区划的近似位置。比如“某府”“某县”的归属变化频繁,别指望程序完全自动解决,半人工半代码是效率最佳。拿到地名列后,先value_counts()看高频地名,再对高频条目做重点映射。
去重逻辑建议按“时间±1天 + 经纬度±0.5度 + 震级±0.5级”作为匹配键。同源多记的重合记录在这些维度上会高度重合,去重后保留可信度更高的条目。可信度判断规则:同时含经纬度和烈度字段的记录优先于仅有震级的记录;含史料来源标记的记录优先于无来源记录。
4. 时空统计分析:挖掘历史地震序列中的隐藏规律
清洗干净之后,这批数据的价值才开始真正释放。历史地震目录的典型分析方向有三个:时间维度的频度演化、空间维度的分布格局、震级维度的统计规律。下面按实操顺序展开。
4.1 时间频度演化:分年代统计与完整性评估
做时间序列统计时,最常用的指标是年地震频度。分年代统计地震次数,可以看出不同时期记录数量的显著差异。需要特别注意的是,早期频度明显偏低并不代表地震少,而是史料缺失和信息记录手段落后,这就是历史地震目录的完整性问题。
完整性评估是历史地震数据特有的前置步骤。做法通常是以震级档次分层,统计各震级档在不同世纪或年代的数量变化,确认某个震级阈值之上记录量趋稳的年代,那个年代之后的数据才算相对完整。常见结论是震级越大的地震,完整记录起始年代越早,小震级记录的完整性则只能追溯到较晚近的时期,这在分析小震活动性时要格外谨慎。
这种基于记录完备性而非真实活动性的频度波动,在解释结果时一定要区分开,否则容易把史料丰富度的变化误读为地震活动性的真实变化。
4.2 空间分布格局:用GIS或Python画历史震中图
空间可视化是理解历史地震分布最直观的手段。用Python的cartopy或matplotlib叠加地图底图,画震中分布点图,以震级大小映射渲染点的大小和颜色,就能快速观察分布格局。
实操中我踩过坐标参考系的坑。历史经纬度基于不同椭球体或投影,直接叠加现代高精度底图时,某些区域会出现系统性偏移,幅度可达数公里。建议绘图前先做坐标校验,手段是把已知强震的史料描述位置与绘图的点位对比,确认偏移在可接受范围内再正式出图。
空间分析中热力图的“带宽”选择也很关键,带宽过大抹掉空间细节,过小则形成碎片化孤岛。建议用多组带宽做敏感性对比,而不是只出一张图就下结论。
4.3 震级频度统计:古登堡-里克特关系与b值计算
震级频度关系是地震学最经典宏观规律之一,形式为 (\log_{10}N = a - bM),N为震级大于等于M的地震数量,b值刻画大小地震的比例。历史目录数据拿来拟合b值时,要控制震级下限和完整性区间。
实操中建议用极大似然估计,而不是简单的最小二乘线性拟合,因为截断效应会对截距产生显著影响。极大似然估计更加稳健,也便于给出b值的不确定区间。
拟合之前务必做完整性阈值筛选,只对完整性水平以上的震级范围做拟合。历史目录中晚期小震记录缺失严重,如果不做筛选,b值会被明显拉高,得出“小震比例异常高”的失真结论。
4.4 时空联合分析:序列识别与迁移模式初探
进阶玩法是把时间和空间叠在一起看。把历史震中按时间窗口切片,制作动态迁移图或时空密度图,能直观看到活跃时段的转移路径。这种分析在区域地震趋势研判中有参考价值,但必须注意样本量的局限——历史窗口的记录量远小于现代目录,得到的“迁移”模式可能只是资料分布特征的副产品,而非真实构造过程。
5. 典型问题与排障实录
使用这套数据过程中,常见的坑有三个:重复记录造成的假频度高峰、坐标系统偏移导致的定位偏差、震级类型混用造成的统计污染。逐一复盘解决方案。
重复记录问题,表现为同一场地震在同年份有多条记录、时间略有误差、震级相同但地名表述不同。排查方法很简单:按“年+震级+经度十位”分组计数,计数大于1的组进入人工核查名单。处理时优先保留含更多信息字段的记录,其余标记为“重复”,而不是直接删除,保留原始数据溯源。
坐标偏移问题,表现为绘制震中图时明显落在已知活动构造带之外,或与历史记载位置矛盾。处理步骤是先抽取震级大于某个阀值(比如6级)的大震样本,逐一核对史料描述,再与绘图位置比对。如果系统偏移规律明确,可以尝试统一平移修正,但要记录修正参数并在论文中说明,这个修正属于研究者的解释性操作,而非数据平台自身提供的成果。
震级类型混用问题,表现是震级分布图出现非自然的高频节点,比如某整数震级数值周围明显聚集。排查方法是绘制震级直方图,观察是否存在特定数值“扎堆”。处理方式是对扎堆数值的原始记录逐条查看来源,确认是否由不同震级标度换算而来,再决定是否设置标度修正项。
还有一个容易翻车的地方是早期记录的年份边界。有些历史记录只有年号,没有公历年份,年号跨年换算时容易相差一两年。建议对年份列增加一个“可信度”标记,把确定度和推测度分开,后续时间窗口分析时按需过滤。
6. 从目录到研究:一些进一步的扩展思路
数据集本身的价值上限,取决于研究者怎么用它。这里分享几个我亲眼见过、认为有潜力的应用方向。
历史灾害链研究是把地震目录与气候、饥荒、疫病等历史记录做时间关联分析,探讨灾害群发期的真实性。这种交叉研究特别适合历史地震目录这类长时序数据。
历史强震复发周期估计是另一个方向。利用目录中长时段的大震记录,结合古地震探槽资料,对特定断裂带的强震复发行为做初步评估。这种分析需要非常谨慎,因为历史目录的完整性远不如现代台网,但作为背景约束仍有参考价值。
还有一类工作是数据产品化——把清洗后的历史目录整合成标准化数据库,补充现代行政区划编码、古地名对照表和震级标度换算字段,做成社区维护的开源数据格式,这类工作对全行业都有推动意义。
7. 个人实操中的几点体会
这套数据集我前后用了几周时间,从原始下载到完成清洗和初步分析,最深的三点体会值得单独说一下。
第一,历史地震目录的清洗工作没有捷径,但可以提效。建立字典、编写可复用的清洗脚本、做好版本控制,比一次性的“手工作坊式”处理要省力太多。很多字段的清洗逻辑可以固化成函数,换一批地区的数据也能复用。
第二,历史数据的“不确定性处理”比“精度追求”更重要。研究者往往本能地想提高数据精度,但在原始记录本身就模糊的前提下,追求具体的数值精度意义不大,更重要的是把不确定性显式标记出来、分层分析,让结论对误差更稳健。
第三,平台数据只是起点,不是终点。好的研究必须追溯到史料原文。表格数据让你快速定位到可疑震例,但要理解一次历史地震的真实图景,还是要去翻阅对应的史料和早期地震目录汇编,数据结构化替代不了文献考证。
十几年前做同类研究的老前辈们,还得靠手抄卡片、手工描图,现在拿到一套基础目录只需要几分钟,这是这个时代给研究者的红利。但数据红利之下,更需要我们对史料保持敬畏,对不确定性保持诚实。