活动介绍
file-type

Python自动提取波形事件时间序列与文本信息

ZIP文件

下载需积分: 9 | 15KB | 更新于2025-04-25 | 58 浏览量 | 4 下载量 举报 收藏
download 立即下载
根据给定文件信息,我们可以提炼出以下知识点: 1. 波形数据库:波形数据库是一种存储时序数据的数据库,通常用于存储物理量随时间变化的数据,比如声波、地震波、心电图波形等。在电力系统中,波形数据库可以用于存储故障录波数据,这些数据对于电力系统的故障诊断和分析至关重要。 2. 数据提取与文件格式:文件中提到的reading_data.py脚本可以从EPRI(电力研究协会)网站提取元数据和波形事件的时间序列数据。这些数据被存储为文本文件(txt)和逗号分隔值文件(csv)。文本文件是使用普通文本格式存储信息的文件,而CSV文件是一种以逗号分隔数据值的标准文本格式,便于数据交换和存储。 3. 数据文件夹路径设置:在进行数据提取和存储时,需要指定数据文件夹的路径。描述中提到了两个路径:主项目数据文件夹中的csv文件夹路径和txt文件夹路径。这些路径用于组织和区分不同类型的数据,确保数据在提取后能正确存储到对应的位置。 4. PQD文件:PQD文件可能是特定于应用程序的波形数据格式。它能够存储每个事件的数据信息,包括波形数据和其他相关元数据。在描述中提到了下载所有事件数据的可能性,这意味着可以从EPRI网站获取完整的波形数据集,用于进一步的分析或机器学习处理。 5. 波形自动编码器解码器:标题中提及的“波形自动编码器解码器”是一种机器学习模型,通常用于无监督学习任务。自动编码器(Autoencoder)是一种神经网络,它通过学习将高维数据压缩到低维表示(编码),然后再将这个低维表示恢复到高维数据(解码)。在波形数据的上下文中,自动编码器可以用来提取波形数据的关键特征,压缩数据以减少存储空间,或者用于降噪等任务。 6. Python编程:从标签“Python”中我们可以知道,上述提到的数据提取和可能的波形处理工作是通过Python语言实现的。Python是IT行业中最流行的语言之一,它以其简单易学、丰富的库和框架以及跨平台的能力而广受欢迎。在数据科学和机器学习领域,Python有广泛的用途,尤其在处理和分析大数据集方面。 7. 数据工程和项目管理:根据描述内容,涉及到项目文件夹结构的管理,这是数据工程任务的一部分。需要创建清晰的项目结构来组织数据和脚本,以确保项目的可维护性、扩展性和可重复性。 综上所述,波形数据库在电力系统和其他领域中有广泛的应用。提取、存储和分析波形数据对于相关行业的研究和发展是至关重要的。Python编程语言因其强大的库支持和简洁性在这一过程中扮演了重要的角色。同时,自动化工具和机器学习模型如波形自动编码器解码器的应用,表明了数据分析和处理自动化是当前IT技术的一个重要趋势。

相关推荐

filetype

#plot 2 harmonic lines import os import glob import numpy as np import pandas as pd import matplotlib.pyplot as plt from obspy import read g = [14] # 定义bin的角度间隔和范围 bin_angle_interval = 5 bin_angle_range = np.arange(0, 360, bin_angle_interval) csv_rfani = "/media/zekun/Software/fenglin_niu/rfani.csv" ani = pd.read_csv(csv_rfani) csv_rfcan = "/media/zekun/Software/pictures/anis_yn_final/rfcan.csv" rfcan = pd.read_csv(csv_rfcan) # 创建绘图对象 #%matplotlib inline #%config InlineBackend.figure_format = 'svg' # 创建一个包含两个子图的图形窗口 (1行2列布局) fig, axs = plt.subplots(1, 2) # 创建绘图对象 %matplotlib inline %config InlineBackend.figure_format = 'svg' fig, axs[0] = plt.subplots(figsize=(9, 12)) fig, axs[1] = plt.subplots(figsize=(9, 12)) for i in g: if len(str(i))==1: n='00'+str(i) else: n='0'+str(i) # 创建存储叠加波形和事件数目的字典 stacked_waveforms = {angle: np.zeros(10004) for angle in bin_angle_range} event_counts = {angle: 0 for angle in bin_angle_range} # SAC文件所在的文件夹路径 sac_folder = '/media/zekun/Software/fenglin_niu/RFcan/examples/YN.'+str(n)+'/RFcan' png_folder='/media/zekun/Software/fenglin_niu/yn-pic/YN.'+str(n)+'.png' # 遍历文件夹中的所有SAC文件 sac_files = glob.glob(os.path.join(sac_folder, '*BHR')) for sac_file in sac_files: # 读取SAC文件 st = read(sac_file) tr = st[0] # 获取反方位角信息 back_azimuth = tr.stats.sac['baz'] # 找到对应的bin bin_angle = int((back_azimuth-2.5) // bin_angle_interval) * bin_angle_interval+bin_angle_interval # 对波形进行叠加 stacked_waveforms[bin_angle] += tr.data event_counts[bin_angle] += 1 # 对叠加后的波形进行归一化处理 for angle in bin_angle_range: stacked_waveforms[angle] /= event_counts[angle] stacked_waveforms[angle]*=30 # 绘制每个bin的波形 for angle in bin_angle_range: # 获取波形数据 waveform = stacked_waveforms[angle] #print(waveform) # 设置绘图的纵轴刻度位置 y = ((angle) // bin_angle_interval) * 5 # 绘制波形 axs[0].plot(tr.times()-10, waveform + y, color='black',linewidth=0.1) # 填充颜色 axs[0].fill_between(tr.times()-10, waveform + y, y, where=(waveform >= 0), color='lightcoral') axs[0].fill_between(tr.times()-10, waveform + y, y, where=(waveform < 0), color='lightblue') #next for index, row in ani.iterrows(): # 检查sta列的值是否为7 if row['sta'] == i: # 获取对应的k列的值 t = row['t'] for index, row in rfcan.iterrows(): # 检查sta列的值是否为7 if row['sta'] == i: # 获取对应的k列的值 phi_ra = row['phi(ra)'] phi_jof = row['phi(jof)'] dt_ra = row['dt(ra)'] dt_jof = row['dt(jof)'] # 绘制竖线 axs[0].axvline(x=t, linestyle='dashed', color='gray') #cos y = np.linspace(0, 361, 1000) #x = t - dt_ra * np.cos(2*np.deg2rad(phi_ra - y))/2 axs[0].plot(x, y, linewidth=2, label='ra', zorder=1) x = t - dt_jof * np.cos(2*np.deg2rad(phi_jof - y))/2 axs[0].plot(x, y, color='gold', linewidth=2, label='jof', alpha=0.9, zorder=1) # 绘制每个bin的波形 k=0 for angle in bin_angle_range: # 获取波形数据 waveform = stacked_waveforms[angle] #print(waveform) # 设置绘图的纵轴刻度位置 y = ((angle) // bin_angle_interval) * 5 # 绘制波形 #ax.plot(tr.times()-10, waveform + y, color='black',linewidth=0.1) # 填充颜色 #ax.fill_between(tr.times()-10, waveform + y, y, where=(waveform >= 0), color='lightcoral') #ax.fill_between(tr.times()-10, waveform + y, y, where=(waveform < 0), color='lightblue') if str(waveform[0])!='nan': k+=1 #print(waveform) #peak value max_values = [] trace_data = waveform trace_times = tr.times() for j in range(0,57): if float(ani['sta'][j])==float(str(i)): start_time=float(ani['t'][j])-float(ani['n5'][j])+10 end_time=float(ani['t'][j])+float(ani['n5'][j])+10 indices = [i for i, t in enumerate(trace_times) if start_time <= t <= end_time] #print(trace_data[indices]) if indices: max_value = max(trace_data[indices]) max_indices = [i for i, value in enumerate(trace_data) if value == max_value] max_times = [(trace_times[i]-10) for i in max_indices] max_values.extend(max_times) if max_values[-1]==max_values[0]+(len(max_values)-1)*0.005: max_time=(max_values[0]+max_values[-1])/2 else: max_time=max_values[0] if k==1: axs[0].scatter(max_values[0], y, s=30, color='green', alpha=0.9, label='peak', zorder=2) else: axs[0].scatter(max_values[0], y, s=30, color='green', alpha=0.9, zorder=2) # 设置图像范围和标签 axs[0].set_xlim(-2, 20) axs[0].set_ylim(-5, len(bin_angle_range) * 5 + 5) axs[0].set_xlabel('Time (s)', fontsize=7) axs[0].set_ylabel('Back Azimuth (°)', fontsize=7) axs[0].set_title('R RFs, before correction', fontsize=8) # SAC文件所在的文件夹路径 sac_folder = '/media/zekun/Software/fenglin_niu/RFcan/examples/YN.'+str(n)+'/RFcan' #png_folder='/media/zekun/Software/fenglin_niu/yn-pic/BHR.F/YN.'+str(n)+'.png' # 创建存储叠加波形和事件数目的字典 stacked_waveforms = {angle: np.zeros(6002) for angle in bin_angle_range} event_counts = {angle: 0 for angle in bin_angle_range} # 遍历文件夹中的所有SAC文件 sac_files = glob.glob(os.path.join(sac_folder, '*BHR.F')) for sac_file in sac_files: # 读取SAC文件 st = read(sac_file) tr = st[0] # 获取反方位角信息 back_azimuth = tr.stats.sac['baz'] # 找到对应的bin bin_angle = int(back_azimuth // bin_angle_interval) * bin_angle_interval # 对波形进行叠加 stacked_waveforms[bin_angle] += tr.data event_counts[bin_angle] += 1 # 对叠加后的波形进行归一化处理 for angle in bin_angle_range: stacked_waveforms[angle] /= event_counts[angle] stacked_waveforms[angle]*=30 # 创建绘图对象 #%matplotlib inline #%config InlineBackend.figure_format = 'svg' # 绘制每个bin的波形 for angle in bin_angle_range: # 获取波形数据 waveform = stacked_waveforms[angle] # 设置绘图的纵轴刻度位置 y = (angle // bin_angle_interval + 1) * 5 # 绘制波形 axs[1].plot(tr.times()-10, waveform + y, color='black',linewidth=0.1) # 填充颜色 axs[1].fill_between(tr.times()-10, waveform + y, y, where=(waveform >= 0), color='lightcoral') axs[1].fill_between(tr.times()-10, waveform + y, y, where=(waveform < 0), color='lightblue') for index, row in ani.iterrows(): # 检查sta列的值是否为7 if row['sta'] == i: # 获取对应的k列的值 t = row['t'] # 绘制竖线 axs[1].axvline(x=float(t), linestyle='dashed', color='gray') # 设置图像范围和标签 axs[1].set_xlim(-2, 20) axs[1].set_ylim(-5, len(bin_angle_range) * 5 + 5) axs[1].set_xlabel('Time (s)', fontsize=7) #axs[1].set_ylabel('Amplitude') axs[1].set_title('R RFs, after correction', fontsize=8) for ax in axs.flat: # 遍历所有的子图 (如果是二维数组的话需要flatten化) # 设置横轴的大刻度和小刻度 ax.yaxis.set_major_locator(plt.MultipleLocator(50)) ax.yaxis.set_minor_locator(plt.MultipleLocator(10)) #ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, pos: f'{x:.1f}' if pos % 2 != 0 else '')) plt.tick_params(axis='y', top=True, labeltop=True) ax.tick_params(axis='y', which='minor', top=True) ax.tick_params(axis='both', which='major', labelsize=6) #plt.subplots_adjust(wspace=0.1) # 显示图像 plt.savefig(png_folder,dpi=1000) plt.show() 我想用这段代码绘制一行二列的两个子图,为什么在jupyter notebook中得到的是二行一列的图,甚至生成的png图像中只有第二个子图

ShiMax
  • 粉丝: 70
上传资源 快速赚钱