91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現報表自動化和自動發送到目的郵箱

發布時間:2023-04-13 11:44:50 來源:億速云 閱讀:120 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“Python如何實現報表自動化和自動發送到目的郵箱”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python如何實現報表自動化和自動發送到目的郵箱”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、報表自動化目的

1.節省時間,提高效率

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

2.減少錯誤

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

二、報表自動化范圍

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

1.頻率

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

Python如何實現報表自動化和自動發送到目的郵箱

Python如何實現報表自動化和自動發送到目的郵箱

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

2.開發時間

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

3.流程

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

Python如何實現報表自動化和自動發送到目的郵箱

三、實現步驟

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

指標

  • 總體概覽指標

反映某一數據指標的整體大小

  • 對比性指標

  • 環比

相鄰時間段內的指標直接作差

  • 同比

相鄰時間段內某一共同時間點上指標的對比

  • 集中趨勢指標

  • 中位數

  • 眾數

  • 平均數/加權平均數

  • 離散程度指標

  • 標準差

  • 方差

  • 四分位數

  • 全距(極差)

  • 最大界減最小界

  • 相關性指標

  • r

Python如何實現報表自動化和自動發送到目的郵箱

我們拿一個簡單的報表來進行模擬實現:

第一步:讀取數據源文件

首先我們要了解我們的數據是從哪里來的,也就是數據源。我們最終的數據處理都是轉化為DataFrame來進行分析的,所以需要對數據源進行轉化為DataFrame形式:

import pandas as pd
import json
import pymysql
from sqlalchemy import create_engine
# 打開數據庫連接
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函數針對不同的形式的文件讀取,其read函數參數也有不同的含義,需要直接根據表格的形式來調整。

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

第二步:DataFrame計算

我們以用戶信息為例:

Python如何實現報表自動化和自動發送到目的郵箱

我們需要統計的指標為:

  • #指標說明

  • 單表圖:

  • 前十個產品受眾最多的地區

#將城市空值的一行刪除
df=df[df['city_num'].notna()]
#刪除error
df=df.drop(df[df['city_num']=='error'].index)
#統計df = df.city_num.value_counts()

Python如何實現報表自動化和自動發送到目的郵箱

我們僅獲取前10名的城市就好了,封裝為餅圖:

def pie_chart(df):
 #將城市空值的一行刪除
 df=df[df['city_num'].notna()]
 #刪除error
 df=df.drop(df[df['city_num']=='error'].index)
 #統計
 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'))

Python如何實現報表自動化和自動發送到目的郵箱

將圖表保存起來:

plt.savefig('fig_cat.png')

要是你覺得matplotlib的圖片不太美觀的話,你也可以換成echarts的圖片,會更加好看一些:

pie = Pie()
pie.add("",words)
pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地區"))
#pie.set_series_opts(label_opts=opts.LabelOpts(user_df))
pie.render_notebook()

Python如何實現報表自動化和自動發送到目的郵箱

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

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="前十地區"))
 #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")

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

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

Python如何實現報表自動化和自動發送到目的郵箱

第三步:自動發送郵件

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

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

  • smtplib:主要用來建立和斷開與服務器連接的工作。

  • email:主要用來設置一些些與郵件本身相關的內容。

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

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

Python如何實現報表自動化和自動發送到目的郵箱

之后便可以根據授權碼使用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
#發件人郵箱
asender="fanstuck@163.com"
#收件人郵箱
areceiver="1079944650@qq.com"
#抄送人郵箱
acc="fanstuck@163.com"
#郵箱主題
asubject="謝謝關注"
#發件人地址
from_addr="fanstuck@163.com"
#郵箱授權碼
password="####"
#郵件設置
msg=MIMEMultipart()
msg['Subject']=asubject
msg['to']=areceiver
msg['Cc']=acc
msg['from']="fanstuck"
#郵件正文
body="你好,歡迎關注fanstuck,您的關注就是我繼續創作的動力!"
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)
#發生郵箱
server.sendmail(from_addr,areceiver.split(',')+acc.split(','),msg.as_string())
#斷開服務器連接
server.quit()

運行測試:

Python如何實現報表自動化和自動發送到目的郵箱

下載文件:

Python如何實現報表自動化和自動發送到目的郵箱

讀到這里,這篇“Python如何實現報表自動化和自動發送到目的郵箱”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凌云县| 西充县| 鸡西市| 陕西省| 洛扎县| 安陆市| 信阳市| 江西省| 蓬安县| 增城市| 乾安县| 搜索| 松潘县| 东明县| 道真| 无棣县| 遵义市| 丹阳市| 长沙县| 潞城市| 崇明县| 大邑县| 兴义市| 堆龙德庆县| 家居| 历史| 石家庄市| 双桥区| 离岛区| 宁海县| 宁德市| 邹城市| 德江县| 德安县| 垣曲县| 镇巴县| 桑日县| 漳浦县| 抚顺市| 弥渡县| 成安县|