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

liftword6个月前 (01-08)技术文章57

最近在琢磨数据分析工作的自动化,手动做报告真是太费劲啦!试过用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像是叮当猫的口袋,几乎什么都能做,适合外行小白们去摸索学习,能极大的增加对编程的兴趣。有些工具用python来实现不一定是技术上的最优选择,但可能是最简洁、最面向大众的。介绍几个不错的处理...

Python带你生成个性海报头像

利用Python语言,可以很方便帮你制作个性海报头像,无需插件,纯代码制作生成。一、生成文字型海报头像要生成一张关于Python基础语法的海报图片,你可以使用Python中的库如PIL(Pillow)...

一篇带你实战的Python绘图Turtle库

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行...

小游戏开发-巧用python代码实现图片的合成

需求:1. 给定底部图片和麻将文字图片,将麻将文字图片合成到底部图片上2. 麻将文字图片有 34 张,每张图片的大小不一样,需要根据底部图片的大小,将麻将文字图片缩放到合适的大小3. 麻将文字图片需要...

告别Excel!如何用Python画一手漂亮的图表

为了进行必要的统计推断,可视化数据非常重要。经常用Excel的表哥表姐会喜欢里面的图形绘制,但告别Excel,我们用Python可以做到更漂亮更自动的图形。怎么来做呢?Python里有这个强大的武器。...