作为指标跟踪人员,相信很多人都为日报、周报、月报烦扰着。所谓复杂的事情简单化、简单的事情重复化、重复的事情代码化,以下分享一下Python的xlsxwriter库的一些使用技巧,实现周报月报的自动化生成,先看一下效果。这只是其中的一小部分,有数据有图当然也可以添加文字描述。
以下是具体实现方法:
1、导入pandas、xlsxwriter、numpy等必要的Python包
import pandas as pd
import numpy as np
import xlsxwriter
from datetime import datetime
2、数据读取
本文利用Python读取sas的数据集,所以用到data= pd.read_sas(r'D:\ZHOUBAO\feicijiang\gxall.sas7bdat'),当然也可以直接读取数据库或者Excel数据,由于公司限制,我只能先用sas将数据做初步处理,然后调用Python。
3、pandas处理数据
用Excel做周报月报,用的最多的工具肯定是透视表了,当然pandas中也可以做数据的透视汇总功能,table_data = pd.pivot_table(
data, index=['列变量'], values='值', columns='行变量', fill_value=0,aggfunc=np.sum)
4、xlsxwriter创建Excel
time = datetime.now()
month = str(time.month)
day = str(time.day)
#创建Excel
workbook = xlsxwriter.Workbook(r'C:\Users\Administrator\Desktop\18年' + month + r'月报.xlsx')
#创建sheet
Sheet1= workbook.add_worksheet('Sheet1')
# 定义表格样式
format1 = workbook.add_format({'bold': False, 'font_color': 'black'})
format2 = workbook.add_format({'bold': True, 'font_color': 'red'})
5、数据写入及绘制图表
#在Sheet1中的A1位置写入“数据更新时间”
Sheet1.write('A1', '数据更新时间' + month + '月' + day)
#数据写入,A4A位置开始写入上述透视表的index列,C3位置开始写入透视表的culumns
Sheet1.write_column('A4', list(table_data .index),format1)
Sheet1.write_row('C3', list(table_data .columns),format1)
#然后通过for循环写入具体数据,并实现如果数据超过目标值则显示用format2样式标记红色
n = 1
for i in list(tb.index):
Sheet1.write_row(
'C' + str(n + 3), np.array(tb[n - 1:n]).tolist()[0])
if table_data [n]>0:
worksheet.conditional_format(n+2,2,n+2,len( np.array(tb[n - 1:n]).tolist()[0])+1,
{'type':'cell','criteria':'>', 'value':taget_fcj[n],'format':format1})
else:
worksheet.conditional_format(n+2,2,n+2,len( np.array(tb[n - 1:n]).tolist()[0])+1,
{'type':'cell','criteria':'>', 'value':taget_fcj[n],'format':format2})
n += 1
#绘制图表
chart1 = workbook.add_chart({'type': 'column'})
chart1.add_series({
'name': '',
'categories': [''],
'values': [''],
})
6、关闭Excel,workbook .close()
到这里一个sheet1已经做好了,再用Python的threading的timer写一个定时任务,就可以定时更新了。
领取专属 10元无门槛券
私享最新 技术干货