您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關python地震數據可視化的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
準備工作:
在windows10下安裝python3.7
1. demo繪圖測試
demo繪圖指令
cmd> python seisplot.py --demo
問題1)缺少依賴包
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
安裝ok
問題2)配置文件的編碼異常
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 :默認的GBK
437 :是美國英語
仔細檢查發現config.yml中有異常字符,更正config.yml中錯誤字符:ok
問題3)python調試打印語句
print ("value=%d"%value)
demo數據繪圖結果
如下:
2. 本地數據繪圖測試
應用指令
cmd > python seisplot.py data/my.sgy
問題1)數據道的采樣值異常
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
解決辦法:將數據做歸一化處理
問題2)數據文件的卷頭異常
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終端執行指令后的反饋信息可讀性較差。
2
本地數據出現異常后,通過cwp中的segyread, sushw, sugain, segywrite等程序進行修改,滿足繪圖程序要求。
1)3200字節的卷頭必須規范
2)道頭字中的cdpt取值必須規范(xline)
3)道采樣值最好歸一化處理。
感謝各位的閱讀!關于“python地震數據可視化的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。