第四章:Matlab 数据处理与分析
4.1 数据的导入与导出
4.1.1 从文件导入数据
- 文本文件: 使用
load
,importdata
,textscan
等函数。 - Excel 文件: 使用
xlsread
,readtable
等函数。 - MAT 文件: 使用
load
函数。
代码示例:
% 从文本文件导入数据 (假设文件名为 data.txt)
% load 函数适用于纯数值数据
data1 = load('data.txt');
% importdata 函数可以自动识别数据格式
data2 = importdata('data.txt');
% textscan 函数可以更灵活地读取数据
fid = fopen('data.txt', 'r');
data3 = textscan(fid, '%f %f %f'); % 假设数据有三列
fclose(fid);
% 从 Excel 文件导入数据 (假设文件名为 data.xlsx)
% xlsread 函数读取数值数据
[num, txt, raw] = xlsread('data.xlsx');
% readtable 函数读取表格数据
data_table = readtable('data.xlsx');
% 从 MAT 文件导入数据 (假设文件名为 data.mat)
load('data.mat');
4.1.2 数据导出到文件
- 文本文件: 使用
save
,dlmwrite
,fprintf
等函数。 - Excel 文件: 使用
xlswrite
,writetable
等函数。 - MAT 文件: 使用
save
函数。
代码示例:
% 将数据保存到文本文件
data = rand(5, 3); % 生成 5 行 3 列的随机数矩阵
save('data.txt', 'data', '-ascii'); % 保存为 ASCII 格式
% 使用 dlmwrite 函数指定分隔符
dlmwrite('data_delimiter.txt', data, 'delimiter', ','); % 使用逗号分隔
% 使用 fprintf 函数格式化输出
fid = fopen('data_formatted.txt', 'w');
fprintf(fid, '%.2f %.2f %.2f\n', data'); % 每行三个数,保留两位小数
fclose(fid);
% 将数据保存到 Excel 文件
xlswrite('data.xlsx', data); % 保存数值数据
writetable(data_table, 'data_table.xlsx'); % 保存表格数据
% 将数据保存到 MAT 文件
save('data.mat', 'data');
4.2 数据的预处理
4.2.1 数据清洗
- 去除缺失值: 使用
isnan
,rmmissing
等函数。 - 异常值处理: 使用
isoutlier
,filloutliers
等函数。
代码示例:
% 生成包含缺失值和异常值的示例数据
data = [1, 2, NaN, 4, 5, 100, 7, 8, 9, 10];
% 去除缺失值
data_cleaned = rmmissing(data); % 去除包含 NaN 的行或列
% 检测异常值
outliers = isoutlier(data); % 返回逻辑数组,标记异常值
% 替换异常值
data_filled = filloutliers(data, 'linear'); % 使用线性插值替换异常值
4.2.2 数据归一化与标准化
- 归一化: 将数据缩放到 [0, 1] 区间。
- 标准化: 将数据转换为均值为 0,标准差为 1 的分布。
代码示例:
% 归一化
data_normalized = (data - min(data)) / (max(data) - min(data));
% 标准化
data_standardized = (data - mean(data)) / std(data);
4.3 数据统计分析
4.3.1 基本统计量计算
- 均值:
mean
- 方差:
var
- 标准差:
std
- 中位数:
median
- 最大值:
max
- 最小值:
min
代码示例:
data = rand(100, 1); % 生成 100 个随机数
% 计算基本统计量
mean_value = mean(data);
variance = var(data);
std_deviation = std(data);
median_value = median(data);
max_value = max(data);
min_value = min(data);
% 显示结果
disp(['均值: ', num2str(mean_value)]);
disp(['方差: ', num2str(variance)]);
disp(['标准差: ', num2str(std_deviation)]);
disp(['中位数: ', num2str(median_value)]);
disp(['最大值: ', num2str(max_value)]);
disp(['最小值: ', num2str(min_value)]);
4.3.2 数据排序与筛选
- 排序:
sort
- 筛选: 使用逻辑索引。
代码示例:
data = rand(10, 1); % 生成 10 个随机数
% 排序
data_sorted = sort(data, 'descend'); % 降序排列
% 筛选
threshold = 0.5;
data_filtered = data(data > threshold); % 筛选大于阈值的元素
4.3.3 相关分析与回归分析
- 相关分析:
corrcoef
- 简单线性回归:
polyfit
- 多元线性回归:
fitlm
代码示例:
% 生成示例数据
x = 1:10;
y = 2*x + randn(1, 10); % 添加噪声
% 相关分析
correlation_coefficient = corrcoef(x, y);
% 简单线性回归
p = polyfit(x, y, 1); % 一阶多项式拟合
y_fit = polyval(p, x);
% 绘制结果
scatter(x, y);
hold on;
plot(x, y_fit, 'r');
legend('数据点', '拟合直线');
% 多元线性回归
% 假设有多个自变量 x1, x2, x3
x1 = rand(10, 1);
x2 = rand(10, 1);
x3 = rand(10, 1);
y = 2*x1 + 3*x2 - 1*x3 + randn(10, 1); % 添加噪声
% 构建表格数据
tbl = table(x1, x2, x3, y);
% 拟合多元线性回归模型
mdl = fitlm(tbl, 'y ~ x1 + x2 + x3');
% 显示模型结果
disp(mdl);
总结:
本章介绍了 MATLAB 的数据处理与分析功能,包括数据的导入与导出、数据预处理、数据统计分析等。通过代码示例,您可以学习如何使用不同的函数处理和分析数据,并从中提取有价值的信息。在接下来的章节中,我们将学习 MATLAB 的其他功能,例如图像处理、信号处理、优化等。
持续更新中!如果对您有帮助请点个赞!