Python地震数据可视化实战:环境配置与常见报错排查

小鹿同学
小鹿同学
发布时间:2026-10-13| 5人浏览过
原创

本文详解使用Python进行地震数据可视化的完整流程。涵盖Windows10下Python3.7环境搭建、obspy等依赖包安装及代理配置,深入分析config.yml编码异常(GBK与UTF-8冲突)的解决方法。针对本地SEGY数据绘图时出现的采样值溢出、卷头乱码及道头参数不规范等问题,提供了归一化处理、重写3200字节卷头及规范cdpt取值的具体解决方案,并对比了Cygwin与CMD终端的使用体验。

Python地震数据可视化环境搭建

本文分享一套基于Python的地震数据可视化实现方案,包含具体代码与操作细节,供读者参考学习。

本示例参考的源代码项目名为seisplot。

在开始之前,需完成以下准备工作:

建议在Windows10操作系统下安装Python3.7环境,并将参考源码下载至本地目录。

首先进行Demo绘图测试,以验证环境是否配置正确。

执行Demo绘图的具体指令如下。

在命令行中运行:cmd> python seisplot.py --demo

依赖安装与代理配置

测试过程中可能遇到第一个问题:缺少必要的依赖包。


 File "D:/Desktop/python可视化/seisplot/seisplot.py", line 16, in <module>
 import yaml
ModuleNotFoundError: No module named 'yaml'
 
>pip3 install yaml
 Could not find a version that satisfies the requirement yaml (from versions: )
No matching distribution found for yaml

可通过查看项目中的environment.yml文件来确认所需依赖。


channels:
- defaults
- conda-forge
dependencies:
- matplotlib
- numpy
- obspy
- pillow
- pyyaml

需手动安装相关依赖包,例如obspy、pillow和pyyaml。

执行安装命令:cmd> pip3 install obspy

若遇到proxy error(代理错误),需添加--proxy server:port选项指定代理服务器地址和端口。

依赖包安装成功后,继续后续步骤。

配置文件编码异常排查

第二个常见问题是配置文件的编码异常。


D:\Desktop\python可视化\seisplot>python seisplot.py --demo
[91m
 Welcome to
 ┌─┐┌─┐┬┌─┐┌─┐┬ ┌─┐┌┬┐
 └─┐├┤ │└─┐├─┘│ │ │ │
 └─┘└─┘┴└─┘┴ ┴─┘└─┘ ┴
    Good luck[0m
Traceback (most recent call last):
 File "seisplot.py", line 421, in <module>
 cfg = yaml.load(f)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\__init__.py", line 70, in load
 loader = Loader(stream)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\loader.py", line 34, in __init__
 Reader.__init__(self, stream)
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 85, in __init__
 self.determine_encoding()
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 124, in determine_encoding
 self.update_raw()
 File "D:\ProgramFiles\Python36\lib\site-packages\yaml\reader.py", line 178, in update_raw
 data = self.stream.read(size)
UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 2003: illegal multibyte sequence

需要分析源码中参数传递的具体情况,特别是文件读取时的编码设置。


def load(stream, Loader=Loader):
 """
 Parse the first YAML document in a stream
 and produce the corresponding Python object.
 """
 print(stream) ## debug by huanying03
 loader = Loader(stream)
 try:
  return loader.get_single_data()
 finally:
  loader.dispose()

打印调试结果如下所示。


<_io.TextIOWrapper name='config.yml' mode='r' encoding='cp936'>

若发现编码不匹配,需检查系统代码页设置。

代码页65001代表UTF-8编码。

代码页936代表Windows默认的GBK编码。

代码页437代表美国英语编码。

仔细检查发现config.yml文件中存在异常字符,修正该文件中的错误字符后,问题得以解决。

第三个注意事项涉及Python调试打印语句的使用。

可使用print ("value=%d"%value)格式输出变量值。

完成上述步骤后,观察Demo数据的绘图结果。

具体效果如下所示。

本地SEGY数据绘图与异常处理

接下来进行本地实际数据的绘图测试。

应用本地数据绘图的具体指令如下。

在命令行中运行:cmd > python seisplot.py data/my.sgy

处理本地数据时,可能遇到第一个问题:数据道的采样值出现异常。


filename data2/t10.sgy
seismic.py:104:dt=4000
seismic.py:104:ns=512
seismic.py:144:header=b'C 1 CLIENT'
n_traces 500
n_samples 512
dt   0.004
t_start 0
t_end  2.044
max_val inf
min_val -inf
clip_val 180462501764003194804057887685476352
Read data in 0.4 s
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PLOTTING
plot width 17.00 in
plot height 11.00 in
Traceback (most recent call last):
 File "seisplot.py", line 442, in <module>
 main(t, cfg)
 File "seisplot.py", line 214, in main
 cfg)
 File "D:\Desktop\python可视化\seisplot\plotter.py", line 123, in plot_histogram
 y, x, _ = ax.hist(np.ravel(data), bins=int(100.0 / (clip_val / largest)),
OverflowError: cannot convert float infinity to integer

解决办法是对数据进行归一化处理,以消除数值范围过大导致的显示问题。

可能遇到的第二个问题是数据文件的卷头信息异常。


filename data2/marmousi_vel.segy.hdrs.sgy.cdp.sgy
seismic.py:104:dt=10000
seismic.py:104:ns=350
seismic.py:144:header=b'\xc3@\xf1@\xc3\xd3\xc9\xc5\xd5\xe3'
Traceback (most recent call last):
 File "seisplot.py", line 442, in <module>
 main(t, cfg)
 File "seisplot.py", line 40, in main
 s = Seismic.from_segy(target, params={'ndim': cfg['ndim']})
 File "D:\Desktop\python可视化\seisplot\seismic.py", line 164, in from_segy
 return cls.from_obspy(stream, params=params)
 File "D:\Desktop\python可视化\seisplot\seismic.py", line 147, in from_obspy
 x =np.array(list(stream.textual_file_header.decode()))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte

解决办法是重写3200字节的SEGY标准卷头,确保格式符合规范。

以下展示Marmousi相关数据的绘图示例。

速度模型的绘图结果如下所示。

Marmousi模型正演生成的炮集数据绘图结果如下所示。

测试工具与数据预处理建议

以下是测试过程中的备忘记录。

1

使用Cygwin执行指令时,反馈信息显示为彩色,便于分析各类信息。

相比之下,使用CMD终端执行指令后的反馈信息可读性较差,建议使用Cygwin提升体验。

2

当本地数据出现异常时,可通过CWP工具集中的segyread、sushw、sugain、segywrite等程序进行修改,使其满足绘图程序的要求。

具体注意事项包括:1)3200字节的卷头必须严格规范。

2)道头字中的cdpt取值(对应xline)必须规范。

3)道采样值最好进行归一化处理,以避免溢出错误。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。