第四章:Matlab 数据处理与分析

第四章: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 的其他功能,例如图像处理、信号处理、优化等。

持续更新中!如果对您有帮助请点个赞!