學(xué)習(xí)數(shù)據(jù)分析的“里程碑”是什么?
數(shù)據(jù)分析是一項綜合技術(shù)。它既包含hardcore的編程技術(shù),也包含諸多分析邏輯的軟知識。
對于數(shù)據(jù)科學(xué)家而言,Excel只是自己技能圖表里很小的一部分。雖然數(shù)據(jù)科學(xué)家流派眾多,成長路徑也各異,很難用短短一篇文章概括成長過程中碰到的所有“里程碑”。但是,依舊有一些東西是共通的。這篇文章就嘗試歸納一些我心目中的數(shù)據(jù)科學(xué)“里程碑”。
什么是里程碑?
①“里程碑”是一套知識體系中的重要環(huán)節(jié),無論用哪個教程、如何展開學(xué)習(xí),它總會是你必須面對的一關(guān)。有可能它并不難,但是如果想要在能力上更進一步,這個里程碑是繞不開的。
②跨越“里程碑”,技術(shù)就能獲得質(zhì)的飛躍,比如學(xué)會vlookup這項不算太難的技能,Excel工作效率就能大幅提升。而如果掌握VBA,就能用Excel做很多原先不可能的事情。
里程碑1:理解是什么造就了大數(shù)據(jù)時代
想必每一位系統(tǒng)學(xué)習(xí)過數(shù)據(jù)科學(xué)的同學(xué),都會對“大數(shù)據(jù)”這個詞嗤之以鼻。
不只是因為這個詞被用濫了,更是因為它言之無物。大數(shù)據(jù)究竟是什么?至今仍然沒有一個明確的定義。
但是,大數(shù)據(jù)時代卻是真實存在的。與數(shù)據(jù)相關(guān)的科技創(chuàng)新和產(chǎn)業(yè)如今已經(jīng)開展的如火如荼,雖然它們形式各不相同,但放在“大數(shù)據(jù)時代”的框架下,并沒有什么毛病。
這就牽扯到一個很宏觀的問題——大數(shù)據(jù)時代的核心是什么?為什么數(shù)據(jù)相關(guān)的產(chǎn)業(yè)能夠突然爆發(fā),蓬勃發(fā)展?對于這個問題的回答可能會直接影響到數(shù)據(jù)科學(xué)家的職業(yè)規(guī)劃和世界觀。
我個人的理解是:大數(shù)據(jù)時代,是海量數(shù)據(jù)+算法+運算能力的共同爆發(fā)。
海量數(shù)據(jù)——如今信息技術(shù)的發(fā)展,讓原始數(shù)據(jù)的記錄能力大幅提升。從宏觀的經(jīng)濟金融數(shù)據(jù),到微觀的產(chǎn)業(yè)內(nèi)部數(shù)據(jù);從傳統(tǒng)的結(jié)構(gòu)化數(shù)據(jù),到圖像、聲音和文本數(shù)據(jù)。原始數(shù)據(jù)的大幅增長,為人們理解世界、探索世界打開了更大的窗口。
算法——每一個數(shù)據(jù)分析用到的算法,都可以說是人類智慧的結(jié)晶。他們大多歷史悠久,譬如當(dāng)下最熱的深度學(xué)習(xí),DNN的算法最早可以追溯到1956年羅森布拉特發(fā)明的感知機,而DNN中最核心的BP算法在1975年也已經(jīng)予以發(fā)表。在合適的算法產(chǎn)生之前,計算機的優(yōu)良運算性能并不能用于解決特定的數(shù)據(jù)分析問題。但到了現(xiàn)在,為特定業(yè)務(wù)需求而設(shè)計的不同算法已經(jīng)極為豐富,在性能和效果上都有了極大的提升。
運算能力——運算能力是大數(shù)據(jù)時代爆發(fā)的***一環(huán),可以說是壓死駱駝的***一根稻草。硬件方面,超級計算機、CPU與GPU的發(fā)展、存儲與數(shù)據(jù)性能的提升貢獻良多;軟件方面,分布式運算的部署思路、mapreduce的計算框架將速度進一步提升,從R到Python再到Golang等等高級語言的誕生,以及層出不窮的軟件包,把數(shù)據(jù)分析的“控制臺”做的越來越人性化。
三者缺一不可,但運算能力無疑是最前沿的開拓者。世界上先有少量數(shù)據(jù)和算法,于是我們可以進行初步的統(tǒng)計分析,但還遠遠沒有達到創(chuàng)造新時代的程度。唯有數(shù)據(jù)量大幅爆發(fā),加上運算能力突破瓶頸,才能讓整個產(chǎn)業(yè)的規(guī)模開始指數(shù)增長。
私以為,只有理解了大數(shù)據(jù)時代的起源,才能擺明自己在時代浪潮中的位置。
里程碑2:R/Python
兩年前,大家在討論“應(yīng)該用什么軟件來做統(tǒng)計分析”。當(dāng)時的選項有很多,SPSS,SAS,R,Python,Excel,Eviews,Stata,C++,Java……數(shù)都數(shù)不過來。
一年前,大家在討論“究竟應(yīng)該學(xué)R還是Python”。那時候已經(jīng)是兩者二分天下的時代,上面列出來的軟件也偶有聲援者,但是已經(jīng)翻不起太大的浪花了。
現(xiàn)在,大家討論的只剩下“該怎么入門Python”。
兩年過去,大量的老牌軟件逐漸淡出數(shù)據(jù)科學(xué)家的視野。這些工具軟件的死亡姿勢,我可以簡單概括為下面幾種。
1. 軟件的功能天花板太低。典型代表是Eviews、SPSS之類的界面軟件。曾經(jīng),他們成名于操作方便快捷的界面,最終卻因為界面能夠提供的功能有限,軟件天花板太低,被新時代拋棄。
2. 非開源。典型代表就是SAS,最早SAS曾是大數(shù)據(jù)分析的最終解決方案,也是唯一解決方案。它采用硬盤讀寫模式,是當(dāng)時唯一能克服海量數(shù)據(jù)運算時內(nèi)存空間不足的軟件;同時由于SAS內(nèi)置了大量的統(tǒng)計軟件庫,只需要少量代碼就能完成復(fù)雜的分析,輸出一份專業(yè)完善的報表。但是SAS敗在了它老舊的語法系統(tǒng)和非開源兩點上。SAS語法非常令人頭疼,既不是面向?qū)ο笠膊皇呛瘮?shù)式編程,新手需要花很長時間適應(yīng)它的語法結(jié)構(gòu);更重要的是,SAS公司的產(chǎn)品不開源,沒有外部package可供調(diào)用,根本跟不上算法的快速發(fā)展。如今SAS漸漸已經(jīng)被數(shù)據(jù)科學(xué)家遺忘,只在生物醫(yī)藥和銀行系統(tǒng)里還保持著絕對優(yōu)勢(然而這僅僅是因為政策壁壘或是行業(yè)慣性)。
3. 太難。這里指的就是C++和Java,他們的代碼過于底層。好處是運算速度很快,壞處是開發(fā)起來很費時間。為了完成一個數(shù)據(jù)分析,運算速度其實可以適當(dāng)犧牲,讓位給開發(fā)時間。或者,完成初期的分析和算法開發(fā)以后,把算法交給后端來用C++或Java實現(xiàn)。在業(yè)務(wù)中,客戶和數(shù)據(jù)分析師都沒有太多精力去等輪子慢慢造出來,大家想要的是一個方便好學(xué)的高級語言——顯然,只剩下R和Python了。
4. 死于來自深度學(xué)習(xí)的不明AOE。很長時間內(nèi),R本來還和Python并駕齊驅(qū)難分高下。但自從AlphaGo刷屏,深度學(xué)習(xí)變得炙手可熱以來,R開始面臨危機,因為目前深度學(xué)習(xí)的Tensorflow框架、keras包等等基本全部搭建在Python上面。這就很尷尬了,R直接錯過了深度學(xué)習(xí)的浪潮。直到近期,有大神把深度學(xué)習(xí)的框架轉(zhuǎn)移到了R上面,但是似乎已經(jīng)晚了,Python已經(jīng)在數(shù)據(jù)分析***工具排行榜上一騎絕塵。當(dāng)然R還不至于消亡,由于學(xué)術(shù)界對R的使用頻率極高,幾乎所有學(xué)界研究出的新算法都在R平臺進行模擬測試,所以R的算法包儲備是Python無法替代的。
所以我們其實可以發(fā)現(xiàn),當(dāng)一門數(shù)據(jù)分析工具誕生之初,它的命運幾乎就已經(jīng)注定了。R和Python由于命令行+開源+高級語言的多重特點,幾乎是笑到了***。而對于數(shù)據(jù)科學(xué)家來講,這兩門語言注定會是他們***的朋友,每個數(shù)據(jù)科學(xué)家都應(yīng)該至少將其中一個作為自己的主語言。
這便是數(shù)據(jù)科學(xué)家的一大里程碑。不管之前你的基礎(chǔ)如何,當(dāng)你***次開始著手學(xué)習(xí)R或Python,你才算是真正用起了最適合大數(shù)據(jù)時代的數(shù)據(jù)分析工具,跨入了新的世界。
值得一提的是,未來這一列表上可能還會加上Golang,畢竟這一門由谷歌開發(fā)并倡導(dǎo)的數(shù)據(jù)科學(xué)新工具自從誕生以來,發(fā)展一直十分迅猛。但能否加入豪華套餐,既要考慮到Golang自身的奮斗,也要考慮到歷史的行程。
里程碑3:Spark
這兩年,大數(shù)據(jù)工程師們有一項共識:自己所有技能列表里,Spark是對于薪資提升最有效的幫手。
Spark具有鮮明的特色。一方面,它是目前最快的數(shù)據(jù)分析平臺,完全實現(xiàn)了對于Hadoop和Mapreduce框架的繼承與超越。另一方面,它的抽象程度比較高,需要大量使用lambda函數(shù)進行函數(shù)式編程,所以非常麻煩;而且Spark的社區(qū)完善度遠遠不及R和Python,雖然Spark基于Scala構(gòu)建,能夠調(diào)用Scala和java的軟件包,但是它依舊很麻煩;更不用提搭建Spark的分布式計算平臺甚至都不是一件簡單的事情。
上面那段話里可能出現(xiàn)了很多大家看不懂的詞匯。不過沒關(guān)系,總結(jié)起來,關(guān)于Spark其實只需要知道兩點:
1. Spark特別快!Spark特別快!Spark特別快!
2. Spark特別難!Spark特別難!Spark特別難!
毫無疑問,Spark就屬于那種非常不好跨越的里程碑。不過收益與付出并存,至少在我看來,Spark也沒有那么難。當(dāng)適應(yīng)了用lambda函數(shù)寫map和reduce之后,甚至?xí)凵线@種感覺。同時,如果有一定java基礎(chǔ)的話,Spark也會變得容易很多。
里程碑4:從需求出發(fā)思考模型,而非將模型生搬硬套。
當(dāng)前,數(shù)據(jù)科學(xué)家往往分為三派。
統(tǒng)計派:統(tǒng)計背景的數(shù)據(jù)科學(xué)家,往往喜歡用數(shù)學(xué)方法解決問題,格外關(guān)注數(shù)據(jù)分析中每一步的邏輯性,非常喜歡做假設(shè)檢驗。由于進行了大量的參數(shù)統(tǒng)計訓(xùn)練,對于他們來講,每一個模型參數(shù)都是不可信的,甚至于每一個模型本身都很不可信——直到做出合理的數(shù)學(xué)證明,并對每個參數(shù)進行檢驗。統(tǒng)計派最初接觸機器學(xué)習(xí)時,往往會非常不適應(yīng)于其“黑箱”的模式,然而***往往也只能嘆服于模型優(yōu)越的預(yù)測能力。
計算機派:CS出身的數(shù)據(jù)科學(xué)家?guī)в袧庵氐墓た粕鷼赓|(zhì),習(xí)慣的思維方式是模塊化、按部就班的工程思維。他們更加關(guān)心機器學(xué)習(xí)的步驟與結(jié)果,而非每一步的邏輯。好處在于,他們在學(xué)習(xí)數(shù)據(jù)分析時不用克服自己的某種慣性,只需要用工程思維做出一個好的模型。壞處就是,有時會太注重模型本身,忽略其適用條件。
業(yè)務(wù)派:這一派的數(shù)據(jù)科學(xué)家背景可以說是三教九流,但無論怎樣,總歸是和數(shù)據(jù)沾點邊。他們的思維特點是從業(yè)務(wù)邏輯出發(fā),特別重視模型構(gòu)建的前期過程,尤其特征工程。并且,他們始終期待模型輸出與他們猜測相符的結(jié)果,否則可能就要大發(fā)雷霆。
三派人都將成為優(yōu)秀的數(shù)據(jù)科學(xué)家,但在他們發(fā)育完全之前,往往會碰到一些麻煩。這些麻煩我可以歸納為——不看需求,只管模型。
統(tǒng)計派的模型可能是多元線性回歸、時間序列分析和非參數(shù)統(tǒng)計,計算機派則可能是***的DNN、SVM,業(yè)務(wù)派的模型就是他們的業(yè)務(wù)邏輯。三者都免不了把自己最習(xí)慣的思維方式代入多變的現(xiàn)實問題中去。比如分析房價數(shù)據(jù),統(tǒng)計派往往一定要給數(shù)據(jù)做個回歸或是時間序列分析,計算機派喜歡給數(shù)據(jù)設(shè)定Classification標(biāo)準(zhǔn)然后套用分類算法,業(yè)務(wù)派則一定得先把房價數(shù)據(jù)的邏輯分析一通,提出一大堆假設(shè),卻找不到好的模型來套用自己的假設(shè)。
這都不是***的處理方法。好的數(shù)據(jù)分析應(yīng)該是三者觀念的結(jié)合,即——首先,像業(yè)務(wù)派一樣分析原始數(shù)據(jù),做好探索性分析和特征工程;隨后像統(tǒng)計派一樣謹慎分析模型適用性,選用合理的模型假設(shè);***像計算機派一樣大膽建模,積極調(diào)參,向著過擬合的方向不斷前進。
總結(jié)下來,最重要的,還是要拋棄自己腦海里固有的幾套思維模式,從數(shù)據(jù)本身的分析需求出發(fā),選擇最合適的分析方法、數(shù)據(jù)清洗思路、特征工程和模型。
可惜,這個里程碑是一個玄學(xué)里程碑。大部分人可能知道這個里程碑的存在,卻不知道自己是不是真的跨過去了。但毫無疑問,能夠明白自己要從需求出發(fā),就已經(jīng)非常難得了。
里程碑5:學(xué)會開始改善自己的代碼
統(tǒng)計派和業(yè)務(wù)派***的里程碑,可能就是理解代碼也有代碼的美學(xué)。
金融從業(yè)者可能非常熟悉怎樣做出一套漂亮的ppt,統(tǒng)計學(xué)家可能非常熟悉怎樣寫出簡練明晰的證明過程。但是,到了代碼這里,大部分人還是愿意把自己的IDE當(dāng)成“草稿本”,覺得把想要的東西做出來就可以了。更不用說對代碼本身的改進,就像許多R新人會在代碼里寫大量的for循環(huán),而且是循環(huán)套循環(huán),導(dǎo)致運行時間成倍增長。
事實上也不能全怪他們。數(shù)據(jù)分析的代碼一般不太好寫,需要反復(fù)嘗試,期間代碼非常容易寫的過于隨性,亂七八糟。***如果偷懶不做整合,也就這么亂下去了。
但是在實際工作中,數(shù)據(jù)分析的代碼依舊需要保證可讀性,否則后端改寫如何讀你的算法?做文檔和ppt的公關(guān)人員怎么解讀你的代碼?甚至,你自己能不能在一個月后認出你的代碼?
當(dāng)有這種現(xiàn)實需要的時候,數(shù)據(jù)科學(xué)家才會開始尋找代碼的美感。
讓代碼變得整齊漂亮,還只是***方面。需要做的是調(diào)整好縮進、認真寫注釋、做好代碼的分塊、限制每一行的字符數(shù)等等。但在這之后,還需要學(xué)會怎樣提高代碼的運行速度(就比如R語言的***大tip:用apply系函數(shù)替代for循環(huán)),如何將代碼寫的更加具有可讀性(比如將常用功能定義為函數(shù)),不一而足。代碼的美學(xué)是無窮無盡的,值得每一位數(shù)據(jù)科學(xué)家去探索。
沒頭沒腦寫了這么一堆,也不知道看官們是否受用。
里程碑是非常重要的,我們用里程碑來標(biāo)注過去的成就,新人則用前人的里程碑來作為自己努力的方向。每個人在自己領(lǐng)域里,都能列出諸多的“里程碑”,把它們寫出來給新人看看,會是一件挺不錯的事情。






















