#######################################计算因子###############################
import csv
import pandas as pd
import matplotlib.pyplot as plt
def psfeatureTime(dataset_url, p1, p2):
# 建立一个数组来存储某一列的数据
pending_column = []
with open(dataset_url) as csv_file:
row = csv.reader(csv_file, delimiter=',')
next(row) # 读取首行
# 读取除首行之后每一行的第二列数据,并将其加入到数组price之中
for r in row:
# r[2]决定求哪一列,比如此时r[2]就是求第三列的相关值
pending_column.append(float(r[3])) # 将字符串数据转化为浮点型加入到数组之中
data = np.array(pending_column)
# 均值
df_mean = data[p1:p2].mean()
df_var = data[p1:p2].var()
df_std = data[p1:p2].std()
# 均方根
df_rms = np.sqrt(pow(df_mean, 2) + pow(df_std, 2))
# 峰峰值
fengfengzhi = max(data[p1:p2]) - min(data[p1:p2])
# 偏度
df_skew = pd.Series(data[p1:p2]).skew()
# 峰度
df_kurt = pd.Series(data[p1:p2]).kurt()
sum = 0
for p1 in range(len(data[p1:p2])):
sum += np.sqrt(abs(data[p1]))
# 波形因子
df_boxing = df_rms / (abs(data[p1:p2]).mean())
# 峰值因子
df_fengzhi = (max(data[p1:p2])) / df_rms
# 脉冲因子
df_maichong = (max(data[p1:p2])) / (abs(data[p1:p2]).mean())
# 裕度因子
df_yudu = max(data[p1:p2]) / pow(sum / (p2 - p1), 2)
# 峭度
df_qiaodu = (np.sum([x ** 4 for x in data[p1:p2]]) / len(data[p1:p2])) / pow(df_rms, 4)
featuretime_list = [round(df_rms, 3), round(fengfengzhi, 3), round(df_fengzhi, 3), round(df_boxing, 3),
round(df_maichong, 3), round(df_yudu, 3), round(df_qiaodu, 3)]
print(featuretime_list)
return featuretime_list
dataset_url = 'E:/PyCharm_workspace/demo/h2o/regression/CNC.csv'
# 当前位置
p1 = 1
# 采样频率
sampl_frequency = 40000
# 按照采样频率下一次到达的位置
p2 = p1 + sampl_frequency
# 统计该文件有多少行?
total_lines = len(open(dataset_url).readlines())
print('The total lines is ', total_lines)
times = total_lines // sampl_frequency
print(times)
divisor_list = []
df_boxing_list = []
df_fengzhi_list = []
df_maichong_list = []
df_yudu_list = []
df_qiaodu_list = []
for i in range(times):
divisor_list = psfeatureTime(dataset_url, i * sampl_frequency, i * sampl_frequency + sampl_frequency)
df_boxing_list.append(float(divisor_list[0]))
df_fengzhi_list.append(float(divisor_list[1]))
df_maichong_list.append(float(divisor_list[2]))
df_yudu_list.append(float(divisor_list[3]))
df_qiaodu_list.append(float(divisor_list[4]))
plt.plot(df_boxing_list)
plt.title('波形因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('波形因子',fontproperties = 'SimHei')
plt.show()
plt.plot(df_fengzhi_list)
plt.title('峰值因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('峰值因子',fontproperties = 'SimHei')
plt.show()
plt.plot(df_maichong_list)
plt.title('脉冲因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('脉冲因子',fontproperties = 'SimHei')
plt.show()
plt.plot(df_yudu_list)
plt.title('裕度因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('裕度因子',fontproperties = 'SimHei')
plt.show()
plt.plot(df_qiaodu_list)
plt.title('峭度因子',fontproperties = 'SimHei')
plt.xlabel('采样次数',fontproperties = 'SimHei')
plt.ylabel('峭度因子',fontproperties = 'SimHei')
plt.show()
python时域信号特征提取_狂奔的 蜗牛的博客-CSDN博客_python 信号特征提取



