用python-pptx生成人工智能与大数据分析讲义 简介一份面向数据分析入门者与人工智能初学者的演示文稿主题为人工智能与大数据分析。开篇从大数据分析的基本概念切入解释数据、信息与知识之间的关系并介绍数据分析师常用的Python、R、SQL、Excel、SPSS等工具随后通过沃尔玛购物篮分析、世界杯点球预测、UPS路线优化、阿里信用贷款等真实案例阐明数据驱动决策在商业、体育和物流中的实际价值。后半部分重点讲解Python数据分析基础以及NumPy、Pandas两大库的核心用法并以泰坦尼克号乘客生存预测案例完整演示从数据清洗、特征梳理到建模判断的分析流程适合教学、自学和项目汇报参考。文件为单个PPTX演示文稿共69页压缩包大小约16.75MB结构紧凑便于整体浏览目前已有358人学习下载是一份快速了解大数据分析应用场景的入门资料。1. 一份《人工智能与大数据分析.pptx》到底要装什么内容收到《人工智能与大数据分析.pptx》这个标题文件的人通常有三类要给学生或员工授课的讲师、要在内部做技术汇报的工程师、想顺着这门课补一遍知识框架的从业者。很多人拿到标题第一反应是「人工智能讲二十页大数据分析再讲二十页」结果成品成了两张皮前半部分堆神经网络结构图后半部分放 SQL 截图观众看完说不清两者有什么关系。真正值得讲的是数据如何从原始状态一步步变成模型决策的依据这条主线本身就是大数据分析管线与模型训练闭环的连接点。这门课适合对 pandas、SQL 有基础、但没系统串过完整数据链路的人。读完你不仅能回答「为什么数据清洗直接影响模型精度」还能拿到一条用 python-pptx 脚本直接生成整套讲义 .pptx 文件的可行路径以及上台前必须检查的细节清单。2. 先立住大纲人工智能模型流程与大数据分析管线怎么排2.1 为什么人工智能章节必须让位给大数据分析管线我在设计这类课时会把课程主线定义成一条数据流水线数据采集 → 数据清洗 → 探索性分析 → 特征工程 → 模型训练与评估 → 结果解释。人工智能模型是这条管线的终点而不是起点。这个顺序看起来反直觉但有一个很现实的失败案例支撑很多教程先讲决策树、随机森林、神经网络等到实训环节让学生拿真实数据集做预测学生的第一个动作往往是把原始数据直接塞进fit()然后被缺失值、重复行、时间字段警告卡住半小时。问题不在模型没学懂而是缺少「先看看数据长什么样」的训练。把大数据分析放在人工智能前面本质上是让学生先建立数据敏感度。在数据清洗这一节他们学会的是「多少缺失能容忍、什么情况要删除、什么情况要填充」到了特征工程才能把清洗干净的字段转换成模型能吃的数值特征。这个顺序同时对应了现在企业里「人工智能训练师」岗位的日常工作流程不是调参调包而是先把数据伺候明白。这两年行业里常讲 harness 人工智能驾驭人工智能我的立场很朴素驭模型先驭数据。这条学习路径对新手友好对熟手也能起到补全盲区的作用——很多写了好几年 SQL 的工程师第一次发现自己对数据质量的判断方法是缺失的。2.2 每页幻灯片必须兑现一个可检验的承诺大纲阶段我给每一页写一句验收标准这页讲完后听众能回答哪个问题、能复现哪个动作。针对这个标题可以按下面的表分配页码总篇幅控制在 24 到 30 页既把管线拉完整又不会拖到听众注意力耗尽。页码范围章节名这一页要兑现的结论是否含代码演示1-3开场与课程地图能说出大数据分析与人工智能在链路中的上下游关系否4-8数据清洗与预处理能说出缺失值、重复值和类型错误三类脏数据的处理顺序是9-12探索性分析与特征工程能用 concat() 合并特征、用直方图识别分布异常是13-18模型训练与评估能区分训练集/测试集划分与数据泄漏的差异是19-24案例复盘与选型能根据数据量和业务目标选择简单模型而不是堆深度网络部分这张表的重点是「是否含代码演示」。光给结论没有说服力我在数据分析章节通常给学员准备一份 500 到 2000 行的 mini-dataset讲一个功能就现场跑一段幻灯片上的代码和终端真实输出保持逐字符一致。后面第 3 章讲怎么用脚本生成讲义时会把这类代码做成等宽字体文本框避免从幻灯片复制到终端时半角引号被换成中文全角。每一项验收标准都应该能在五分钟内被证伪讲师可以随手把train_test_split的shuffleFalse改成True问学员「结果变了没、为什么」答不上来就说明上一页没讲透。2.3 三条必须守住的技术边界大纲阶段还要提前定好哪些话不能讲否则现场必被追问。第一条是「大数据」的量级界定。在课程语境里几十万行结构化的 demo 数据足以支撑全部演示如果反复提 HDFS、Spark、分布式计算却没有相应规模的演示数据很容易被问「你这个 demo 是不是小数据集也能跑」。常见做法是开宗明义本课只覆盖单机内存可处理的数据分布式的动机与代价作为扩展阅读放在讲义末尾绝不混进主线。第二条是不能把相关性说成因果尤其是旅游网站、电商这类场景分析结果里出现强相关变量时必须补一句「这只是相关不是因果」。第三条是模型评估必须放在数据清洗之后讲否则学员会养成「先跑通、后质疑」的坏习惯拿到任何数据都先fit再说。这三条写进大纲的备注页比在台上临场解释要稳得多。你会发现在写大纲的这个阶段内容密度已经接近 20 页的量剩下的问题只是怎么把它变成一份排得干净、换台电脑不打乱版式的 .pptx 文件。3. 用 python-pptx 把人工智能与大数据分析大纲落成 .pptx3.1 最小可运行的生成脚本从空白文档到第一页正文既然交付物是一个 .pptx 文件最常见的做法是用 python-pptx 直接操作演示文稿的 XML 结构生成过程完全可脚本化不需要本机安装 Office。这样「改大纲 → 重新生成讲义」可以变成一条命令。先看一段最小可运行的脚本它创建一份 16:9 的空白讲义写入标题页和一页数据清洗的代码演示页。from pptx import Presentation from pptx.util import Inches, Pt prs Presentation() prs.slide_width Inches(13.333) # 16:9 宽屏单位是英寸 prs.slide_height Inches(7.5) blank prs.slide_layouts[6] # 空白版式避免占位符干扰排版 # 第 1 页标题页 slide prs.slides.add_slide(blank) tb slide.shapes.add_textbox(Inches(1), Inches(2.5), Inches(11), Inches(1.5)) tf tb.text_frame p tf.paragraphs[0] run p.add_run() run.text 人工智能与大数据分析 run.font.size Pt(40) run.font.bold True # 第 2 页数据清洗代码演示页 slide2 prs.slides.add_slide(blank) tb2 slide2.shapes.add_textbox(Inches(0.8), Inches(0.6), Inches(11.5), Inches(1)) tb2.text_frame.text 1. 数据清洗先处理缺失值 code_box slide2.shapes.add_textbox(Inches(0.8), Inches(1.8), Inches(11.5), Inches(4)) code_frame code_box.text_frame code_frame.word_wrap False code_text ( df.isna().sum() # 统计每列缺失值数量\n df.dropna(axis0, howany) # 删除含缺失值的行\n ) code_para code_frame.paragraphs[0] run_code code_para.add_run() run_code.text code_text run_code.font.name Consolas run_code.font.size Pt(16) prs.save(人工智能与-大数据分析.pptx)代码里的关键参数先解释一遍。slide_layouts[6]取的是模板自带的空白布局多数新建文档第 6 号索引就是空白页但不同来源的 .pptx 模板布局顺序可能不一致稳妥做法是先print(len(prs.slide_layouts))确认索引范围再统一用一个空白布局常量。word_wrap False表示代码行不自动换行防止长语句被断在.或_中间导致学员抄代码时拼错方法名。字号 16pt 的 Consolas 在投影仪上勉强可读再小后排就看不清了。prs.save()保存中文文件名没有任何问题但换台电脑打开时字体可能被替换所以生成完必须做一次渲染检查这一步在最后一章展开。提示run.font.name只能设置拉丁字体中文字体要写到 run 的 eastAsia 字体属性里否则生成的文件换机器打开会出现字体回退课文换回宋体代码框和正文的风格立刻脱节。3.2 用常量与字体函数控制整份讲义的观感如果每页都手动add_textbox30 页讲义的代码会膨胀到没法维护。常见做法是定义一套排版函数把「页头标题 左对齐正文 底部页码」抽成公共调用把字号、边距、主题色收敛成文件顶部的一组常量。修改版式时只动常量不用在几十段代码里找数字。下面是中文字体处理的核心函数它是中文讲义能否「看起来像正经出版物」的分水岭。from pptx.oxml.ns import qn def set_zh_font(run, name微软雅黑, size18, boldFalse): run.font.name name # 只对拉丁字符生效 run.font.size Pt(size) run.font.bold bold rPr run._r.get_or_add_rPr() ea rPr.find(qn(a:ea)) # eastAsia 字体节点 if ea is None: ea rPr.makeelement(qn(a:ea), {}) rPr.append(ea) ea.set(typeface, name) # 显式指定中文字体这个函数的关键在于qn(a:ea)。python-pptx的font.name属性只写拉丁字体节点中文字符真正调用的是 eastAsia 节点不单独设置PowerPoint 就会用主题默认的中文字体渲染不同机器上看到的效果可能完全不同。get_or_add_rPr()是 python-pptx 内部方法保证 run 属性节点存在后再挂a:ea子节点顺序不能反。实际排版时配合一组常量例如TITLE_SIZE 28、BODY_SIZE 18、MARGIN Inches(0.8)整套讲义的观感就锁死在同一套规范里不会出现某页字体忽大忽小的低级问题。3.3 批量生成讲义一份大纲 JSON 对应整套 .pptx进阶做法是先定义大纲数据结构再用同一套渲染函数批量产出讲师版、学员版和讲稿备注页。我一般把每一页描述成一个字典例如{title: 数据清洗, code: …, notes: …}页面渲染函数负责读字段并写入固定坐标。课程内容更新时只改数据文件不用人肉调整文本框。生成时给不同版本加后缀例如人工智能与大数据分析_学员版.pptx学员版可以隐藏代码行或者把答案替换成空行方便课堂练习。用这种结构驱动第 2 章的那张页码表可以直接转成 JSON 文件大纲与成品之间不再出现「文档改了、幻灯片没改」的错位。这一节每次跑脚本都应该顺带打印生成的文件名和页数作为最基础的版本核对手段。4. 大数据分析实操数据清洗、concat 纵向/横向合并与分组聚合4.1 数据清洗四步套路缺失值、重复值、类型错误、异常值很多分析脚本翻车都翻在清洗顺序上。我的固定顺序是先做类型检查再做去重然后处理缺失最后看异常值分布。原因是类型错误会影响后续所有操作而缺失值填充策略依赖列的真实类型来决定是填中位数还是填众数。下面这段代码可以直接放进学员的课堂练习里。import pandas as pd df pd.read_csv(mini_dataset.csv, encodingutf-8) # 1) 类型检查object 列里混入数字先用 coerce 统一转换 df[amount] pd.to_numeric(df[amount], errorscoerce) # 2) 去重按业务主键判断而不是整行 df df.drop_duplicates(subset[user_id, order_id]) # 3) 缺失值先计数再决定删除或填充 print(df.isna().sum()) df df.dropna(subset[order_id]) # 主键缺失直接删 df[amount] df[amount].fillna(df[amount].median()) # 数值列填中位数 # 4) 异常值用 IQR 找出离群区间先观察再决定处理 q1, q3 df[amount].quantile([0.25, 0.75]) iqr q3 - q1 outliers df[(df[amount] q1 - 1.5 * iqr) | (df[amount] q3 1.5 * iqr)]两个容易搞错的参数要讲清楚。to_numeric的errorscoerce遇到无法解析的字符串会写成NaN而不是抛异常中断整个 pipeline这对数据质量参差不齐的真实文件来说是更安全的默认选择如果写成errorsraise一行脏数据就能让整条链路停摆。drop_duplicates(subset...)如果不传 subset会按整行判断重复现实中同一订单的个人信息列有细微差异时整行去重基本失效必须用业务主键。填充策略上我刻意用中位数而不是均值异常值会把均值拉偏中位数对离群点更稳健。异常值最后只标记不过度清理直接把离群行删掉可能把大客户也删没了演示阶段的结论是「先观察再判断」。4.2 concat() 实现纵向与横向合并方向参数 axis 是唯一分水岭pandas 里concat()是最直观的数据合并入口但axis的反直觉设计让很多人踩坑axis0是纵向合并把行叠起来axis1是横向合并把列并排。这个方向定义和线性代数里对矩阵 axis 的习惯理解容易混所以课堂讲义上值得单独占一页。用一个简短示例说明import pandas as pd t1 pd.DataFrame({user_id: [1, 2], amount: [30, 50]}) t2 pd.DataFrame({user_id: [3, 4], amount: [60, 90]}) # axis0把 t2 的行追加到 t1 下面结果是 4 行 stacked pd.concat([t1, t2], axis0, ignore_indexTrue) # axis1列并排索引必须对齐否则产生大量缺失 merged pd.concat([t1, t1[[amount]] * 2], axis1)两个参数值得单独交代。ignore_indexTrue在纵向合并时让结果索引从 0 重新编号否则新表里会保留原两表的索引号 0,1,0,1 交错出现后续loc定位极易出错横向合并时不建议开ignore_index因为它靠索引对齐两边的行打乱索引会导致数据行错位。还要反复强调的是concat是「叠」不是「连」它不做基于键的匹配去重类似 SQL JOIN 的按字段关联必须改用merge()或join()。下面这张表可以直接放进讲义作为两方向参数的速查页。concat 参数axis0axis1合并方向纵向堆叠行数增加横向并排列数增加索引处理搭配 ignore_indexTrue 重建索引依赖索引对齐保持原索引列名不一致时缺失位置填 NaN行索引不一致时错位典型场景按月数据表拼接特征表与标签表拼接4.3 聚合与探索性分析groupby agg 一页讲完探索性分析部分我习惯把重点放在「把维度拆开看指标」这是大数据分析区别于单纯取数的关键。groupby 负责拆分agg 负责汇总一行代码就能得到多指标对比表daily ( df.groupby(order_date)[amount] .agg([sum, mean, count]) .reset_index() ) daily.columns [order_date, total_amount, avg_amount, order_cnt]agg([sum, mean, count])返回的结果列名分别是 sum、mean、count所以紧接着要重命名 columns让输出对学员可读reset_index()把 order_date 从索引降回普通列方便后续排序画图。可视化部分不堆复杂参数展示df.plot(kindbar)和df.plot(kindhist, bins30)两个入口就够让学员先看到分布形状再去决定特征工程方向。比如发现 amount 右偏就做一次np.log1p变换这比直接背特征工程方法论更好理解。这一组代码在一页内讲完每个人都能在本地直接复现不需要额外搭环境。5. 上台前必查的 .pptx 细节与演示数据坑位5.1 三分钟渲染检查清单生成 .pptx 后最快的检查方式是转成 PDF 再看静态渲染图。LibreOffice 的soffice --headless --convert-to pdf 人工智能与-大数据分析.pptx是常见做法它会按真实字体替换结果渲染出每一页。检查顺序固定为三条代码框有没有被截断中文字体有没有回退成宋体表格列宽有没有把数字吞掉。代码框截断的原因通常是文本框高度写死且word_wrapFalse导致溢出字体回退说明 eastAsia 属性没写对回到第 3 章 3.2 节的set_zh_font函数检查有没有被跳过。5.2 演示数据的三类现场炸弹第一类是数据泄漏这是人工智能课程里最容易翻车的地方如果先用整份数据做特征缩放再去划分训练集和测试集测试集的信息已经被模型间接看到现场得出的准确率会虚高。正确做法是先train_test_split再只对训练集fit缩放器测试集用同一个缩放器transform。第二类是随机种子没固定同一段代码每次跑出来的准确率都不一样学员会当场质疑结果不可复现。在train_test_split、模型初始化、抽样三处都设置random_state42能解决绝大多数问题。第三类是代码框里的引号被排成全角检查时直接搜索英文引号附近有没有异常空白比逐字符读要快得多。这三类问题都不难修但都属于「上台前不查、上台后必炸」的典型。5.3 现场跑数据的时间与数量级控制最后给一个具体技巧把演示用数据集和完整版数据集分开存两个文件。演示版控制在 5000 行以内保证read_csv和groupby在投影仪上两秒内出结果完整版留作课后作业文件名用mini_dataset.csv和full_dataset.csv明确区分并在讲稿备注里写清两者的用途。这样既避免现场等待又不牺牲课程内容的真实感。每次开课前重跑一遍第 3 章的生成脚本确认讲义的页数、文件名和数据文件三者的版本能对上再把它拷进课堂用的那台电脑。把这份 .pptx 当成一个可持续迭代的工程来维护而不是一次性汇报材料它的内容才会跟着数据和分析方法的更新一起往前走。本文还有配套的精品资源点击获取