用Python制作数据报告:如何自动生成PDF格式的报告?

liftword3个月前 (01-08)技术文章33

最近在琢磨数据分析工作的自动化,手动做报告真是太费劲啦!试过用Python整了个自动生成PDF报告的小工具,效果还不错。今天就聊聊怎么用Python把数据处理、可视化和PDF生成一条龙搞定。

reportlab:PDF生成的得力助手

reportlab是Python里特别好用的PDF生成库,搭配起来做报表简直不要太方便。装它超简单:

pip install reportlab

来个最基础的PDF示例:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# 新建个PDF文件

pdf = canvas.Canvas(“简单报告.pdf”, pagesize=A4)

pdf.drawString(100, 750, “这是我的第一份Python生成的报告”)

pdf.save()

温馨提示:记得指定pagesize,不然默认页面可能有点小

数据可视化:让报告更生动

光有文字多没意思,加点图表才够味儿。matplotlib这个库画图超好用:

import matplotlib.pyplot as plt
import numpy as np
# 造点数据
sales = [120, 150, 180, 210, 165]
months = ['1月', '2月', '3月', '4月', '5月']
# 画个柱状图
plt.figure(figsize=(8, 6))
plt.bar(months, sales)
plt.title('销售数据统计')
plt.savefig('sales_chart.png')

组合拳:图文并茂的报告

把文字和图片都塞进PDF里:

from reportlab.lib.utils import ImageReader
def create_report():
    pdf = canvas.Canvas(“完整报告.pdf”, pagesize=A4)
    # 加标题
    pdf.setFont(“Helvetica-Bold”, 16)
    pdf.drawString(100, 750, “2024年第一季度销售报告”)
    # 放图片
    img = ImageReader('sales_chart.png')
    pdf.drawImage(img, 50, 400, width=500, height=300)
    # 加说明文字
    pdf.setFont(“Helvetica”, 12)
    pdf.drawString(100, 350, “从图表可以看出,销售额整体呈上升趋势”)
    pdf.save()

进阶玩法:自动处理表格

要是数据多,可以用platypus模块处理表格:

from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
def create_table_report():
	  doc = SimpleDocTemplate(“表格报告.pdf”, pagesize=A4)
		# 准备表格数据
    data = [
        ['月份', '销售额', '同比增长'],
      	['1月', '120万', '15%'],
        ['2月', '150万', '25%'],
        ['3月', '180万', '20%']
		]
    # 设置表格样式
    table = Table(data)
		table.setStyle([
      	('GRID', (0, 0), (-1, -1), 1, colors.black),
    		('BACKGROUND', (0, 0), (-1, 0), colors.grey)
    ])
    doc.build([table])

温馨提示:表格样式可以自己调整,比如改颜色、字体大小啥的

完整代码示例:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.utils import ImageReader
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
import matplotlib.pyplot as plt
import numpy as np

def generate_chart():
		sales = [120, 150, 180, 210, 165]
		months = ['1月', '2月', '3月', '4月', '5月']
		plt.figure(figsize=(8, 6))
		plt.bar(months, sales)
		plt.title('销售数据统计')
		plt.savefig('sales_chart.png')
		plt.close()

def create_full_report():
		# 先生成图表
    generate_chart()

		# 创建PDF
    pdf = canvas.Canvas(“数据分析报告.pdf”, pagesize=A4)
	
		# 添加内容
    pdf.setFont(“Helvetica-Bold”, 16)
		pdf.drawString(100, 750, “2024年第一季度销售报告”)
		img = ImageReader('sales_chart.png')
		
		pdf.drawImage(img, 50, 400, width=500, height=300)
		pdf.setFont(“Helvetica”, 12)
		pdf.drawString(100, 350, “销售情况分析说明:”)
		pdf.drawString(120, 330, “1. 销售额持续增长”)
		pdf.drawString(120, 310, “2. 第四月份达到峰值”)
		pdf.save()

# 运行试试看
create_full_report()

搞定啦!代码运行完就能看到生成的PDF报告。要是想改报告样式,调整一下坐标和格式就好。试着改改参数,做出自己想要的报告样式吧!

相关文章

教你使用python编程绘制函数图像

函数公式很抽象,图像更直观,但聪明的我们总不会手画图像吧?来学习一下用Python怎么画函数图像吧。首先打开Visual Studio Code(后面简称VSCode),点击New File(中文版是...

新手必看!如何用Python绘制复杂函数图像

在数据可视化的奇妙世界里,Python 就像是一把万能钥匙,能够帮我们打开一扇扇通往复杂函数图像绘制的大门。今天,就跟着我一起来探索如何用 Python 绘制那些令人惊叹的复杂函数图像吧!对于数学爱好...

python图像处理入门-提取轮廓

提取图像中物体的轮廓,通常用在图像识别中,比如图像像素级分割,应用面比较广。import cv2 import numpy as np from skimage.measure import fi...

Python自动化办公:一分钟高效搞定Excel所有图片的导入导出

在日常办公中,我们经常需要在Excel表格中插入或导出图片,特别是在制作产品目录、报告或展示数据时。现在有这样一份任务,产品名录表里需要将每个产品的实拍图片插入到D列上,产品有上百个,传统方法需要将图...

使用 Python 玩转图片

我们有时候需要处理图片,对于一些不是非常复杂的图片处理,并非一定要使用 PS ,其实我们用 Python 代码也是可以实现滴~而且还挺方便,有些操作一两行代码就搞定了。有个 Python Image...

如何在 Python 中从图像中提取表格

大约一年前,我的任务是从文档中提取和构建数据,主要包含在表格中。我没有计算机视觉方面的先验知识,很难找到合适的“即插即用”解决方案。可用的选项要么是基于神经网络 (NN) 的先进解决方案,这些解决方案...