读取当前目录下名字为原始csv文件夹的csv,将csv文件的每列按窗口切片,计算均值、方差、小波1-16的能量值,生成csv文件后存储到名字为特征csv文件目录下,并按原csv文件名+列命名
时间: 2024-04-14 14:26:37 浏览: 62
你可以使用Python的pandas库和os库来完成这个任务。以下是一个示例代码:
```python
import os
import pandas as pd
import numpy as np
import pywt
# 定义窗口大小和步长
window_size = 100
step_size = 50
# 获取当前目录路径
current_dir = os.getcwd()
# 创建特征csv文件目录
feature_dir = os.path.join(current_dir, '特征csv文件目录')
if not os.path.exists(feature_dir):
os.makedirs(feature_dir)
# 获取当前目录下名字为原始csv文件夹的csv文件
csv_files = [file for file in os.listdir(current_dir) if os.path.isdir(file) and file == '原始csv文件夹']
if len(csv_files) == 0:
print("未找到名为'原始csv文件夹'的文件夹")
exit()
csv_dir = os.path.join(current_dir, csv_files[0])
# 遍历原始csv文件夹中的csv文件
for file in os.listdir(csv_dir):
# 读取csv文件
df = pd.read_csv(os.path.join(csv_dir, file))
# 获取原始数据的列名
column_names = df.columns
# 创建新的DataFrame用于存储结果
result_df = pd.DataFrame(columns=[f'{file}_{col}_mean' for col in column_names] +
[f'{file}_{col}_var' for col in column_names] +
[f'{file}_{col}_energy' for col in column_names])
# 对每列进行窗口切片、计算统计指标和能量值
for col in column_names:
col_data = df[col]
num_windows = (len(col_data) - window_size) // step_size + 1
for i in range(num_windows):
window_data = col_data[i*step_size : i*step_size + window_size]
# 计算均值和方差
mean_value = np.mean(window_data)
var_value = np.var(window_data)
# 计算小波能量值
coeffs = pywt.wavedec(window_data, 'db4', level=16)
energy_values = [np.sum(np.square(coeff)) for coeff in coeffs]
# 将结果添加到新的DataFrame
row = [mean_value] + [var_value] + energy_values
result_df.loc[i] = row
# 将结果保存为新的csv文件
result_file = f'{file}_result.csv'
result_path = os.path.join(feature_dir, result_file)
result_df.to_csv(result_path, index=False)
print("特征csv文件生成完成")
```
以上代码会在当前目录下查找名为'原始csv文件夹'的文件夹,读取其中的csv文件,并对每列进行窗口切片、计算均值、方差和小波1-16的能量值。然后将结果保存到名为'特征csv文件目录'的文件夹下,并按原csv文件名+列命名。请确保在当前目录下存在'原始csv文件夹',并将'特征csv文件目录'替换为你想要存储特征csv文件的目录名。
阅读全文