八、Python3自动化运维——质量报表模块

质量报表之信息模块

简介:
在收集到的大量数据基础之上,对数据进行统计分析,并且以可视化的方式展示出来,便于我们精确的定位问题解决问题。
组成:
Excel表格处理
数据的基本的常见的 处理方式
模块:XlsxWriter
rrdtool数据报表
可视化图形的展示样式
模块:rrdtool
scapy包处理
数据包的流转分析
模块:scapy

质量报表之表格处理

基础知识

功能解析

模块简介
场景:Excel
内容:对大量的数据进行基础性的分析,然后可视化展示出来,有必要的话导出进行备份等。
模块:XlsxWriter
功能:对Excel文件里的多个工作表里面的文字、公式、图标等都可以进行自由的操作。
在这里插入图片描述
模块安装:
pip install XlsxWriter
基本实践语法:
打开文件(如果文件不存在,表示创建)
xlsxwrite.Workbook(文件名)
创建工作表
workbook对象.add_worksheet()
列宽的设定
worksheet对象.set_column(“列标识符:列标识符”,宽度值)
字体的加粗设定(针对所有的工作表,所有用workbook,不是worksheet)
样式1:workbook对象.add_format({“bold”:True})
- - 针对的是个体
样式2:属性对象.set_xxx()
- -针对的是整体
内容的输入
worksheet对象.write(“表格位置”,“内容”,“内容”,“格式”)
内容:直接写即可,中文的话,需要加上 u标签
格式位置:可以是字体的格式,也可以是数据的计算公式等
插入图数据
worksheet对象.insert_image(‘图的插入位置’,“图的名称”)
关闭文件
worksheet对象.close()

简单实践

'''
    xlsxWriter模块基础知识点
'''

# 导包
import xlsxwriter

# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_demo.xlsx')
# 1-2 创建工作表
worksheet = workbook.add_worksheet()
# 2 设定基础格式
# 2-1 列宽度
worksheet.set_column("A:A", 30)
worksheet.set_column("B:B", 130)
# 2-2 字体格式
bold = workbook.add_format({"bold":True})
# 3 添加数据
# 3-1 添加普通数据
worksheet.write('A1','Hello')
worksheet.write('A2','World')
# 3-2 添加中文数据
worksheet.write('B3',u'你好')
worksheet.write('C4',u'中国')
# 3-3 添加格式数据
worksheet.write('E5',u'你好',bold)
worksheet.write('F6','Henan',bold)

# 3-4 添加数据后进行公示处理
# 索引是从0开始的
worksheet.write(4,7,32)
worksheet.write(5,7,35.5)
worksheet.write(6,7,'=SUM(H5:H6)')
# 3-5 添加图片数据
worksheet.insert_image('C6','img/cpu.png')

# 4 保存文件

# 5 退出操作
workbook.close()

注意事项:
列宽的标识,不是像素,而是宽度值
位置的确定:
按标识计算 按索引计算
A1 0,0
B7 1,6

模块解析

worklook类

简介
workbook创建一个excel表格对象,代表一个完整的excel文件
参数:
filename设定excel表格的名字
options 设定表格初始化的内容格式
常见的方法
add_worksheet 添加工作表
样式:workbook.add_sheet([工作表名称])
add_format 设定格式属性
样式1:workbook.add_format({“属性”:True})
样式2:
format对象 = workbook.add_format()
format对象.set_xxx()
常见格式:
set_bold()
set_font_size(10)
add_chart 创建图标样式对象
workbook.add_chart(type,subtype)
参数解析:
type 用来指定图标类型
area:面积图、bar:条形图、column:直方图、line:折线图、scatter:散点图、radar:雷达图、stock:箱线图
subtype 用来指定图标子类型
workbook.add_chartsheet() - - 生成图表工作表(一个表就一个图)
close 关闭文件
set_properties 设定工作表的一些属性
实践需求
1 创建excel文件,名称是my_excel_workbook.xlsx
2 创建三个工作表,表名分别是 员工信息、公司信息、部门信息
3 设定属性,字体为粗体,字体大小为16号
4 添加一个图,一个面积图,一个雷达图

import xlsxwriter

# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_workbook.xlsx')
# 1-2 创建工作表
worksheet = workbook.add_worksheet()
worksheet = workbook.add_worksheet('员工信息表')
worksheet = workbook.add_worksheet('公司信息表')
worksheet = workbook.add_worksheet('部门信息表')
# 2 文件操作
#2-1 设定基本属性
my_format = workbook.add_format()
my_format.set_bold()    # 字体加粗
my_format.set_color('red')   # 设定字体颜色
my_format.set_font_size(16)   # 设定文字大小
# 2-2 增加图
workbook.add_chart({"type":"line"})
workbook.add_chart({"type":"radar"})
workbook.add_chart({"type":"area"})
# 3 退出操作
# 这一步必须有,不然不会写文件
workbook.close()

worksheet类

语法解析
作用:
操作一个工作表,是xlsxwriter最核心的一个类
创建方法:
在workbook类的基础上,通过add_worksheet()方法来进行创建
常见方法
write(行,列,其他参数)
注意,行和列的值是数字,起始值都是0
写入数据:
write_string 写入字符串
write_number 数字
write_blank 空数据
write_formula 公式类数据
write_datetime 日期数据
write_boolean 布尔类型数据
write_url url格式数据
write(‘位置标识’,内容)
位置标识,就是工作表的横纵坐标值,A3,B6
set_row(行位置,行号,单元格格式,其他属性)
set_column(列起始位置,列结束位置,列宽,单元格格式,其他属性)
insert_image(行位置,列位置,图片名称路径)
样式1:本地路径
样式2:超链接跳转,需要本地图片和额外的url扩展属性
在这里插入图片描述
实践1 - 内容的输入

import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet2.xlsx')
worksheet = workbook.add_worksheet('worksheet')

# 2 文件操作
# 2-1 通用属性格式设置

my_format = workbook.add_format()
my_format.set_bold()    # 字体加粗
my_format.set_color('red')   # 设定字体颜色
my_format.set_font_size(16)   # 设定文字大小
# 2-2 定制的属性设置
my_bold = workbook.add_format({"bold":True})
my_red = workbook.add_format({"color":"red"})
my_size = workbook.add_format({"font_size":22})
# 3 表格的操作
# 数据编写的基本格式
# 格式1:worksheet对象.write(行索引,列索引,格式,内容)
# 格式2:worksheet对象.write(位置标识,格式,内容)
# 3-1 格式1 操作
worksheet.write(3,1,"你好")   # B4上写入"你好"
worksheet.write(4,1,"中国",my_bold)   # B4上写入"中国",加粗
worksheet.write(5,1,"美",my_red)
worksheet.write(6,1,"漂亮",my_size)

# 3-2 格式2 操作
worksheet.write("C4","你好")   # C4上写入"你好"
worksheet.write("C5","中国",my_format)   # C5上写入"中国",加粗
worksheet.write("C6","美",my_format)
worksheet.write("C7","漂亮",my_format)

# 3-3 内容格式
worksheet.write_string("C1","这是普通字符串格式数据")  # 字符串格式
worksheet.write_number("C2",345)    # 数字格式
worksheet.write_number("C3",33.567) # 数字格式
worksheet.write_blank("C4",None) # 空数据内容
worksheet.write_blank("D1","") # 空数据内容
worksheet.write_formula("D2",'=SUM(C2:C3)') # 求和公式
worksheet.write_datetime("D3",datetime.datetime.strptime("2021-01-06","%Y-%m-%d")) # 日期格式
worksheet.write_boolean("D4",True)  # 逻辑数据
worksheet.write_boolean("D5",True)  # 逻辑数据
worksheet.write_url("E1","http://www.example.com")  # url数据

# 4 退出操作
workbook.close()

在这里插入图片描述

实践2 - 行列的控制

import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_col_row.xlsx')
worksheet = workbook.add_worksheet('worksheet')

# 2 文件操作
# 2-1 通用属性格式设置

my_format = workbook.add_format()
my_format.set_bold()    # 字体加粗
my_format.set_color('red')   # 设定字体颜色
my_format.set_font_size(16)   # 设定文字大小
# 2-2 定制的属性设置
my_bold = workbook.add_format({"bold":True})
my_red = workbook.add_format({"color":"red"})
my_size = workbook.add_format({"font_size":22})
# 3 表格的操作
# 3-1 行的定制
# set_row(行位置,行号,单元格格式,其他属性)

worksheet.write_string("B1","Hello World")
cell_format = workbook.add_format({"color":"green"})
worksheet.set_row(0,20,cell_format) # 将第一行的内容格式进行更改
worksheet.set_row(4,None,None,{"hidden":True}) # 隐藏第5行的内容
# 3-2 列的定制
# set_column(列起始位置,列结束位置,列宽,单元格格式,其他属性)
worksheet.write_string("D2","Hello Columns")
cell_format = workbook.add_format({"font_size":"22"})
worksheet.set_column("D:D",6,cell_format) # 修改D列的格式,宽度为6
worksheet.set_column("E:G",2)   # 修改E-G列的宽度
worksheet.set_column("I:S",None,None,{"hidden":True})    # 修改I:S 隐藏

# 4 退出操作
workbook.close()

在这里插入图片描述

实践3 - 图片的插入

import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_image.xlsx')
worksheet = workbook.add_worksheet('worksheet')

# 2 表格的操作
# 2-1 本地图片导入
# 格式: worksheet.insert_image("图片位置","图片路径")
worksheet.insert_image("B2","img/cpu.png")


# 2-2 网络图片导入
# 格式: worksheet.insert_image("图片位置","图片本地路径",{"url":"http://www.xxxxx/"})
worksheet.insert_image("G2","python-logo@2x.png",{"url":"https://www.python.org"}) # 点击图片做相应的跳转

# 3 退出操作
workbook.close()

在这里插入图片描述

chart类

基础语法
定位
xlsxwriter模块中的图表组件的基类,支持各种类型的图和表
常见语法
创建图对象
workbook.add_chart({type,“类型”})
插入图像
worksheet.insert_chart(位置,图对象)
添加数据
chart.add_series({
“categories”:‘标签范围’,
“values”:‘值的范围’,
“line”:{“属性名”:“属性值”},
})
其他方法:
chart.set_x_axis 设定x坐标轴
chart.set_y_axis 设定y坐标轴
chart.set_size 设置图片的大小
chart.set_title 设置图片的标题
chart.set_style 设置图片的样式
chart.set_table 设置图表的样式
帮助手册
http://xlsxwriter.readthedocs.io/chart.html
https://xlsxwriter.readthedocs.io/chart_examples.html#chart-examples

代码:

import xlsxwriter

# 1 创建文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_chart1.xlsx')
worksheet = workbook.add_worksheet('worksheet')

# 2 图表的操作
# 2-1 创建图形对象
chart1 = workbook.add_chart({'type':"column"})
# chart2 = workbook.add_chart({'type':"radar"})

# 2-2 为图形增加一些数据
# 准备三条数据
data = [
    [1,2,3,4,5],    # A1-A5
    [2,4,6,8,10],   # B1-B5
    [3,6,9,12,15],   # C1-C5
]
# 以列的方式将所有的数据添加到对应的列中
worksheet.write_column("A1",data[0])
worksheet.write_column("B1",data[1])
worksheet.write_column("C1",data[2])
# 注意:write_column如果接收的数据是一个列表,那么他会按照列格式依次添加所有的内容,直到数据为空

# 向图中添加数据
chart1.add_series({'values':'=worksheet!$A$1:$A$5'})
chart1.add_series({'values':'=worksheet!$B$1:$B$5'})
chart1.add_series({'values':'=worksheet!$C$1:$C$5'})


# 2-3 插入图形对象
worksheet.insert_chart('A7',chart1)
# worksheet.insert_chart("F1",chart2)

# 3 退出
workbook.close()

在这里插入图片描述
其他方法

import xlsxwriter

# 1 创建文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_chart2.xlsx')
worksheet = workbook.add_worksheet('worksheet')

# 2 图表的操作
# 2-1 创建图形对象
chart1 = workbook.add_chart({'type':"column"})
# chart2 = workbook.add_chart({'type':"radar"})

# 2-2 为图形增加一些数据
# 准备三条数据
data = [
    [1,2,3,4,5],    # A1-A5
    [2,4,6,8,10],   # B1-B5
    [3,6,9,12,15],   # C1-C5
]
# 以列的方式将所有的数据添加到对应的列中
worksheet.write_column("A1",data[0])
worksheet.write_column("B1",data[1])
worksheet.write_column("C1",data[2])

# 向图中添加数据
chart1.add_series({'values':'=worksheet!$A$1:$A$5'})
chart1.add_series({'values':'=worksheet!$B$1:$B$5'})
chart1.add_series({'values':'=worksheet!$C$1:$C$5'})

# 设置x轴的内容
chart1.set_x_axis({
    "name":"X轴属性显示",
    "name_font":{"size":16,"bold":True},
    "num_font":{"italic":True}
})

# 设置y轴的内容
chart1.set_y_axis({
    "name":"Y轴属性显示",
    "name_font":{"size":16,"bold":True},
    "num_font":{"italic":True}
})

# 设置图形大小S
chart1.set_size({
    "width":360,    # 宽度
    "height":180    # 高度
})

# 增加图形的标题
chart1.set_title({
    "name":"这是我们的标题"
})

# 设置我们图形的样式
chart1.set_style(15) # 这个值的取值 

# 设置我们图形的样式
chart1.set_table()

# 2-3 插入图形对象
worksheet.insert_chart('A7',chart1)
# worksheet.insert_chart("F1",chart2)

# 3 退出
workbook.close()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官网示例方法
https://xlsxwriter.readthedocs.io/chart_examples.html#chart-examples

import xlsxwriter

workbook = xlsxwriter.Workbook('chart_area.xlsx')
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': 1})

# Add the worksheet data that the charts will refer to.
headings = ['Number', 'Batch 1', 'Batch 2']
data = [
    [2, 3, 4, 5, 6, 7],
    [40, 40, 50, 30, 25, 50],
    [30, 25, 30, 10, 5, 10],
]

worksheet.write_row('A1', headings, bold)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])

#######################################################################
#
# Create an area chart.
#
chart1 = workbook.add_chart({'type': 'area'})

# Configure the first series.
chart1.add_series({
    'name':       '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$7',
    'values':     '=Sheet1!$B$2:$B$7',
})

# Configure a second series. Note use of alternative syntax to define ranges.
chart1.add_series({
    'name':       ['Sheet1', 0, 2],
    'categories': ['Sheet1', 1, 0, 6, 0],
    'values':     ['Sheet1', 1, 2, 6, 2],
})

# Add a chart title and some axis labels.
chart1.set_title ({'name': 'Results of sample analysis'})
chart1.set_x_axis({'name': 'Test number'})
chart1.set_y_axis({'name': 'Sample length (mm)'})

# Set an Excel chart style.
chart1.set_style(11)

# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D2', chart1, {'x_offset': 25, 'y_offset': 10})

#######################################################################
#
# Create a stacked area chart sub-type.
#
chart2 = workbook.add_chart({'type': 'area', 'subtype': 'stacked'})

# Configure the first series.
chart2.add_series({
    'name':       '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$7',
    'values':     '=Sheet1!$B$2:$B$7',
})

# Configure second series.
chart2.add_series({
    'name':       '=Sheet1!$C$1',
    'categories': '=Sheet1!$A$2:$A$7',
    'values':     '=Sheet1!$C$2:$C$7',
})

# Add a chart title and some axis labels.
chart2.set_title ({'name': 'Stacked Chart'})
chart2.set_x_axis({'name': 'Test number'})
chart2.set_y_axis({'name': 'Sample length (mm)'})

# Set an Excel chart style.
chart2.set_style(12)

# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D18', chart2, {'x_offset': 25, 'y_offset': 10})

#######################################################################
#
# Create a percent stacked area chart sub-type.
#
chart3 = workbook.add_chart({'type': 'area', 'subtype': 'percent_stacked'})

# Configure the first series.
chart3.add_series({
    'name':       '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$7',
    'values':     '=Sheet1!$B$2:$B$7',
})

# Configure second series.
chart3.add_series({
    'name':       '=Sheet1!$C$1',
    'categories': '=Sheet1!$A$2:$A$7',
    'values':     '=Sheet1!$C$2:$C$7',
})

# Add a chart title and some axis labels.
chart3.set_title ({'name': 'Percent Stacked Chart'})
chart3.set_x_axis({'name': 'Test number'})
chart3.set_y_axis({'name': 'Sample length (mm)'})

# Set an Excel chart style.
chart3.set_style(13)

# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D34', chart3, {'x_offset': 25, 'y_offset': 10})

workbook.close()
```![在这里插入图片描述](https://img-blog.csdnimg.cn/ae8a002636f4475d833fdfe48d6a1aa9.png)


## 综合实践
### 案例分析
1 创建workbook对象及worksheet对象
	workbook
	workbook.add_worksheet
2 准备相应数据
	add_column
	add_row
2 设定基本表现样式和字体样式
	add_format()
	format对象.add_xxx()
3 创建对应的图表
	add_chart()
4 为图表添加数据
	add_series()
5 修饰图表样式
	add_title() ,add_x_axis(),add_style()6 添加图标到工作表中
	insert_chart()
7 关闭文件
	close()

### 代码分析
![在这里插入图片描述](https://img-blog.csdnimg.cn/049cb632ad7f4dcf9365e987c3555cb2.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1d99483f6bb40b6a66faff1a5558742.png)
数据的插入
![在这里插入图片描述](https://img-blog.csdnimg.cn/3a513ec0f1144322867c68f71fe32820.png)
统计数据的逻辑
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ef2693601f74e7d96398ab18f91e693.png)
图形展示
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f3645a00d6840baba9285efba27bfc0.png)
步骤梳理:
1 创建文件及工作表、图样式
2 准备数据
3 加载数据到图样式中
4 平均数据获取
5 图样式修改
6 关闭文件

### 代码实践

```python
'''
    表格综合实践
'''

import xlsxwriter

# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})

# 2 准备数据
# 2-1 标题数据
title = [
    u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
    u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
    [150,152,158,149,155,145,148],
    [89,88,95,93,98,100,99],
    [201,200,198,175,170,198,195],
    [75,77,78,78,76,76,79],
    [88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center")    # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title)    # 增加标题数据
worksheet.write_column('A2',buname,format)      # 增加频道数据
for i in range(5):  # 为每个频道增加流量数据
    worksheet.write_row("B{}".format(i+2),data[i],format)

# 4-2 统计数据
def chart_series(cur_row):
    """
    生成平均流量数据的方法
    :param cur_row: 输入的行号
    """
    # 采用公式的方式生成平均数据
    worksheet.write_formula("I{}".format(cur_row),
                            '=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
                            format_ave)
    # 向图形中增加数据
    chart.add_series({
        "categories":'=Sheet1!$B$1:$H$1',
        "values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
        "line":{"color":"black"},
        "name":"=Sheet1!$A${}".format(cur_row)
    })

for row in range(2,7):
    chart_series(row)

# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
    "width":577,
    "height":287
})
# 5-2 图的标题定制
chart.set_title({
    "name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
    "name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)
# 6 关闭文件
workbook.close()

在这里插入图片描述

进阶实践

需求1 - 将业务名称和平均流量做一个柱状图

'''
    表格综合实践
'''

import xlsxwriter

# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart-1.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})

# 2 准备数据
# 2-1 标题数据
title = [
    u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
    u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
    [150,152,158,149,155,145,148],
    [89,88,95,93,98,100,99],
    [201,200,198,175,170,198,195],
    [75,77,78,78,76,76,79],
    [88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center")    # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title)    # 增加标题数据
worksheet.write_column('A2',buname,format)      # 增加频道数据
for i in range(5):  # 为每个频道增加流量数据
    worksheet.write_row("B{}".format(i+2),data[i],format)

# 4-2 统计数据
def chart_series(cur_row):
    """
    生成平均流量数据的方法
    :param cur_row: 输入的行号
    """
    # 采用公式的方式生成平均数据
    worksheet.write_formula("I{}".format(cur_row),
                            '=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
                            format_ave)
    # 向图形中增加数据
    chart.add_series({
        "categories":'=Sheet1!$B$1:$H$1',
        "values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
        "line":{"color":"black"},
        "name":"=Sheet1!$A${}".format(cur_row)
    })

for row in range(2,7):
    chart_series(row)

# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
    "width":577,
    "height":287
})
# 5-2 图的标题定制
chart.set_title({
    "name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
    "name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)


# 6 其他图的嵌入
# 6-1 业务平均流量图
# 绘制图对象
chart1 = workbook.add_chart({"type":"column"})
chart1.add_series({
    "name" : "=Sheet1!$I$1",     # 图例的定制
    "categories" : '=Sheet1!$A$2:$A$6',  # 横坐标数据
    "values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})

# 图的大小定制
chart1.set_size({
    "width":577,
    "height":287
})
# 图的标题定制
chart1.set_title({"name":u'业务平均流量报表图'})
# 图的y坐标定制
chart1.set_y_axis({
    "name":"Mb/s"
})
# 图的嵌入
worksheet.insert_chart("A23",chart1)
# 7 关闭文件
workbook.close()

在这里插入图片描述
需求2-将业务名称和平均流量做一个饼图

'''
    表格综合实践
'''

import xlsxwriter

# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart-2.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})

# 2 准备数据
# 2-1 标题数据
title = [
    u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
    u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
    [150,152,158,149,155,145,148],
    [89,88,95,93,98,100,99],
    [201,200,198,175,170,198,195],
    [75,77,78,78,76,76,79],
    [88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center")    # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title)    # 增加标题数据
worksheet.write_column('A2',buname,format)      # 增加频道数据
for i in range(5):  # 为每个频道增加流量数据
    worksheet.write_row("B{}".format(i+2),data[i],format)

# 4-2 统计数据
def chart_series(cur_row):
    """
    生成平均流量数据的方法
    :param cur_row: 输入的行号
    """
    # 采用公式的方式生成平均数据
    worksheet.write_formula("I{}".format(cur_row),
                            '=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
                            format_ave)
    # 向图形中增加数据
    chart.add_series({
        "categories":'=Sheet1!$B$1:$H$1',
        "values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
        "line":{"color":"black"},
        "name":"=Sheet1!$A${}".format(cur_row)
    })

for row in range(2,7):
    chart_series(row)

# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
    "width":577,
    "height":287
})
# 5-2 图的标题定制
chart.set_title({
    "name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
    "name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)


# 6 其他图的嵌入
# 6-1 业务平均流量图
# 绘制图对象
chart1 = workbook.add_chart({"type":"column"})
chart1.add_series({
    "name" : "=Sheet1!$I$1",     # 图例的定制
    "categories" : '=Sheet1!$A$2:$A$6',  # 横坐标数据
    "values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})

# 图的大小定制
chart1.set_size({
    "width":577,
    "height":287
})
# 图的标题定制
chart1.set_title({"name":u'业务平均流量报表图'})
# 图的y坐标定制
chart1.set_y_axis({
    "name":"Mb/s"
})
# 图的嵌入
worksheet.insert_chart("A23",chart1)


# 6-2 业务平均流量 - 饼图
# 绘制图对象
chart2 = workbook.add_chart({"type":"pie"})
chart2.add_series({
    "name" : "=Sheet1!$I$1",     # 图例的定制
    "categories" : '=Sheet1!$A$2:$A$6',  # 横坐标数据
    "values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})

# 图的大小定制
chart2.set_size({
    "width":377,
    "height":287
})
# 图的标题定制
chart2.set_title({"name":u'业务平均流量报表图'})

# 图的嵌入
# worksheet.insert_chart("A38",chart2)    # 在默认情况下,图是没有阴影的
worksheet.insert_chart("A38",chart2,{'x_offset':25,'y_offset':10})
# 7 关闭文件
workbook.close()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值