最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)報表自動化并發(fā)送到郵箱

 更新時間:2022年07月06日 09:48:07   作者:Python編程學習圈  
作為數(shù)據(jù)分析師,我們需要經(jīng)常制作統(tǒng)計分析圖表。但是報表太多的時候往往需要花費我們大部分時間去制作報表。本文將利用Python實現(xiàn)報表自動化并發(fā)送到郵箱,需要的可以參考一下

項目背景

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

一、報表自動化目的

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

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

2.減少錯誤

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

二、報表自動化范圍

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

1.頻率

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

這些使用頻率較高的報表,都很有必要進行自動化。對于那些偶爾需要使用的報表,或者是二次開發(fā)指標,需要復制統(tǒng)計的報表,這些報表就沒必要實現(xiàn)自動化了。

2.開發(fā)時間

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

3.流程

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

三、實現(xiàn)步驟

首先我們需要知道我們需要什么指標:

指標

  • 總體概覽指標

反映某一數(shù)據(jù)指標的整體大小

  • 對比性指標
  • 環(huán)比

相鄰時間段內(nèi)的指標直接作差

  • 同比

相鄰時間段內(nèi)某一共同時間點上指標的對比

  • 集中趨勢指標
  • 中位數(shù)
  • 眾數(shù)
  • 平均數(shù)/加權平均數(shù)
  • 離散程度指標
  • 標準差
  • 方差
  • 四分位數(shù)
  • 全距(極差)
  • 最大界減最小界
  • 相關性指標
  • r

我們拿一個簡單的報表來進行模擬實現(xiàn):

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

首先我們要了解我們的數(shù)據(jù)是從哪里來的,也就是數(shù)據(jù)源。我們最終的數(shù)據(jù)處理都是轉(zhuǎn)化為DataFrame來進行分析的,所以需要對數(shù)據(jù)源進行轉(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ù)針對不同的形式的文件讀取,其read函數(shù)參數(shù)也有不同的含義,需要直接根據(jù)表格的形式來調(diào)整。

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

第二步:DataFrame計算

我們以用戶信息為例:

我們需要統(tǒng)計的指標為:

#指標說明

單表圖:

前十個產(chǎn)品受眾最多的地區(qū) 

#將城市空值的一行刪除
df=df[df['city_num'].notna()]
#刪除error
df=df.drop(df[df['city_num']=='error'].index)
#統(tǒng)計    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)計
    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的圖片,會更加好看一些:

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)

可以進行保存,可惜不是動圖:

from snapshot_selenium import snapshot
make_snapshot(snapshot,echart_pie(user_df).render(),"test.png")

保存為網(wǎng)頁的形式就可以自動加載JS進行渲染了:

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

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

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

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

  • smtplib:主要用來建立和斷開與服務器連接的工作。
  • email:主要用來設置一些些與郵件本身相關的內(nèi)容。

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

首先需要開啟POP3/SMTP/IMAP服務:

之后便可以根據(jù)授權碼使用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="謝謝關注"
#發(fā)件人地址
from_addr="fanstuck@163.com"
#郵箱授權碼
password="####"
#郵件設置
msg=MIMEMultipart()
msg['Subject']=asubject
msg['to']=areceiver
msg['Cc']=acc
msg['from']="fanstuck"
#郵件正文
body="你好,歡迎關注fanstuck,您的關注就是我繼續(xù)創(chuà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)
#設置郵箱服務器地址和接口
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())
#斷開服務器連接
server.quit()

運行測試: 

下載文件:

完全沒問題?。?!

以上就是基于Python實現(xiàn)報表自動化并發(fā)送到郵箱的詳細內(nèi)容,更多關于Python報表自動化的資料請關注腳本之家其它相關文章!

相關文章

  • Python multiprocess pool模塊報錯pickling error問題解決方法分析

    Python multiprocess pool模塊報錯pickling error問題解決方法分析

    這篇文章主要介紹了Python multiprocess pool模塊報錯pickling error問題解決方法,結合實例形式分析了multiprocess pool模塊報錯pickling error的原因與解決方法,需要的朋友可以參考下
    2019-03-03
  • 使用wxPython和ECharts實現(xiàn)生成和保存HTML圖表

    使用wxPython和ECharts實現(xiàn)生成和保存HTML圖表

    wxPython是一個基于wxWidgets的Python?GUI庫,ECharts是一個用于數(shù)據(jù)可視化的JavaScript庫,本文主要為大家介紹了如何使用wxPython和ECharts庫來生成和保存HTML圖表,感興趣的可以學習一下
    2023-08-08
  • python深copy和淺copy區(qū)別對比解析

    python深copy和淺copy區(qū)別對比解析

    這篇文章主要介紹了python深copy和淺copy區(qū)別對比解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Python使用Chrome插件實現(xiàn)爬蟲過程圖解

    Python使用Chrome插件實現(xiàn)爬蟲過程圖解

    這篇文章主要介紹了Python使用Chrome插件實現(xiàn)爬蟲,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • python找出一個列表中相同元素的多個索引實例

    python找出一個列表中相同元素的多個索引實例

    今天小編就為大家分享一篇python找出一個列表中相同元素的多個索引實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Opencv識別圖片顏色并繪制輪廓實現(xiàn)代碼示例

    Opencv識別圖片顏色并繪制輪廓實現(xiàn)代碼示例

    這篇文章主要給大家介紹了關于Opencv識別圖片顏色并繪制輪廓實現(xiàn)的相關資料,實驗代碼和現(xiàn)象展示了如何從原始圖像中識別和突出顯示特定顏色區(qū)域,并通過圖像處理技術增強識別效果,需要的朋友可以參考下
    2024-12-12
  • 關于networkx返回圖的鄰接矩陣問題

    關于networkx返回圖的鄰接矩陣問題

    這篇文章主要介紹了關于networkx返回圖的鄰接矩陣問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python?Tkinter美化彈窗的示例詳解

    Python?Tkinter美化彈窗的示例詳解

    在Python編程中,Tkinter是標準GUI(圖形用戶界面)庫,它允許開發(fā)者創(chuàng)建桌面應用程序,本文將詳細介紹如何使用Tkinter創(chuàng)建并美化彈窗,需要的可以參考下
    2024-12-12
  • Tensorflow中的placeholder和feed_dict的使用

    Tensorflow中的placeholder和feed_dict的使用

    這篇文章主要介紹了Tensorflow中的placeholder和feed_dict的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 跟老齊學Python之總結參數(shù)的傳遞

    跟老齊學Python之總結參數(shù)的傳遞

    這篇文章主要介紹了Python參數(shù)的傳遞的總結,非常的實用,有需要的朋友可以參考下
    2014-10-10

最新評論

通化市| 东乌珠穆沁旗| 梅河口市| 双鸭山市| 格尔木市| 甘肃省| 宁都县| 保康县| 馆陶县| 阳西县| 无锡市| 吴桥县| 德州市| 新泰市| 城步| 仁怀市| 无为县| 沽源县| 上林县| 隆尧县| 明溪县| 永寿县| 金寨县| 天门市| 西乌| 浙江省| 泰州市| 如皋市| 阜阳市| 沁水县| 海宁市| 甘南县| 鄂州市| 泰兴市| 舟曲县| 和静县| 新化县| 北碚区| 莱州市| 东乡| 贵州省|