自動化產生數據分析報告!連目錄都可以輕易產生!?提早下班就是今天!(內附程式碼)

數據分析是一個繁瑣的過程。分析人員在尋求一個問題的答案時,勢必要經過設計、實踐與測試等過程。直到有了正確的結果後,才能將結果撰寫成報告。但在這個過程中,分析的階段就耗費大量的時間與精力。撰寫結案報告對於分析人員來說是的不小的壓力。尤其是在結案日期不斷的逼近,分析人員的壓力就漸漸攀升,導致最後的告報無法詳細的呈現。

所幸在 Python 蓬勃發展的現代,使用 Python 撰寫 Word 報告已經不是一件難事。python-docx 這個套件就是專門使用 Python 來產生 Word 文件。可以輕易使用 python 透過這個套件自動產生出附件為 docx 的文件,且可以在程式輸出後就自動完成插入表格的前處理。也要特別注意,python-docx 是無法處理舊版本doc 文件的喔!

圖、取自python-docx官網,簡易程式就可以直覺產生文件。

實做程式

本文將根據上次一 Po 就迅速串紅的文章 《資訊與行銷人必看的行銷資料科學入門課-含範例與R程式碼》 ,以內文中分析手法來做示範,詳細的行銷概念思維可以到上文中閱讀。

1. 安裝 python-docx

pip install python-docx

2. 載入套件包:

import pandas as pd
from ggplot import *
#python-docx
from docx import Document
from docx.shared import Inches

3. 讀入 《資訊與行銷人必看的行銷資料科學入門課-含範例與R程式碼》 使用的資料集:

Carseats 資料集 前五行資料 (下載資料集)
# read data
datas = pd.read_csv('Carseats.csv')

4. 產生分析結果圖片:

事先產生圖片並儲存,等待之後輸出到 Word 上。

# create pic
p = ggplot(datas, aes(x='Population', y='Sales', color='ShelveLoc',size ='Advertising' )) +\
geom_point() +\
scale_color_brewer(type = 'qual', palette = 'Set1')+\
xlab("Population") + ylab("Sales") + ggtitle("Carseats")
# savepic
p.save('plot.png')
圖、銷量/人口/貨架陳列位置/廣告預算 比較圖

5. 使用 Python 初始化一個 Word 檔:

# init docx
document = Document()

6. 加入文章標題:

add_heading 方法第一個參數是放標題的文字,第二個參數則是 Word 標題的階層。0 是大標題,可以輸入1~6。也是因為有在這裡有設定標題,讓我們之後產生 Word 目錄會非常容易。

想了解標題與目錄的關聯請參考:

台科EMBA年年爆滿的一門Word課(B+C系列)
document.add_heading('門市分析報告', 0)
document.add_heading('原始資料', level=1)
圖、輸出標題成果

7. 加入 Word 文字:

add_paragraph 方法第一個直接放入要輸出到 Word 的文字。

paragraph = '名稱為 Carseats。假設我們是這間賣嬰兒車公司的資料科學家,老闆'+\
'希望我們馬上可以對明年的行銷策略提出建議。這時我們發現公司的資料集只有各'+\
'店的相關銷量與費用,沒有其他資料,卻連最基礎的顧客資料都沒有收集的很完整'+\
',所以只能嘗試從銷售資料來尋找可能的建議。下方是前五筆原始資料:'
document.add_paragraph(paragraph)
圖、輸出的文字

8. 插入表格:

先使用 add_table 方法建立第一列。這裡可以直接調用 table.rows[0].cells 對表格內容指定字串。同理如果要輸入多筆資料可以使用 for 迴圈直接輸入。

# table
records = datas[['Population','Sales','ShelveLoc','Advertising']].head()
relist = records.to_dict('recodes')
table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Population'
hdr_cells[1].text = 'Sales'
hdr_cells[2].text = 'ShelveLoc'
hdr_cells[3].text = 'Advertising'
for record in relist:
row_cells = table.add_row().cells
row_cells[0].text = str(record['Population'])
row_cells[1].text = str(record['Sales'])
row_cells[2].text = str(record['ShelveLoc'])
row_cells[3].text = str(record['Advertising'])
圖、表格輸出的成果,這裡為了讓讀者容易看清楚,不然應該是沒有格線的

9.插入項目符號:

項目符號其實就跟一般輸入文字一樣都是採用 add_paragraph 方法,但主要在於新增了style=’List Bullet’,程式就會自動判定成項目符號。

document.add_heading('資料欄位解說', level=1)
# 新增項目標號
document.add_paragraph(
'Population(人口): Population size in region (in thousands)',
style='List Bullet'
)
document.add_paragraph(
'Sales(銷量): Unit sales (in thousands) at each location',
style='List Bullet'
)
document.add_paragraph(
'ShelveLoc(貨架陳列位置): A factor with levels Bad, Good and Medium indicating the quality of the shelving location for the car seats at each site',
style='List Bullet'
)
document.add_paragraph(
'Advertising(廣告預算): Local advertising budget for company at each location (in thousands of dollars)',
style='List Bullet'
)
document.add_page_break()
圖、輸出的項目符號

10. 插入圖片:

輸出圖片是報告最常出現的,反而意外的簡單只要一行就可以解決。可以使用 width 參數調整圖片的大小。

document.add_picture('plot.png', width=Inches(5))

成果展現:

圖、輸出報告第一頁
圖、輸出報告第二頁

插入目錄

因為先前我們在撰寫程式的時候,就已經將三個標題設定樣式階層。所以當把檔案輸出後,只要直接打開檔案參考資料>目錄>新增自動目錄就可以直接產生目錄(如下圖)!有沒有覺得非常方便呢?

偷偷說…其實我真的是去上Word才知道可以這樣新增目錄!以前都用手打一直跑板好痛苦QQ
點我了解 台科EMBA年年爆滿的一門Word課(B+C系列)
圖、快速產生目錄

附上原始程碼:

作者:林建興(臺灣行銷研究有限公司 技術長)

歡迎加入我們的Line@獲取即時訊息!https://line.me/R/ti/p/%40cde8265r

想了解更多Word操作?