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