本文總結了數據科學領域的資源,很大程度上參考了Quora的這篇文章,根據博主的經驗在內容上做了適當的調整,僅供參考。
1.基礎知識
課程方面要學的有:多值微積分、數值分析、線性幾何、概率論、Python。
微積分在機器學習和各種求概率中非常重要。線性幾何、矩陣對於機器學習的大多數概念都是必不可少的。Python這種程式語言非常適合搞數據科學。其他的知識(比如隨機森林,pandas,A/B測試)隨著你的工作開展和學習會慢慢接觸到,這些都不是基本的問題。
如果你還是學生,一定要學好計算科學和統計學,選課的時候要記得選線性幾何、矩陣、計算科學、概率論等相關的課程。
2.Python是數據科學家最重要的語言
Python有著像matlab一樣強大數值計算工具包NumPy;有著繪圖工具包matplotlib;有著科學計算工具包SciPy(基於Numpy和matplotlib的)。這三者為Python提供了像Matlab一樣強大的矩陣控制能力,這是Python完勝Perl和Ruby的地方。
當然,除了Python之外,R,Matlab/Octave,Mathematica/Sage也正在崛起。這些語言也有著一些優勢。不過,就拿R來說,R的數據框架和相關的控制能力已經被Python的pandas工具包實現了。Scikit-learn也提供了像R一樣強大的機器學習算法庫。 Mathematica/Sage中「notebook」的概念也被IPython notebooks實現了。
當然,Python也不是萬能的,比如:
語法比起Matlab和Octave來說還是笨重了,R的語法就好很多。
缺少像ggplot2這種靜態圖和D3這種可交互圖,matplotlib用起來還是比較複雜。
處理大數據時,Numpy和pandas這些庫有些捉襟見肘,Continuum正在致力於解決這個問題,目前來看還沒有完成。
對於數據控制,缺少像LINQ那樣的內置的聲明式的語言。Pandas對數據控制的能力還是比較低級,而且當你深入研究Pandas的時候很可能會被它的語法整崩潰。
缺少面向數據科學家的專門的IDE,R的R Studio就不錯。
對於數據科學家而言,Python可能是最重要的語言了,如前文所述,它有著非常豐富的生態系統。
R語言能夠在處理過的數據上運行機器學習算法,但是Python直接能夠處理數據,而Pandas幾乎可以像SQL那樣對數據進行控制。Matplotlib能夠讓你對數據和結果進行可視化,以便快速理解你的數據。Scikit-learn提供了機器學習算法支持,Theano提供了深度學習框架(還可以使用GPU加速)。用過R、matlab、Octive、Python、SAS和Microsoft Analysis Services的人都推薦用Python。
3.加入社區
Meetup:到Meetup上找一些你感興趣的talk,在線的學習數據科學,認識一些數據科學家或者將來的數據科學家。
博客:這裡有個國外比較具有影響力的數據科學家的博客列表,可以選一些follow。
Quora、twitter:數據科學第一手的信息資源的來源一般是twitter、Quora上的用戶,例如:
Jeff Hammerbacher @hackingdata
Peter Skomoroch @peteskomoroch
Ryan Rosario @datajunkie
Michael E Driscoll @medriscoll
Joseph Turian @turian
Nathan Yau @flowingdata
Peter Skomoroch @peteskomoroch
Russell Jurney @rjurney
Bradford Cross @bradfordcross
J.D. Long @cmastication,Jimmy Lin @lintool
Kevin Weil @kevinweil
Mat Kelcey @mat_kelcey
Edwin Chen @edchedch
Data Drinking Group @chrisalbon/data-drinking-group
Big Data @dataspora/bigdata
Data Science @pinoystartup/sim-data-team
Strata Program Committee @strataconf/strata-committee
到Quora和Twitter上去follow這些人吧,別忘了follow自己這個領域最牛的那幾個人,比如博主follow了Socher。另外,這個網站分析了twitter上哪些人在數據科學領域最具影響力。Quora上有很多資源,跟stackoverflow不同的是,Quora比較像知乎,會有人給你一些像survey類型的經驗,一般問題都比較抽象,回答比較系統;stackoverflow更擅長具體的問題,尤其是編程方面的細節問題。
新浪微博:由於博主只是一個普通的微博用戶,且個人較偏向於文本方向,對大咖們的了解還不夠深入,難免有缺漏,如果有缺漏了請多包涵且告知。以下是我個人關注的微博大咖們:
王威廉
王偉DL
劉知遠THU
張棟_機器學習
李航博士
丕子
winsty
黃亮-算法時代
梁斌penny
licstar
老師木
數盟社區
52nlp
好東西傳送門
西瓜大丸子湯
數據挖掘研究院
愛可可-愛生活
龍星鏢局
另外,好東西傳送門的日報每天都會收錄微博精華,懶得刷微博的同學可以看這裡http://memect.com/
個人加的幾個QQ群:
自然語言處理 174735435
龍星課程-機器學習 163973179
神經網絡 / 深度學習 385206220
Deep Learning高質量 209306058
生物醫學文本挖掘BIONLP 290210559
數盟【數據分析1群】 321311420
4.配置你的環境
Python的安裝
R和R studio
Sublime Text(比notepad++和ue更適合寫代碼,個人用的eclipse+PyDev)
5.學習相關工具的使用
Python: 可以結合官方教程、笨辦法學Python(英文原版)、Think Python:How to Think Like a Computer Scientist來學習。書可以從這裡找幾本。當然,找到最適合自己的方式是最好的,以上只是提供一些選擇而已,博主當時是學的Udacity的programming language外加Natural Language Processing With Python。
R: 推薦swirl,一個數據科學和R配套學習的教程。
Sublime Text:這個網站還不錯,從配置到快捷鍵,裡邊的視頻在youtube上。
SQL: 個人感覺這個不太重要,而且SQL相對來說較簡單,對找工作也許有點用處。
結合概率統計來學習: 以上這些語言比起C、Java來說語法很簡單,有基礎的同學很輕鬆就能掌握,對於這類同學來說,可以結合概率統計順便把程式語言給學了。例如:針對Python的Think Stats(pdf)、針對R的An Introduction to Statistical Learning(MOOC)、應該掌握的統計學知識點可以參考這裡。
6.哈佛的data science公開課
不必多說,看了再說,視頻,配套PPT,配套實驗,配套作業。
7.到Kaggle上找一些基礎的競賽練手
剛開始的時候最好不要直接參加由獎金的競賽,因為這些競賽的數據往往很大、複雜、晦澀,不適合學習。可以先學(wan)學(wan)Scikit-learn,拿這個簡單的二元分類任務練手:Data Science London + Scikit-learn。
接下來可以進軍第二個任務:Titanic: Machine Learning from Disaster,這個任務比第一個要稍微複雜那麼一點(有枚舉類型的變量categorical variables,丟失的變量這些情況了)。
第三個任務,可以嘗試Forest Cover Type Prediction。
第四個任務,可以嘗試Bike Sharing Demand,這裡邊有一些時間戳數據。
第五個任務,嘗試一些自然語言處理的任務,如情感分析。
做完這些之後,再找些自己感興趣的競賽做做。
8.數據科學相關的知識
產品指標會教你公司裡邊關心什麼、看重什麼、他們是怎麼衡量產品的:The 27 Metrics in Pinterest’s Internal Growth Dashboard
優化方法能幫你理解統計學和機器學習:Convex Optimization - Boyd and Vandenberghe
A/B測試其實在醫學上已經應用多年了,只是換了個名字而已:How do I learn about A/B Testing?
用戶行為This Explains Everything " User Behavior
Feature Engineering一些經驗,一個案例
大數據技術針對大數據技術的工具、框架How do I learn big data technologies?
Machine LearningHow do I learn Machine Learning?
Natural Language Processing自然語言處理需要把文本數據數學化,並且要儘量不丟失文本的「含義」。文本挖掘會讓你接觸全新的、令人興奮的數據(做了都說好,誰做誰知道)How do I learn Natural Language Processing (NLP)?
時間序列分析How do I learn about time series analysis?
數據文明data-driven.pdf
9.參與/solo個頂層產品
用已掌握的數據科學和軟體工程技能做出個讓別人看了會點讚的成品出來,可以是網站、處理數據的新方法、炫酷的可視化等等。要做這麼個成品,可以先看看以下內容:
數據科學中的toy problem
如何搭建一個推薦引擎
怎麼利用利用閒暇時間快速搭建Python項目
如何衡量一個twitter用戶的影響力
開放的大規模數據集
郵件優先級相關算法
一些優秀的數據科學project
10.公開和社交
在github上創建公開的倉庫,寫博客,把你的研究工作、參與的項目、Kaggle競賽的解決方案、見解和想法都貼出來,這會讓你提升影響力,為你的簡歷準備素材,跟通靈玉的其他人建立聯繫。
11.獲得數據科學的實習或工作
BAT都有相關領域的實習崗位,另外這裡有些國外的提供實習機會的公司
搞不清自己該申請數據科學還是軟體開發的實習?
現在很多公司在初秋一直到冬天都會招聘數據科學崗位實習,僅僅是實習的話,記得不要花過多的時間去準備,直接去應聘就行。
12.在線書籍
Elements of Statistical Learning: data mining, inference, and prediction. 2nd Edition.
Introduction to Statistical Learning: Page on usc.edu
Think Stats: Probability and Statistics for Programmers
13.像數據科學家一樣思考
以上已經詳細的介紹了數據科學家所需要的具體技巧。想要像數據科學家一樣思考,建立正確的態度,只有這些技術是遠遠不夠的。以下列出了成為合格數據科學家的7項挑戰:
(1) 保持對數據的好奇
作為一名數據科學家,你要自己找問題並且自己做出回答。數據科學家要自然而然的對他們看到的數據產生好奇,並找到解決問題的創新性方法。
很多時候數據科學並不只是分析,而是找出一個有趣的問題並且找到解決方案。
這裡有兩個典型的案例:
Hilary: the most poisoned baby name in US history
A Look at Fire Response Data
總結: 對你感興趣的問題或者主題進行思考,然後用數據的方式作出回答。
(2) 用懷疑的眼光閱讀新聞
數據科學家的很多貢獻往往是,他們從一堆信息裡找出了哪些是重要的、哪些是假的(這是機器很難取代數據科學家的原因),這種習慣性的懷疑的眼光在任何科學領域都是有益的,尤其是在發展速度快的領域,因為這些領域更容易被假象誤導。
看新聞的時候練習批判性的眼光吧,很多文章本質上都是有瑕疵的。這裡有兩個例子,評論裡有答案:
Easier:You Love Your iPhone. Literally
Harder:Who predicted Russia’s military intervention?
總結:每當你看到新的文章時,記得持懷疑的態度,對文章進行評論,並指出它的問題在哪。
(3) 把數據看成是改善消費者產品的工具
試著了解一款網際網路產品,檢查它的主要渠道。有沒有結帳渠道?註冊渠道?訂單渠道?
反覆的檢查這些渠道,然後提出一些假設方案來提升核心指標(比如轉化率、用戶分享數、註冊用戶數量等)。設計實驗來驗證你的假設是否真的會改變這些指標。
總結:通過反饋郵件跟這個網站分享你的idea
(4) 像貝葉斯一樣思考
像貝葉斯一樣思考,用先驗來作判斷。這意味著,要想樹立起數據科學家的思維方式,就必須一方面能夠周詳考慮新觀測到的信息,另一方面又需要以往的直覺和經驗(貝葉斯裡的先驗)。
比如,檢查下數據,發現今天的用戶參與量明顯下降了,下面哪種原因是最有可能的呢?
用戶參與量就是會突然的減少
網站的某些功能down掉了
登陸模塊down掉了
儘管1也能夠作為一種解釋,但是2和3看上去比1更靠譜,因為根據先驗概率來看,2和3的概率要比1更大。
再比如,你是Tesla公司的高級工程師,而在上個月中,5輛Tesla S著火了。有可能是什麼原因呢?
生產質量下降了,現在Tesla的安全性應當被重新測試
安全性不是問題,因為與其他同行汽油車相比,Tesla S著火的概率已經算很低的了
即使沒什麼經驗的人也可能會得出1這樣的結論,如果你經常做質量測試,那你的先驗對2是否正確就會更有把握。不過,你應該繼續尋找分別支持兩個結論的信息,並繼續尋找提升質量的辦法,那麼問題來了:什麼樣的信息應該值得留意呢?
總結:回想一下你上一次沒有用先驗來指導思考就得出結論是什麼時候,從現在開始避免再犯類似的錯誤。
(5) 了解每種工具的能力
「Knowledge is knowing that a tomato is a fruit, wisdom is not putting it in a fruit salad.」 - Miles Kington
知識會指導你實現經典的線性回歸,而經驗會告訴你這在實際當中幾乎不會用到。
知識會讓你了解k-means聚類的5種變種,而經驗會告訴你實際當中幾乎不會單獨在數據上聚類,以及k-means在特徵過多的時候表現是多麼的不如人意。
知識會告訴你一堆複雜的技術,而經驗會告訴你怎麼在有限的時間裡從這裡邊為你的公司選擇一個最能產生效益的。
當你到Coursera或EdX上學一門課的時候,你可能會隨著課程開發出一堆工具,除非你能搞清楚在什麼場合下用哪個合適,否則這一堆工具毫無實際作用。
總結:在真實數據上嘗試各種工具,發現他們各自的優點和不足。哪種工具在這種場合下最好,為什麼?
(6) 給別人講一個複雜的概念
Richard Feynman是怎麼判斷哪個概念他能懂,哪個不懂呢?
Feynman稱得上是一位偉大的老師,他能夠向一些什麼都不懂的學生講明白一些較深的知識,這一點他為自己感到自豪。有人告訴他說:「Dick,跟我解釋一下,為什麼自選1/2粒子服從費米 - 狄拉克統計」,他考慮了一下聽眾的知識水平,然後說,「我會針對這個專門為新生講一次課的。」過了幾天他說:「我做不到。這個知識沒有辦法簡化到新生能聽懂的地步。這意味著我們並沒有真的搞懂了這個知識點」
Richard Feynman與眾不同的地方就在於他能夠提煉複雜的概念,把他們轉換成可以理解的想法。類似的,一流的數據科學家與眾不同的地方就是他們能夠誠懇的分享他們的想法並且對這些想法作出解釋和分析。
總結:把你懂的一種技術概念介紹給你的朋友吧,也可以是在知乎、Quora或者優酷、youtube上。
(7) 說服其他人什麼才是重要的
對一個數據科學家來說,比解釋他們的分析更重要的,可能是與大家交流某個見解的價值和潛在的影響。
數據科學的某個具體的任務將會商品化編程數據科學工具,然後不斷的完善。新工具會讓一些任務更新迭代,比如手寫版應用、data wrangling(數據清洗)、甚至是某些預測建模。
然而,數據科學家發現並和別人分享什麼才是重要的,這種能力永遠不會過時。數據量在逐漸增加,對數據的一些潛在的見解也在增加,公司總會需要數據科學家來找出該怎麼做才能對任務進行優化。
數據科學家在企業中扮演的角色,是數據和公司之間的使者。數據科學家成功與否,關鍵在於他/她是怎麼講故事的、以及對公司帶來了什麼樣的影響,其他的技能都是對這種能力的一种放大。
總結:從統計學的角度來講故事吧,跟別人交流你在數據上的重要發現,針對觀眾關心的事做些具有說服力的presentation。
14.關於找工作(點擊圖片放大)
(作者:Edwin Jarvis)
欲了解「不同人群如何成為數據科學家定製版」,請點擊閱讀原文。