知友:陳廷聿(1800+ 贊同)
利益相關(guān):Python辦公自動(dòng)化課程的講師
我想介紹一下我是如何從每天工作8小時(shí),進(jìn)化成每天工作10分鐘的。
不涉及太多的技術(shù)細(xì)節(jié),畢竟知乎是一個(gè)分(現(xiàn))享(編)知(故)識(shí)(事)的地方
0.先自我介紹一下:
我不是程序員,大學(xué)學(xué)的也不是IT專業(yè)。
我在一個(gè)主要業(yè)務(wù)是成品糧交易的企業(yè)工作,我的崗位的主要工作就是制作各類數(shù)據(jù)統(tǒng)計(jì)報(bào)表、臺(tái)賬、數(shù)據(jù)圖表等等,反正就是各類日?qǐng)?bào),每天都要做一遍,此外還有什么周報(bào)月報(bào)什么的……這個(gè)崗位之前的同事,每天至少要花3.5到4個(gè)小時(shí)去折騰Excel,使用數(shù)據(jù)透視圖、vlookup、其他各類函數(shù)去做出一份內(nèi)含3000多個(gè)數(shù)據(jù)的日?qǐng)?bào)。如果領(lǐng)導(dǎo)臨時(shí)安排什么工作的話,那就要加班從浩如煙海的數(shù)據(jù)里找領(lǐng)導(dǎo)要的東西了。
1.噩夢(mèng)開(kāi)始時(shí):
我剛接手工作時(shí),我們有一個(gè)巨大的,達(dá)70多M的Excel文件,每次公司配發(fā)的破電腦打開(kāi)就需要小二十分鐘,里面存著我們近十年的采購(gòu)的每一車的詳細(xì)信息……然后里面的數(shù)據(jù)格式還都是混亂的,
打個(gè)比方,比如我們有個(gè)供貨商全名叫:ABCD有限責(zé)任公司,
那么這個(gè)Excel中會(huì)存有
AB公司、
AB有限公司、
CD有限責(zé)任公司、
CD責(zé)任有限公司、
ACBD有限公司
ABD公司
等等等等名字
在我第一天看到這個(gè)Excel的時(shí)候
后來(lái)交接的同事告訴我,她用的Excel的 vlookup 函數(shù),當(dāng)匹配不上的時(shí)候,就手工搜索……
然后……我……
就這樣,經(jīng)歷了噩夢(mèng)般的幾個(gè)月……
等到了2017年年初,看到一個(gè)詞:
圖靈完備。
一個(gè)圖靈完備的語(yǔ)言理論上能解決任何算法。
|
|
V
顯然,Python是一種圖靈完備的語(yǔ)言。
|
|
V
那Python應(yīng)該在理論上能替我處理所有事情(生孩子應(yīng)該不行~~)
|
|
V
我為什么不試著用Python去替我完成工作呢?
2.走了一些彎路,但勝過(guò)原地踏步
我的第一步是從數(shù)據(jù)清洗開(kāi)始的。(當(dāng)然那時(shí)并不知道這個(gè)叫數(shù)據(jù)清洗)
先把剛才說(shuō)的那個(gè)70M的Excel導(dǎo)成csv,去掉了其中不必要的格式、樣式、對(duì)象等。
然后我想統(tǒng)一一下各個(gè)數(shù)據(jù)的標(biāo)準(zhǔn)名稱,剛才說(shuō)了,由于經(jīng)手的人太多,同一個(gè)數(shù)據(jù),怎么表述的都有,幾十萬(wàn)的數(shù)據(jù)量,人工交叉比對(duì)的話顯然是不現(xiàn)實(shí)的。(后來(lái)才知道了笛卡爾積這個(gè)詞)
我第一步先使用了Excel自身的去重功能,將所有的供貨商名稱進(jìn)行了一個(gè)去重,剩下了大概5000個(gè)左右的名稱。
然后,作為一個(gè)懶人,我肯定不會(huì)用人工去比對(duì)了。
Python有一個(gè)庫(kù),叫做fuzzywuzzy,用它來(lái)進(jìn)行模糊匹配。
會(huì)輸出一個(gè)0——100的數(shù)字,數(shù)字越大代表這兩個(gè)內(nèi)容越相似。
所以我就寫(xiě)了一個(gè)循環(huán),把這5000多個(gè)項(xiàng)目里面,匹配度超過(guò)70%以上的數(shù)據(jù)組都篩了出來(lái),再去Excel里面手工替換(沒(méi)辦法,那時(shí)候還不會(huì)操作Excel)
然后整理了一下各個(gè)行列的位置,這樣我就有了一個(gè)相對(duì)準(zhǔn)確的數(shù)據(jù)源。
后來(lái)思考了一下,把數(shù)據(jù)存在Excel里面不是個(gè)長(zhǎng)久之計(jì)啊,畢竟幾十萬(wàn)數(shù)據(jù)呢,就想把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)里。大學(xué)時(shí)候考過(guò)計(jì)算機(jī)二級(jí)的Access(當(dāng)然,雖然我考過(guò),但是沒(méi)考過(guò)……),就想導(dǎo)入Access,可是那個(gè)Python庫(kù)沒(méi)弄明白,硬是讀不出來(lái),就卡死了。
后來(lái)想到,之前自己從網(wǎng)上下載的某某私服的一鍵端里,有個(gè)MySQL數(shù)據(jù)庫(kù)的一鍵啟動(dòng)方式,試了試居然能用,就把那個(gè)MySQL程序整個(gè)拷出來(lái)、清干凈,作為了我的數(shù)據(jù)庫(kù)。(當(dāng)時(shí)想學(xué)怎么自己配置MySQL來(lái)著,沒(méi)研究明白……這個(gè)數(shù)據(jù)庫(kù)也就是我們現(xiàn)在提供的MySQL數(shù)據(jù)庫(kù)的前身,當(dāng)然了,我們現(xiàn)在提供的是重新制作的無(wú)毒的船新版本)
然后就是使用Navicat導(dǎo)入Excel,使用pymysql庫(kù)進(jìn)行讀取,這樣,咱也是趁數(shù)據(jù)庫(kù)的人了~
接下來(lái),就是要進(jìn)行數(shù)據(jù)分析了,由于當(dāng)時(shí)沒(méi)學(xué)會(huì)pandas,數(shù)據(jù)透視圖的效果死活做不出來(lái),不得已,只好新建N個(gè)列表,用一堆if...else... ,把同類數(shù)據(jù)存入同一個(gè)列表中,求和,求平均值之類的(笨辦法也是辦法,能抓住耗子就是好貓,先把程序跑起來(lái)能用就好)
分析出了結(jié)果,要寫(xiě)入excel了,但是由于沒(méi)有研究明白怎么進(jìn)行追加寫(xiě)入(xlutils庫(kù)各種限定太多了……),只好使用xlwt把數(shù)據(jù)寫(xiě)到一個(gè)空Excel中,然后手工把一整片復(fù)制粘貼過(guò)去……反正也是解決了……能用了……
因?yàn)槊刻斓膫}(cāng)庫(kù)返回的數(shù)據(jù)還要向數(shù)據(jù)庫(kù)里追加,就寫(xiě)了個(gè)錄入程序,先用xlrd讀取、然后fuzzywuzzy模糊匹配、最后pymysql寫(xiě)入。
這時(shí)候,我的工作已由每天七八個(gè)小時(shí),進(jìn)化到了每天4小時(shí)左右。
(這一部分代碼就不貼了,祖?zhèn)鞔a向來(lái)被稱為屎山,這些代碼也是簡(jiǎn)陋的過(guò)分的那種……)
3.走上雜務(wù)工作的快車道
羅伯特·清琦寫(xiě)的那本《富爸爸窮爸爸》提出過(guò)一個(gè)概念,當(dāng)你實(shí)現(xiàn)財(cái)務(wù)自由以后,你的財(cái)富積累就會(huì)走上良性循環(huán)的快車道,你的就會(huì)越來(lái)越容易提高被動(dòng)收入。
同理,當(dāng)你實(shí)現(xiàn)一部分的工作自動(dòng)化以后,你就會(huì)走上一個(gè)“工作自由”的快車道,因?yàn)槟阌懈嗟臅r(shí)間能用來(lái)研究如何去更高效的完成余下的那堆工作,然后,每天工作的時(shí)間就會(huì)越來(lái)越短。
為什么上文中我有那么多括號(hào)寫(xiě)的各種搞不定?因?yàn)闆](méi)時(shí)間啊!
現(xiàn)在好了,每天的工作時(shí)間已經(jīng)被我砍了一半了,那么我就可以思考,如何解決各類的技術(shù)問(wèn)題。
我學(xué)會(huì)了Excel的各種庫(kù),比如xlrd、xlwt、xlsxwriter、openpyxl、xlwings、win32com,能根據(jù)自己的需要選擇需要用的庫(kù);還學(xué)會(huì)了同屬Office系列的python-docx和python-pptx,開(kāi)始嘗試自動(dòng)制作Word和PPT;學(xué)會(huì)了自動(dòng)發(fā)郵件的stmp庫(kù)、zmail庫(kù);學(xué)會(huì)了能操作微信發(fā)消息的itchat;學(xué)了爬蟲(chóng)、學(xué)了解壓縮、學(xué)了調(diào)整圖片大小、學(xué)了Word轉(zhuǎn)pdf等等等等很多庫(kù)或者功能。
隨著學(xué)習(xí),每天的工作時(shí)間越來(lái)越短……
現(xiàn)在,我每天的工作,只需要十分鐘,最快記錄四分鐘,就能完成。
每天上班,第一件事,優(yōu)雅的運(yùn)行一個(gè)py文件,一堆import后面,只有
就完成了日常工作,然后就是需要打印,手簽,送各領(lǐng)導(dǎo)審閱的過(guò)程了。
一個(gè)保守的、傳統(tǒng)的、幾十年都不會(huì)起一絲波瀾的國(guó)有企業(yè),硬生生被我干出來(lái)了一個(gè)IT崗,升職加薪都已達(dá)成。
4、后續(xù)的思考
現(xiàn)在,我能極快的完成每天的工作,而后就是大片的學(xué)習(xí)思考的時(shí)間。
如今,
我已經(jīng),
我已經(jīng),
我已經(jīng),
把數(shù)據(jù)庫(kù)移到了一臺(tái)淘汰下來(lái)的辦公電腦上,又用另外一臺(tái)熱備,作為公共聯(lián)網(wǎng)數(shù)據(jù)庫(kù);
我已經(jīng),
用pyqt寫(xiě)了一個(gè)帶gui的數(shù)據(jù)輸出軟件,所有同事都可以自由輸出數(shù)據(jù)進(jìn)行分析了;
我已經(jīng),
用pandas、matplotlib寫(xiě)了一個(gè)自動(dòng)生成數(shù)據(jù)分析圖片的軟件,再做月報(bào)、周報(bào)什么的匯報(bào)材料,不用再通過(guò)Excel手工作圖了;
我已經(jīng),
用pandas、matplotlib配合pyqt寫(xiě)了一個(gè)入庫(kù)分析軟件,大家輸入時(shí)間段和限定條件后一鍵進(jìn)行數(shù)據(jù)分析了,不會(huì)有同事老找我要數(shù)據(jù)了;
我已經(jīng),
用xlrd、python-docx寫(xiě)了一個(gè)合同生成器,旺季采購(gòu)的同事不用焦頭爛額的改合同了;
我已經(jīng),
用numpy配合pyqt做了一個(gè)購(gòu)銷存平衡軟件,可以讓領(lǐng)導(dǎo)們?cè)跊Q策時(shí)通過(guò)拖動(dòng)滑塊就可以實(shí)時(shí)展現(xiàn)不同購(gòu)、銷情況下庫(kù)存情況了;
我已經(jīng),
用爬蟲(chóng)配合pymysql寫(xiě)了一個(gè)實(shí)時(shí)糧價(jià)獲取數(shù)據(jù)庫(kù),告別了瀏覽網(wǎng)頁(yè)逐行復(fù)制價(jià)格的方式;
未來(lái),
未來(lái),
未來(lái),
未來(lái),
我計(jì)劃做一個(gè)公司內(nèi)部網(wǎng)站,把之前的所有C/S架構(gòu)的軟件都改成B/S。
未來(lái),
我計(jì)劃做一個(gè)數(shù)據(jù)駕駛艙,供領(lǐng)導(dǎo)決策使用。
圖片來(lái)自網(wǎng)上,我就是想做成這樣子
未來(lái),
我計(jì)劃做一個(gè)訪客人臉識(shí)別,方便在重要客戶進(jìn)大門(mén)以后提醒領(lǐng)導(dǎo)到門(mén)口迎接。
未來(lái),
我計(jì)劃做一個(gè)更智能的爬蟲(chóng),能在網(wǎng)上自動(dòng)收集市場(chǎng)信息。
未來(lái),
我計(jì)劃做一個(gè)更智能的進(jìn)銷存平衡軟件,能使用最優(yōu)化進(jìn)行購(gòu)銷平衡計(jì)算。
未來(lái),
我計(jì)劃做一套發(fā)票管理系統(tǒng)給財(cái)務(wù)、一套物料管理系統(tǒng)給物資、一套工資系統(tǒng)給HR……