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