作者:liu-zebing_284 | 来源:互联网 | 2023-07-27 14:26
我想介绍一下我是如何从每天工作8小时,进化成每天工作10分钟的,以下不涉及太多的技术细节。
0.先自我介绍一下:
我不是程序员,大学学的也不是IT专业。
我在一个主要业务是成品粮交易的企业工作,我的岗位的主要工作就是制作各类数据统计报表、台账、数据图表等等,反正就是各类日报,每天都要做一遍,此外还有什么周报月报什么的……这个岗位之前的同事,每天至少要花3.5到4个小时去折腾Excel,使用数据透视图、vlookup、其他各类函数去做出一份内含3000多个数据的日报。如果领导临时安排什么工作的话,那就要加班从浩如烟海的数据里找领导要的东西了。
1.噩梦开始时:
我刚接手工作时,我们有一个巨大的,达70多M的Excel文件,每次公司配发的破电脑打开就需要小二十分钟,里面存着我们近十年的采购的每一车的详细信息……然后里面的数据格式还都是混乱的,
打个比方,比如我们有个供货商全名叫:ABCD有限责任公司,
那么这个Excel中会存有
AB公司、
AB有限公司、
CD有限责任公司、
CD责任有限公司、
ACBD有限公司
ABD公司
等等等等名字
在我第一天看到这个Excel的时候
后来交接的同事告诉我,她用的Excel的 vlookup 函数,当匹配不上的时候,就手工搜索……
然后……我……
就这样,经历了噩梦般的几个月……
等到了2017年年初,看到一个词:
图灵完备。
一个图灵完备的语言理论上能解决任何算法。
|
|
V
显然,Python是一种图灵完备的语言。
|
|
V
那Python应该在理论上能替我处理所有事情(生孩子应该不行~~)
|
|
V
我为什么不试着用Python去替我完成工作呢?
2.走了一些弯路,但胜过原地踏步
我的第一步是从数据清洗开始的。(当然那时并不知道这个叫数据清洗)
先把刚才说的那个70M的Excel导成csv,去掉了其中不必要的格式、样式、对象等。
然后我想统一一下各个数据的标准名称,刚才说了,由于经手的人太多,同一个数据,怎么表述的都有,几十万的数据量,人工交叉比对的话显然是不现实的。(后来才知道了笛卡尔积这个词)
我第一步先使用了Excel自身的去重功能,将所有的供货商名称进行了一个去重,剩下了大概5000个左右的名称。
然后,作为一个懒人,我肯定不会用人工去比对了。
Python有一个库,叫做fuzzywuzzy,用它来进行模糊匹配。
from fuzzywuzzy import fuzz
print( fuzz.ratio("内容1", "内容2"))
会输出一个0——100的数字,数字越大代表这两个内容越相似。
所以我就写了一个循环,把这5000多个项目里面,匹配度超过70%以上的数据组都筛了出来,再去Excel里面手工替换(没办法,那时候还不会操作Excel)
然后整理了一下各个行列的位置,这样我就有了一个相对准确的数据源。
后来思考了一下,把数据存在Excel里面不是个长久之计啊,毕竟几十万数据呢,就想把数据导入到数据库里。大学时候考过计算机二级的Access(当然,虽然我考过,但是没考过……),就想导入Access,可是那个Python库没弄明白,硬是读不出来,就卡死了。
后来想到,之前自己从网上下载的某某私服的一键端里,有个MySQL数据库的一键启动方式,试了试居然能用,就把那个MySQL程序整个拷出来、清干净,作为了我的数据库。(当时想学怎么自己配置MySQL来着,没研究明白……这个数据库也就是我们现在提供的MySQL数据库的前身,当然了,我们现在提供的是重新制作的无毒的船新版本)
然后就是使用Navicat导入Excel,使用pymysql库进行读取,这样,咱也是趁数据库的人了~
接下来,就是要进行数据分析了,由于当时没学会pandas,数据透视图的效果死活做不出来,不得已,只好新建N个列表,用一堆if...else... ,把同类数据存入同一个列表中,求和,求平均值之类的(笨办法也是办法,能抓住耗子就是好猫,先把程序跑起来能用就好)