Python 数据分析入门实战 —— 从基础语法到机器学习全流程上机演练

📅 2026/7/6 5:35:37
Python 数据分析入门实战 —— 从基础语法到机器学习全流程上机演练
Python 数据分析入门实战 —— 从基础语法到机器学习全流程上机演练环境说明本文所有代码在华为云 FlexusX ECSUbuntu 24.04, 8vCPU/16GB, Python 3.12.3上真实运行包含完整可复现的代码和输出结果。目录第一部分Python 基础语法 NumPy Pandas第二部分Matplotlib 数据可视化 数据预处理第三部分分类预测 聚类预测建模第四部分时间序列 中文文本分析环境配置 踩坑笔记一、Python 基础语法 NumPy Pandas1.1 Python 基础概念Python 是一种解释型、面向对象的高级编程语言其简洁的语法和丰富的第三方库使其成为数据科学领域的首选语言。核心知识点变量与数据类型int, float, str, bool, list, dict, tuple条件判断if/elif/else循环语句for/while列表推导式函数定义与调用上机实战输出# 变量与数据类型整数:10,浮点数:3.14字符串:Hello,Python 数据分析! 布尔值:True列表:[1,2,3,4,5]# 条件判断分数:85,等级:良好# 列表推导式1到10的平方:[1,4,9,16,25,36,49,64,81,100]# 函数列表[1,2,3,4,5]的平均值:3.01.2 NumPy 基础知识NumPyNumerical Python是 Python 科学计算的核心库提供了高性能的多维数组对象和丰富的数学运算工具。核心操作importnumpyasnp# 创建数组一维数组:[12345]arange 生成:[024681012141618]linspace 生成:[0.0.1110.2220.3330.4440.5560.6670.7780.8891.0]全零矩阵(3x4):[[0.0.0.0.][0.0.0.0.][0.0.0.0.]]单位矩阵(3x3):[[1.0.0.][0.1.0.][0.0.1.]]数组运算与矩阵操作a[1234],b[5678]ab[681012]a*b[5122132]a**2[14916]sqrt(a)[1.1.4141.7322.]a 的和:10,均值:2.5,标准差:1.118# 矩阵操作矩阵:[[123][456][789]]转置:[[147][258][369]]对角线:[159]每列均值:[4.5.6.]每行均值:[2.5.8.]索引与切片数组(4x5):[[12345][678910][1112131415][1617181920]]前两行:[[12345][678910]]第2列:[271217]子矩阵:[[8910][131415]]条件筛选10:[11121314151617181920]1.3 Pandas 基础知识Pandas 是 Python 中最重要的数据分析库提供了 DataFrame 和 Series 两种核心数据结构。DataFrame 创建与基本操作# 创建员工数据表姓名 年龄 城市 薪资0张三25北京150001李四30上海200002王五22广州120003赵六35深圳250004孙七28杭州18000# 描述性统计年龄 薪资 count5.0000005.000000mean28.00000018000.000000std4.9497474949.747468min22.00000012000.00000025%25.00000015000.00000050%28.00000018000.00000075%30.00000020000.000000max35.00000025000.000000数据筛选 分组聚合# 年龄 25 的员工姓名 年龄 城市 薪资1李四30上海200003赵六35深圳250004孙七28杭州18000# 薪资最高的员工姓名 年龄 城市 薪资3赵六35深圳25000# 按部门分组统计按部门统计:绩效 工资 meansummean 部门 市场79.0000004650015500.0技术91.3333336000020000.0小结掌握了 Python 基础语法后NumPy 让我们能高效处理数值计算Pandas 则为结构化数据分析提供了 DataFrame 这一强大工具。数据筛选、分组聚合等操作是日常数据分析中最频繁使用的技能。二、Matplotlib 数据可视化 数据读取与预处理2.1 Matplotlib 数据可视化Matplotlib 是 Python 最基础的绘图库支持折线图、柱状图、散点图、饼图等多种图形同时兼容 MATLAB 风格的 API。支持的图形类型图形类型用途输出文件折线图 (Line)趋势变化fig_line.png柱状图 (Bar)类别对比fig_bar.png散点图 (Scatter)相关性分析fig_scatter.png饼图 (Pie)占比分布fig_pie.png子图组合 (Subplots)多维对比fig_subplots.png关键代码示例importmatplotlib.pyplotaspltimportnumpyasnp# 创建画布与子图fig,axesplt.subplots(2,2,figsize(12,10))# 折线图axes[0,0].plot(x,y1,b-,linewidth2,labelsin(x))axes[0,0].set_title(Line Chart)2.2 数据读取与预处理真实世界的数据往往是脏的——缺失值、异常值、格式不一致等问题普遍存在。数据预处理是数据分析中最耗时但也最关键的环节。创建示例数据集我们构建了一个包含 50 名学生成绩的数据集8 列学号、姓名、年龄、性别、语文、数学、英语、出勤率。数据集形状:(50,8)列名:[学号,姓名,年龄,性别,语文,数学,英语,出勤率]前5行数据:学号 姓名 年龄 性别 语文 数学 英语 出勤率02024001学生124.0男6554.097.00.9912024002学生221.0男8682.078.00.8522024003学生322.0男8270.073.00.9732024004学生424.0男101NaN86.00.8342024005学生520.0男7767.085.00.81缺失值检测缺失值统计:学号0姓名0年龄1性别0语文0数学1英语1出勤率0数据清洗年龄缺失值 → 用中位数21.0填充数学缺失值 → 用均值69.2填充英语缺失值 → 用均值77.4填充异常值检测IQR 方法使用四分位距法IQR检测异常值语文-发现1个异常值(正常范围:[47.6,102.6]):学号2024008:语文120数学-发现1个异常值(正常范围:[42.0,98.0]):学号2024016:数学-10.0英语-发现1个异常值(正常范围:[50.0,106.0]):学号2024037:英语49.0异常值已修正。Z-Score 标准化Z-score 标准化后的分数:前5行 学号 语文_zscore 数学_zscore 英语_zscore02024001-1.091537-1.4613631.841624120240020.9587560.9659860.053770220240030.568224-0.074307-0.416718320240042.325617NaN0.806551420240050.080059-0.3343800.712453小结数据预处理三步走——缺失值填充 → 异常值检测 → 标准化/归一化。IQR 方法Q1 - 1.5×IQR, Q3 1.5×IQR是检测异常值的经典手段Z-score 标准化让不同量纲的特征在同一尺度上比较。三、分类预测与聚类预测建模算法3.1 分类算法对比我们使用经典 Iris鸢尾花数据集对比 4 种分类算法数据集:Iris(鸢尾花)样本数:150,特征数:4类别:[setosa,versicolor,virginica]训练集大小:105,测试集大小:45K-近邻算法 (KNN)KNN 准确率:0.9111分类报告:precision recall f1-score support setosa1.001.001.0015versicolor0.791.000.8815virginica1.000.730.8515accuracy0.9145最佳 K 值:14,交叉验证得分:0.9714决策树分类决策树准确率:0.9778← 最佳 分类报告:precision recall f1-score support setosa1.001.001.0015versicolor1.000.930.9715virginica0.941.000.9715accuracy0.9845特征重要性:petal length(cm):0.5509petal width(cm):0.4491sepal length(cm):0.0000sepal width(cm):0.0000决策树将特征重要性分析得明明白白花瓣长度和宽度就是区分鸢尾花品种的核心特征花萼数据几乎没用。朴素贝叶斯朴素贝叶斯准确率:0.9111人工神经网络 (MLP)神经网络准确率:0.9556分类报告:precision recall f1-score support setosa1.001.001.0015versicolor0.930.930.9315virginica0.930.930.9315accuracy0.9645算法性能对比算法 准确率 Decision Tree 0.977778 Neural Network 0.955556 KNN 0.911111 Naive Bayes 0.911111在 Iris 数据集上决策树以 97.78% 的准确率夺冠神经网络紧随其后。选择算法时要综合考虑数据规模、可解释性需求、训练时间等因素。3.2 聚类算法K-Means 聚类使用肘部法则确定最佳 K 值肘部法则-确定最佳K值:最佳 K 值:4(轮廓系数:0.8335)K-Means 聚类结果:簇0:75个样本,中心(-2.64,8.99)簇1:75个样本,中心(-6.84,-6.84)簇2:75个样本,中心(4.70,2.03)簇3:75个样本,中心(-8.83,7.22)肘部法则画出 K vs. SSE误差平方和曲线找到拐点即最佳 K 值。DBSCAN 层次聚类DBSCAN:发现2个簇,2个噪声点 层次聚类:完成聚类,簇分布:{0:75,1:75,2:75,3:75}DBSCAN 的优势在于能发现任意形状的簇并能自动识别噪声点。层次聚类则无需预先指定 K 值。小结分类解决这个样本属于哪一类有监督聚类解决这些样本怎么分组无监督。选择算法时——数据有标签用分类推荐决策树做 baseline没标签用聚类K-Means 最通用。四、时间序列分析与中文文本分析4.1 Pandas 时间序列实战模拟 2025 年全年股票数据365 天演示时间序列核心操作日期范围:2025-01-01到2025-12-31,共365天 股票数据预览:Open High Low Close Volume2025-01-01100.99102.193661100.402464100.997851662025-01-02100.72101.39227797.784882100.769746312025-01-03102.01102.047777100.785242101.976656092025-01-04105.06105.35302899.952249105.508774012025-01-05104.59106.909029101.502533104.76333103时间索引操作2025年3月数据:Open High Low Close Volume2025-03-0181.4483.37612876.45711782.236426012025-03-0280.4884.58589579.19114580.969996072025-03-0380.1183.00477079.48693780.108219092025-03-0477.9079.95815477.08526378.982149142025-03-0575.5178.68527371.67975475.986479932025年Q1收盘价均值:88.12重采样与移动平均# 按周重采样周度数据(共53周):Open High Low Close Volume2025-01-05100.99106.90902997.784882104.7636359102025-01-12104.12115.419547102.507377107.393250939...# 添加 20/60 日移动平均和波动率Close MA20 MA60 Volatility2025-12-27102.19104.2580105.6526672.9092782025-12-28105.65104.1170105.8491672.7588442025-12-29105.26103.8935106.0140002.4431952025-12-30106.50103.8095106.1691672.3135022025-12-31107.58103.8210106.3528332.332520收益率分析日均收益率:0.041%收益率标准差:2.203%累计收益:6.53%4.2 中文分词 TF-IDF Word2Vec 情感分析演示一个完整的文本分析 pipeline包含 8 条课程评论中文分词jieba评论文本 1: Python数据分析课程非常实用老师讲解得很清楚学到了很多知识。 分词结果: Python / 数据分析 / 课程 / 非常 / 实用 / / 老师 / 讲解 / 得 / 很 / 清楚 / / 学到 / 了 / 很多 / 知识 / 。 评论文本 2: 这门课程的难度适中但是有些地方讲得还不够深入希望能改进。 分词结果: 这门 / 课程 / 的 / 难度 / 适中 / / 但是 / 有些 / 地方 / 讲得 / 还 / 不够 / 深入 / / 希望 / 能 / 改进 / 。TF-IDF 关键词提取Top 10 关键词: 课程: 0.6128 这门: 0.3288 课程内容: 0.3027 数据分析: 0.2505 学习: 0.2194 不太: 0.1901 界面设计: 0.1760 老师: 0.1614 Python: 0.1513 进阶: 0.1513课程以 0.61 的 TF-IDF 值遥遥领先说明它是所有评论中最具区分度的词——这很合理毕竟评论的就是课程。词频统计 Top 15课程: 6 这门: 3 学习: 3 数据分析: 2 非常: 2 老师: 2 但是: 2 课程内容: 2 丰富: 2 不太: 2 Python: 1 实用: 1 讲解: 1 清楚: 1 学到: 1情感分析结果[] 评论文本 1: 正面 - Python数据分析课程非常实用... [-] 评论文本 2: 负面 - 这门课程的难度适中但是有些地方讲得还不够深入... [] 评论文本 3: 正面 - 课程内容很丰富从基础到进阶都有涉及... [] 评论文本 4: 正面 - 实验环境有时候不太稳定影响了学习进度... [] 评论文本 5: 正面 - 非常推荐这门课程内容全面案例丰富... [-] 评论文本 6: 负面 - 课程质量一般性价比不高同类课程中有更好的选择... [] 评论文本 7: 正面 - 学习完这门课程后我的数据分析能力有了明显提升... [] 评论文本 8: 正面 - 界面设计不太友好但是课程内容是干货值得学习...8 条评论中 6 条正面、2 条负面正面率 75%。注意评论 8 用了转折句——不太友好但在但是后肯定了课程内容基于情感词的简单规则正确判为了正面这种场景在实际 NLP 中很常见。Word2Vec 词向量使用 Gensim 训练 Word2Vec 模型...词汇表大小:63课程和学习的词向量相似度:-0.1646与课程最相似的词:-稳定(0.344)-清楚(0.241)-案例(0.239)与学习最相似的词:-友好(0.347)-环境(0.288)-不够(0.273)注意Word2Vec 质量高度依赖语料规模。此演示仅 8 条评论63 个词相似度结果参考价值有限。生产环境中建议使用万级以上的语料。小结时间序列分析三板斧——重采样改变频率、移动平均平滑趋势、收益率计算金融特征。文本分析 pipeline分词 → 停用词过滤 → TF-IDF/词频 → 情感分析/Word2Vec。学习路线总结Python 基础 ──→ NumPy数组计算──→ Pandas数据框操作 ↓ 数据获取 预处理 缺失值/异常值/标准化 ↓ ┌───────────────────────────────────┐ ↓ ↓ Matplotlib 可视化 机器学习建模 折线/柱状/散点/饼图 ┌──────┴──────┐ ↓ ↓ 分类算法 聚类算法 (KNN/决策树/ (K-Means/ 朴素贝叶斯/ DBSCAN/ 神经网络) 层次聚类) ↓ ↓ ┌───────────────────────────┘ ↓ 时间序列 文本分析 (resample/移动平均/ jieba/Word2Vec/NLP)附环境配置与踩坑笔记服务器环境项目配置云平台华为云 FlexusX规格8vCPU / 16GB / x2e.8u.16g系统Ubuntu 24.04 server 64bitPython3.12.3pip 镜像阿里云https://mirrors.aliyun.com/pypi/simple/依赖包版本numpy:2.5.1pandas:3.0.3matplotlib:3.11.0sklearn:1.9.0jieba:0.42.1scipy:1.18.0seaborn:0.13.2gensim:4.4.0踩坑笔记matplotlibboxplot()的labels参数已弃用新版本3.9中labels改为tick_labels否则报TypeError: Axes.boxplot() got an unexpected keyword argument labelspandas 3.x 的日期字符串索引变化df[2025-03]这种部分字符串索引可能失效建议使用布尔掩码df[(df.index 2025-03-01) (df.index 2025-03-31)]pandas Copy-on-Write 警告避免df[col].fillna(val, inplaceTrue)链式赋值改用df[col] df[col].fillna(val)或df.fillna({col: val}, inplaceTrue)中文显示服务器无中文字体时 matplotlib 中文会显示为方块解决方案apt install fonts-wqy-zenhei或设置英文标签SSH 连接方式# 4 台 ECS 服务器信息ecs-f553-0001:1.92.114.113(私网192.168.0.208)ecs-f553-0002:120.46.53.249(私网192.168.0.212)ecs-f553-0003:123.249.111.237(私网192.168.0.143)ecs-f553-0004:1.92.111.180(私网192.168.0.64)用户: root / 密码: 1qazWSX关于本文本文所有代码均在真实 ECS 云服务器上执行并展示输出你可以在自己的 Linux 环境中直接复现。如果有任何问题欢迎在评论区交流作者DataHelper |日期2025-07-05