尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

用Python自动生成经济增长与经济周期PPT课件

发布时间:2026/9/19 20:56:22

资讯中心
01
ARTICLE

用Python自动生成经济增长与经济周期PPT课件

用Python自动生成经济增长与经济周期PPT课件
简介《第十三章经济增长与经济周期PPT课件》是一份面向宏观经济学课程的专业教学课件适合高校经管类专业师生、自学备考人群用于课堂讲解或自主复习。资源包共1个pptx文件大小342KB共41页页面结构清晰辅以图表与讨论环节便于直接用于教学演示。内容围绕经济周期展开系统介绍了经济周期的含义、繁荣/衰退/萧条/复苏四阶段特征以及实际GDP、工业生产指数、就业率等核心衡量指标和领先指标同时梳理了基钦周期、朱格拉周期、康德拉季耶夫周期、熊彼特周期与库兹涅茨周期等常见类型并讲解了消费不足理论、投资过度论、货币因素论、创新理论和乘数-加速数原理等主要成因理论。通过课件可快速掌握经济增长与经济周期的分析框架理解经济波动的内在机制为宏观经济学学习、考试复习或课程备课提供实用的内容支撑。已有106人学习。1. 经济增长与经济周期PPT课件.pptx先想清楚要演示什么把第十三章经济增长与经济周期PPT课件.pptx这个文件名交给任何一位做过课程开发的人第一反应都不是打开PowerPoint而是先想这一章到底要用几张图把经济波动讲明白。宏观经济学里经济增长与周期性波动是一对纠缠变量趋势项决定长期动能周期项带来短期偏离。若课件只堆满公式和坐标图学生容易记住结论而失去变量间的推演感。真正有信息量的技术方案是让数据、周期标注、图表递进与演示节奏在同一个PPTX文件里各司其职。这篇文章就把制作这类课件常用的数据清洗、周期划分、python-pptx生成与图表动画处理串成一条可落地的流程适合需要批量做课件的IT讲师、培训平台内容工程师和教研工具开发者。2. 搭建经济增长与经济周期课件的数据底座GDP、产出缺口与峰谷日期2.1 为什么不用手工抄数据数据源的选型逻辑课件里的增长曲线如果从Excel手工复制往往只能拿到年度GDP绝对数换成年率和人均GDP就得重新整理。更麻烦的是经济周期划分依赖连续的季度或月度数据一两个缺失值就会让峰谷日期偏移。常见做法是从世界银行WDI或FRED取数WDI适合跨国产出比较FRED适合美国等发达市场的季度序列。这里以世界银行API为例因为它无需注册密钥适合在公开课上现场演示。如果你在内网环境可以换成本地CSV但字段结构要保持一致。我一般会先拉取一个国家的实际GDP季调序列。下面代码使用pandas读取需要requests pandas statsmodels matplotlib python-pptx这些库。运行前确认已安装。import requests import pandas as pd url http://api.worldbank.org/v2/country/CN/indicator/NY.GDP.MKTP.KD?formatjsonper_page100 r requests.get(url) data r.json() records [] if len(data) 1: for item in data[1]: records.append({year: item[date], gdp: item[value]}) df pd.DataFrame(records).dropna() df[year] df[year].astype(int) df df.sort_values(year).reset_index(dropTrue) print(df.tail())这段代码从世界银行API取中国不变价GDPNY.GDP.MKTP.KD是实际GDP的指标编码formatjson把响应直接转成JSONper_page100保证覆盖较长的年份跨度。得到year和gdp两列后就可以进入增速与周期计算。注意有些国家的返回数据里年份顺序可能是乱序所以先用sort_values(year)固定升序不然后面的pct_change会算错。2.2 用Pandas计算实际GDP增速并分离趋势与周期分量有了实际GDP序列后第一个要展示的是同比增长率。实际应用里注意两个口径季度数据的环比折年率和年度数据的同比增速在PPT里通常用同比因为观众更容易感知今年比去年高多少。计算方式很简单df[gdp_growth] df[gdp].pct_change() * 100 df df.dropna()pct_change()默认与上一行比较乘100转成百分比。如果你想画季度环比折年率需要先对季度序列做季节调整再用((1 quarterly_growth) ** 4 - 1) * 100。这是很关键的口径差异不要在PPT里把同比和环比混在一张图上否则周期拐点会差一个季度。接下来用Hodrick-Prescott滤波把GDP拆成趋势和周期from statsmodels.tsa.filters.hp_filter import hpfilter cycle, trend hpfilter(df[gdp], lamb6.25) df[trend] trend df[cycle] cyclelamb是平滑系数年度数据常用6.25季度数据常用1600月度数据常用129600。在经济增长与经济周期章节里趋势线代表潜在产出cycle的符号就是产出缺口的方向。很多新手把年度数据也填1600结果周期分量几乎被抹平反过来把季度数据填6.25又会产生大量伪波峰。教材里常讲的产出缺口为正/为负就是基于这个cycle序列的正负来判断。为避免边界异常HP滤波头上几个值会偏高做图时建议丢弃首尾各1个观测点。2.3 输出NBER式周期峰谷表喂给后面的PPT页周期阶段的标注是课件中最容易被问到的部分。NBER的方法论本质上是人工判定但在自动化流程里可以用局部极值加持续时长做近似。下面提炼了一段简洁的规则from scipy.signal import argrelextrema import numpy as np arr df[cycle].values local_max argrelextrema(arr, np.greater_equal, order2)[0] local_min argrelextrema(arr, np.less_equal, order2)[0] turning_points sorted( [(df[year].iloc[i], peak, arr[i]) for i in local_max] [(df[year].iloc[i], trough, arr[i]) for i in local_min] ) tp_df pd.DataFrame(turning_points, columns[year, type, cycle_value]) print(tp_df)order2表示周期分量序列中某个点必须比前后各两个点都高或低才能被识别为峰谷。这个参数决定了峰谷数量数据波动剧烈时调到3或4。识别完成后把峰谷日期和当时的cycle值存成CSV后续用python-pptx写入表格。这一步的产出相当于课件的结构化提纲每个峰谷就是一个小节教师在演示时按顺序讲解扩张、衰退、拐点数据。下面是一张三列的表可直接用它来设计课件里的周期阶段描述周期阶段产出缺口方向教师讲解要点扩张期cycle 0产能利用率上升失业率下降峰顶cycle 局部最高注意通胀压力与政策边际收紧衰退期cycle 0需求收缩库存被动增加谷底cycle 局部最低关注领先指标拐点与刺激政策这张表是给后面的PPT页面做参考数据。如果你想直接在课件里讲中国1990年代到现在可以把年份范围限定在1992—2023避免早期价格双轨制造成的不连续跳变。数据口径统一后再进入生成PPTX的阶段。3. 用python-pptx生成第十三章PPT课件骨架布局、封面与数据表格3.1 PPTX格式是一个Open XML包理解后才能批量改很多人把.ppt和.pptx当成同一种文件但.pptx本质是一个ZIP容器里面是ppt/slides/slideN.xml、ppt/charts/、ppt/media/等 XML 资源。所以用python-pptx操作而不是调用Office COM对象正是因为它直接读写XML不会因本机装了WPS或Office版本不同导致API行为差异。兼容性更好也方便在CI服务器里无界面生成课件。用python-pptx时先初始化一个空演示文稿然后选择版式。版式索引在不同模板上并不统一常见的默认模板中slide_layouts[0]是标题页slide_layouts[1]是标题正文slide_layouts[5]是仅标题。如果你用的是公司内部母版最好先打印prs.slide_layouts逐个看一下。下面的代码展示如何生成一张封面和一页目录from pptx import Presentation prs Presentation() # 选择标题卡片版式 title_slide prs.slides.add_slide(prs.slide_layouts[0]) title_slide.shapes.title.text 第十三章 经济增长与经济周期 title_slide.placeholders[1].text 趋势与波动的统一框架 # 新增目录页 toc_slide prs.slides.add_slide(prs.slide_layouts[1]) toc_slide.shapes.title.text 本章内容 body toc_slide.placeholders[1] body.text 1. 增长核算与潜在产出\n2. 经济周期的阶段识别\n3. 数据实证产出缺口 print(f已生成 {len(prs.slides._sldIdLst)} 张幻灯片)placeholders[1]是子标题或正文占位符索引值取决于版式所以不要硬编码。shapes.title是标题占位符如果某个版式没有标题它会抛异常。在生成课件前应该先用一个最小样例验证当前模板的占位符索引。这样批量跑几十页时才不会中途停住。3.2 用Pandas数据自动生成周期阶段总览表格第二张内容页适合放一张周期峰谷总览表数据来源就是上一章输出的tp_df。我们用python-pptx的表格API把峰谷年份、类型和cycle值填进去from pptx.util import Inches, Pt def add_table(slide, data_df, left, top, width, height): rows, cols data_df.shape table_shape slide.shapes.add_table(rows 1, cols, left, top, width, height) table table_shape.table # 写表头 for col_idx, col_name in enumerate(data_df.columns): table.cell(0, col_idx).text str(col_name) # 写数据行 for row_idx, row in data_df.iterrows(): for col_idx, value in enumerate(row): table.cell(row_idx 1, col_idx).text str(value) return tableadd_table返回一个GraphicFrame通过.table拿到Table对象。注意表格行列坐标和iterrows()的索引关系表头占用第0行数据从第1行开始。如果tp_df有超过20行一页PPT放不下建议按周期数量拆分或者只展示最近的几个峰谷。另一个常见做法是先按近三次衰退过滤再写到表格这样课件更聚焦。表格里的数值统一保留两位小数否则cycle值很长挤破单元格。可以在代码里加round(value, 2)或者用str(round(value, 2))。在表格样式上python-pptx自带的默认表样式足够不推荐额外给每个单元格填色因为不同PPT主题下颜色会冲突。3.3 为增长曲线预留图表位占位与后续图片引用的关系做课件时如果先在地图上排好图形区域用一个空文本框占位等渲染完图表后再替换会很麻烦。更稳妥的方式是直接计算好位置并用slide.shapes.add_picture插入。生成图片前先确定图片的像素与尺寸比避免插入后变形。比如matplotlib输出figsize(10, 5)对应图片宽高比是2:1插入PPT时设置widthInches(10)那么高度应该为5英寸。使用以下方式slide.shapes.add_picture( growth_cycle.png, leftInches(0.5), topInches(2.0), widthInches(10), heightInches(5), )add_picture不会自动按原图比例缩放宽高如果你只指定了width高度会按原图比例自动计算如果同时指定width和height就会强制拉伸。所以要么只指定一个维度要么计算好比例。很多课件变形就是因为同时给了宽高且没有遵循原图比例。为了保险我通常先取图片原始大小再用比例计算。4. 用matplotlib渲染经济周期曲线增速、趋势与峰谷阴影在一张图里4.1 先画三段式基础图实际增速和潜在增速经济周期课件里最核心的一张图是实际GDP增速线与潜在增速线的对比。潜在增速可以用HP滤波趋势项的同比变化来近似。用matplotlib画图注意中文字体与坐标轴刻度import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Noto Sans CJK SC] plt.rcParams[axes.unicode_minus] False fig, ax plt.subplots(figsize(10, 5)) ax.plot(df[year], df[gdp_growth], label实际增速, linewidth2) trend_growth df[trend].pct_change() * 100 ax.plot(df[year], trend_growth, label潜在增速, linestyle--) ax.set_xlabel(年份) ax.set_ylabel(同比增速%) ax.legend() fig.tight_layout() fig.savefig(growth_cycle.png, dpi150)pct_change()得到的是增长率序列首行是NaN绘图时会自动跳过。SimHei是Windows中文字体如果在Linux环境需要改成Noto Sans CJK SC否则会出现方框。axes.unicode_minus必须设置为False否则负号显示为乱码。这两处是出图前必须检查的和PPT字体问题同源。dpi150适合投屏课件印刷的话可以提到200以上。4.2 给周期上阴影把NBER峰谷区间画成不同底色基础图只画两条线还不够学生需要一眼看出扩张和衰退的区间。下面这段代码根据峰谷表在两组连续转折点之间的区域填充颜色。具体做法是遍历已识别的峰谷点从峰到谷填充浅灰色表示衰退从谷到峰保持白色背景这样不用额外画线for i in range(len(tp_df) - 1): start_year tp_df[year].iloc[i] end_year tp_df[year].iloc[i 1] color #d9d9d9 if tp_df[type].iloc[i] peak else #ffffff ax.axvspan(start_year, end_year, colorcolor, alpha0.5)axvspan(start, end)接受两个横坐标即使它们是年份整数也有效。填充颜色的透明度alpha0.5能让网格和数据线保持可读。条件是判断前一个转折点是峰还是谷若为峰则当前段从峰到谷是衰退加深底色若为谷则当前段是扩张不处理。这里有一个边界问题最后一个峰谷没有闭合可以到数据末尾再追加一次填充或者用ax.axvspan(tp_df[year].iloc[-1], df[year].max(), ...)补齐最后一段。4.3 插入PPT并让曲线按周期阶段分步出现图片插入PPT后需要让不同周期阶段分步出现而不是一整张图直接砸出来。python-pptx本身不支持动画但可以通过生成多张阶段图或者用PowerPoint的图片出现动画来做。我常用的做法是生成三张PNG全量曲线、只到当前阶段的曲线、峰谷标注版。每次讲到一个周期时手动切换图片。更进一步的自动化可以用下面的方式为同一张图片设置动画不行python-pptx不支持动画所以实际上有三种选择方案实现方式适合场景静态全图一张PNG直接插入快速讲义不逐段讲多图片覆盖按阶段生成3张PNG插入同一页重叠课堂分步展示触发器动画在PowerPoint中手动添加淡入动画精确控制每个峰谷在生成多图片覆盖时关键是每张PNG的位置和尺寸必须完全一致。代码里可以用同一个left/top/width/height插入然后用slide.shapes排序把后插入的图片盖在前面演示时通过动画让后插入图片按出现动画逐步显示。如果不想在PPT里手动加动画还可以改用python-pptx的add_animation它没有所以这步暂时保留人工操作。5. 第十三章PPT交付前最后一道工序字体、尺寸、备注与数据一致性检查5.1 用python-pptx批量检查字体是否缺失PPT课件在不同电脑上打开最常出现的问题是字体被替换。可以通过python-pptx读取所有幻灯片的文本检查设置的中文字体名是否存在于当前系统from pptx import Presentation import matplotlib.font_manager as fm prs Presentation(第十三章经济增长与经济周期PPT课件.pptx) system_fonts {f.name for f in fm.fontManager.ttflist} def check_fonts(slide): for shape in slide.shapes: if shape.has_text_frame: for paragraph in shape.text_frame.paragraphs: for run in paragraph.runs: font_name run.font.name if font_name and font_name not in system_fonts: print(f缺少字体: {font_name} - {run.text[:20]})run.font.name可能返回None表示继承主题字体不视为问题。如果发现指定了「微软雅黑」但系统没有需要改成Noto Sans SC或者手动在PowerPoint中进行嵌入字体。字体检查逻辑对演示者很有用尤其是课件需要分发给不同操作系统的人。5.2 校验数据图与表格里的峰谷年份是否匹配自动化生成有个隐患表格里的峰谷日期来自tp_df而图表里的阴影来自同一份tp_df二者不会天然对不上。但如果你在步骤中手改过CSV就要做一致性抽查。一个很有效的技巧是重新读取PPTX中的表格用正则提取年份再对比CSVimport re from pptx import Presentation csv_years set(tp_df[year].astype(str)) prs Presentation(第十三章经济增长与经济周期PPT课件.pptx) for slide in prs.slides: for shape in slide.shapes: if shape.has_table: for cell in shape.table.iter_cells(): text cell.text matched re.findall(r\b(19|20)\d{2}\b, text) if any(m not in csv_years for m in matched): print(f表格数据与CSV不一致: {matched})iter_cells()在较新的python-pptx版本中可用如果版本老就用双层for循环遍历table.rows和row.cells。这一步就像接口回归测试一样能发现模板列错位、漏写年份等问题。如果你添加了新的峰谷日期务必重新渲染图表的阴影部分不然图形和表格会矛盾课堂上被提问时很难圆场。5.3 最后的演讲者备注把结论写在备注而不是正文课件正文字号一般控制在18到32磅备注才是讲师发挥的空间。常见的做法是把每个峰谷阶段的教学解释写成备注利用python-pptx直接写入note_slide prs.slides[2] text_frame note_slide.notes_slide.notes_text_frame text_frame.text 讲解顺序: 先看趋势线斜率变化, 再读实际增速与潜在增速的缺口, 最后用阴影区间说明衰退期。notes_slide属性每个slide都有如果不存在python-pptx会自动创建。备注里的内容不会显示为普通文字也不影响版式。我更倾向于在备注中写数据源口径说明比如这一章的GDP是否已做价格调整这样下次续用这个PPT的人不会误解。还可以把lamb参数值、峰谷识别阈值写进去后续检查课件时能直接定位当时是怎么切分周期的。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。