久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python自動化辦公小程序:實(shí)現(xiàn)報(bào)表自動化和自動發(fā)送到目的郵箱

 awoziji 2022-07-20 發(fā)布于廣東

項(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)信息,,而不是簡單的統(tǒng)計(jì)表格制作圖表再發(fā)送報(bào)表,。既然報(bào)表的工作不可免除,那我們應(yīng)該如何利用我們所學(xué)的技術(shù)去更好的處理工作呢,?這就需要我們制作一個(gè)Python小程序讓它自己去實(shí)現(xiàn),這樣我們就有更多的時(shí)間去做數(shù)據(jù)分析,。我們把讓程序自己運(yùn)行的這個(gè)過程稱為自動化,。

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

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

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

2.減少錯誤

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

二,、報(bào)表自動化范圍

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

1.頻率

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

圖片

圖片

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

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

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

3.流程

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

圖片


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

首先我們需要知道我們需要什么指標(biāo):

指標(biāo)

  • 總體概覽指標(biāo)
    反映某一數(shù)據(jù)指標(biāo)的整體大小

  • 對比性指標(biāo)

    • 環(huán)比
      相鄰時(shí)間段內(nèi)的指標(biāo)直接作差

    • 同比
      相鄰時(shí)間段內(nèi)某一共同時(shí)間點(diǎn)上指標(biāo)的對比

  • 集中趨勢指標(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ù)源,。我們最終的數(shù)據(jù)處理都是轉(zhuǎn)化為DataFrame來進(jìn)行分析的,,所以需要對數(shù)據(jù)源進(jìn)行轉(zhuǎn)化為DataFrame形式:

import pandas as pdimport jsonimport pymysqlfrom 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_exceldef read_json(file): with open(file,'r')as json_f: df_json=pd.read_json(json_f) return df_jsondef read_sql(table): sql_cmd ='SELECT * FROM %s'%table df_sql=pd.read_sql(sql_cmd,engine) return df_sqldef read_csv(file): df_csv=pd.read_csv(file) return df_csv

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

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

第二步:DataFrame計(jì)算

我們以用戶信息為例:

圖片

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

#指標(biāo)說明

單表圖:

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

 產(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的圖片,,會更加好看一些:

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)行保存,,可惜不是動圖:

from snapshot_selenium import snapshotmake_snapshot(snapshot,echart_pie(user_df).render(),'test.png')

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

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

圖片 

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

做出來的一系列報(bào)表一般都要發(fā)給別人看的,對于一些每天需要發(fā)送到指定郵箱或者需要發(fā)送多封報(bào)表的可以使用Python來自動發(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登入了。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多