兩秒完成250頁豆瓣電影PPT

木子昭發表於2018-03-29

PPT並不好用, 但還是得用它, 這裡借用豆瓣Top250的電影資訊, 利用python-pptx (0.6.7)自動生成250張PPT, 希望通過例項, 給常年整理PPT報表的上班族, 一個解放生產力的新思路

Python 自動生成 豆瓣電影PPT

最終效果展示

PPT動圖

資料哪裡來的?

爬蟲抓的!

不懂爬蟲怎麼辦?

看這裡《進擊的蟲師》爬取豆瓣電影海報(Top250)

自動化製作PPT 的 一二三

先製作PPT模板

插入佔位符

佔位符種類

製作模板的過程, 就是插入佔位符的過程, 可以根據自己的需求插入各種佔位符, 比如,豆瓣電影Top250的需求是, 插入圖片和文字內容, 那就從佔位符中選擇, 內容, 圖片, 插入模板就好, 然後再對模板中的內容樣式和圖片位置進行調整, 就能得到符合需求的模板了

模板長這樣

準備資料:

我直接把原來寫過的,python爬取豆瓣電影的指令碼, 執行了一遍, 圖片和文字資料就都齊了《進擊的蟲師》爬取豆瓣電影海報(Top250)

準備資源

Python程式設計(將資料按照模板填空, 匯出到最終的ppt中)

原始碼如下(註釋詳盡):

from pptx import Presentation
from pptx.util import Inches

# 獲取豆瓣電影資訊
def getInfo():
    movies_info = []

    with open(`./douban_movie_top250.txt`) as f:
        for line in f.readlines():
            line_list = line.split("`")
            one_movie_info = {}
            one_movie_info[`index`] = line_list[1]
            one_movie_info[`title`] = line_list[3]
            one_movie_info[`score`] = line_list[5]

            try:
                one_movie_info[`desc`] = line_list[7]
            except:
                one_movie_info[`desc`] = ``

            one_movie_info[`image_path`] = "./Top250_movie_images/"+ str(line_list[1]) + `_` + line_list[3] + ".jpg"

            movies_info.append(one_movie_info)

    return movies_info


# 建立ppt
def createPpt(movies_info):
    prs = Presentation(`model.pptx`)
    for movie_info in movies_info:
        # 獲取模板個數
        templateStyleNum = len(prs.slide_layouts)
        # 按照第一個模板建立 一張幻燈片
        oneSlide = prs.slides.add_slide(prs.slide_layouts[0])
        # 獲取模板可填充的所有位置
        body_shapes = oneSlide.shapes.placeholders
        for index, body_shape in enumerate(body_shapes):
            if index == 0:
                body_shape.text = movie_info[`index`]+movie_info[`title`]
            elif index == 1:
                img_path = movie_info[`image_path`]
                body_shape.insert_picture(img_path)
            elif index == 2:
                body_shape.text = movie_info[`desc`]
            elif index == 3:
                body_shape.text = movie_info[`score`]
    # 對ppt的修改  
    prs.save(`豆瓣Top250推薦.pptx`)


def main():
    # 獲取豆瓣電影資訊
    movies_info = getInfo()
    createPpt(movies_info)

if __name__ == `__main__`:
    main()

Python生成圖表(豆瓣電影Top20的評分為例)

Top20報表
# encoding: utf-8
from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches

# 建立幻燈片
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 定義圖表資料
chart_data = ChartData()
chart_data.categories = [`肖申克的救贖`, `霸王別姬`, `這個殺手不太冷`, `阿甘正傳`, `美麗人生`, `千與千尋`, `泰坦尼克號`, `辛德勒的名單`, `盜夢空間`, `機器人總動員`, `海上鋼琴師`, `三傻大鬧寶萊塢`, `忠犬八公的故事`, `放牛班的春天`, `大話西遊之大聖娶親`, `楚門的世界`, `教父`, `龍貓`, `熔爐`, `亂世佳人`]
chart_data.add_series(`豆瓣電影`, (9.6, 9.5, 9.4, 9.4, 9.5, 9.2, 9.2, 9.4, 9.3, 9.3, 9.2, 9.2, 9.2, 9.2, 9.2, 9.1, 9.2, 9.1, 9.2, 9.2))
# 將圖表新增到幻燈片
x, y, cx, cy = Inches(0), Inches(0), Inches(10), Inches(8)
slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
prs.save(`豆瓣 Top20 評分圖.pptx`)

關於資料圖形化: Python有很多優秀的圖形庫, 比如matplotlab, 以及Google推出的線上程式設計工具colabratory, 都可以方便的實現資料視覺化, 掌握了Python圖形庫的使用, 基本可以和PPT圖表說拜拜了…

colabratory

教程涉及到的資源我都通過百度網盤分享給大家,為了便於大家的下載,資源整合到了一張獨立的帖子裡,連結如下:
http://www.jianshu.com/p/4f28e1ae08b1


相關文章