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

liftword4个月前 (01-08)技术文章44

最近在琢磨数据分析工作的自动化,手动做报告真是太费劲啦!试过用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 潮流周刊#51:用 Python 绘制美观的图表

本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职...

如何使用python裁剪图片?

如何使用python裁剪图片如上图所示,这是一张包含了各类象棋棋子的图片。我们需要将其中每一个棋子都裁剪出来,此时可以利用python的 PIL库 实现。一、 安装PIL库如果此前没有安装过PIL库,...

使用Python将图片转换为字符画并保存到文件

字符画(ASCII Art)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...

Python批量重命名照片:让你的照片整理更加高效

Python批量重命名照片:让你的照片整理更加高效在日常生活中,我们经常会拍摄大量的照片,而这些照片的命名往往比较杂乱,甚至无法一眼辨识出每张照片的具体内容。尤其是当你拍摄了成百上千张照片时,整理和查...

用Python进行图像处理:简单实用的方法

图像处理是计算机视觉领域的重要应用之一。Python拥有丰富的图像处理库,使得图像处理变得简单而高效。本文将介绍使用Python进行图像处理的基础知识和常见技术。图像处理基础首先,我们需要了解如何使用...