python自动化_Python报表自动化
01-報表自動化
要做報表自動化,我們需要考慮清楚3個問題?。
Q1,什么是報表自動化?
Q2,?什么樣的內(nèi)容適合進行報表自動化?
Q3,?如何實現(xiàn)報表自動化?
第一個問題,什么是報表自動化呢?之前算數(shù)都是掰手指用算籌,后來采用算盤,這是自動化;之前記賬都記到紙質(zhì)賬本上,現(xiàn)在采用計算機系統(tǒng),這是自動化;之前在excel中進行手動操作,后來使用函數(shù),vba,python,sql,這也是自動化。總結(jié)一下就是,在出報告的過程中會涉及大量的手工操作,將這部分人類手工操作的工作用工具或代碼代替的過程稱為報表自動化。報表自動化的目的在于簡化工作流程,減少人工介入,節(jié)省工作時間,提高工作效率。
第二個問題,什么樣的內(nèi)容適合進行報表自動化?我們來做一個簡單的數(shù)學(xué)題。將報表分成兩類來分析,一類是一次性的報表,這種報表你做的時候需要15分鐘,且只做一次,做自動化需要30分鐘,這樣算下來,你如果做自動化的話會虧15分鐘,不劃算。第二種是常規(guī)性的報表,每個月需要出4次。這種報表你做一次需要30分鐘,開發(fā)自動化需要60分鐘,開發(fā)完成后每次做需要5分鐘。以兩個月為時間窗口計算的話,按照原來的操作流程,你每個月需要在這份報表上花費30*8=240分鐘,自動化之后,你只需要花費60+5*7=95分鐘,節(jié)省了60%的時間,這真是一筆劃算的生意。所以就是,重復(fù)性/內(nèi)容固定的報表適合用來做報表自動化?。
第三個問題,報表自動化?到底怎么實現(xiàn)呢?報表的起點是下載源數(shù)據(jù),終點是將?報告通過郵件發(fā)出。我將報表流程拆解成了3個步驟。第一步,梳理工作流程,從獲取源數(shù)據(jù)開始,到最后將報告交付出去,這中間一共分幾個小塊呢?首先下載所需源數(shù)據(jù),放到指定位置;整合源數(shù)據(jù),制作成所需的報表;將報表通過郵件發(fā)送出去。第二步:設(shè)計報表體系,通過第一步流程梳理,我們可以看到報表自動化應(yīng)該分成兩個模塊:模塊一:報表制作模塊,負(fù)責(zé)整合源數(shù)據(jù),生成最終的報告;模塊二:郵件發(fā)送模塊,負(fù)責(zé)將報表通過郵件發(fā)送出去。第三步:自動化過程實現(xiàn),我們現(xiàn)在考慮將第二步的兩個模塊集成到代碼中,代替人的手工操作,解放你的雙手。怎么實現(xiàn)呢?這里推薦使用python,因為python可以從讀取數(shù)據(jù)到輸出數(shù)據(jù)一步到位,確實好用。
02一個小案例
小A是公司的新媒體運營,TA每周一都需要review上周各個互聯(lián)網(wǎng)平臺上推文的瀏覽量。小A之前是使用excel操作,這份工作內(nèi)容并不復(fù)雜,但是工作內(nèi)容是重復(fù)的,且這份工作是常規(guī)性的,小A想精簡一下工作流程,節(jié)省自己的工作時間。他找到了富貴幫他做這件事。富貴沒有拒絕。因為富貴一旦拒絕,這篇文章就寫不成了?。
首先,富貴帶小A先梳理了一下工作流程?。
第一步,從平臺上下載瀏覽量數(shù)據(jù)?,數(shù)據(jù)格式如下。一共三列內(nèi)容,第一列是推文發(fā)送渠道?:分為知乎,微信?,CSDN三個。第二列是瀏覽時間,每周一會拉取上周數(shù)據(jù),第三列是瀏覽量,統(tǒng)計的是當(dāng)天該渠道的瀏覽量?。數(shù)據(jù)格式如下圖所示。
第二步,將源數(shù)據(jù)轉(zhuǎn)化為需要的周報數(shù)據(jù),并附一個可視化圖?。格式如下:分析圖表可以看到,需要一個轉(zhuǎn)置操作,計算平均值和求和,并且畫一個條形圖?。
廢話不多說,報表模塊和發(fā)郵件模塊代碼如下?。
# -*- coding: utf-8 -*- """ @author: menghua.wang """ import pandas as pd import numpy as np #讀取源數(shù)據(jù) data=pd.read_excel(r'E:博客存檔微信公眾號第二期:Python報表自動化rawdata2019093020190930.xlsx') channel=data['渠道'].drop_duplicates() title = [u'推文渠道',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均瀏覽量',u'總瀏覽量'] #轉(zhuǎn)置數(shù)據(jù) report=data.pivot( index='渠道',columns='時間',values='瀏覽量') report['平均瀏覽量']=report.mean(axis=1) report['總瀏覽量']=report.sum(axis=1) ? import xlsxwriter workbook = xlsxwriter.Workbook(r'E:博客存檔微信公眾號第二期:Python報表自動化rawdata20190930report.xlsx') worksheet = workbook.add_worksheet('sheet1') chart = workbook.add_chart({'type': 'column'}) ? #設(shè)置表格格式 format=workbook.add_format() format.set_border(1) format_title=workbook.add_format() format_title.set_border(1) format_title.set_bg_color('#cccccc') format_title.set_align('center') format_title.set_bold() format_ave=workbook.add_format() format_ave.set_border(1) format_ave.set_num_format('0.00') #往表格中寫數(shù)據(jù) worksheet.write_row('A1',title,format_title) worksheet.write_column('A2', channel,format) report_1 = np.array(report)#np.ndarray() list_report=report_1.tolist()#list worksheet.write_row('B2', list_report[0],format) worksheet.write_row('B3', list_report[1],format) worksheet.write_row('B4', list_report[2],format) report.ix[[1],:].values #畫圖 def chart_series(cur_row):chart.add_series({'categories': '=Sheet1!$B$1:$H$1','values': '=Sheet1!$B$'+cur_row+':$H$'+cur_row,'line': {'color': 'black'},'name': '=Sheet1!$A$'+cur_row,}) for row in range(2, 5):chart_series(str(row)) ? chart.set_size({'width': 577, 'height': 287}) chart.set_title ({'name': u'推文瀏覽量周報圖表'}) chart.set_y_axis({'name': '人次'}) worksheet.insert_chart('A8', chart) workbook.close() # -*- coding: utf-8 -*- """ author: menghua.wang """""" 發(fā)送郵件模塊""" #import所需模塊import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header from email.mime.application import MIMEApplication #設(shè)置發(fā)件人收件人信息 smtpserver = 'sender.@test.com' #發(fā)件人郵箱地址 username = 'sender.@test.com' #發(fā)件人郵箱地址 password ='password' #發(fā)件人郵箱密碼 sender ='sender.@test.com' #發(fā)件人郵箱地址receiver=['receiver1.@test.com','receiver2.@test.com'] #收件人郵箱地址#設(shè)置郵件主題 subject = 'Python自動化郵件測試'msg = MIMEMultipart('mixed') msg['Subject'] = subject msg['From'] = '<sender.@test.com>'msg['To'] = ";".join(receiver) #添加郵件正文 text = "Dears:n附件請查收,有問題聯(lián)系,謝謝!nnNAME" text_plain = MIMEText(text,'plain', 'utf-8') msg.attach(text_plain) #添加附件 excelFile = 'path' #附件所在位置 excelApart = MIMEApplication(open(excelFile, 'rb').read()) excelApart.add_header('Content-Disposition', 'attachment', filename='filename') #filename用附件名稱代替 msg.attach(excelApart) #發(fā)送郵件 smtp = smtplib.SMTP() smtp.connect('smtp.test.com') #替換成自己的郵件服務(wù)器 smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) print('郵件發(fā)送成功') smtp.quit()富貴就這樣一步步的走上了人生巔峰。
總結(jié)
以上是生活随笔為你收集整理的python自动化_Python报表自动化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fastreport调用frf文件直接打
- 下一篇: linux安装java_Linux安装J