内容摘要:EQ目录是研究EQs活动的最基础数据。通常EQs目录记录条数很多,且都是数字不好理解,上一次小哥从可视化角度,写了一篇小科普《EQ统计面面观》,但是给内行看绝对被鄙视,小哥努力学习了几天,在学习了USGS等行业前辈们的工作后,开发了一个catalog分析小工具。本次就结合Geoist中的catalog模块的相关功能,给大家介绍如何获取EQs目录数据和进行相应的分析与质量控制QC。主要是给EQs目录分析感兴趣和给刚入行的小白们看喽!
为什么叫番外篇?因为下面的故事与前文关系不大,完全可以独立来看。而如果您当科普来看前文,那往下看就是您走向专业之路的起点。
EQs目录一般是指以规定格式,存储了EQs三要素(时间、地点、震级)的记录。什么格式无所谓,说清楚就行了(一般Ascii明码格式居多,记事本就能打开,但是最近USGS也学坏了,为了信息更丰富吧,弄成XML格式的,这摆明了让不会写程序的没发活啊),但关键是要有三要素信息,当然还有别的就更好了(比如:哈弗CMT震源机制目录)。
今天因为重点是介绍工具,就别搞那么复杂了。首先,我们找个公开发表的EQs目录吧!小哥挑了三个:CENC目录,USGS目录,中国Mw震级目录。然后在开始下面的介绍。这次,我们分11个部分开聊(小哥是非专业人士,理解的不对的地方,欢迎大家拍砖,我尽快准备好钢盔呦~)。
1、目录下载与获取
USGS目录,这个大家不用介绍了吧,USGS以多种形式提供全球EQs目录,我们今天介绍以API的方式来下载目录,小哥花了点时间编写了一个自动化下载的函数,大家可以不用纠结具体细节了。有了EQs目录后,需要将目录建一个库对象。简单概况一下,就是下载、建库、导入。
代码如下:
import geoist as gi
from geoist.others.fetch_data import usgs_catalog
from geoist.catalog import Catalogue as cat
usgsfile = 'usgscat2.csv' #下载保存到本地的文件名
localpath2 = usgs_catalog(usgsfile, '2014-01-01', '2014-01-02', '-90','90','-180','180',minmag = '5')
print(localpath2) #完整路径信息
dbusgs = cat.Database(usgsfile) #建立一个EQs目录对象
dbusgs.Import0(localpath2) #导入刚才下载的本地数据
dbusgs.Info() #打印导入目录信息
运行结果如下:
C:\Users\chens\AppData\Local\geoist\geoist\data\usgscat2.csv
Number of Events: 2
Year Rage: (2014,2014)
Magnitude Rage: (5.1,6.5)
Latitude Rage: (-13.8633,19.0868)
Longitude Rage: (120.2389,167.249)
Depth Rage: (10.07,187.0)
那么,如果用CENC目录呢?怎么获取,其实也类似,小哥还有一个专门的downloadurl函数,可以去下载指定地址的任何数据。
代码如下:
import geoist.others.fetch_data as data
from geoist.others.fetch_data import _retrieve_file as downloadurl
from geoist.catalog import Catalogue as cat
url = data.ispec_catalog_url
filename = '2020-03-25CENC-M4.7.dat'
localpath = downloadurl(url+filename, filename)
print(localpath)
catname = 'CENCM4.7'
db2 = cat.Database(catname)
header = ['Year', 'Month','Day','Hour','Minute','Second','Latitude','Longitude', 'Depth','MagType','MagSize','Log']
db2.Import0(localpath, Header = header, Delimiter= ' ', flag = False)
db2.Info()
运行结果如下:
C:\Users\chens\AppData\Local\geoist\geoist\data\2020-03-25CENC-M4.7.dat
Number of Events: 7695
Year Rage: (1970,2020)
Magnitude Rage: (4.7,8.5)
Latitude Rage: (-65.6,84.5)
Longitude Rage: (-180.0,180.0)
Depth Rage: (0.0,642.0)
这个目录数据多,有7695条,4.7以上EQs。
2、基本信息统计
要看一下目录信息,记住一个函数Info(),任何导入EQs目录库的对象都有这个,上面代码中的db2.Info()就是这个功能。
目录筛选,方法有多种,我们看一个最简单的,按照经纬度范围来
lon = [70, 135]
lat = [15, 55]
db2.Filter('Latitude',lat[0],Opr='>=')
db2.Filter('Latitude',lat[1],Opr='<=')
db2.Filter('Longitude',lon[0],Opr='>=')
db2.Filter('Longitude',lon[1],Opr='<=')
之后再Info()一下,结果如下
Number of Events: 6221
Year Rage: (1970,2020)
Magnitude Rage: (4.7,8.5)
Latitude Rage: (15.07,54.98)
Longitude Rage: (70.0,134.85)
Depth Rage: (0.0,597.0)
你看事件数目是不是少了点。
ps:小EQs天天有,大EQs可不是。因为大EQs本来就少,可用的案例就不多,而且那些大的EQs都还在俯冲带(海里),所以研究起来也困难。但是大EQs才是致灾的元凶,因此,研究EQs就记住要抓大的就对喽!鉴于人生时光有限,小哥给自己定了一个目标,主要关注6以上吧!
3、目录对比
一下子出来两个目录,是不是有点乱,那能不能比比呢?看看两个不同来源的目录之间有没有不一样的,ok!这一点小哥也想到了,基本思路就是画一批图,全方位的说明两个目录数据之间的差异,不废话,直接上代码吧!
代码如下:
outputname = cp.create_figures_new(db = [db2, dbusgs], pathname = gi.TEMP_PATH, startyear = 1970 , endyear = 2020, dhrs = 8)
cp.generate_html(outputname, True)
大家注意到dhr=8这个参数了吗?因为USGS目录一般用UTC时间,而我国CENC目录用北京时间,所以,要把USGS目录,加上8小时,大家才能比。
有了两个目录后,代码运行完,可以得到下面的一个HTML格式报告
我们看看这个报告里面都有啥
这些是能匹配上的事件
这些匹配事件之间的相对位置
好像图9有点多啊,因为两个目录截至震级不一样,usgs是5级开始,cenc是4.7开始,很多海域EQs也是没关联上的事件,这可能是两个目录差异性的地方了。
除了这些图,还有一些小哥没放上,有兴趣的可以动手试试哦,小哥写好的都是亲自测试过的,百分百可运行!
一句话总结:哇,EQs目录分析好有意思啊,大家反映上次写的太科普,小哥这不发奋学习了好几天,发扬动手能力强的优点,咱也能攒个分析工具出来!现在工具也有了,数据也有了,屏幕前奋发图强的小盆友们,赶快动手吧,下一次开组会,PPT里面的图可以用用geoist的catalog工具包啊!
未完待续~
参考资料:
1、USGS目录,https://earthquake.usgs.gov/fdsnws/event/1/
2、CENC目录,中国EQs台网发布的标准目录,小哥做了内网地址,http://10.2.14.222/catalog
3、中国矩震级目录,详情参考文章:Cheng, J., Y. Rong, H. Magistrale, G. Chen, and X. Xu (2017). An Mw‐based historical earthquake catalog, Bull. Seismol. Soc. Am. 107 2490-2500.
4、GEOIST工具包,你关心的信息全在这里https://github.com/igp-gravity/geoist