python生成可视化报表,python做数据报表
本文主要介绍如何使用Python自动生成数据报表,从而提高效率。不再需要创建包含数据片段的Excel数据报告。有兴趣的同学可以试试。
00-1010前言开发工具环境构建主要代码
目录
停止敲击生成Excel数据报表,使用Python自动生成Excel数据报表!不要胡说八道
开心的开始吧~
前言
Python版本:3.6.4
相关模块:
Pandasxlwingsmatplotlib模块;
Xlwingsmatplotlib模块;
Matplotlib模块;
以及Python自带的一些模块。
开发工具
安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
原始数据如下,主要包括果蔬名称、销售日期、销售数量、平均价格、平均成本、总收入、总成本、总利润等。
环境搭建
先导入相关数据库,用熊猫读取原始数据。
进口熊猫作为pd
将xlwings导入为xw
将matplotlib.pyplot作为plt导入
#对齐数据
PD . set _ option( display . unicode . ambiguity _ as _ wide ,True)
PD . set _ option( display . unicode . east _ Asian _ width ,True)
#读取数据
df=PD . read _ CSV(r fruit _ and _ veg _ sales . CSV )
打印(df)
结果如下
有1000行销售数据。
使用xlwings库创建一个Excel工作簿,在工作簿中创建一个名为fruit_and_veg_sales的表,然后将原始数据复制到其中。
#创建原始数据表并复制数据
wb=xw。图书()
sht=wb.sheets[Sheet1]
sht.name=水果蔬菜销售
sht.range(A1 )。选项(index=False)。值=d
获取原始数据后,在工作簿中创建一个可视化表格,即仪表板表。
#创建表格
wb.sheets.add(仪表板)
sht_dashboard=wb.sheets(仪表板)
现在,我们有一个包含两个工作表的Excel工作簿。fruit_and_veg_sales表有我们的数据,而Dashboard表是空白的。
下面,pandas用来处理数据和生成仪表板表的数据信息。
仪表板表的前两个表是产品利润表和产品销售数量表。
我用了熊猫的透视表功能。
#销售数量透视表
PV _ quantity _ sold=PD . pivot _ table(df,index= category ,values= sales quantity ,aggfunc=sum )
打印(pv_quantity_sold)
获得的数据如下
这里先查询数据,发现日期列为对象,无法进行分组汇总。
于是用pd.to_datetime()对其格式进行转换,然后按照时间进行分组汇总,得到每个月的数据。
最后一个groupby将为仪表板表提供第四个数据信息。
#总收入前8名的日期数据
Gb_top_revenue=(df.groupby(df[销售日期])。总和()。sort_values(总收入(美元),升序=False)。头(8)
] [[销售量,总收入(美元),总成本(美元),总利润(美元)]]
打印
(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.22
print(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)
# 添加图表到Excel
sht_dashboard.pictures.add(fig, name=ItemsChart,
left=sht_dashboard.range("M5").left,
top=sht_dashboard.range("M5").top,
update=True)
# 添加logo到Excel
logo = 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 = 54
logo.height = 54
# 保存Excel文件
wb.save(rf"水果蔬菜销售报表.xlsx")
此处需设置一下中文显示,否则会显示不了中文,只有一个个方框。
得到最终的水果蔬菜销售报表
以上就是基于Python实现自动化生成数据报表的详细内容,更多关于Python数据报表的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。