成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python報(bào)表怎么實(shí)現(xiàn)自動(dòng)化并發(fā)送到郵箱?仔細(xì)閱讀下文哦

89542767 / 517人閱讀

  Python在自動(dòng)化辦公方面,用處還是比較的大的,如果使用起來(lái)的話(huà),其辦公的效率會(huì)大大的提高。特別是我們?cè)谧鰣?bào)表的時(shí)候,使用python更加的簡(jiǎn)潔方便,那么,怎么實(shí)現(xiàn)報(bào)表自動(dòng)化呢?我們制作完報(bào)表之后,怎么才能夠自動(dòng)發(fā)送到郵箱呢?下面給大家詳細(xì)解答下。


  項(xiàng)目背景


  作為數(shù)據(jù)分析師,我們需要經(jīng)常制作統(tǒng)計(jì)分析圖表。但是報(bào)表太多的時(shí)候往往需要花費(fèi)我們大部分時(shí)間去制作報(bào)表。這耽誤了我們利用大量的時(shí)間去進(jìn)行數(shù)據(jù)分析。但是作為數(shù)據(jù)分析師我們應(yīng)該盡可能去挖掘表格圖表數(shù)據(jù)背后隱藏關(guān)聯(lián)信息,而不是簡(jiǎn)單的統(tǒng)計(jì)表格制作圖表再發(fā)送報(bào)表。既然報(bào)表的工作不可免除,那我們應(yīng)該如何利用我們所學(xué)的技術(shù)去更好的處理工作呢?這就需要我們制作一個(gè)Python小程序讓它自己去實(shí)現(xiàn),這樣我們就有更多的時(shí)間去做數(shù)據(jù)分析。我們把讓程序自己運(yùn)行的這個(gè)過(guò)程稱(chēng)為自動(dòng)化。


  一、報(bào)表自動(dòng)化目的


  1.節(jié)省時(shí)間,提高效率


  自動(dòng)化總是能夠很好的節(jié)省時(shí)間,提高我們的工作效率。讓我們的程序編程盡可能的降低每個(gè)功能實(shí)現(xiàn)代碼的耦合性,更好的維護(hù)代碼。這樣我們會(huì)節(jié)省很多時(shí)間讓我們有空去做更多有價(jià)值有意義的工作。


  2.減少錯(cuò)誤


  編碼實(shí)現(xiàn)效果正確無(wú)誤的話(huà)是是可以一直沿用的,如果是人為來(lái)操作的話(huà)反而可能會(huì)犯一些錯(cuò)誤。交給固定的程序來(lái)做更加讓人放心,需求變更時(shí)僅修改部分代碼即可解決問(wèn)題。


  二、報(bào)表自動(dòng)化范圍


  首先我們需要根據(jù)業(yè)務(wù)需求來(lái)制定我們所需要的報(bào)表,并不是每個(gè)報(bào)表都需要進(jìn)行自動(dòng)化的,一些復(fù)雜二次開(kāi)發(fā)的指標(biāo)數(shù)據(jù)要實(shí)現(xiàn)自動(dòng)化編程的比較復(fù)雜的,而且可能會(huì)隱藏著各種BUG。所以我們需要對(duì)我們工作所要用到的報(bào)表的特性進(jìn)行歸納,以下是我們需要綜合考慮的幾個(gè)方面:


  1.頻率

01.png

02.png

  對(duì)于一些業(yè)務(wù)上經(jīng)常需要用到的表,這些表我們可能要納入自動(dòng)化程序的范圍。例如客戶(hù)信息清單、銷(xiāo)售額流量報(bào)表、業(yè)務(wù)流失報(bào)表、環(huán)比同比報(bào)表等。


  這些使用頻率較高的報(bào)表,都很有必要進(jìn)行自動(dòng)化。對(duì)于那些偶爾需要使用的報(bào)表,或者是二次開(kāi)發(fā)指標(biāo),需要復(fù)制統(tǒng)計(jì)的報(bào)表,這些報(bào)表就沒(méi)必要實(shí)現(xiàn)自動(dòng)化了。


  2.開(kāi)發(fā)時(shí)間


  這就相當(dāng)于成本和利率一樣,若是有些報(bào)表自動(dòng)化實(shí)現(xiàn)困難,還超過(guò)了我們普通統(tǒng)計(jì)分析所需要的時(shí)間,就沒(méi)必要去實(shí)現(xiàn)自動(dòng)化。所以開(kāi)始自動(dòng)化工作的時(shí)候要衡量一下開(kāi)發(fā)腳本所耗費(fèi)的時(shí)間和人工做表所耗費(fèi)的時(shí)間哪個(gè)更短了。當(dāng)然我會(huì)提供一套實(shí)現(xiàn)方案,但是僅對(duì)一些常用簡(jiǎn)單的報(bào)表。


  3.流程


  對(duì)于我們報(bào)表每個(gè)過(guò)程和步驟,每個(gè)公司都有所不同,我們需要根據(jù)業(yè)務(wù)場(chǎng)景去編碼實(shí)現(xiàn)各個(gè)步驟功能。所以我們制作的流程應(yīng)該是符合業(yè)務(wù)邏輯的,制作的程序也應(yīng)該是符合邏輯的。

03.png

  三、實(shí)現(xiàn)步驟


  首先我們需要知道我們需要什么指標(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ì)比


  集中趨勢(shì)指標(biāo)


  中位數(shù)


  眾數(shù)


  平均數(shù)/加權(quán)平均數(shù)


  離散程度指標(biāo)


  標(biāo)準(zhǔn)差


  方差


  四分位數(shù)


  全距(極差)


  最大界減最小界


  相關(guān)性指標(biāo)


  r

04.png

  我們拿一個(gè)簡(jiǎn)單的報(bào)表來(lái)進(jìn)行模擬實(shí)現(xiàn):


  第一步:讀取數(shù)據(jù)源文件


  首先我們要了解我們的數(shù)據(jù)是從哪里來(lái)的,也就是數(shù)據(jù)源。我們最終的數(shù)據(jù)處理都是轉(zhuǎn)化為DataFrame來(lái)進(jìn)行分析的,所以需要對(duì)數(shù)據(jù)源進(jìn)行轉(zhuǎn)化為DataFrame形式:


  import pandas as pd
  import json
  import pymysql
  from sqlalchemy import create_engine
  #打開(kāi)數(shù)據(jù)庫(kù)連接
  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


  以上代碼均通過(guò)測(cè)試可以正常使用,但是pandas的read函數(shù)針對(duì)不同的形式的文件讀取,其read函數(shù)參數(shù)也有不同的含義,需要直接根據(jù)表格的形式來(lái)調(diào)整。


  其他read函數(shù)將會(huì)在文章寫(xiě)完之后后續(xù)補(bǔ)上,除了read_sql需要連接數(shù)據(jù)庫(kù)之外,其他的都是比較簡(jiǎn)單的。


  第二步:DataFrame計(jì)算


  我們以用戶(hù)信息為例:

05.png

  我們需要統(tǒng)計(jì)的指標(biāo)為:


  #指標(biāo)說(shuō)明


  單表圖:


  前十個(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()

06.png

  我們僅獲取前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'))

07.png

  將圖表保存起來(lái):

  plt.savefig('fig_cat.png')


  要是你覺(jué)得matplotlib的圖片不太美觀的話(huà),你也可以換成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()

08.png

  封裝后就可以直接使用了:


  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)頁(yè)的形式就可以自動(dòng)加載JS進(jìn)行渲染了:


  echart_pie(user_df).render('problem.html')
  os.system('problem.html')

09.png

  第三步:自動(dòng)發(fā)送郵件


  做出來(lái)的一系列報(bào)表一般都要發(fā)給別人看的,對(duì)于一些每天需要發(fā)送到指定郵箱或者需要發(fā)送多封報(bào)表的可以使用Python來(lái)自動(dòng)發(fā)送郵箱。


  在Python發(fā)送郵件主要借助到smtplib和email這個(gè)兩個(gè)模塊。


  smtplib:主要用來(lái)建立和斷開(kāi)與服務(wù)器連接的工作。


  email:主要用來(lái)設(shè)置一些些與郵件本身相關(guān)的內(nèi)容。


  不同種類(lèi)的郵箱服務(wù)器連接地址不一樣,大家根據(jù)自己平常使用的郵箱設(shè)置相應(yīng)的服務(wù)器進(jìn)行連接。這里博主用網(wǎng)易郵箱展示:


  首先需要開(kāi)啟POP3/SMTP/IMAP服務(wù):

10.png

  之后便可以根據(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())
  #斷開(kāi)服務(wù)器連接
  server.quit()
  運(yùn)行測(cè)試:

12.png

  下載文件:

13.png

  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)更多幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128308.html

相關(guān)文章

  • 簡(jiǎn)單備份文件并發(fā)送到指定郵箱

    摘要:背景一哥們發(fā)了個(gè)訴求,總覺(jué)得自己的服務(wù)器不安全,想搞個(gè)定時(shí)備份文件并發(fā)送到自己的郵箱實(shí)現(xiàn)代碼如下簡(jiǎn)單說(shuō)明打包文件這個(gè)實(shí)現(xiàn)比較初級(jí),直接用命令進(jìn)行打包發(fā)送郵件這個(gè)就不說(shuō)了,現(xiàn)成的模塊直接拿來(lái)用日志記錄加上日志,可以很清 背景 一哥們發(fā)了個(gè)訴求,總覺(jué)得自己的服務(wù)器不安全,想搞個(gè)定時(shí)備份文件并發(fā)送到自己的郵箱 1 實(shí)現(xiàn)代碼如下 # -*- coding: utf-8 -*- from __...

    lingdududu 評(píng)論0 收藏0
  • 一只node爬蟲(chóng)的升級(jí)打怪之路

    摘要:我是一個(gè)知乎輕微重度用戶(hù),之前寫(xiě)了一只爬蟲(chóng)幫我爬取并分析它的數(shù)據(jù),我感覺(jué)這個(gè)過(guò)程還是挺有意思,因?yàn)檫@是一個(gè)不斷給自己創(chuàng)造問(wèn)題又去解決問(wèn)題的過(guò)程。所以這只爬蟲(chóng)還有登陸知乎搜索題目的功能。 我一直覺(jué)得,爬蟲(chóng)是許多web開(kāi)發(fā)人員難以回避的點(diǎn)。我們也應(yīng)該或多或少的去接觸這方面,因?yàn)榭梢詮呐老x(chóng)中學(xué)習(xí)到web開(kāi)發(fā)中應(yīng)當(dāng)掌握的一些基本知識(shí)。而且,它還很有趣。 我是一個(gè)知乎輕微重度用戶(hù),之前寫(xiě)了一只爬...

    shiweifu 評(píng)論0 收藏0
  • 利用Python自動(dòng)發(fā)送郵件

    摘要:自動(dòng)發(fā)送郵件我們把報(bào)表做出來(lái)以后一般都是需要發(fā)給別人查看,對(duì)于一些每天需要發(fā)的報(bào)表或者是需要一次發(fā)送多份的報(bào)表,這個(gè)時(shí)候可以考慮借助來(lái)自動(dòng)發(fā)送郵件。一份郵件的組成下圖是中發(fā)送一份郵件的界面,主要包含發(fā)件人收件人抄送人主題正文附件這幾部分。 ...

    leo108 評(píng)論0 收藏0
  • 人工智能幫助千萬(wàn)用戶(hù)完成「隱形征信」計(jì)算

    摘要:量化派是一家數(shù)據(jù)驅(qū)動(dòng)的科技金融公司,通過(guò)人工智能大數(shù)據(jù)機(jī)器學(xué)習(xí)等前沿技術(shù)提供消費(fèi)信貸撮合及消費(fèi)場(chǎng)景下的白條服務(wù),每年處理千萬(wàn)級(jí)用戶(hù)信用及信用消費(fèi)申請(qǐng)。 「小楊」最近裝修房子,準(zhǔn)備去銀行貸款,但是聽(tīng)說(shuō)好多人會(huì)因?yàn)閭€(gè)人征信問(wèn)題被銀行拒絕貸款!于是,他先查了一下自己的央行征信,發(fā)現(xiàn)竟然沒(méi)有自己的征信信息,「小楊」陷入了沉思,自己經(jīng)常在淘寶、jd 上買(mǎi)東西,也有淘寶花唄和京東白條,怎么會(huì)沒(méi)有征...

    Developer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<