对于企业生产环境来说,监控服务器的流量数据至关重要,那么如何通过流量数据来生成相应的流量报表呢?本实例通过定制网站5个频道的流量报表周报,通过XlsxWriter模块将流量数据写入Excel文档,同时自动计算各频道周平均流量,再生成数据图表。同时,可结合邮件发送模块将生成的报表发送到指定人员的邮箱当中,这里我们专注于利用Python生成流量报表,如何发送邮件请大家自行整合,同时,本实例是模拟的流量数据,大家可以将数据替换成自己服务器真实的流量数据。
具体代码如下:
# -*- coding:UTF-8 -*-
import xlsxwriter
#创建一个Excel文件
workbook = xlsxwriter.Workbook('chart.xlsx')
#创建一个工作表对象
worksheet = workbook.add_worksheet()
#创建一个图表对象
chart = workbook.add_chart({'type':'column'})
#定义数据表头列表
title = [u'业务名称', u'星期一', u'星期二', u'星期三', u'星期四', u'星期五', u'星期六', u'星期日', u'平均流量']
#定义频道名称
buname = [u'业务官网', u'新闻中心', u'购物频道', u'体育频道', u'亲子频道']
#定义5频道一周7天流量数据列表,模拟的数据
data = [
[150,152,158,149,155,145,148],
[89.88,95,93,98,100,99],
[201,200,198,175,179,198,195],
[75,77,78,78,74,70,79],
[88,85,87,90,93,88,84]
]
#定义format格式对象
format = workbook.add_format()
#定义format对象单元格边框加粗(1个像素)的格式
format.set_border(1)
#定义format_title对象
format_title = workbook.add_format()
#定义format_title对象单元格边框加粗(1像素)的格式
format_title.set_border(1)
#定义format_title对象单元格背景颜色为#cccccc格式
format_title.set_bg_color('#cccccc')
#定义format_title对象单元格居中对齐的格式
format_title.set_align('center')
#定义format_title对象单元格内容加粗的格式
format_title.set_bold()
#定义format_ave格式对象
format_ave = workbook.add_format()
#定义format_ave对象单元格边框加粗(1像素)的格式
format_ave.set_border(1)
#定义format_ave对象单元格数据类别显示格式
format_ave.set_num_format('0.00')
#下面分别以行或列写入方式将标题、业务名称、流量数据写入起初单元格,同时引用不同格式对象
worksheet.write_row('A1', title, format_title)
worksheet.write_column('A2', buname, format)
worksheet.write_row('B2', data[0], format)
worksheet.write_row('B3', data[1], format)
worksheet.write_row('B4', data[2], format)
worksheet.write_row('B5', data[3], format)
worksheet.write_row('B6', data[4], format)
#定义如表数据系列函数
#计算频道周平均流量
def chart_series(cur_row):
worksheet.write_formula('I' + cur_row, '=AVERAGE(B' + cur_row + ':H' +cur_row+')')
chart.add_series({
#将星期一到星期日作为图表数据标签(X轴)
'categories': '=Sheet1!$B$1:$H$1',
#频道一周所有数据作为数据区域
'values':'=Sheet1!$B$' + cur_row + ':$H$' + cur_row,
#定义线条颜色为黑色
'line' : {'color': 'black'},
#引用业务名称为图例项
'name' : '=Sheet1!$A$' + cur_row
})
#数据区域以第2~6行进行图表数据系列函数调用
for row in range(2, 7):
chart_series(str(row))
#设置图表大小
chart.set_size({'width': 577, 'height': 287})
#设置图表的大标题
chart.set_title({'name':u'业务流量周报图表'})
#设置y轴左侧小标题
chart.set_y_axis({'name':'Mb/s'})
#在A8单元格插入图表
worksheet.insert_chart('A8', chart)
#关闭Excel文档
workbook.close()
运行程序生成的报表结果如下:
作者:冰 河
来源:CSDN
原文:https://blog.csdn.net/l1028386804/article/details/78987851
版权声明:本文为博主原创文章,转载请附上博文链接!