Project 2: Automated Data Processing 自动化数据处理
引言
当今社会,大部分的工作是通过电脑完成的。
电脑可以很高效地帮助我们完成一些任务,尤其是有规律可循的、需要大量重复操作的劳动。
这个项目,我们以表格数据处理和自动上报为例,让各位接触操作流程自动化的基本思维。
注意:对于表格处理,使用 Pandas
库会相当方便。但是,我们希望让大家更多地练习和巩固 Python
的基础语法,所以请尽量先用基础的 Python
实现。完成项目后,如果有余力,可以再去尝试使用 Pandas
实现。
场景介绍
小明是零下五度市场部门的人员,主要负责售后,包括销售数据数据汇总和客户维系。由于销售量大且市场情况瞬息万变,他需要时刻紧盯微店后台的销售数据。
除了与用户进行访谈、根据销售数据撰写汇报等工作外,他还有一个任务:在工作时间,每隔两个小时(整点),需要从微店后台下载一份最新的销售数据表格,经过分析后,向他的上级和库存管理员发送邮件,并向指定用户发送回访问卷。
为此,小明制作了一份 Excel
表格,通过函数和公式把符合要求的用户过滤出来,然后打开特定网页,将手机号以及邮箱粘贴到制定地方,然后提交。虽然比起手动操作已经快了不少,但是仍然有很多问题:
- 他每天花费的时间仍然不少;
- 这个工作总是打断他的思路;
- 他经常忘记做这件事;
- 他极有可能误操作,比如下载错文件,少复制了一行等。
小明向上级反馈了他的困难。市场部门主管听闻后,找到了你。他之前听说你会 Python
,觉得你一定可以帮他解决问题。现在正是你大显身手的时候。
准备工作
请先下载初始代码。
下载链接
这份代码里有一份名为 sales.csv
的表格。这是根据零下五度去年微店销售数据制作出来的一份表单(为了保护真实买家的隐私,我们使用了模拟的数据)。
你可以先从处理这份文件开始。在最后,你需要用 Python
自动定时下载最新数据(都和这份表格差不多),并且自动完成所有的分析和反馈。
完成这个项目后,小明每天就只需要运行一下程序,然后双手离开键盘,让电脑做所有剩下的工作了。
那我们现在就开始!
Section 1:数据的读取
这个部分不需要手写。我们需要大家阅读并理解 Section 1
的所有代码,然后尝试运行。如果无法运行,请寻求帮助。
另外,请浏览一下表头,大致理解一下数据的每一列大概的意思。
Section 2:数据统计
这个部分,我们会对表中的数据进行一些简单的统计。
首先,我们要实现 calculateRevenue
这个函数。
我们需要分别计算各个单品的销售额。它需要返回一个字典(Dictionary)
,索引(key)
是 商品编码
,内容(value)
是总销售额
。用我们初始代码提供的(不是自动下载的) sales.csv
文件,运行结果如下。
{'2110': 886574, '2102': 693680, '2101': 383145}
然后,我们要实现 calculateStockReduction
这个函数。
我们售卖的是礼包,每种礼包对应指定品种和数量的海鲜,我们需要计算每种海鲜的消耗量,这样库存管理人员可以有所准备。
每种礼包对应的鱼和数量已经在函数中定义好(giftContent
变量)。你需要返回一个 {品种: 数量}
组成的字典
,结果应该是:
{'舟山带鱼': 600, '野生小黄鱼': 194, '野生竹节虾': 600, '舟山米鱼': 392, '红果鲤': 196, '舟山乌贼': 392, '舟山黄鱼': 406}
Section 3:数据提取
这个部分中,我们需要把处在江浙沪地区,而且下单时间与收货时间差别在 3 天以上的用户提取出来。这些用户可能等待了比较长的时间,我们可能需要额外关注,以免造成客户流失。
我们需要实现 getSlowedDelivery
函数,需要返回一个字典
,包含所有的订单编号,以及对应的用户姓名+空格+手机
(注意,都是字符串),结果应该是:
{'81417556230447': '周桂芝 15708740139', '81417556230776': '彭磊 13944167948', '81417556231556': '陈林 15108016839', '81417556230909': '李杰 13777697578', '81417556232786': '赵浩 15627748610', '81417556231346': '胡华 15333751374', '81417556232766': '陈坤 13364097050', '81417556231432': '汤建平 13270650569', '81417556230174': '向梅 15108373401', '81417556232685': '田瑞 15936746224'}
Section 4:发送电子邮件
我们需要把前三个 section
的输出美化一下(组成一个字符串),通过邮件发送给小明的上级。
我们会使用 Python
的 MIMEText
库来处理邮件,用 smtplib
库来发送邮件。
作为例子,我们需要各位使用自己的 QQ
邮箱,发送邮件到自己的学校邮箱。
由于我们在使用 QQ
邮箱的邮件服务器,我们需要拿到 QQ
邮箱的授权码。具体操作如下:
1. 登录网页版 QQ
邮箱
2. 点击最上方的 设置
3. 点击邮箱设置下的 账户
标签
4. 下拉到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
标签
5. 点击 POP3/SMTP服务
后面的 开启
6. 把出现的授权码复制给代码中的 code
变量。
完成这个 Section
之后,记得把 main
函数里的 sendEmails()
函数调用这一行从注释里拿出来,并且确认自己确实收到了邮件。
Section 5: 定时自动下载和处理
现在,每次运行程序,Python
都会自动帮我们处理文件并且发送邮件了。
但是,我们仍然需要定时手动去后台下载对应文件,这很麻烦。要真正做到双手离开键盘,我们还差最后一步。
我们会使用 sleep
函数,让程序在后台休眠指定时间,配合一个 while True
循环,我们就可以达到定时执行的效果。
为了测试,请把 sleep
的时间设置成 30
(秒)。
我们还要使用 Python
的第三方 requests
库,来从指定网址下载文件到本地。
你需要在命令行输入 pip install requests
,然后等待它安装完成。
对于安装第三方库的详细解释,我们之后会讲到。
下载文件的后台地址是 https://icewould.com/m5-101/sales-data
。