生成經(jīng)濟(jì)增長與經(jīng)濟(jì)周期PPT課件)
簡介《第十三章經(jīng)濟(jì)增長與經(jīng)濟(jì)周期PPT課件》是一份面向宏觀經(jīng)濟(jì)學(xué)課程的專業(yè)教學(xué)課件適合高校經(jīng)管類專業(yè)師生、自學(xué)備考人群用于課堂講解或自主復(fù)習(xí)。資源包共1個(gè)pptx文件大小342KB共41頁頁面結(jié)構(gòu)清晰輔以圖表與討論環(huán)節(jié)便于直接用于教學(xué)演示。內(nèi)容圍繞經(jīng)濟(jì)周期展開系統(tǒng)介紹了經(jīng)濟(jì)周期的含義、繁榮/衰退/蕭條/復(fù)蘇四階段特征以及實(shí)際GDP、工業(yè)生產(chǎn)指數(shù)、就業(yè)率等核心衡量指標(biāo)和領(lǐng)先指標(biāo)同時(shí)梳理了基欽周期、朱格拉周期、康德拉季耶夫周期、熊彼特周期與庫茲涅茨周期等常見類型并講解了消費(fèi)不足理論、投資過度論、貨幣因素論、創(chuàng)新理論和乘數(shù)-加速數(shù)原理等主要成因理論。通過課件可快速掌握經(jīng)濟(jì)增長與經(jīng)濟(jì)周期的分析框架理解經(jīng)濟(jì)波動(dòng)的內(nèi)在機(jī)制為宏觀經(jīng)濟(jì)學(xué)學(xué)習(xí)、考試復(fù)習(xí)或課程備課提供實(shí)用的內(nèi)容支撐。已有106人學(xué)習(xí)。1. 經(jīng)濟(jì)增長與經(jīng)濟(jì)周期PPT課件.pptx先想清楚要演示什么把第十三章經(jīng)濟(jì)增長與經(jīng)濟(jì)周期PPT課件.pptx這個(gè)文件名交給任何一位做過課程開發(fā)的人第一反應(yīng)都不是打開PowerPoint而是先想這一章到底要用幾張圖把經(jīng)濟(jì)波動(dòng)講明白。宏觀經(jīng)濟(jì)學(xué)里經(jīng)濟(jì)增長與周期性波動(dòng)是一對糾纏變量趨勢項(xiàng)決定長期動(dòng)能周期項(xiàng)帶來短期偏離。若課件只堆滿公式和坐標(biāo)圖學(xué)生容易記住結(jié)論而失去變量間的推演感。真正有信息量的技術(shù)方案是讓數(shù)據(jù)、周期標(biāo)注、圖表遞進(jìn)與演示節(jié)奏在同一個(gè)PPTX文件里各司其職。這篇文章就把制作這類課件常用的數(shù)據(jù)清洗、周期劃分、python-pptx生成與圖表動(dòng)畫處理串成一條可落地的流程適合需要批量做課件的IT講師、培訓(xùn)平臺(tái)內(nèi)容工程師和教研工具開發(fā)者。2. 搭建經(jīng)濟(jì)增長與經(jīng)濟(jì)周期課件的數(shù)據(jù)底座GDP、產(chǎn)出缺口與峰谷日期2.1 為什么不用手工抄數(shù)據(jù)數(shù)據(jù)源的選型邏輯課件里的增長曲線如果從Excel手工復(fù)制往往只能拿到年度GDP絕對數(shù)換成年率和人均GDP就得重新整理。更麻煩的是經(jīng)濟(jì)周期劃分依賴連續(xù)的季度或月度數(shù)據(jù)一兩個(gè)缺失值就會(huì)讓峰谷日期偏移。常見做法是從世界銀行WDI或FRED取數(shù)WDI適合跨國產(chǎn)出比較FRED適合美國等發(fā)達(dá)市場的季度序列。這里以世界銀行API為例因?yàn)樗鼰o需注冊密鑰適合在公開課上現(xiàn)場演示。如果你在內(nèi)網(wǎng)環(huán)境可以換成本地CSV但字段結(jié)構(gòu)要保持一致。我一般會(huì)先拉取一個(gè)國家的實(shí)際GDP季調(diào)序列。下面代碼使用pandas讀取需要requests pandas statsmodels matplotlib python-pptx這些庫。運(yùn)行前確認(rèn)已安裝。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取中國不變價(jià)GDPNY.GDP.MKTP.KD是實(shí)際GDP的指標(biāo)編碼formatjson把響應(yīng)直接轉(zhuǎn)成JSONper_page100保證覆蓋較長的年份跨度。得到y(tǒng)ear和gdp兩列后就可以進(jìn)入增速與周期計(jì)算。注意有些國家的返回?cái)?shù)據(jù)里年份順序可能是亂序所以先用sort_values(year)固定升序不然后面的pct_change會(huì)算錯(cuò)。2.2 用Pandas計(jì)算實(shí)際GDP增速并分離趨勢與周期分量有了實(shí)際GDP序列后第一個(gè)要展示的是同比增長率。實(shí)際應(yīng)用里注意兩個(gè)口徑季度數(shù)據(jù)的環(huán)比折年率和年度數(shù)據(jù)的同比增速在PPT里通常用同比因?yàn)橛^眾更容易感知今年比去年高多少。計(jì)算方式很簡單df[gdp_growth] df[gdp].pct_change() * 100 df df.dropna()pct_change()默認(rèn)與上一行比較乘100轉(zhuǎn)成百分比。如果你想畫季度環(huán)比折年率需要先對季度序列做季節(jié)調(diào)整再用((1 quarterly_growth) ** 4 - 1) * 100。這是很關(guān)鍵的口徑差異不要在PPT里把同比和環(huán)比混在一張圖上否則周期拐點(diǎn)會(huì)差一個(gè)季度。接下來用Hodrick-Prescott濾波把GDP拆成趨勢和周期from statsmodels.tsa.filters.hp_filter import hpfilter cycle, trend hpfilter(df[gdp], lamb6.25) df[trend] trend df[cycle] cyclelamb是平滑系數(shù)年度數(shù)據(jù)常用6.25季度數(shù)據(jù)常用1600月度數(shù)據(jù)常用129600。在經(jīng)濟(jì)增長與經(jīng)濟(jì)周期章節(jié)里趨勢線代表潛在產(chǎn)出cycle的符號就是產(chǎn)出缺口的方向。很多新手把年度數(shù)據(jù)也填1600結(jié)果周期分量幾乎被抹平反過來把季度數(shù)據(jù)填6.25又會(huì)產(chǎn)生大量偽波峰。教材里常講的產(chǎn)出缺口為正/為負(fù)就是基于這個(gè)cycle序列的正負(fù)來判斷。為避免邊界異常HP濾波頭上幾個(gè)值會(huì)偏高做圖時(shí)建議丟棄首尾各1個(gè)觀測點(diǎn)。2.3 輸出NBER式周期峰谷表喂給后面的PPT頁周期階段的標(biāo)注是課件中最容易被問到的部分。NBER的方法論本質(zhì)上是人工判定但在自動(dòng)化流程里可以用局部極值加持續(xù)時(shí)長做近似。下面提煉了一段簡潔的規(guī)則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表示周期分量序列中某個(gè)點(diǎn)必須比前后各兩個(gè)點(diǎn)都高或低才能被識(shí)別為峰谷。這個(gè)參數(shù)決定了峰谷數(shù)量數(shù)據(jù)波動(dòng)劇烈時(shí)調(diào)到3或4。識(shí)別完成后把峰谷日期和當(dāng)時(shí)的cycle值存成CSV后續(xù)用python-pptx寫入表格。這一步的產(chǎn)出相當(dāng)于課件的結(jié)構(gòu)化提綱每個(gè)峰谷就是一個(gè)小節(jié)教師在演示時(shí)按順序講解擴(kuò)張、衰退、拐點(diǎn)數(shù)據(jù)。下面是一張三列的表可直接用它來設(shè)計(jì)課件里的周期階段描述周期階段產(chǎn)出缺口方向教師講解要點(diǎn)擴(kuò)張期cycle 0產(chǎn)能利用率上升失業(yè)率下降峰頂cycle 局部最高注意通脹壓力與政策邊際收緊衰退期cycle 0需求收縮庫存被動(dòng)增加谷底cycle 局部最低關(guān)注領(lǐng)先指標(biāo)拐點(diǎn)與刺激政策這張表是給后面的PPT頁面做參考數(shù)據(jù)。如果你想直接在課件里講中國1990年代到現(xiàn)在可以把年份范圍限定在1992—2023避免早期價(jià)格雙軌制造成的不連續(xù)跳變。數(shù)據(jù)口徑統(tǒng)一后再進(jìn)入生成PPTX的階段。3. 用python-pptx生成第十三章PPT課件骨架布局、封面與數(shù)據(jù)表格3.1 PPTX格式是一個(gè)Open XML包理解后才能批量改很多人把.ppt和.pptx當(dāng)成同一種文件但.pptx本質(zhì)是一個(gè)ZIP容器里面是ppt/slides/slideN.xml、ppt/charts/、ppt/media/等 XML 資源。所以用python-pptx操作而不是調(diào)用Office COM對象正是因?yàn)樗苯幼x寫XML不會(huì)因本機(jī)裝了WPS或Office版本不同導(dǎo)致API行為差異。兼容性更好也方便在CI服務(wù)器里無界面生成課件。用python-pptx時(shí)先初始化一個(gè)空演示文稿然后選擇版式。版式索引在不同模板上并不統(tǒng)一常見的默認(rèn)模板中slide_layouts[0]是標(biāo)題頁slide_layouts[1]是標(biāo)題正文slide_layouts[5]是僅標(biāo)題。如果你用的是公司內(nèi)部母版最好先打印prs.slide_layouts逐個(gè)看一下。下面的代碼展示如何生成一張封面和一頁目錄from pptx import Presentation prs Presentation() # 選擇標(biāo)題卡片版式 title_slide prs.slides.add_slide(prs.slide_layouts[0]) title_slide.shapes.title.text 第十三章 經(jīng)濟(jì)增長與經(jīng)濟(jì)周期 title_slide.placeholders[1].text 趨勢與波動(dòng)的統(tǒng)一框架 # 新增目錄頁 toc_slide prs.slides.add_slide(prs.slide_layouts[1]) toc_slide.shapes.title.text 本章內(nèi)容 body toc_slide.placeholders[1] body.text 1. 增長核算與潛在產(chǎn)出\n2. 經(jīng)濟(jì)周期的階段識(shí)別\n3. 數(shù)據(jù)實(shí)證產(chǎn)出缺口 print(f已生成 {len(prs.slides._sldIdLst)} 張幻燈片)placeholders[1]是子標(biāo)題或正文占位符索引值取決于版式所以不要硬編碼。shapes.title是標(biāo)題占位符如果某個(gè)版式?jīng)]有標(biāo)題它會(huì)拋異常。在生成課件前應(yīng)該先用一個(gè)最小樣例驗(yàn)證當(dāng)前模板的占位符索引。這樣批量跑幾十頁時(shí)才不會(huì)中途停住。3.2 用Pandas數(shù)據(jù)自動(dòng)生成周期階段總覽表格第二張內(nèi)容頁適合放一張周期峰谷總覽表數(shù)據(jù)來源就是上一章輸出的tp_df。我們用python-pptx的表格API把峰谷年份、類型和cycle值填進(jìn)去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) # 寫數(shù)據(jù)行 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返回一個(gè)GraphicFrame通過.table拿到Table對象。注意表格行列坐標(biāo)和iterrows()的索引關(guān)系表頭占用第0行數(shù)據(jù)從第1行開始。如果tp_df有超過20行一頁P(yáng)PT放不下建議按周期數(shù)量拆分或者只展示最近的幾個(gè)峰谷。另一個(gè)常見做法是先按近三次衰退過濾再寫到表格這樣課件更聚焦。表格里的數(shù)值統(tǒng)一保留兩位小數(shù)否則cycle值很長擠破單元格??梢栽诖a里加round(value, 2)或者用str(round(value, 2))。在表格樣式上python-pptx自帶的默認(rèn)表樣式足夠不推薦額外給每個(gè)單元格填色因?yàn)椴煌琍PT主題下顏色會(huì)沖突。3.3 為增長曲線預(yù)留圖表位占位與后續(xù)圖片引用的關(guān)系做課件時(shí)如果先在地圖上排好圖形區(qū)域用一個(gè)空文本框占位等渲染完圖表后再替換會(huì)很麻煩。更穩(wěn)妥的方式是直接計(jì)算好位置并用slide.shapes.add_picture插入。生成圖片前先確定圖片的像素與尺寸比避免插入后變形。比如matplotlib輸出figsize(10, 5)對應(yīng)圖片寬高比是2:1插入PPT時(shí)設(shè)置widthInches(10)那么高度應(yīng)該為5英寸。使用以下方式slide.shapes.add_picture( growth_cycle.png, leftInches(0.5), topInches(2.0), widthInches(10), heightInches(5), )add_picture不會(huì)自動(dòng)按原圖比例縮放寬高如果你只指定了width高度會(huì)按原圖比例自動(dòng)計(jì)算如果同時(shí)指定width和height就會(huì)強(qiáng)制拉伸。所以要么只指定一個(gè)維度要么計(jì)算好比例。很多課件變形就是因?yàn)橥瑫r(shí)給了寬高且沒有遵循原圖比例。為了保險(xiǎn)我通常先取圖片原始大小再用比例計(jì)算。4. 用matplotlib渲染經(jīng)濟(jì)周期曲線增速、趨勢與峰谷陰影在一張圖里4.1 先畫三段式基礎(chǔ)圖實(shí)際增速和潛在增速經(jīng)濟(jì)周期課件里最核心的一張圖是實(shí)際GDP增速線與潛在增速線的對比。潛在增速可以用HP濾波趨勢項(xiàng)的同比變化來近似。用matplotlib畫圖注意中文字體與坐標(biāo)軸刻度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實(shí)際增速, 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繪圖時(shí)會(huì)自動(dòng)跳過。SimHei是Windows中文字體如果在Linux環(huán)境需要改成Noto Sans CJK SC否則會(huì)出現(xiàn)方框。axes.unicode_minus必須設(shè)置為False否則負(fù)號顯示為亂碼。這兩處是出圖前必須檢查的和PPT字體問題同源。dpi150適合投屏課件印刷的話可以提到200以上。4.2 給周期上陰影把NBER峰谷區(qū)間畫成不同底色基礎(chǔ)圖只畫兩條線還不夠?qū)W生需要一眼看出擴(kuò)張和衰退的區(qū)間。下面這段代碼根據(jù)峰谷表在兩組連續(xù)轉(zhuǎn)折點(diǎn)之間的區(qū)域填充顏色。具體做法是遍歷已識(shí)別的峰谷點(diǎn)從峰到谷填充淺灰色表示衰退從谷到峰保持白色背景這樣不用額外畫線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)接受兩個(gè)橫坐標(biāo)即使它們是年份整數(shù)也有效。填充顏色的透明度alpha0.5能讓網(wǎng)格和數(shù)據(jù)線保持可讀。條件是判斷前一個(gè)轉(zhuǎn)折點(diǎn)是峰還是谷若為峰則當(dāng)前段從峰到谷是衰退加深底色若為谷則當(dāng)前段是擴(kuò)張不處理。這里有一個(gè)邊界問題最后一個(gè)峰谷沒有閉合可以到數(shù)據(jù)末尾再追加一次填充或者用ax.axvspan(tp_df[year].iloc[-1], df[year].max(), ...)補(bǔ)齊最后一段。4.3 插入PPT并讓曲線按周期階段分步出現(xiàn)圖片插入PPT后需要讓不同周期階段分步出現(xiàn)而不是一整張圖直接砸出來。python-pptx本身不支持動(dòng)畫但可以通過生成多張階段圖或者用PowerPoint的圖片出現(xiàn)動(dòng)畫來做。我常用的做法是生成三張PNG全量曲線、只到當(dāng)前階段的曲線、峰谷標(biāo)注版。每次講到一個(gè)周期時(shí)手動(dòng)切換圖片。更進(jìn)一步的自動(dòng)化可以用下面的方式為同一張圖片設(shè)置動(dòng)畫不行python-pptx不支持動(dòng)畫所以實(shí)際上有三種選擇方案實(shí)現(xiàn)方式適合場景靜態(tài)全圖一張PNG直接插入快速講義不逐段講多圖片覆蓋按階段生成3張PNG插入同一頁重疊課堂分步展示觸發(fā)器動(dòng)畫在PowerPoint中手動(dòng)添加淡入動(dòng)畫精確控制每個(gè)峰谷在生成多圖片覆蓋時(shí)關(guān)鍵是每張PNG的位置和尺寸必須完全一致。代碼里可以用同一個(gè)left/top/width/height插入然后用slide.shapes排序把后插入的圖片蓋在前面演示時(shí)通過動(dòng)畫讓后插入圖片按出現(xiàn)動(dòng)畫逐步顯示。如果不想在PPT里手動(dòng)加動(dòng)畫還可以改用python-pptx的add_animation它沒有所以這步暫時(shí)保留人工操作。5. 第十三章PPT交付前最后一道工序字體、尺寸、備注與數(shù)據(jù)一致性檢查5.1 用python-pptx批量檢查字體是否缺失PPT課件在不同電腦上打開最常出現(xiàn)的問題是字體被替換??梢酝ㄟ^python-pptx讀取所有幻燈片的文本檢查設(shè)置的中文字體名是否存在于當(dāng)前系統(tǒng)from pptx import Presentation import matplotlib.font_manager as fm prs Presentation(第十三章經(jīng)濟(jì)增長與經(jīng)濟(jì)周期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表示繼承主題字體不視為問題。如果發(fā)現(xiàn)指定了「微軟雅黑」但系統(tǒng)沒有需要改成Noto Sans SC或者手動(dòng)在PowerPoint中進(jìn)行嵌入字體。字體檢查邏輯對演示者很有用尤其是課件需要分發(fā)給不同操作系統(tǒng)的人。5.2 校驗(yàn)數(shù)據(jù)圖與表格里的峰谷年份是否匹配自動(dòng)化生成有個(gè)隱患表格里的峰谷日期來自tp_df而圖表里的陰影來自同一份tp_df二者不會(huì)天然對不上。但如果你在步驟中手改過CSV就要做一致性抽查。一個(gè)很有效的技巧是重新讀取PPTX中的表格用正則提取年份再對比CSVimport re from pptx import Presentation csv_years set(tp_df[year].astype(str)) prs Presentation(第十三章經(jīng)濟(jì)增長與經(jīng)濟(jì)周期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表格數(shù)據(jù)與CSV不一致: {matched})iter_cells()在較新的python-pptx版本中可用如果版本老就用雙層for循環(huán)遍歷table.rows和row.cells。這一步就像接口回歸測試一樣能發(fā)現(xiàn)模板列錯(cuò)位、漏寫年份等問題。如果你添加了新的峰谷日期務(wù)必重新渲染圖表的陰影部分不然圖形和表格會(huì)矛盾課堂上被提問時(shí)很難圓場。5.3 最后的演講者備注把結(jié)論寫在備注而不是正文課件正文字號一般控制在18到32磅備注才是講師發(fā)揮的空間。常見的做法是把每個(gè)峰谷階段的教學(xué)解釋寫成備注利用python-pptx直接寫入note_slide prs.slides[2] text_frame note_slide.notes_slide.notes_text_frame text_frame.text 講解順序: 先看趨勢線斜率變化, 再讀實(shí)際增速與潛在增速的缺口, 最后用陰影區(qū)間說明衰退期。notes_slide屬性每個(gè)slide都有如果不存在python-pptx會(huì)自動(dòng)創(chuàng)建。備注里的內(nèi)容不會(huì)顯示為普通文字也不影響版式。我更傾向于在備注中寫數(shù)據(jù)源口徑說明比如這一章的GDP是否已做價(jià)格調(diào)整這樣下次續(xù)用這個(gè)PPT的人不會(huì)誤解。還可以把lamb參數(shù)值、峰谷識(shí)別閾值寫進(jìn)去后續(xù)檢查課件時(shí)能直接定位當(dāng)時(shí)是怎么切分周期的。本文還有配套的精品資源點(diǎn)擊獲取