MATLAB 数据分析教程
MATLAB 作为一款专业的科学计算软件,凭借强大的数据处理函数库、直观的可视化工具和便捷的编程环境,成为数据分析领域的常用工具。无论是学术研究中的数据挖掘,还是工业场景下的趋势分析,MATLAB 都能高效完成任务。下面从基础操作到实战应用,带你掌握 MATLAB 数据分析的核心流程。
一、数据导入:将外部数据接入 MATLAB
数据分析的第一步是获取数据,MATLAB 支持多种格式数据的导入,满足不同场景需求:
- Excel/CSV 文件导入
-
图形化操作:打开 MATLAB 后,点击左侧 “当前文件夹” 面板,找到目标 Excel(.xlsx)或 CSV(.csv)文件,双击文件,在弹出的 “导入工具” 窗口中,勾选需要导入的数据列,选择导入方式(如 “导入所选内容”“生成脚本” 等),点击 “导入数据”,数据会自动存储为变量(如 Excel 中的 Sheet1 数据会生成
Sheet1变量)。 -
命令行操作:若需通过代码批量导入,使用
readtable函数,例如导入 “data.xlsx” 文件的 Sheet1 数据,输入命令:data = readtable('data.xlsx', 'Sheet', 'Sheet1');,数据会以表格(table)形式存储,方便后续操作。
- 文本文件(.txt)导入
-
对于结构化文本数据(如每行数据用空格 / 逗号分隔),使用
importdata函数,例如:data = importdata('data.txt');,函数会自动识别数据格式,生成包含数据和表头的结构体。 -
若文本格式复杂,可使用
fopen+fscanf组合,先打开文件:fid = fopen('data.txt', 'r');,再按指定格式读取:data = fscanf(fid, '%d %f', [2, inf]);(表示按 “整数 + 浮点数” 格式读取,每行 2 个数据,读取所有行),最后关闭文件:fclose(fid);。
- 数据库数据导入
- 若数据存储在 MySQL、SQL Server 等数据库中,需先安装对应数据库的驱动(在 MATLAB “附加功能” 中搜索 “Database Toolbox” 并安装),然后通过 “数据库资源管理器” 建立连接:点击 APPs 面板中的 “Database Explorer”,新建连接,选择数据库类型,输入服务器地址、用户名、密码和数据库名称,测试连接成功后,即可浏览数据库表并导入数据。
二、数据预处理:提升数据质量
原始数据常存在缺失值、异常值等问题,需先预处理确保分析准确性:
- 缺失值处理
-
检测缺失值:使用
isnan函数(针对数值型数据),例如missing = isnan(data);,返回与data同维度的逻辑矩阵,true表示对应位置为缺失值;若数据是表格形式,用is missing函数:missing = ismissing(data);。 -
处理缺失值:根据数据特点选择方法,删除缺失值用
data_clean = rmmissing(data);(删除含缺失值的行);填充缺失值用data_fill = fillmissing(data, 'constant', 0);(用 0 填充),或data_fill = fillmissing(data, 'linear');(线性插值填充,适合时序数据)。
- 异常值检测与处理
-
常用 “3σ 原则”(适用于正态分布数据):先计算数据均值
mu = mean(data, 'omitnan');(omitnan表示忽略缺失值)和标准差sigma = std(data, 'omitnan');,再筛选异常值:outlier = (data < mu - 3*sigma) | (data > mu + 3*sigma);,最后处理异常值,可替换为均值:data(outlier) = mu;,或删除异常值所在行:data_clean = data(~outlier, :);。 -
可视化检测:通过箱线图直观识别异常值,输入
boxplot(data);,图中超出上下须的点即为异常值,便于快速定位。
- 数据标准化 / 归一化
-
标准化(均值为 0,标准差为 1):使用
zscore函数,data_norm = zscore(data, 'omitnan');,适合消除量纲影响,如比较不同单位的指标(身高 cm 与体重 kg)。 -
归一化(数据映射到 [0,1] 区间):用
mapminmax函数,[data_norm, ps] = mapminmax(data, 0, 1);,ps存储映射参数,后续新数据可通过mapminmax('apply', new_data, ps)进行相同归一化。
三、核心分析:提取数据价值
预处理完成后,进入数据分析核心环节,MATLAB 提供丰富函数实现各类分析需求:
- 描述性统计分析
-
基础统计量:用
summary函数查看表格数据的统计摘要,summary(data);会显示各列数据的均值、中位数、最小值、最大值等;若为数值矩阵,用stat = [mean(data, 'omitnan'); median(data, 'omitnan'); std(data, 'omitnan'); min(data, [], 'omitnan'); max(data, [], 'omitnan')];,手动计算均值、中位数等并存储。 -
相关性分析:分析变量间关联程度,用
corrcoef函数计算相关系数矩阵,corr_matrix = corrcoef(data, 'Rows', 'complete');(Rows='complete'表示删除含缺失值的行),相关系数接近 1 或 - 1 表示强相关,接近 0 表示弱相关;用heatmap(corr_matrix, 'Colormap', parula);绘制热力图,更直观展示相关性。
- 趋势分析与预测
-
时序数据趋势:对于按时间排序的数据,用
polyfit拟合趋势线,例如对时序数据x(时间)和y(指标值),拟合一次线性趋势:p = polyfit(x, y, 1);(1表示一次多项式),y_fit = polyval(p, x);计算拟合值,再用plot(x, y, 'o', x, y_fit, '-r');绘制原始数据点和趋势线,判断数据上升 / 下降趋势。 -
简单预测:基于线性拟合结果,预测未来值,例如预测
x_new对应的y_new:y_new = polyval(p, x_new);;若数据有周期性,可使用fft进行傅里叶变换分析周期,Y = fft(y);计算频谱,f = (0:length(Y)-1)*(1/T);(T为采样周期),plot(f, abs(Y));查看频谱图,找到主要周期后进行周期性预测。
- 聚类分析
- 对无标签数据进行分类,用
kmeans函数实现 K 均值聚类,例如对数据矩阵data(每行一个样本,每列一个特征),分成 3 类:[idx, C] = kmeans(data, 3);,idx为每个样本的类别标签,C为聚类中心;用scatter(data(:,1), data(:,2), 10, idx, 'filled');绘制散点图,不同颜色表示不同类别,直观展示聚类结果。
四、数据可视化:让结果更直观
MATLAB 的可视化功能强大,能将分析结果转化为清晰图表,常用图表类型如下:
- 基础图表
-
折线图:展示数据变化趋势,
plot(x, y1, '-b', x, y2, '--r');,-b表示蓝色实线,--r表示红色虚线,可添加图例legend('数据1', '数据2');和标题title('数据趋势图');。 -
柱状图:比较不同类别数据,
bar(categories, values);,例如bar(['A类','B类','C类'], [10,25,18]);,设置颜色bar(..., 'FaceColor', [0.2,0.6,0.8]);。 -
直方图:展示数据分布,
histogram(data, 'BinWidth', 5);(BinWidth=5表示组距为 5),添加拟合曲线hold on; fplot(@(x) normpdf(x, mu, sigma)*length(data)*5, [min(data), max(data)], 'r'); hold off;,对比实际分布与正态分布。
- 高级图表
-
三维图:展示多变量关系,
scatter3(data(:,1), data(:,2), data(:,3), 20, idx, 'filled');,绘制三维散点图,用颜色区分聚类类别;或meshgrid+mesh绘制曲面图,[X,Y] = meshgrid(1:10, 1:10); Z = X.^2 + Y.^2; mesh(X,Y,Z);,展示函数曲面。 -
动态图:若需展示数据变化过程,用
animatedline,例如h = animatedline; xlabel('时间'); ylabel('数值'); for t = 1:100 y = sin(t/10); addpoints(h, t, y); drawnow; pause(0.1); end,实时绘制正弦曲线变化。
五、实战案例:MATLAB 数据分析完整流程
以 “某商品月度销量数据分析” 为例,演示完整流程:
-
数据导入:导入 “sales_data.xlsx”,包含 “月份”(1-12)和 “销量” 两列,命令:
data = readtable('sales_data.xlsx');。 -
预处理:检测缺失值
ismissing(data),无缺失值;检测异常值,用boxplot(data.销量);,发现 12 月销量为异常高值,用均值替换:mu_sales = mean(data.销量, 'omitnan'); outlier = data.销量 > mu_sales + 3*std(data.销量, 'omitnan'); data.销量(outlier) = mu_sales;。 -
分析:计算销量均值
mu = mean(data.销量)、增长率(每月销量与上月差值除以上月销量)growth_rate = diff(data.销量)./data.销量(1:end-1);;用polyfit(data.月份, data.销量, 1)拟合趋势线,得p = [200, 500],说明每月销量平均增长 200。 -
可视化:绘制销量趋势图
plot(data.月份, data.销量, 'o-', 'LineWidth', 1.5); hold on; plot(data.月份, polyval(p, data.月份), '--r', 'LineWidth', 1); xlabel('月份'); ylabel('销量'); title('商品月度销量趋势'); legend('实际销量', '趋势线'); hold off;,清晰展示销量上升趋势。
通过以上步骤,你已掌握 MATLAB 数据分析的基础能力。实际应用中,可根据需求调用更多专业工具箱(如 “Statistics and Machine Learning Toolbox” 用于机器学习分析),进一步拓展分析深度。遇到问题时,可通过 MATLAB 帮助文档(输入doc 函数名查看详细用法)或官方社区获取支持。
(注:文档部分内容可能由 AI 生成)
更多推荐
所有评论(0)