千家信息网

如何使用Python实现自动化生成数据报表

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇"如何使用Python实现自动化生成数据报表"文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于"如何使用Python实现自动化生成数据报表",小编整理了以
千家信息网最后更新 2025年01月19日如何使用Python实现自动化生成数据报表

这篇"如何使用Python实现自动化生成数据报表"文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于"如何使用Python实现自动化生成数据报表",小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。

开发工具

Python版本: 3.6.4

相关模块:

pandasxlwingsmatplotlib模块;

xlwingsmatplotlib模块;

matplotlib模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原始数据如下,主要有水果蔬菜名称、销售日期、销售数量、平均价格、平均成本、总收入、总成本、总利润等。

主要代码

先导入相关库,使用pandas读取原始数据。

import pandas as pdimport xlwings as xwimport matplotlib.pyplot as plt# 对齐数据pd.set_option('display.unicode.ambiguous_as_wide', True)pd.set_option('display.unicode.east_asian_width', True)# 读取数据df = pd.read_csv(r"fruit_and_veg_sales.csv")print(df)

结果如下

一共是有1000行的销售数据。

使用xlwings库创建一个Excel工作簿,在工作簿中创建一个表,表名为fruit_and_veg_sales,然后将原始数据复制进去。

# 创建原始数据表并复制数据wb = xw.Book()sht = wb.sheets["Sheet1"]sht.name = "fruit_and_veg_sales"sht.range("A1").options(index=False).value = d

将原始数据取过来后,再在工作簿中创建一个可视化表,即Dashboard表。

# 创建表wb.sheets.add('Dashboard')sht_dashboard = wb.sheets('Dashboard')

现在,我们有了一个包含两个工作表的Excel工作簿。fruit_and_veg_sales表有我们的数据,Dashboard表则是空白的。

下面使用pandas来处理数据,生成Dashboard表的数据信息。

DashBoard表的头两个表格,一个是产品的利润表格,一个是产品的销售数量表格。

使用到了pandas的数据透视表函数。

# 销售数量透视表pv_quantity_sold = pd.pivot_table(df, index='类别', values='销售数量', aggfunc='sum')print(pv_quantity_sold)

得到数据如下

这里先对数据进行了查询,发现日期列为object,是不能进行分组汇总的。

所以使用了pd.to_datetime()对其进行了格式转换,而后根据时间进行分组汇总,得到每个月的数据情况。

最后一个groupby将为Dashboard表提供第四个数据信息

# 总收入前8的日期数据gb_top_revenue = (df.groupby(df["销售日期"])    .sum()    .sort_values('总收入(美元)', ascending=False)    .head(8)    )[["销售数量", '总收入(美元)', '总成本(美元)', "总利润(美元)"]]print(gb_top_revenue)

总收入前8的日期,得到结果如下

现在我们有了4份数据,可以将其附加到Excel中

# 设置背景颜色, 从A1单元格到Z1000单元格的矩形区域sht_dashboard.range('A1:Z1000').color = (198, 224, 180)# A、B列的列宽sht_dashboard.range('A:B').column_width = 2.22print(sht_dashboard.range('B2').api.font_object.properties.get())# B2单元格, 文字内容、字体、字号、粗体、颜色、行高(主标题)sht_dashboard.range('B2').value = '销售数据报表'sht_dashboard.range('B2').api.font_object.name.set('黑体')sht_dashboard.range('B2').api.font_object.font_size.set(48)sht_dashboard.range('B2').api.font_object.bold.set(True)sht_dashboard.range('B2').api.font_object.color.set([0, 0, 0])sht_dashboard.range('B2').row_height = 61.2# B2单元格到W2单元格的矩形区域, 下边框的粗细及颜色sht_dashboard.range('B2:W2').api.get_border(which_border=9).weight.set(4)sht_dashboard.range('B2:W2').api.get_border(which_border=9).color.set([0, 176, 80])# 不同产品总的收益情况图表名称、字体、字号、粗体、颜色(副标题)sht_dashboard.range('M2').value = '每种产品的收益情况'sht_dashboard.range('M2').api.font_object.name.set('黑体')sht_dashboard.range('M2').api.font_object.font_size.set(20)sht_dashboard.range('M2').api.font_object.bold.set(True)sht_dashboard.range('M2').api.font_object.color.set([0, 0, 0])# 主标题和副标题的分割线, 粗细、颜色、线型sht_dashboard.range('L2').api.get_border(which_border=7).weight.set(3)sht_dashboard.range('L2').api.get_border(which_border=7).color.set([0, 176, 80])sht_dashboard.range('L2').api.get_border(which_border=7).line_style.set(-4115)

先配置一些基本内容,比如文字,颜色背景,边框线等,如下图

使用函数,批量生成四个表格的格式

# 表格生成函数.def create_formatted_summary(header_cell, title, df_summary, color):    """    Parameters    ----------    header_cell : Str        左上角单元格位置, 放置数据    title : Str        当前表格的标题    df_summary : DataFrame        表格的数据    color : Str        表格填充色    """    # 可选择的表格填充色    colors = {"purple": [(112, 48, 160), (161, 98, 208)],              "blue": [(0, 112, 192), (155, 194, 230)],              "green": [(0, 176, 80), (169, 208, 142)],              "yellow": [(255, 192, 0), (255, 217, 102)]}    # 设置表格标题的列宽    sht_dashboard.range(header_cell).column_width = 1.5    # 获取单元格的行列数    row, col = sht_dashboard.range(header_cell).row, sht_dashboard.range(header_cell).column    # 设置表格的标题及相关信息, 如:字号、行高、向左居中对齐、颜色、粗体、表格的背景颜色等    summary_title_range = sht_dashboard.range((row, col))    summary_title_range.value = title    summary_title_range.api.font_object.font_size.set(14)    summary_title_range.row_height = 32.5    # 垂直对齐方式    summary_title_range.api.verticalalignment = xw.constants.HAlign.xlHAlignCenter    summary_title_range.api.font_object.color.set([255, 255, 255])    summary_title_range.api.font_object.bold.set(True)    sht_dashboard.range((row, col),                        (row, col + len(df_summary.columns) + 1)).color = colors[color][0]  # Darker color    # 设置表格内容、起始单元格、数据填充、字体大小、粗体、颜色填充    summary_header_range = sht_dashboard.range((row + 1, col + 1))    summary_header_range.value = df_summary    summary_header_range = summary_header_range.expand('right')    summary_header_range.api.font_object.font_size.set(11)    summary_header_range.api.font_object.bold.set(True)    sht_dashboard.range((row + 1, col),                        (row + 1, col + len(df_summary.columns) + 1)).color = colors[color][1]  # Darker color    sht_dashboard.range((row + 1, col + 1),                        (row + len(df_summary), col + len(df_summary.columns) + 1)).autofit()    for num in range(1, len(df_summary) + 2, 2):        sht_dashboard.range((row + num, col),                            (row + num, col + len(df_summary.columns) + 1)).color = colors[color][1]    # 找到表格的最后一行    last_row = sht_dashboard.range((row + 1, col + 1)).expand('down').last_cell.row    side_border_range = sht_dashboard.range((row + 1, col), (last_row, col))    # 给表格左边添加带颜色的边框    side_border_range.api.get_border(which_border=7).weight.set(3)    side_border_range.api.get_border(which_border=7).color.set(colors[color][1])    side_border_range.api.get_border(which_border=7).line_style.set(-4115)# 生成4个表格create_formatted_summary('B5', '每种产品的收益情况', pv_total_profit, 'green')create_formatted_summary('B17', '每种产品的售出情况', pv_quantity_sold, 'purple')create_formatted_summary('F17', '每月的销售情况', gb_date_sold, 'blue')create_formatted_summary('F5', '每日总收入排名Top8 ', gb_top_revenue, 'yellow')

得到结果如下

可以看到,一行行的数据经过Python的处理,变为一目了然的表格。

最后再绘制一个matplotlib图表,添加一张logo图片,并保存Excel文件

# 中文显示plt.rcParams['font.sans-serif']=['Songti SC']# 使用Matplotlib绘制可视化图表, 饼图fig, ax = plt.subplots(figsize=(6, 3))pv_total_profit.plot(color='g', kind='bar', ax=ax)# 添加图表到Excelsht_dashboard.pictures.add(fig, name='ItemsChart',                           left=sht_dashboard.range("M5").left,                           top=sht_dashboard.range("M5").top,                           update=True)# 添加logo到Excellogo = sht_dashboard.pictures.add(image="pie_logo.png",                           name='PC_3',                           left=sht_dashboard.range("J2").left,                           top=sht_dashboard.range("J2").top+5,                           update=True)# 设置logo的大小logo.width = 54logo.height = 54# 保存Excel文件wb.save(rf"水果蔬菜销售报表.xlsx")

此处需设置一下中文显示,否则会显示不了中文,只有一个个方框。

得到最终的水果蔬菜销售报表

python可以做什么

Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,Web开发等。

以上是"如何使用Python实现自动化生成数据报表"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 表格 销售 颜色 单元 生成 报表 产品 总收入 情况 模块 原始 内容 数量 日期 标题 工作 图表 自动化 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 我的世界服务器学校搞笑视频 松原游戏软件开发在线咨询 网络技术应用会考操作题图解 计算机网络技术专业男女比例 广东c语言软件开发需要多少钱 软件开发工具实训总结 公安部网络安全保卫局巡视员 发布到iis 数据库不能访问 如何自己做传奇3服务器 接交换机后找不到服务器ip 网络安全方案测试 河北时代网络技术推广 怀旧服服务器排队爆满 网络安全靠大家班会活动 斗罗大陆魂师对决服务器崩溃 北航网络安全排名 数据库怎么修改字段值 数据库系统选题 网络安全海报设计学生 软件开发工程师mis 北京乐奇网络技术 2018华三网络技术大赛 erp库存数据 数据库怎么提现 注册软件开发公司需要条件 摩尔庄园所有服务器编号 哪家网络公司服务器规模最大 塔式服务器如何设置数据库用户 灌云口碑好的网络技术专业服务 国内三大核心期刊数据库 东城区网络安全部门
0