将西储大学轴承数据集的.mat文件转成csv文件
时间: 2025-05-25 14:43:43 浏览: 31
### 将西储大学轴承数据集的 `.mat` 文件转换为 `CSV` 文件的方法
要实现将西储大学轴承数据集中的 `.mat` 文件转换为 `CSV` 文件,可以采用 Python 或 MATLAB 的方式完成。以下是两种方法的具体说明:
---
#### 方法一:使用 Python 进行转换
通过 Python 可以方便地加载 `.mat` 文件并将其保存为 `CSV` 文件。以下是一个完整的代码示例:
```python
import numpy as np
import pandas as pd
from scipy.io import loadmat
# 定义文件名列表和对应的列名称
file_names = ['097', '105', '118', '130', '169', '185', '197', '209', '222', '234']
columns_name = [
'de_normal', 'de_7_inner', 'de_7_ball', 'de_7_outer',
'de_14_inner', 'de_14_ball', 'de_14_outer',
'de_21_inner', 'de_21_ball', 'de_21_outer'
]
# 创建一个空 DataFrame 来存储所有数据
data_12k_1797_10c = pd.DataFrame()
for index in range(len(file_names)):
# 加载 .mat 文件
data = loadmat(f'D:\\work\\Anaconda\\10class\\{file_names[index]}.mat')
# 提取指定键的数据,并展平为一维数组
column_key = f'X{file_names[index]}_DE_time'
dataList = data[column_key].reshape(-1)
# 截断到固定长度(假设每列为 119808)
data_12k_1797_10c[columns_name[index]] = dataList[:119808]
# 输出最终的 DataFrame 形状
print(data_12k_1797_10c.shape)
# 保存为 CSV 文件
output_path = 'D:\\work\\Anaconda\\10class\\bearing_data.csv'
data_12k_1797_10c.to_csv(output_path, header=True, index=False)
```
此代码会遍历所有的 `.mat` 文件,提取其中的关键数据字段,并将其组合成一个统一的 `DataFrame` 后导出为 `CSV` 文件[^2]。
---
#### 方法二:使用 MATLAB 进行转换
MATLAB 自带了处理 `.mat` 和 `CSV` 文件的功能,因此也可以轻松实现这一目标。以下是具体步骤:
1. **加载 `.mat` 文件**
使用 `load` 函数加载 `.mat` 文件的内容。
2. **提取所需变量**
遍历每个 `.mat` 文件,获取其内部存储的时间序列数据。
3. **保存为 `CSV` 文件**
利用 `writematrix` 或 `csvwrite` 函数将矩阵写入 `CSV` 文件。
以下是 MATLAB 实现代码:
```matlab
% 定义文件路径和文件名前缀
filePath = 'D:\work\Anaconda\10class\';
fileNames = {'097', '105', '118', '130', '169', '185', '197', '209', '222', '234'};
columnNames = {
'de_normal', 'de_7_inner', 'de_7_ball', 'de_7_outer',...
'de_14_inner', 'de_14_ball', 'de_14_outer',...
'de_21_inner', 'de_21_ball', 'de_21_outer'
};
% 初始化数据矩阵
numRowsPerFile = 119808; % 假设每列有相同数量的样本
totalData = zeros(numRowsPerFile, length(fileNames));
% 循环读取每个 .mat 文件
for i = 1:length(fileNames)
fileName = fullfile(filePath, sprintf('%s.mat', fileNames{i}));
loadedData = load(fileName);
% 获取对应时间序列数据
keyName = sprintf('X%s_DE_time', fileNames{i});
totalData(:,i) = reshape(loadedData.(keyName), [], 1)(1:numRowsPerFile); % 截断至固定长度
end
% 导出为 CSV 文件
outputPath = fullfile(filePath, 'bearing_data.csv');
writematrix(totalData, outputPath);
disp('Conversion completed successfully!');
```
该脚本同样实现了从多个 `.mat` 文件中提取特定字段并将它们拼接成单个矩阵后保存为 `CSV` 文件的操作[^1]。
---
### 注意事项
- 如果 `.mat` 文件结构复杂或者存在嵌套字典,则可能需要进一步解析才能访问所需的底层数据。
- 数据截断长度应根据实际需求调整;如果不同文件之间的采样点数不一致,请提前确认最小公共长度以便于后续分析。
- 对于大规模数据集,在内存管理方面需特别注意优化程序性能。
---
阅读全文
相关推荐

















