python生成可视化报表,python做数据报表

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: