1 :数据清洗
注:数据读取
(1)读取工作表
Matlab
% 指定要读取的工作表
filename = 'sales_data.xlsx';
sheetName = 'Sheet2'; % 或者使用工作表编号,例如:sheetNumber = 2;
% 读取指定工作表的数据
data = readtable(filename, 'Sheet', sheetName);
% 显示前几行数据
head(data);
(2)写入工作表
Matlab
writetable(data, 'yourfile_modified.xlsx'); % 写入到新文件
% 或者覆盖原有文件
% writetable(data, filename);
1.1 :缺失值检测和处理
a. 检测缺失值
Matlab
% 检测缺失值
missing_data = any(ismissing(data), 2); % 沿着行查找
disp('缺失值的行号:');
disp(find(missing_data));
1)ismissing函数用于检测是否存在缺失值
2)any函数用于检测制定逻辑数组中是否存在true的值,可以指定检测的维度
3)find
函数用于返回逻辑数组中 true
值的索引。对于此用途,它用来找出包含缺失值的行号。
b.处理缺失值
删除缺失值:
Matlab
data_clean = rmmissing(data);
用均值填补缺失值
Matlab
% 用列的均值填补缺失值
data.SalesVolume = fillmissing(data.SalesVolume, 'movmean', 7); % 例如使用7天移动平均填补
2.2:异常值检测和处理
a.检测异常值
可以使用IQR方法:
- 计算四分位数和 IQR
Matlab
% 计算四分位数和 IQR
Q1 = prctile(data.SalesVolume, 25);
Q3 = prctile(data.SalesVolume, 75);
IQR = Q3 - Q1;
% 识别异常值
outliers = data.SalesVolume < (Q1 - 1.5 * IQR) | data.SalesVolume > (Q3 + 1.5 * IQR);
disp('异常值的行号:');
disp(find(outliers));
prctile(data.SalesVolume, 25)
:计算SalesVolume
的第 25 百分位数(Q1)。prctile(data.SalesVolume, 75)
:计算SalesVolume
的第 75 百分位数(Q3)。IQR = Q3 - Q1
:计算 IQR。
- 识别异常值
Matlab
% 识别异常值
outliers = data.SalesVolume < (Q1 - 1.5 * IQR) | data.SalesVolume > (Q3 + 1.5 * IQR);
disp('异常值的行号:');
disp(find(outliers));
data.SalesVolume < (Q1 - 1.5 * IQR)
:检查是否有值低于Q1 - 1.5 * IQR
。data.SalesVolume > (Q3 + 1.5 * IQR)
:检查是否有值高于Q3 + 1.5 * IQR
。outliers
是一个逻辑向量,指示每个数据点是否是异常值。
- 处理异常值
Matlab
% 用中位数填补异常值
data.SalesVolume(outliers) = median(data.SalesVolume);
median(data.SalesVolume)
:计算SalesVolume
的中位数。data.SalesVolume(outliers) = median(data.SalesVolume);
:将所有识别为异常值的SalesVolume
替换为中位数。