Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱
项目背景
作为数据分析师,我们需要经常制作统计分析图表。但是报表太多的时候往往需要花费我们大部分时间去制作报表。这耽误了我们利用大量的时间去进行数据分析。但是作为数据分析师我们应该尽可能去挖掘表格图表数据背后隐藏关联信息,而不是简单的统计表格制作图表再发送报表。既然报表的工作不可免除,那我们应该如何利用我们所学的技术去更好的处理工作呢?这就需要我们制作一个Python小程序让它自己去实现,这样我们就有更多的时间去做数据分析。我们把让程序自己运行的这个过程称为自动化。
一、报表自动化目的
1.节省时间,提高效率
自动化总是能够很好的节省时间,提高我们的工作效率。让我们的程序编程尽可能的降低每个功能实现代码的耦合性,更好的维护代码。这样我们会节省很多时间让我们有空去做更多有价值有意义的工作。
2.减少错误
编码实现效果正确无误的话是是可以一直沿用的,如果是人为来操作的话反而可能会犯一些错误。交给固定的程序来做更加让人放心,需求变更时仅修改部分代码即可解决问题。
二、报表自动化范围
首先我们需要根据业务需求来制定我们所需要的报表,并不是每个报表都需要进行自动化的,一些复杂二次开发的指标数据要实现自动化编程的比较复杂的,而且可能会隐藏着各种BUG。所以我们需要对我们工作所要用到的报表的特性进行归纳,以下是我们需要综合考虑的几个方面:
1.频率
对于一些业务上经常需要用到的表,这些表我们可能要纳入自动化程序的范围。例如客户信息清单、销售额流量报表、业务流失报表、环比同比报表等。
这些使用频率较高的报表,都很有必要进行自动化。对于那些偶尔需要使用的报表,或者是二次开发指标,需要复制统计的报表,这些报表就没必要实现自动化了。
2.开发时间
这就相当于成本和利率一样,若是有些报表自动化实现困难,还超过了我们普通统计分析所需要的时间,就没必要去实现自动化。所以开始自动化工作的时候要衡量一下开发脚本所耗费的时间和人工做表所耗费的时间哪个更短了。当然我会提供一套实现方案,但是仅对一些常用简单的报表。
3.流程
对于我们报表每个过程和步骤,每个公司都有所不同,我们需要根据业务场景去编码实现各个步骤功能。所以我们制作的流程应该是符合业务逻辑的,制作的程序也应该是符合逻辑的。
三、实现步骤
首先我们需要知道我们需要什么指标;在上期数据分析基础文章一文速览-数据分析基础以及常规流程有解释,这里再列出来:
- 指标
- 总体概览指标
反映某一数据指标的整体大小
- 对比性指标
- 同比
相邻时间段内某一共同时间点上指标的对比
- 环比
相邻时间段内的指标直接作差
- 同比
- 集中趋势指标
- 平均数/加权平均数
- 众数
- 中位数
- 离散程度指标
- 全距(极差)
最大界减最小界
- 四分位数
- 方差
- 标准差
- 全距(极差)
- 相关性指标
- r
- 总体概览指标
我们拿一个简单的报表来进行模拟实现:
第一步:读取数据源文件
首先我们要了解我们的数据是从哪里来的,也就是数据源。我们最终的数据处理都是转化为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'%tabledf_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函数的文章:
Pandas中read_excel函数参数使用详解+实例代码
Pandas处理JSON文件read_json()一文详解+代码展示
其他read函数将会在文章写完之后后续补上,除了read_sql需要连接数据库之外,其他的都是比较简单的。
第二步:DataFrame计算
我们以用户信息为例:
我们需要统计的指标为:
#指标说明
单表图:
前十个产品受众最多的地区
产品的受众地区:
#将城市空值的一行删除df=df[df['city_num'].notna()]#删除errordf=df.drop(df[df['city_num']=='error'].index)#统计df = df.city_num.value_counts()
我们仅获取前10名的城市就好了,封装为饼图:
def pie_chart(df):#将城市空值的一行删除df=df[df['city_num'].notna()]#删除errordf=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'))
将图表保存起来:
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()
封装后就可以直接使用了:
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发送邮件主要借助到smtplib和email这个两个模块。
smtplib:主要用来建立和断开与服务器连接的工作。
email:主要用来设置一些些与邮件本身相关的内容。
不同种类的邮箱服务器连接地址不一样,大家根据自己平常使用的邮箱设置相应的服务器进行连接。这里博主用网易邮箱展示:
首先需要开启POP3/SMTP/IMAP服务:
之后便可以根据授权码使用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()
运行测试:
下载文件:
完全没问题
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见
参阅:
浅谈几种常用的报表
Python数据分析
Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱相关推荐
- python实现微信小程序的接口自动化_appium+python自动化56-微信小程序自动化(摩拜为例)...
前言 最近微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 本篇以摩拜小程序为例,介绍如何定位小程序里面的元素 运行环境: android 7.0 appium v1.7.1 web ...
- 微信上python小课 骗局_聊聊 Python 做微信小程序自动化,那些踩过的坑?
1. 场景 之前写过 微信小程序的几种方式,对于有源码的小程序推荐使用微信开放的 SDK 来做自动化,否则只能使用原生或 WebView 的方式. 最近在用 Python + Appium 在微信小程 ...
- 小程序全时全域自动化箱况检测+信息识别,中集飞瞳全球领先集装箱管理方案,AI自动化箱信息识别+箱况检测+地点报备,智慧港航智能化
小程序全时全域自动化箱况检测+信息识别,中集飞瞳全球领先新一代集装箱管理方案,人工智能AI自动化箱信息识别+箱况检测+地点报备,智慧港航智能化.CIMCAI中集飞瞳是全球应用落地最广,规模最大,最先进 ...
- 如何制作python检查小软件_如何用Python制作整蛊小程序
原标题:如何用Python制作整蛊小程序 下面的整蛊程序,千万不要发代码,否则就实现不了你整蛊的目的了.完成后一定要打包成一个exe程序,再发给朋友使用 . 1. 使用 pip install pyi ...
- 自动化办公:1、文件自动化处理邮件批量处理
1 文件自动化处理 1.1 读写文件 如何使用python在硬盘上创建.读取和保存文件. 1.1.1 文件与文件路径 文件的两个属性:"路径"和"文件名". 路 ...
- 用python 玩微信小程序“跳一跳”
12月28日,微信上线了小游戏「跳一跳」,瞬间成了全民游戏,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能. 作为技术出身的我们,是不是想用技术改变排名呢? 注意:本文适 ...
- python小程序源代码-整理了适合新手的20个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...
- python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...
- python开发微信小程序-Python 开发者的微信小程序开发实践
导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...
最新文章
- 使用hql动态创建对象问题
- linux 账户安全,在Linux上踢除某个用户和账户安全
- 【NLP-ChatBot】能干活的聊天机器人-对话系统概述
- Python中类型最佳判断方法
- Linux定时运行程序脚本
- 【javascript高级教程】JavaScript Number 对象
- session丢失php,PHP Session丢失无效问题总结
- Qt图形界面编程入门(2)
- 【安全】Kerberos协议介绍
- Cheat Engine(CE)教程
- Qt 之 QToolBox
- win32反汇编初步探索及Onllydbg的使用
- php 获取当前域名大胡子,养黄金大胡子的小经验
- 敏捷迭代是什么意思_我认为“敏捷”的方向是第4部分:“敏捷”是什么意思?...
- 彻底搞懂python函数2
- 如何保障云上数据安全?一文详解云原生全链路加密
- excel设置行高_手把手教你用wps表格excel制作田字格书法练习字帖
- 捕鱼来了2017系列游戏
- 教育部计算机英语怎么说,教育部课题、国家社科基金、国家自然基金的英文翻译???...
- 2019 年值得学习的顶级 JavaScript 框架与主题
热门文章
- 新一年级家长快查收,小学入学必备物品超强清单!
- 关于微信防撤回(文本、图片、语音、视频、名片等...)的Python学习教程
- 逍遥游 一致性和哥德尔两大定理—— 读哥德尔之八
- 公共厕所女性如厕难,厕所革命刻不容缓
- HTML 基础教程:HTML 编辑器
- A Game of Thrones(46)
- 【OpenCV】OCR文档识别
- 消息传递,生产者消费者
- 公众号如何获得关注粉丝openid?
- 锁屏界面某些设置已由组织隐藏或管理_路由器:安装,设置,更改密码,桥接全攻略...