本文小編為大家詳細(xì)介紹“Python如何實(shí)現(xiàn)報(bào)表自動(dòng)化和自動(dòng)發(fā)送到目的郵箱”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python如何實(shí)現(xiàn)報(bào)表自動(dòng)化和自動(dòng)發(fā)送到目的郵箱”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、石城網(wǎng)站維護(hù)、網(wǎng)站推廣。
自動(dòng)化總是能夠很好的節(jié)省時(shí)間,提高我們的工作效率。讓我們的程序編程盡可能的降低每個(gè)功能實(shí)現(xiàn)代碼的耦合性,更好的維護(hù)代碼。這樣我們會(huì)節(jié)省很多時(shí)間讓我們有空去做更多有價(jià)值有意義的工作。
編碼實(shí)現(xiàn)效果正確無誤的話是是可以一直沿用的,如果是人為來操作的話反而可能會(huì)犯一些錯(cuò)誤。交給固定的程序來做更加讓人放心,需求變更時(shí)僅修改部分代碼即可解決問題。
首先我們需要根據(jù)業(yè)務(wù)需求來制定我們所需要的報(bào)表,并不是每個(gè)報(bào)表都需要進(jìn)行自動(dòng)化的,一些復(fù)雜二次開發(fā)的指標(biāo)數(shù)據(jù)要實(shí)現(xiàn)自動(dòng)化編程的比較復(fù)雜的,而且可能會(huì)隱藏著各種BUG。所以我們需要對(duì)我們工作所要用到的報(bào)表的特性進(jìn)行歸納,以下是我們需要綜合考慮的幾個(gè)方面:
對(duì)于一些業(yè)務(wù)上經(jīng)常需要用到的表,這些表我們可能要納入自動(dòng)化程序的范圍。例如客戶信息清單、銷售額流量報(bào)表、業(yè)務(wù)流失報(bào)表、環(huán)比同比報(bào)表等。
這些使用頻率較高的報(bào)表,都很有必要進(jìn)行自動(dòng)化。對(duì)于那些偶爾需要使用的報(bào)表,或者是二次開發(fā)指標(biāo),需要復(fù)制統(tǒng)計(jì)的報(bào)表,這些報(bào)表就沒必要實(shí)現(xiàn)自動(dòng)化了。
這就相當(dāng)于成本和利率一樣,若是有些報(bào)表自動(dòng)化實(shí)現(xiàn)困難,還超過了我們普通統(tǒng)計(jì)分析所需要的時(shí)間,就沒必要去實(shí)現(xiàn)自動(dòng)化。所以開始自動(dòng)化工作的時(shí)候要衡量一下開發(fā)腳本所耗費(fèi)的時(shí)間和人工做表所耗費(fèi)的時(shí)間哪個(gè)更短了。當(dāng)然我會(huì)提供一套實(shí)現(xiàn)方案,但是僅對(duì)一些常用簡單的報(bào)表。
對(duì)于我們報(bào)表每個(gè)過程和步驟,每個(gè)公司都有所不同,我們需要根據(jù)業(yè)務(wù)場景去編碼實(shí)現(xiàn)各個(gè)步驟功能。所以我們制作的流程應(yīng)該是符合業(yè)務(wù)邏輯的,制作的程序也應(yīng)該是符合邏輯的。
首先我們需要知道我們需要什么指標(biāo):
指標(biāo)
總體概覽指標(biāo)
反映某一數(shù)據(jù)指標(biāo)的整體大小
對(duì)比性指標(biāo)
環(huán)比
相鄰時(shí)間段內(nèi)的指標(biāo)直接作差
同比
相鄰時(shí)間段內(nèi)某一共同時(shí)間點(diǎn)上指標(biāo)的對(duì)比
集中趨勢指標(biāo)
中位數(shù)
眾數(shù)
平均數(shù)/加權(quán)平均數(shù)
離散程度指標(biāo)
標(biāo)準(zhǔn)差
方差
四分位數(shù)
全距(極差)
最大界減最小界
相關(guān)性指標(biāo)
r
我們拿一個(gè)簡單的報(bào)表來進(jìn)行模擬實(shí)現(xiàn):
首先我們要了解我們的數(shù)據(jù)是從哪里來的,也就是數(shù)據(jù)源。我們最終的數(shù)據(jù)處理都是轉(zhuǎn)化為DataFrame來進(jìn)行分析的,所以需要對(duì)數(shù)據(jù)源進(jìn)行轉(zhuǎn)化為DataFrame形式:
import pandas as pd import json import pyMySQL from sqlalchemy import create_engine # 打開數(shù)據(jù)庫連接 conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='xxxx', charset = 'utf8' ) engine=create_engine('mysql+pymysql://root:xxxx@localhost/mysql?charset=utf8') def read_excel(file): df_excel=pd.read_excel(file) return df_excel def read_json(file): with open(file,'r')as json_f: df_json=pd.read_json(json_f) return df_json def read_sql(table): sql_cmd ='SELECT * FROM %s'%table df_sql=pd.read_sql(sql_cmd,engine) return df_sql def read_csv(file): df_csv=pd.read_csv(file) return df_csv
以上代碼均通過測試可以正常使用,但是pandas的read函數(shù)針對(duì)不同的形式的文件讀取,其read函數(shù)參數(shù)也有不同的含義,需要直接根據(jù)表格的形式來調(diào)整。
其他read函數(shù)將會(huì)在文章寫完之后后續(xù)補(bǔ)上,除了read_sql需要連接數(shù)據(jù)庫之外,其他的都是比較簡單的。
我們以用戶信息為例:
我們需要統(tǒng)計(jì)的指標(biāo)為:
#指標(biāo)說明
單表圖:
前十個(gè)產(chǎn)品受眾最多的地區(qū)
#將城市空值的一行刪除 df=df[df['city_num'].notna()] #刪除error df=df.drop(df[df['city_num']=='error'].index) #統(tǒng)計(jì)df = df.city_num.value_counts()
我們僅獲取前10名的城市就好了,封裝為餅圖:
def pie_chart(df): #將城市空值的一行刪除 df=df[df['city_num'].notna()] #刪除error df=df.drop(df[df['city_num']=='error'].index) #統(tǒng)計(jì) df = df.city_num.value_counts() df.head(10).plot.pie(subplots=True,figsize=(5, 6),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False) pie_chart(read_csv('user_info.csv'))
將圖表保存起來:
plt.savefig('fig_cat.png')
要是你覺得matplotlib的圖片不太美觀的話,你也可以換成echarts的圖片,會(huì)更加好看一些:
pie = Pie() pie.add("",words) pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地區(qū)")) #pie.set_series_opts(label_opts=opts.LabelOpts(user_df)) pie.render_notebook()
封裝后就可以直接使用了:
def echart_pie(user_df): user_df=user_df[user_df['city_num'].notna()] user_df=user_df.drop(user_df[user_df['city_num']=='error'].index) user_df = user_df.city_num.value_counts() name=user_df.head(10).index.tolist() value=user_df.head(10).values.tolist() words=list(zip(list(name),list(value))) pie = Pie() pie.add("",words) pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地區(qū)")) #pie.set_series_opts(label_opts=opts.LabelOpts(user_df)) return pie.render_notebook() user_df=read_csv('user_info.csv') echart_pie(user_df)
可以進(jìn)行保存,可惜不是動(dòng)圖:
from snapshot_selenium import snapshot make_snapshot(snapshot,echart_pie(user_df).render(),"test.png")
保存為網(wǎng)頁的形式就可以自動(dòng)加載JS進(jìn)行渲染了:
echart_pie(user_df).render('problem.html') os.system('problem.html')
做出來的一系列報(bào)表一般都要發(fā)給別人看的,對(duì)于一些每天需要發(fā)送到指定郵箱或者需要發(fā)送多封報(bào)表的可以使用Python來自動(dòng)發(fā)送郵箱。
在Python發(fā)送郵件主要借助到smtplib和email這個(gè)兩個(gè)模塊。
smtplib:主要用來建立和斷開與服務(wù)器連接的工作。
email:主要用來設(shè)置一些些與郵件本身相關(guān)的內(nèi)容。
不同種類的郵箱服務(wù)器連接地址不一樣,大家根據(jù)自己平常使用的郵箱設(shè)置相應(yīng)的服務(wù)器進(jìn)行連接。這里博主用網(wǎng)易郵箱展示:
首先需要開啟POP3/SMTP/IMAP服務(wù):
之后便可以根據(jù)授權(quán)碼使用python登入了。
import smtplib from email import encoders from email.header import Header from email.utils import parseaddr,formataddr from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText #發(fā)件人郵箱 asender="fanstuck@163.com" #收件人郵箱 areceiver="1079944650@qq.com" #抄送人郵箱 acc="fanstuck@163.com" #郵箱主題 asubject="謝謝關(guān)注" #發(fā)件人地址 from_addr="fanstuck@163.com" #郵箱授權(quán)碼 password="####" #郵件設(shè)置 msg=MIMEMultipart() msg['Subject']=asubject msg['to']=areceiver msg['Cc']=acc msg['from']="fanstuck" #郵件正文 body="你好,歡迎關(guān)注fanstuck,您的關(guān)注就是我繼續(xù)創(chuàng)作的動(dòng)力!" msg.attach(MIMEText(body,'plain','utf-8')) #添加附件 htmlFile = 'C:/Users/10799/problem.html' html = MIMEApplication(open(htmlFile , 'rb').read()) html.add_header('Content-Disposition', 'attachment', filename='html') msg.attach(html) #設(shè)置郵箱服務(wù)器地址和接口 smtp_server="smtp.163.com" server = smtplib.SMTP(smtp_server,25) server.set_debuglevel(1) #登錄郵箱 server.login(from_addr,password) #發(fā)生郵箱 server.sendmail(from_addr,areceiver.split(',')+acc.split(','),msg.as_string()) #斷開服務(wù)器連接 server.quit()
運(yùn)行測試:
下載文件:
讀到這里,這篇“Python如何實(shí)現(xiàn)報(bào)表自動(dòng)化和自動(dòng)發(fā)送到目的郵箱”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:Python如何實(shí)現(xiàn)報(bào)表自動(dòng)化和自動(dòng)發(fā)送到目的郵箱
文章來源:http://muchs.cn/article16/pdjigg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、用戶體驗(yàn)、App開發(fā)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)