用Python自動生成 圖文並茂的資料分析 報告
大家好,這裡是程式設計師晚楓。
上週 B站:程式設計師晚楓 後臺的一位朋讀者私信我,想學習一下Python自動化生成資料分析報告。
作為有問必答的程式設計博主,今天我們來一起學習一下~
reportlab是Python的一個標準庫,可以畫圖、畫表格、編輯文字,最後可以輸出PDF格式。它的邏輯和編輯一個word文件或者PPT很像。有兩種方法:
- 建立一個空白文件,然後在上面寫文字、畫圖等;
- 建立一個空白list,以填充表格的形式插入各種文字框、圖片等,最後生成PDF文件。
因為需要產生一份給使用者看的報告,裡面需要插入圖片、表格等,所以採用的是第二種方法。
1、一行命令,安裝這個庫
reportlab輸入Python的第三方庫,使用前需要先安裝,
為了方便大家使用,我已經將這個庫整合到Python自動化辦公的專用庫: pip install python-office
中了,
因此 一行命令 就可以完成的安裝命令如下:point_down:
pip install -i http://pypi.tuna.tsinghua.edu.cn/simple python-office -U
2、核心程式碼模組匯入
①提前匯入相關內容,並且註冊字型。(註冊字型前需要先準備好字型檔案)
from reportlab.pdfbase import pdfmetrics # 註冊字型 from reportlab.pdfbase.ttfonts import TTFont # 字型類 from reportlab.platypus import Table, SimpleDocTemplate, Paragraph, Image # 報告內容相關類 from reportlab.lib.pagesizes import letter # 頁面的標誌尺寸(8.5*inch, 11*inch) from reportlab.lib.styles import getSampleStyleSheet # 文字樣式 from reportlab.lib import colors # 顏色模組 from reportlab.graphics.charts.barcharts import VerticalBarChart # 圖表類 from reportlab.graphics.charts.legends import Legend # 圖例類 from reportlab.graphics.shapes import Drawing # 繪圖工具 from reportlab.lib.units import cm # 單位:cm
②註冊字型
提前準備好字型檔案, 如果同一個檔案需要多種字型可以註冊多個
pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf')) 封裝不同內容對應的函式 建立一個Graphs類,通過不同的靜態方法提供不同的報告內容,包括:標題、普通段落、圖片、表格和圖表。函式中的相關資料目前絕大多數都是固定值,可以根據情況自行設定成相關引數。 # Graphs類的全部程式碼,請+v:CoderWanFeng
③生成報告
if __name__ == '__main__': # 建立內容對應的空列表 content = list() # 新增標題 content.append(Graphs.draw_title('資料分析就業薪資')) # 新增圖片 content.append(Graphs.draw_img('資料全集.jpg')) # 新增段落文字 content.append(Graphs.draw_text('眾所周知,大資料分析師崗位是香餑餑,近幾年資料分析熱席捲了整個網際網路行業,與資料分析的相關的崗位招聘、培訓數不勝數。很多人前赴後繼,想要參與到這波紅利當中。那麼資料分析師就業前景到底怎麼樣呢?需要學習Python + 大資料分析,可以新增我:CoderWanFeng')) # 新增小標題 content.append(Graphs.draw_title('')) content.append(Graphs.draw_little_title('全網同名:程式設計師晚楓')) # 新增表格 data = [ ('平臺名稱', '關注人數', '較上年增長率'), ('WB', '18.5K', '25%'), ('B站', '25.5K', '14%'), ('知乎', '29.3K', '10%') ] content.append(Graphs.draw_table(*data)) # 生成圖表 content.append(Graphs.draw_title('')) content.append(Graphs.draw_little_title('熱門城市的就業情況')) b_data = [(25400, 12900, 20100, 20300, 20300, 17400), (15800, 9700, 12982, 9283, 13900, 7623)] ax_data = ['BeiJing', 'ChengDu', 'ShenZhen', 'ShangHai', 'HangZhou', 'NanJing'] leg_items = [(colors.red, '平均薪資'), (colors.green, '招聘量')] content.append(Graphs.draw_bar(b_data, ax_data, leg_items)) # 生成pdf檔案 doc = SimpleDocTemplate('report.pdf', pagesize=letter) doc.build(content)
生成報告的結果如下
「其他文章」
- 設計模式之狀態模式
- 如何實現資料庫讀一致性
- 我是怎麼入行做風控的
- C 11精要:部分語言特性
- 吳恩達來信:人工智慧領域的求職小 tips
- EasyCV帶你復現更好更快的自監督演算法-FastConvMAE
- 某車聯網App 通訊協議加密分析(四) Trace Code
- 帶你瞭解CANN的目標檢測與識別一站式方案
- EasyNLP玩轉文字摘要(新聞標題)生成
- PostgreSQL邏輯複製解密
- 基於 CoreDNS 和 K8s 構建雲原生場景下的企業級 DNS
- 迴圈神經網路(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
- 技術分享| 分散式系統中服務註冊發現元件的原理及比較
- 利用谷歌地圖採集外貿客戶的電話和手機號碼
- 跟我學Python影象處理丨關於影象金字塔的影象向下取樣和向上取樣
- 帶你掌握如何使用CANN 運算元ST測試工具msopst
- 一招教你如何高效批量匯入與更新資料
- 一步步搞懂MySQL元資料鎖(MDL)
- 你知道如何用 PHP 實現多程序嗎?
- KubeSphere 閘道器的設計與實現(解讀)