如何成為一名數據科學家?

我自己粗淺的理解為需要以下幾個方面:
1. 業務知識
2. 數理統計和數據分析
3. 計算機相關知識
3.1 數據處理與收集(ETL?)
3.2 機器學習和數據挖掘
這幾方面完全是自己的一個猜測,懇請大牛們不惜賜教!


"Data Science = statistics who uses python and lives in San Francisco"

恰好我馬上啟程到Twitter的data science team,而且恰巧懂一點點統計和住在舊金山,所以衝動地沒有邀請就厚臉回答了:D

我認為有幾個大方面

1)學好python。
現在幾乎所以公司的數據都可以api給你,而python的數據處理能力強大且方便。加之在machine learning的很多演算法上,python也獨俏一方。另外,它的簡明方便迅速迭代開發,15分鐘寫完個演算法就可以看效果了。

除此之外,py還有點酷酷的感覺。任何程序拿matlab和c++都是可以寫的,不過我真沒認識過哪個d願意自己把自己扔那個不酷的框框里:D

對不規則輸入的處理也給python一個巨大的優勢。通常來說,在我現在日常的工作里,所有的數據都是以純文本但是非格式的形式存儲的(raw text, unstructured data)。問題在於,這些文本不可以直接當作各種演算法的輸入,你需要

  1. 分詞,分句
  2. 提取特徵
  3. 整理缺失數據
  4. 除掉異類(outlier)

在這些時候,python可謂是神器。這裡做的1-4都可以直接在scikit-learn裡面找到對應的工具,而且,即使是要自己寫一個定製的演算法處理某些特殊需求,也就是一百行代碼的事情。

簡而言之,對於數據科學面臨的挑戰,python可以讓你短平快地解決手中的問題,而不是擔心太多實現細節。

2)學好統計學習
略拗口。統計學習的概念就是「統計機器學習方法」。
統計和計算機科學前幾十年互相平行著,互相造出了對方造出的一系列工具,演算法。但是直到最近人們開始注意到,計算機科學家所謂的機器學習其實就是統計裡面的prediction而已。因此這兩個學科又開始重新融合。

為什麼統計學習很重要?

因為,純粹的機器學習講究演算法預測能力和實現,但是統計一直就強調「可解釋性」。比如說,針對今天微博股票發行就上升20%,你把你的兩個預測股票上漲還是下跌的model套在新浪的例子上,然後給你的上司看。
Model-1有99%的預測能力,也就是99%的情況下它預測對,但是Model-2有95%,不過它有例外的一個附加屬性——可以告訴你為什麼這個股票上漲或者下跌。

試問,你的上司會先哪個?問問你自己會選哪個?

顯然是後者。因為前者雖然有很強的預測力(機器學習),但是沒有解釋能力(統計解釋)。

而作為一個數據科學家,80%的時間你是需要跟客戶,團隊或者上司解釋為什麼A可行B不可行。如果你告訴他們,「我現在的神經網路就是能有那麼好的預測力可是我根本就沒法解釋上來」,那麼,沒有人會願意相信你。

具體一些,怎麼樣學習統計學習?

  • 先學好基本的概率學。如果大學裡的還給老師了(跟我一樣),那麼可以從MIT的概率論教材【1】入手。從第1章到第9章看完並做完所有的習題。(p.s.面試Twitter的時候被問到一個拿球後驗概率的問題,從這本書上抓來的)。
  • 了解基本的統計檢驗及它們的假設,什麼時候可以用到它們。
  • 快速了解統計學習有哪些術語,用來做什麼目的,讀這本【5】。
  • 學習基本的統計思想。有frequentist的統計,也有bayesian的統計。前者的代表作有【2】,後者看【3】。前者是統計學習的聖書,偏frequentist,後者是pattern recognition的聖書,幾乎從純bayesian的角度來講。注意,【2】有免費版,作者把它全放在了網上。而且有一個簡易版,如果感覺力不從心直接看【2】,那麼可以先從它的簡易版開始看。簡易版【4】是作者在coursera上開課用的大眾教材,簡單不少(不過仍然有很多閃光點,通俗易懂)。對於【3】,一開始很難直接啃下來,但是啃下來會受益匪淺。

注意,以上的書搜一下幾乎全可以在網上搜到別人傳的pdf。有條件的同學可以買一下紙製版來讀,體驗更好並且可以支持一下作者。所有的書我都買了紙製版,但是我知道在國內要買本書有多不方便(以及原版書多貴)。

讀完以上的書是個長期過程。但是大概讀了一遍之後,我個人覺得是非常值得的。如果你只是知道怎麼用一些軟體包,那麼你一定成不了一個合格的data scientist。因為只要問題稍加變化,你就不知道怎麼解決了。

如果你感覺自己是一個二吊子數據科學家(我也是)那麼問一下下面幾個問題,如果有2個答不上來,那麼你就跟我一樣,真的還是二吊子而已,繼續學習吧。

  • 為什麼在神經網路裡面feature需要standardize而不是直接扔進去
  • 對Random Forest需要做Cross-Validatation來避免overfitting嗎?
  • 用naive-bayesian來做bagging,是不是一個不好的選擇?為什麼?
  • 在用ensembe方法的時候,特別是Gradient Boosting Tree的時候,我需要把樹的結構變得更複雜(high variance, low bias)還是更簡單(low variance, high bias)呢?為什麼?

如果你剛開始入門,沒有關係,回答不出來這些問題很正常。如果你是一個二吊子,體會一下,為什麼你跟一流的data scientist還有些差距——因為你不了解每個演算法是怎麼工作,當你想要把你的問題用那個演算法解決的時候,面對無數的細節,你就無從下手了。


說個題外話,我很欣賞一個叫Jiro的壽司店,它的店長在(東京?)一個最不起眼的地鐵站開了一家全世界最貴的餐館,預訂要提前3個月。怎麼做到的?70年如一日練習如何做壽司。70年!除了喪娶之外的假期,店長每天必到,8個小時工作以外繼續練習壽司做法。

其實學數據科學也一樣,沉下心來,練習匠藝。


3)學習數據處理
這一步不必獨立於2)來進行。顯然,你在讀這些書的時候會開始碰到各種演算法,而且這裡的書里也會提到各種數據。但是這個年代最不值錢的就是數據了(拜託,為什麼還要用80年代的「加州房價數據」?),值錢的是數據分析過後提供給決策的價值。那麼與其糾結在這麼悲劇的80年代數據集上,為什麼不自己搜集一些呢?

  • 開始寫一個小程序,用API爬下Twitter上隨機的tweets(或者weibo吧。。。)
  • 對這些tweets的text進行分詞,處理噪音(比如廣告)
  • 用一些現成的label作為label,比如tweet里會有這條tweet被轉發了幾次
  • 嘗試寫一個演算法,來預測tweet會被轉發幾次
  • 在未見的數據集上進行測試

如上的過程不是一日之功,尤其剛剛開始入門的時候。慢慢來,耐心大於進度。

4)變成全能工程師(full stack engineer)
在公司環境下,作為一個新入職的新手,你不可能有優待讓你在需要寫一個數據可視化的時候,找到一個同事來給你做。需要寫把數據存到資料庫的時候,找另一個同事來給你做。

況且即使你有這個條件,這樣頻繁切換上下文會浪費更多時間。比如你讓同事早上給你塞一下數據到資料庫,但是下午他才給你做好。或者你需要很長時間給他解釋,邏輯是什麼,存的方式是什麼。

最好的變法,是把你自己武裝成一個全能工作師。你不需要成為各方面的專家,但是你一定需要各方面都了解一點,查一下文檔可以上手就用。

  • 會使用NoSQL。尤其是MongoDB
  • 學會基本的visualization,會用基礎的html和javascript,知道d3【6】這個可視化庫,以及highchart【7】
  • 學習基本的演算法和演算法分析,知道如何分析演算法複雜度。平均複雜度,最壞複雜度。每次寫完一個程序,自己預計需要的時間(用演算法分析來預測)。推薦普林斯頓的演算法課【8】(注意,可以從演算法1開始,它有兩個版本)
  • 寫一個基礎的伺服器,用flask【9】的基本模板寫一個可以讓你做可視化分析的backbone。
  • 學習使用一個順手的IDE,VIM, pycharm都可以。

4)讀,讀,讀!
除了閉門造車,你還需要知道其它數據科學家在做些啥。湧現的各種新的技術,新的想法和新的人,你都需要跟他們交流,擴大知識面,以便更好應對新的工作挑戰。

通常,非常厲害的數據科學家都會把自己的blog放到網上供大家參觀膜拜。我推薦一些我常看的。另外,學術圈裡也有很多厲害的數據科學家,不必怕看論文,看了幾篇之後,你就會覺得:哈!我也能想到這個!

讀blog的一個好處是,如果你跟他們交流甚歡,甚至於你可以從他們那裡要一個實習來做!

betaworks首席數據科學家,Gilad Lotan的博客,我從他這裡要的intern :D Gilad Lotan
Ed Chi,六年本科碩士博士畢業的神人,google data science http://edchi.blogspot.com/
Hilary Mason,bitly首席科學家,紐約地區人盡皆知的數據科學家:hilarymason.com

在它們這裡看夠了之後,你會發現還有很多值得看的blog(他們會在文章裡面引用其它文章的內容),這樣滾雪球似的,你可以有夠多的東西早上上班的路上讀了:)


5)要不要上個研究生課程?
先說我上的網路課程:
Coursera.org
https://www.coursera.org/course/machlearning
前者就不說了,人人都知道。後者我則更喜歡,因為教得更廣闊,上課的教授也是世界一流的機器學習學者,而且經常會有一些很妙的點出來,促進思考。

對於是不是非要去上個研究生(尤其要不要到美國上),我覺得不是特別有必要。如果你收到了幾個著名大學數據科學方向的錄取,那開開心心地來,你會學到不少東西。但是如果沒有的話,也不必糾結。我曾有幸上過或者旁聽過美國這裡一些頂級名校的課程,我感覺它的作用仍然是把你領進門,以及給你一個能跟世界上最聰明的人一個交流機會(我指那些教授)。除此之外,修行都是回家在寢室進行的。然而現在世界上最好的課程都擺在你的面前,為什麼還要捨近求遠呢。


總結一下吧
我很幸運地跟一些最好的數據科學家交流共事過,從他們的經歷看和做事風格來看,真正的共性是

他們都很聰明——你也可以
他們都很喜歡自己做的東西——如果你不喜歡應該也不會看這個問題
他們都很能靜下心來學東西——如果足夠努力你也可以

【1】Introduction to Probability and Statistics
【2】Hastie, Trevor, et al. The elements of statistical learning. Vol. 2. No. 1. New York: Springer, 2009. 免費版
【3】Bishop, Christopher M. Pattern recognition and machine learning. Vol. 1. New York: springer, 2006.
【4】Introduction to Statistical Learning 免費版
【5】Wasserman, Larry. All of statistics: a concise course in statistical inference. Springer, 2004.
【6】http://d3js.org/
【7】http://www.highcharts.com/
【8】Coursera.org
【9】http://flask.pocoo.org/


拋棄幻想,談談現實中的數據科學家 - Hello陳然! - 知乎專欄
大部分心中的Data Scientist 可能是上文中的Type A Data Scientist。

但是從我的接觸來看,現在更大的需求來自於Type B Data Scientist,也即大家都是知道現在基於機器學習的演算法能夠幫助企業增長是大趨勢,但是究竟如何把演算法結合公司業務,還是需要真正能兩邊都懂,還能克服企業內部利益衝突,做出實際產品的人。

推薦一畝三分地W大的系列文章:
現在很火的數據科學data science到底是什麼?你對做Data Scientist感興趣嗎?
數據科學家data scientist需要的三大核心技能:Data Hacking、Problem Solving and Communication
想成為數據科學家Data Scientist,需要申請讀什麼專業?
美國哪些公司招聘Data Scientist?看重數據科學家什麼方面的背景?
數據科學家Data Scientist的職業發展前景如何?
推薦《說說Data Science的入門級工作》和《數據科學就業前景觀察分析》,歡迎來分享你的經驗和看法!
數據科學家Data Scientist能掙多少錢?
做數據科學家Data Scientist,碩士Master和博士PhD學位有啥區別?


-

版本更新,2014年5月14日更新一些內容。

-

如果展開講,這個問題可以寫一篇綜述了。最近剛好有空,打算認真寫寫。


僅僅在幾年前,數據科學家還不是一個正式確定的職業,然而一眨眼的工夫,這個職業就已經被譽為「今後十年IT行業最重要的人才」了。

一、數據科學家的起源

"數據科學"(DataScience)起初叫"datalogy "。最初在1966年由Peter Naur提出,用來代替"計算機科學"(丹麥人,2005年圖靈獎得主,丹麥的計算機學會的正式名稱就叫Danish Society of Datalogy,他是這個學會的第一任主席。Algol 60是許多後來的程序設計語言,包括今天那些必不可少的軟體工程工具的原型。圖靈獎被認為是「計算科學界的諾貝爾獎」。)


1996年,International Federation of Classification Societies (IFCS)國際會議召開。數據科學一詞首次出現在會議(Data Science, classification, and related methods)標題里。


1998年,C.F. Jeff Wu做出題為「統計學=數據科學嗎? 的演講,建議統計改名數據的科學統計數據的科學家。 (吳教授於1987年獲得COPSS獎,2000年在台灣被選為中研院院士,2004年作為第一位統計學者當選美國國家工程院院士,也是第一位華人統計學者獲此殊榮。)


2002年,國際科學理事會:數據委員會科學和技術(CODATA)開始出版數據科學雜誌。


2003年,美國哥倫比亞大學開始發布數據科學雜誌,主要內容涵蓋統計方法和定量研究中的應用。


2005年,美國國家科學委員會發表了"Long-lived Digital Data Collections: Enabling Research and Education in the 21st Century",其中給出數據科學家的定義:

"the information and computer scientists, database and software and programmers, disciplinary experts, curators and expert annotators, librarians, archivists, and others, who are crucial to the successful management of a digital data collection"

信息科學與計算機科學家,資料庫和軟體工程師,領域專家,策展人和標註專家,圖書管理員,檔案員等數字數據管理收集者都以可成為數據科學家。它們主要任務是:"進行富有創造性的查詢和分析。"


2012年,O"Reilly媒體的創始人 Tim O"Reilly 列出了世界上排名前7位的數據科學家。

  • Larry Page,谷歌CEO。
  • Jeff Hammerbacher,Cloudera的首席科學家和DJ Patil,Greylock風險投資公司企業家。
  • Sebastian Thrun,斯坦福大學教授和Peter Norvig,谷歌數據科學家。
  • Elizabeth Warren,Massachusetts州美國參議院候選人。
  • Todd Park,人類健康服務部門首席技術官。
  • Sandy Pentland,麻省理工學院教授。
  • Hod Lipson and Michael Schmidt,康奈爾大學計算機科學家。

具體有時間再補充,感興趣的朋友可以Google Scholar一下他們的文獻。

關於數據科學家的更多討論:
你能列出十個著名的女性數據科學家嗎?Can you name 10 famous data scientist women?
誰是最富有的數據科學家?Who are the wealthiest data scientists?
請列出對大數據最具有影響力的20個人?Who Are The Top 20 Influencers in Big Data?

二、數據科學家的定義

數據科學(Data Science)是從數據中提取知識的研究,關鍵是科學。數據科學集成了多種領域的不同元素,包括信號處理,數學,概率模型技術和理論,機器學習,計算機編程,統計學,數據工程,模式識別和學習,可視化,不確定性建模,數據倉庫,以及從數據中析取規律和產品的高性能計算。數據科學並不局限於大數據,但是數據量的擴大誠然使得數據科學的地位越發重要。


數據科學的從業者被稱為數據科學家。數據科學家通過精深的專業知識在某些科學學科解決複雜的數據問題。不遠的將來,數據科學家們需要精通一門、兩門甚至多門學科,同時使用數學,統計學和計算機科學的生產要素展開工作。所以數據科學家就如同一個team。


曾經投資過Facebook,LinkedIn的格雷洛克風險投資公司把數據科學家描述成「能夠管理和洞察數據的人」。在IBM的網站上,數據科學家的角色被形容成「一半分析師,一半藝術家」。他們代表了商業或數據分析這個角色的一個進化。

for example – a data scientist will most likely explore and examine data from multiple disparate sources. The data scientist will sift through all incoming data with the goal of discovering a previously hidden insight, which in turn can provide a competitive advantage or address a pressing business problem. A data scientist does not simply collect and report on data, but also looks at it from many angles, determines what it means, then recommends ways to apply the data.

  • Anjul Bhambhri,IBM的大數據產品副總裁。

數據科學家是一個好奇的,不斷質疑現有假設,能盯著數據就能指出趨勢的人。這就好像在文藝復興時期,一個非常想為組織帶來挑戰並從挑戰中學習的人一樣。

  • Jonathan Goldman,LinkedIn數據科學家。

2006年的6月份進入商務社交網站LinkedIn,當時LinkedIn只有不到800萬用戶。高德曼在之後的研究中創造出新的模型,利用數據預測註冊用戶的人際網路。具體來講,他以用戶在LinkedIn的個人資料,來找到和這些信息最匹配的三個人,並以推薦的形式顯示在用戶的使用頁面上——這也就是我們熟悉的"你可能認識的人(People you may know)"。這個小小的功能讓LinkedIn增加了數百萬的新的頁面點擊量(數據挖掘的應用典型之一推薦系統)。

  • John Rauser, 亞馬遜大數據科學家。

數據科學家是工程師和統計學家的結合體。從事這個職位要求極強的駕馭和管理海量數據的能力;同時也需要有像統計學家一樣萃取、分析數據價值的本事,二者缺一不可。

  • Steven Hillion, EMC Greenplum數據分析副總裁。

數據科學家是具有極強分析能力和對統計和數學有很深研究的數據工程師。他們能從商業信息等其他複雜且海量的資料庫中洞察新趨勢。

  • Monica Rogati, LinkedIn資深數據科學家。

所有的科學家都是數據學家,因為他們整天都在和海量數據打交道。在我眼中,數據學家是一半黑客加一半分析師。他們通過數據建立看待事物的新維度。數據學家必須能夠用一隻眼睛發現新世界,用另一隻眼睛質疑自己的發現。

  • Daniel Tunkelang,LinkedIn首席數據科學家。

我是bitly 首席科學家Hilary Mason的忠實崇拜者。關於這個新概念的定義我也想引用她的說法:數據科學家是能夠利用各種信息獲取方式、統計學原理和機器的學習能力對其掌握的數據進行收集、去噪、分析並解讀的角色。

  • Michael Rappa,北卡羅萊納州立大學教授。

儘管數據科學家這個名稱最近才開始在矽谷出現,但這個新職業的產生卻是基於人類上百年對數據分析的不斷積累和衍生。和數據科學家最接近的職業應該是統計學家,只不過統計學家是一個成熟的定義且服務領域基本局限於政府和學界。數據科學家把統計學的精髓帶到了更多的行業和領域。

  • 林仕鼎,百度大數據首席架構師。

如果從廣義的角度講,從事數據處理、加工、分析等工作的數據科學家、數據架構師和數據工程師都可以籠統地稱為數據科學家;而從狹義的角度講,那些具有數據分析能力,精通各類演算法,直接處理數據的人員才可以稱為數據科學家。


最後引用Thomas H. Davenport(埃森哲戰略變革研究院主任) 和 D.J. Patil(美國科學促進會科學與技術政策研究員,為美國國防部服務)的話來總結數據科學家需要具備的能力:

  • 數據科學家傾向於用探索數據的方式來看待周圍的世界。(好奇心)
  • 把大量散亂的數據變成結構化的可供分析的數據,還要找出豐富的數據源,整合其他可能不完整的數據源,並清理成結果數據集。(問題分體整理能力)
  • 新的競爭環境中,挑戰不斷地變化,新數據不斷地流入,數據科學家需要幫助決策者穿梭於各種分析,從臨時數據分析到持續的數據交互分析。(快速學習能力)
  • 數據科學家會遇到技術瓶頸,但他們能夠找到新穎的解決方案。(問題轉化能力)
  • 當他們有所發現,便交流他們的發現,建議新的業務方向。(業務精通
  • 他們很有創造力的展示視覺化的信息,也讓找到的模式清晰而有說服力。(表現溝通能力)
  • 他們會把蘊含在數據中的規律建議給Boss,從而影響產品,流程和決策。(決策力)

三、數據科學家所需硬體技能

《數據之美 Beautiful Data》的作者Jeff Hammerbacher在書中提到,對於 Facebook 的數據科學家「我們發現傳統的頭銜如商業分析師、統計學家、工程師和研究科學家都不能確切地定義我們團隊的角色。該角色的工作是變化多樣的:


在任意給定的一天,團隊的一個成員可以用 Python 實現一個多階段的處理管道流、設計假設檢驗、用工具R在數據樣本上執行回歸測試、在 Hadoop 上為數據密集型產品或服務設計和實現演算法,或者把我們分析的結果以清晰簡潔的方式展示給企業的其他成員。為了掌握完成這多方面任務需要的技術,我們創造了數據科學家這個角色。」


(1) 計算機科學

一般來說,數據科學家大多要求具備編程、計算機科學相關的專業背景。簡單來說,就是對處理大數據所必需的Hadoop、Mahout等大規模並行處理技術與機器學習相關的技能。

  • 零基礎學習 Hadoop 該如何下手?
  • 想從事大數據、海量數據處理相關的工作,如何自學打基礎?

(2) 數學、統計、數據挖掘等

除了數學、統計方面的素養之外,還需要具備使用SPSS、SAS等主流統計分析軟體的技能。其中,面向統計分析的開源編程語言及其運行環境「R」最近備受矚目。R的強項不僅在於其包含了豐富的統計分析庫,而且具備將結果進行可視化的高品質圖表生成功能,並可以通過簡單的命令來運行。此外,它還具備稱為CRAN(The Comprehensive R Archive Network)的包擴展機制,通過導入擴展包就可以使用標準狀態下所不支持的函數和數據集。R語言雖然功能強大,但是學習曲線較為陡峭,個人建議從python入手,擁有豐富的statistical libraries,NumPy ,SciPy.org ,Python Data Analysis Library,matplotlib: python plotting。

  • 如何系統地學習數據挖掘?
  • 做數據分析不得不看的書有哪些?
  • 怎麼學慣用R語言進行數據挖掘?

(3) 數據可視化(Visualization)

信息的質量很大程度上依賴於其表達方式。對數字羅列所組成的數據中所包含的意義進行分析,開發Web原型,使用外部API將圖表、地圖、Dashboard等其他服務統一起來,從而使分析結果可視化,這是對於數據科學家來說十分重要的技能之一。

  • 有哪些值得推薦的數據可視化工具?

(4) 跨界為王

麥肯錫認為未來需要更多的「translators」,能夠在IT技術,數據分析和商業決策之間架起一座橋樑的複合型人才是最被人需要的。」translators「可以驅動整個數據分析戰略的設計和執行,同時連接的IT ,數據分析和業務部門的團隊。如果缺少「translators「,即使擁有高端的數據分析策略和工具方法也是於事無補的。

The data strategists』combination of IT knowledge and experience making business decisions makes them well suited to define the data requirements for high-value business analytics. Data scientists combine deep analytics expertise with IT know-how to develop sophisticated models and algorithms. Analytic consultants combine practical business knowledge with analytics experience to zero in on high-impact opportunities for analytics.

天才的」translators「非常罕見。但是大家可以各敬其職(三個臭皮匠臭死諸葛亮),數據戰略家可以使用IT知識和經驗來制定商業決策,數據科學家可以結合對專業知識的深入理解使用IT技術開發複雜的模型和演算法,分析顧問可以結合實際的業務知識與分析經驗聚焦下一個行業爆點。

推薦關註:https://www.facebook.com/data

四、數據科學家的培養

位於伊利諾伊州芝加哥郊外埃文斯頓市的美國名牌私立大學——西北大學(Northwestern University),就是其中之一。西北大學決定從2012年9月起在其工程學院下成立一個主攻大數據分析課程的分析學研究生院,並開始了招生工作。西北大學對於成立該研究生院是這樣解釋的:「雖然只要具備一些Hadoop和Cassandra的基本知識就很容易找到工作,但擁有深入知識的人才卻是十分缺乏的。」

此外,該研究生院的課程計劃以「傳授和指導將業務引向成功的技能,培養能夠領導項目團隊的優秀分析師」為目標,授課內容在數學、統計學的基礎上,融合了尖端計算機工程學和數據分析。課程預計將涵蓋分析領域中主要的三種數據分析方法:預測分析、描述分析(商業智能和數據挖掘)和規範分析(優化和模擬),具體內容如下。

(1) 秋學期
* 數據挖掘相關的統計方法(多元Logistic回歸分析、非線性回歸分析、判別分析等)
* 定量方法(時間軸分析、概率模型、優化)
* 決策分析(多目的決策分析、決策樹、影響圖、敏感性分析)
* 樹立競爭優勢的分析(通過項目和成功案例學習基本的分析理念)

(2) 冬學期
* 資料庫入門(數據模型、資料庫設計)
* 預測分析(時間軸分析、主成分分析、非參數回歸、統計流程式控制制)
* 數據管理(ETL(Extract、Transform、Load)、數據治理、管理責任、元數據)
* 優化與啟發(整數計劃法、非線性計劃法、局部探索法、超啟發(模擬退火、遺傳演算法))

(3) 春學期
* 大數據分析(非結構化數據概念的學習、MapReduce技術、大數據分析方法)
* 數據挖掘(聚類(k-means法、分割法)、關聯性規則、因子分析、存活時間分析)
* 其他,以下任選兩門(社交網路、文本分析、Web分析、財務分析、服務業中的分析、能源、健康醫療、供應鏈管理、綜合營銷溝通中的概率模型)

(4) 秋學期
* 風險分析與運營分析的計算機模擬
* 軟體層面的分析學(組織層面的分析課題、IT與業務用戶、變革管理、數據課題、結果的展現與傳達方法)

(EMC的在線課程:

(EMC的在線課程:Data Science and Big Data Analytics Training,收費T_T,大家可以了解下學習路徑)

(5)分享一些免費的課程
以下課程免費,講師都是領域的專家,需要提前報名,請注意開班的時間。

  • Coursera.org:統計學。
  • Coursera.org:機器學習。
  • Coursera.org:數據分析的計算方法。
  • Coursera.org:大數據。
  • Coursera.org:數據科學導論。
  • Coursera.org:數據分析。

名校課程,需要一定的英語基礎和計算機基礎:

  • Statistical Thinking and Data Analysis:麻省理工學院的統計思維與數據分析課。概率抽樣,回歸,常見分布等。
  • Data Mining | Sloan School of Management:麻省理工學院的數據挖掘課程,數據挖掘的知識以及機器學習演算法。
  • Rice University Data Visualization:萊斯大學的數據可視化,從統計學的角度分析信息可視化。
  • Harvard University Introduction to Computing, Modeling, and Visualization: 哈佛大學,如何在數學計算與數據交互可視化之間架起橋樑。
  • UC Berkeley Visualization:加州大學伯克利分校數據可視化。
  • Data Literacy Course -- IAP:兩個MIT的數據研究生,如何分析處理可視化數據。
  • Columbia University Applied Data Science:哥倫比亞大學,數據分析方法。需要一定的數據基礎。
  • SML: Systems:加州大學伯克利分校,可擴展的機器學習方法。從硬體系統,並行化範式到MapReduce+Hadoop+BigTable,非常全面系統。

五、數據科學家的前景

(EMC - Leading Cloud Computing, Big Data, and Trusted IT Solutions,關於數據科學家的研究)


Like the physical universe, the digital universe is large – by 2020 containing nearly as many digital bits as there are stars in the universe. It is doubling in size every two years, and by 2020 the digital universe – the data we create and copy annually – will reach 44 zettabytes, or 44 trillion gigabytes.

Like the physical universe, the digital universe is large – by 2020 containing nearly as many digital bits as there are stars in the universe. It is doubling in size every two years, and by 2020 the digital universe – the data we create and copy annually – will reach 44 zettabytes, or 44 trillion gigabytes.

EMC預測,按照目前的情況數字宇宙以每兩年一番的速度倍增,在2020年將到達44ZB(1ZB=1.1805916207174113e+21B)。EMC做出了5點比較大膽的預測。

  • In 2013, while about 40% of the information in the digital universe required some type of data protection, less than 20% of the digital universe actually had these protections.
  • Data from embedded systems, the signals from which are a major component of the Internet of Things, will grow from 2% of the digital universe in 2013 to 10% in 2020.
  • In 2013, less than 20% of the data in the digital universe is 「touched」 by the cloud, either stored, perhaps temporarily, or processed in some way. By 2020, that percentage will double to 40%.
  • Most of the digital universe is transient – unsaved Netflix or Hulu movie streams, or Xbox One gamer interactions, temporary routing information in networks, sensor signals discarded when no alarms go off, etc. – and it is getting more so. This is a good thing, because the world』s amount of available storage capacity (i.e., unused bytes) across all media types is growing slower than the digital universe. In 2013, the available storage capacity could hold just 33% of the digital universe. By 2020, it will be able to store less than 15%.
  • In 2014, the digital universe will equal 1.7 megabytes a minute for every person on Earth.

Between 2013 and 2020 the division of the digital universe between mature and emerging markets (e.g., China) will switch – from 60% accounted for by mature markets to 60% of the data in the digital universe coming from emerging markets.

Between 2013 and 2020 the division of the digital universe between mature and emerging markets (e.g., China) will switch – from 60% accounted for by mature markets to 60% of the data in the digital universe coming from emerging markets.

EMC預測在2017年左右新興的市場將超越成熟市場,東亞國家是最具潛力的引爆點。(大家是不是有點小激動,前景一片光明)

六、結束語

推薦網站:

Data Science Central (數據科學中心,大牛雲集,資源豐富,討論者熱情,各種課程)

祝每一個DMer都挖掘到金礦和快樂:)

參考文獻:

[1].Data Scientists: The Definition of Sexy

[2].《大數據的衝擊》. 城田真琴. 野村綜合研究所創新開發部高級研究員、IT分析師,日本政府「智能雲計算研究會」智囊團成員

[3].麥肯錫. Big data: The next frontier for innovation, competition, and productivity

[4].EMC. Executive Summary: Data Growth, Business Opportunities, and the IT Imperatives

[5].EMC Greenplum"s Steven Hillion on What Is a Data Scientist?

[6].LinkedIn"s Monica Rogati On "What Is A Data Scientist?"

[7].IBM - What is a Data Scientist?

[8].Data Science and Prediction

[9].The key word in 「Data Science」 is not Data, it is Science

[10].Data Science: How do I become a data scientist?

[11].A Practical Intro to Data Science

[12].解碼數據科學家


-----------2017年1月更新-----

歡迎關注我存儲知識的地方:預見未來——Han Hsiao的知乎專欄Foresee


本文來源:Medium 譯文創見


數據分析到底是什麼?很多人都在嘴邊討論它們,卻沒有幾個人真正見過它。這是當下科技行業最為火爆的職位,今天就讓我們走進 Twitter 的數據分析世界,看看科技公司對於一個數據分析師的要求是什麼?他們的實際工作內容究竟是哪些?


Robert Chang 在 Twitter 工作兩年了。根據他個人的工作經歷,Twitter 數據分析(以下簡稱為 DS)有了下面三個層面的變化:


1.機器學習已經在 Twitter 多個核心產品中扮演越來越重要的角色,而這之前完全是「機器學習」的禁區。最典型的例子就是「當你離開時」這個功能。當用戶離開頁面或者電腦,去干別的事情後再次返回頁面,電腦會立刻給你推送出來某些由你關注的人所發出,而有可能被你錯過的「優質內容」。

2.開發工具越來越優秀了。整個團隊擺脫了對 Pig 的依賴,全新的數據管道是在 Scalding 中寫出來的。

3.從團隊組織上而言,Twitter 已經轉向了一個嵌入式的模型中。其中數據分析比以往更加緊密地與產品 / 工程團隊發生著聯繫。


在 Twitter 的工作確實是令人興奮的,因為你能站在這個平台上,引領目前世界最前沿的數據科技,打造最具競爭力的優勢。而同時,人們對於大數據的渴望也一天比一天高。


Dan Ariely 曾經有一句話說得特別好:

「大數據其實有點兒像青少年的性。每一個人都興緻勃勃地談論它,但是沒有任何一個人真的知道該怎麼做。每一個人都覺得身邊的人都在嘗試,為了不落人後,於是每個人都在外面宣城自己也已經有『伴兒』了」

現如今,有太多的人在如何成為一名優秀稱職的數據分析師上表達著看法,給出自己的建議。Robert Chang 毫無疑問也是受益者。但是他回過頭來再想想大家的討論,會覺得人們往往更加側重於去談「技術」、「工具」、「技能組合」,而在 Chang 看來,那些東西確實很重要,但是讓新人們知道數據分析師每一天的生活到底是什麼樣子的,具體的工作內容都是什麼,這也非常重要。


於是,Chang 憑藉著自己在 Twitter 工作兩年的經歷,以自己作為例子,首次打開 Twitter 數據分析師這扇神秘的大門。


A 型數據分析師 VS B 型數據分析師


Chang 在沒來 Twitter 之前,總覺得數據分析師一定是在任何領域都能看堪稱「獨角獸」,不管是數據還是數學專業,都是頂尖人才。除了技術上很牛之外,書面寫作和口頭交流的能力也會特彆強。更重要的是他們能夠分清楚當下工作的輕重緩急,領導和管理一個項目團隊。是啊,如今本身就是以數據為主導的文化,作為「數據分析師」,當然要給這個文化注入靈魂與活力啊!

在 Chang 加入 Twitter 的幾個月後,他逐漸意識到:符合上述形容的「獨角獸」確實存在,但是對於大部分人來說,上述的要求未免有點兒太不切實際了。人們沒有辦法做到面面俱到。後來,Chang 通過 Quora 中的一篇回答,更深刻地理解了數據分析師的角色。在那篇文章中,數據分析師分成了兩種類型:


A 型數據分析師: 他們主要負責「分析」。他們最關心數據背後的意義,往往使用統計等方式探知真相。其實他們的工作有點兒像「統計學家」,但是不一樣的地方是,統計學專業涉及的內容他們統統掌握,但是他們還會一些統計學課本裡面壓根不曾出現的內容:比如數據清洗,如何處理超大數據組,數據視覺化,有關數據層面的報告撰寫等等。

B 型數據分析師:B 型負責「建造」。他們跟前一種分析師有著相似的統計學背景,但他們同時還是非常牛叉的程序員,又或者是訓練有素的軟體工程師。B 型數據分析師往往感興趣於「如何利用數據來生產」。他們建立一些能夠與用戶互動的模型,往往以「推薦 / 推送」的形式出現,比如「你也許會認識的人」,「廣告」,「電影」,「搜索結果」等等功能。


Chang 看到這樣清楚的劃分,非常後悔如果早幾年有這麼清楚的概念認識該多好啊。這樣他就能夠有選擇性的發力,擇其一方向來繼續發展。這是數據分析師職場規劃首先要考慮的標準。


Chang 的個人專業背景是「數學」、「運營研究」、「統計學」。所以他更傾向於把自己定位於 A 型數據分析師,但是與此同時他對 B 型分析師能夠涉及那麼多的工程開發工作而嚮往不已。


初創公司早期、快速發展的初創公司、以及實現規模化發展的初創公司中的數據分析師職位區別

在選擇投身於科技行業的時候,最經常遇到的一個問題就是到底是加入一個大的科技公司好呢?還是加入一個小的科技公司好。在這個話題上已經有很多爭論了,但是在「數據分析」上面的爭論並不是很多。所以在本章節要具體談到的是,不同公司的規模、發展階段中,數據分析師不同的角色定位。


處於不同發展階段的科技公司生產數據的量與速度都是不一樣的。一個還在嘗試著尋找到「產品市場契合點」的初創公司完全不需要 Hadoop,因為公司本身就不存在多少的數據需要處理;而一個處在快速發展中的初創公司往往會遭遇更頻密的數據衝擊,也許 PostgreSQL 或者 Vertica 更適合這家公司的需要;而像 Twitter 這樣的公司如果不藉助 Hadoop 或者 Map-Reduce 框架,就完全無法有效地處理所有數據。


Chang 在 Twitter 學到的最有價值的一點內容就是:數據分析師從數據中提取出價值的能力,往往跟公司本身數據平台的成熟度有著密不可分的關係。如果你想要明白自己從事的是哪種類型的數據分析工作,首先去做做調研,看看你意向中的這家公司的底層系統架構能夠在多大程度上支持你的目標,這不僅僅對你好,也對公司好,藉此看你個人的職業發展目標是否跟公司的需要契合起來。

在初創公司早期,最主要的分析重點是為了實現 ETL 進程,模塊化數據,並且設計基模架構,將數據記錄應用到上面。這樣數據就能夠追蹤並存儲。此處的目標是打下分析工具的基礎,而不是分析本身。


在快速發展的初創公司的中期,因為公司在快速發展,那麼數據也在不斷的增長。數據平台需要適應不斷發展的新形勢,新條件,在已經打好基礎的前提下,開始逐漸實現向分析領域的過渡。一般來說,此時的分析工作主要圍繞著制定 KPI,推動增長,尋找下一次增長機會等工作展開。

實現了規模增長的公司。當公司實現了規模化增長,數據也開始呈幾何倍數的增長。此時公司需要利用數據來創造,或者保持某種競爭性優勢,比如更好的搜索結果,更加相關的推薦內容,物流或者運營更加的高效合理。這個時候,諸如 ML 工程師,優化專家,實驗設計師都可以參與進來一展拳腳了。


在 Chang 加入 Twitter 的時候,Twitter 已經有了非常成熟的平台以及非常穩定的底層結構。整個資料庫內容都是非常乾淨,可靠的。ETL 進程每天輕鬆處理著數百個「任務調度」工作。(Map-Reduce)。更重要的是,在數據分析領域的人才都在數據平台、產品分析、用戶增長、實驗研究等多個領域,多個重點工作齊頭並進一起展開。


他是在用戶增長領域安排的第一名專職數據分析師。事實上,這花了他們好幾個月來研究產品、工程、還有數據分析到底該如何融合,才能實現這樣一個崗位角色。Chang 的工作與產品團隊緊密連接,根據這方面的工作經驗,他將自己的工作職責劃分成為了下面幾類內容:

  • 產品分析
  • 數據傳輸通道
  • 實驗(A/B 測試)
  • 建模

下面將會按照排列次序逐一解釋


產品分析


對於一家消費級科技公司來說,產品分析意味著利用數據來更好地理解用戶的聲音和偏好。不管什麼時候用戶與產品進行著互動,Twitter 都會記錄下來最有用的數據,存儲好它們,以待未來某一天分析之用。


這個過程被稱之為「記錄」(logging)或者「工具化」(instrumentation),而且它還不斷地自我演進。通常情況下,數據分析往往很難實現某個具體的分析,因為數據要麼是不太對,要麼是缺失,要麼是格式錯誤的。在這裡,跟工程師保持非常好的關係非常有必要,因為數據分析能夠幫助工程師確認 bug 的位置,或者系統中一些非預期的行為。反過來,工程師可以幫助數據分析彌補「數據鴻溝」,使得數據內容變得豐富,彼此相關,更加準確。


下面舉出來了 Chang 在 Twitter 展開的幾項與產品有關的分析案例:

  • 推送通知分析:有多少用戶能用得到「推送通知」?不同類型的推送通知具體的點擊率都分別是多少?
  • SMS 發送率:在不同的數字載體上,Twitter 的 SMS 發送率都是怎麼計算的?是不是在發展中國家這個發送率相對比較低?我們該怎樣提升這個數字?
  • 多賬戶:為什麼在某些國家,一個人持有多個賬戶的比例會相對較高?背後是什麼動機讓一個人持有多個賬戶?

分析會以多種形式展開。有些時候公司會要求你對一次簡單的數據拉取進行最直白的解讀,又或者你需要想出一些新的方式方法來機選一個全新,且重要的運營指標。(比如 SMS 發送率),最後你會更加深刻地理解用戶的行為。(比如一個人擁有多個賬戶)


在產品分析中不斷研究,得到真知灼見,這是一個不斷迭代演進的過程。它需要不斷地提出問題,不斷地理解商業情境,找出最正確的數據組來回答相應的問題。隨著時間的累積,你將成為數據領域的專家,你會正確地估計出來執行一次分析大概得花多長時間。更重要的是,你將逐漸從一個被動響應的狀態,逐漸過渡到主動採取行動的狀態,這其中會牽連出來很多有趣的分析,這些內容都是產品負責人曾經壓根沒有考慮過的,因為他們不知道這些數據存在,又或者不同類型的數據以某種特殊的方式組合到一起竟然會得出如此驚人的結論。


此處需要的技能:

  • 保存和工具化:確認數據鴻溝。與工程部門建立良好的協作關係;
  • 有能力引導和確認相關的數據組,知道正確使用它們的方式;
  • 理解不同形式的分析,能夠在不同的分析執行之前就正確地估算出難易程度,所需時間長短;
  • 掌握你的查詢語言。一般來說是利用 R 或者 Python 來實現數據再加工;

數據管道


即使 A 型數據分析師不太可能自己編寫代碼,直接應用到用戶那裡,但是出乎很多人意料的是,包括 Chang 在內的很多 A 型數據分析師確實在給代碼庫寫東西,目的只有一個:為了數據管道處理。


如果你從 Unix 那裡聽說過「對一系列命令的執行」,那麼一個數據管道就意味著多個系列命令的執行,我們能夠不斷周而復始地自動捕捉,篩選,集合數據。


在來到 Twitter 之前,Chang 的分析絕大部分都是點對點的。在 Chang 的本地機器上,代碼執行上一次或者幾次。這些代碼很少得到審查,也不太可能實現版本控制。但是當一個數據通道出現的時候,一系列的功能就浮出水面:比如「依賴管理」、「調度」、「源頭分配」、「監控」、「錯誤報告」以及「警告」。


下面介紹了創建一個數據管道的標準流程:

  • 你忽然意識到,如果一個數據組能夠周而復始地自我重新產出,那麼這個世界估計會因此受益;
  • 在確認了需求之後,你開始設計「生產數據組」的「數據架構」;
  • 開始編寫你的代碼,不管是在 Pig,Scalding,或者 SQL 中。這取決於你的數據環境是什麼;
  • 提交代碼,進行代碼審查(code review),準備後得到回饋,並做相應額外的修改。要麼是因為你的設計邏輯不太對,要麼是你的代碼出於速度和效率的目的並沒有優化到位;
  • 應該有一個「測試」和「試運轉」的環境,確保所有的運行都在既定的軌道上。

將你的代碼融合到主庫中


建立「監控」、「錯誤報告」以及「警告」等功能,以防止未來出現預期之外的狀況。

很顯然,數據通道比一個點對點的分析工具來說更加複雜,但是優勢也非常明顯,因為它是自動化運行著的,它所產出的數據能夠進一步強化面板,這樣更多的用戶能夠消費你的數據 / 結果。


另外,更加重要但是往往被人忽略的一點結果是,對於如何打造最優化的工程設計,這是一個非常棒的學習過程。如果你在日後需要開發一個特別定製的數據通道,比如機器學習,之前所做的工作就成為了紮實的基礎。


在此處需要用到的技能:

  • 版本控制,目前最流行的就是 Git;
  • 知道如何去做「代碼審核」,並且知道如何有效地給予反饋;
  • 知道如何去測試,如何去試運行,當出現錯誤的時候知道如何「debug」;
  • 「依賴管理,調度,資源分配,錯誤報告,警告」功能的設置。

接下來的篇章中,我們將談到除了 「產品分析」 之外,其餘的三種工作內容,它們分別是:數據傳輸通道、實驗(A/B 測試)、以及建模。


數據管道


通過上文的描述,也許在很多人的概念中 A 型數據分析師不太可能自己編寫代碼,直接應用到用戶那裡,但是出乎很多人意料的是,包括 Chang 在內的很多 A 型數據分析師確實在給代碼庫寫東西,目的只有一個:為了數據管道處理。


如果你從 Unix 那裡聽說過「對一系列命令的執行」,那麼一個數據管道就意味著多個系列命令的執行,他們能夠不斷周而復始地自動捕捉,篩選,集合數據。


在來到 Twitter 之前,Chang 的分析絕大部分內容都是點對點的。在 Chang 的本地機器上,代碼執行上一次或者幾次。這些代碼很少得到審查,也不太可能實現版本控制。但是當一個數據通道出現的時候,一系列的功能就浮出水面:比如「依賴管理」、「調度」、「源頭分配」、「監控」、「錯誤報告」以及「警告」。


下面介紹了創建一個數據管道的標準流程:

1.你忽然意識到,如果一個數據組能夠周而復始地自我重新產出,那麼這個世界估計會因此受益。

2.在確認了需求之後,你開始設計「生產數據組」的「數據架構」。

3.開始編寫你的代碼,不管是在 Pig,Scalding,或者 SQL 中。這取決於你的數據環境是什麼。

4.提交代碼,進行代碼審查(code review),準備後得到回饋,並做相應額外的修改。要麼是因為你的設計邏輯不太對,要麼是你的代碼出於速度和效率的目的並沒有優化到位。

5,應該有一個「測試」和「試運轉」的環境,確保所有的運行都在既定的軌道上。

6.將你的代碼融合到主庫中。

7.建立「監控」、「錯誤報告」以及「警告」等功能,以防止未來出現預期之外的狀況。


很顯然,數據通道比一個點對點的分析工具來說更加複雜,但是優勢也非常明顯,因為它是自動化運行著的,它所產出的數據能夠進一步強化面板,這樣更多的用戶能夠消費你的數據 / 結果。


另外,更加重要但是往往被人忽略的一點結果是,對於如何打造最優化的工程設計,這是一個非常棒的學習過程。如果你在日後需要開發一個特別定製的數據通道,比如機器學習,之前所做的工作就成為了紮實的基礎。


在此處需要用到的技能:

  • 版本控制,目前最流行的就是 Git。
  • 知道如何去做「代碼審核」,並且知道如何有效地給予反饋。
  • 知道如何去測試,如何去試運行,當出現錯誤的時候知道如何"debug」。

「依賴管理,調度,資源分配,錯誤報告,警告」功能的設置。


實驗(A/B 測試)


此時此刻,非常有可能你現在使用的 Twitter App 跟我手機上裝的 App 是有一點小小的不同的,並且很有可能你在用著一個我壓根沒有見到過的功能。鑒於 Twitter 的用戶很多,它可以將其中很小的一部分流量(百分之幾)導入到一次實驗中,去測試這個尚未全面公開的功能,去了解這些被選中的用戶如何跟這個全新的功能互動,他們的反響跟那些沒有見到這個功能的用戶進行對比。

這就是 A/B 測試,去讓我們方便測試各種變數,通過 A 和 B 到底哪個方案更好。


Chang 個人的看法是:為一些較大的科技公司做事,能夠享受到的一點優勢,就是能夠從事開發和掌握業界最神秘的技能:「A/B 測試」。作為一名稱職的數據分析師,你必須利用可控制的實驗,在其中進行隨機測試,得到某種確定的因果關係。而根據 Twitter 負責工程部分 A/B 測試的副總 Alex Roetter 的話來說,「Twitter 的任何一天中,都不可能在沒有做一次實驗的前提下就草率放出某個功能。」A/B 測試就是 Twitter 的 DNA,以及產品開發模式的基礎。


A/B 測試的循環周期是這樣的:取樣-&> 分組-&>分別對待-&> 評估結果-&> 作出對比。這聽上去是不是覺得挺簡單的?其實事實完全相反。A/B 測試應該是天底下最難操作的分析之一,也是最容易被人低估難度的一項工作。這方面的知識基本上學校是不教的。為了更好的闡述觀點,分了下面五點內容,分別是五個階段,其中一些部分有可能是你從事 A/B 測試時會遇到的一些困難和挑戰。

  • 取樣—?我們需要多少的樣本?每一組分多少個用戶?我們是否能夠讓實驗具有足夠的可信度和說服力?
  • 分組—?哪些人適用於出現在這次實驗中?我們從代碼的哪一處開始起手,分出兩個版本?是否會出現數據稀釋的情況?(數據稀釋的意思就是,有些用戶被納入到了新改動的版本測試中,但是實際上他們卻壓根不打開這個 App,見不到這個新變動的功能。)
  • 區別對待-整個公司中是否還有其他的團隊在做其他的測試,瞄準的用戶是否跟此時我們鎖定的用戶群發生重疊?我們該怎樣應對「測試衝突」這種情況,保證我們的數據沒有被「污染」?
  • 評估結果-測試的假設前提是什麼?實驗成功或者失敗的指標是哪些?我們是否能做到有效的追蹤?我們是否要增加一些其他方面的數據存儲?
  • 做出比較-假設某個條件下的用戶數量發生了激增,它是不是因為其他的一些因素?我們是如何確保這些統計具有實際的意義?就算具有實際的意義,這個意義對於下面的產品改良又具有多大的指導作用?

不管回答上述的哪一個問題,都需要對統計學很好的掌握才能辦到。就算你一個人能力很強,但是團隊其他同事還是有可能給這個 A/B 實驗添亂子。


一個產品經理有可能特別心急,沒等試驗結束就要偷窺數據,又或者想當然地,按照他們想像的方式挑選自己想要的結論。(這是人性,別怪他們)。一個工程師有可能忘記存儲某個特殊的信息,又或者錯誤的寫出測試用的代碼,實驗結果出現了非常離譜的偏差。


作為數據分析師,這個時候不得不對自己和他人嚴厲一些,讓整個團隊都能高效、準確地運轉,在實驗的每一個細節上面都不能有任何的差池。時間浪費在一次徒勞無功,設計錯誤的實驗中,這些時間是找不回來的。甚至還會出現更糟糕的情況,依據一次錯誤的實驗結論形成錯誤的決策,最終給整個產品帶來極大的風險。


在此處所需要用到的技能:

  • 假設條件測試: 統計學測試,統計數據可信度,多重測試。
  • 測試中有可能出現的偏差: 按照自己想要的結果去推斷結論,延滯效應,數據稀釋,分組異常

預測型建模以及機器學習


Chang 在 Twitter 負責開發的第一個重大項目是將一組「疲勞標準」添加到 Twitter 目前的郵件通知產品中,這樣能夠降低郵箱過濾機制將 Twitter 的信息視為垃圾信息的概率,從而實現讓用戶更頻繁在收件箱中看到 Twitter 發來的電子郵件。


儘管郵件過濾機制不失為使一次偉大的發明,但是郵件通知也確實是提升客戶留存率的特別有效的辦法之一。(這個結論是 Twitter 曾經做的一次實驗中無疑中發現的)。所以,Chang 的目標就是在這其中取得平衡。


在基於上述的觀察和思考之後,Chang 想到了一個點子:觸髮式的郵件發送機制。也就是只有在用戶與產品之間發生了某種互動的情況下,這封郵件才會發送到用戶的電子郵箱。作為剛剛加入團隊的數據分析師,Chang 特別想要通過這個項目來證明自己的價值,於是決定利用非常棒的機器語言模型來預測電子郵件的 CTR(點擊率)。他將一大堆用戶級別的功能集合在 Pig 工具中,並建立了一個隨機預測模型來預測郵件點擊。這背後的想法是,如果用戶在過去很長一段時間內都對電子郵件有著低點擊率,那麼 Twitter 就會保留這封郵件,不再給他發送。


上述的想法都很好,但是只有一個問題,所有的工作都是放在本地機器的 R 中處理的。人們都很讚賞 Chang 的工作成果,但是他們不知道如何利用這個模型,因為它是無法進一步轉化成產品的。Twitter 的系統底層是無法與 Chang 的本地模型展開對話的。


這一課帶來的教訓讓 Chang 終生難忘。


一年之後,Chang 和增長團隊中的兩個人共同捕捉到了一個全新的機會,能夠打造一個用戶流失率預測模型。這一次,Chang 已經在開發數據管道上有了非常充足的經驗。這一次他們做的非常好,模型能夠針對每一個用戶自動的生成一個用戶流失概率!


幾個星期之後,他們開發了數據管道,並且確認它真的具有很有效的預測能力,他們通過將分數寫入到 Vertica,HDFS,以及 Twitter 內部一個稱之為「曼哈頓」的關鍵價值商店。這樣大家都知道了它的存在。公司無數分析師,數據分析師,工程服務部門都過來試用,進行查詢,幫其宣傳,評價非常好。這是 Chang 在 Twitter 最值得驕傲的一件事,真正把預測模型納入到了產品當中。


Chang 認為絕大部分傑出的數據分析師,尤其是 A 型的數據分析師都存在這樣一個問題,他們知道怎樣去建模,但是卻不知道怎樣把這些模型嵌入到產品系統當中。Chang 的建議是好好跟 B 型數據分析師聊聊吧,他們在這個話題上有著足夠豐富的經驗,發現 A 型和 B 型數據分析師職能重合的那一部分,想想接下來需要的一些技能組合是什麼,這樣才能讓自己在數據分析師的道路上走的更深更遠,更加寬廣。

「機器學習並不等同於 R 腳本。機器學習起源於數學,表達在代碼中,最後組裝在軟體中。你需要是一名軟體工程師,同時需要寫一點可讀的,重複使用的代碼。你的代碼將被更多人重新讀取無數次-來自 Ian Wong 在哥倫比亞數據學課堂上的講座節選。

在這裡所用到的技能:

  • 模式確認:確認哪些問題是可以通過建模的方法來加以解決的
  • 建模以及機器語言的所有基礎知識:探索型數據分析,開發功能,屬性選擇,模型選擇,模型評估,練習 / 確認 / 測試。
  • 產品化:所有上面的內容有關於數據管道的建立,使得不同的人都能夠在上面執行查詢

最後的一些話:


成為一個數據分析師確實是一件挺讓人激動的事。你能從別人根本無法達到的角度獲取真相,這足夠酷炫了。從底層開始開發數據管道或者機器語言模型,會給人帶來深層次的滿足感,當執行 A/B 測試的時候,有太多時刻會給你一種當「上帝」的趣味。即便這條路充滿了曲折以及不確定性,有很多挑戰擺在眼前,但是走在這條路上的人永遠不會退縮。任何一個聰明,有想法的年輕人都應該考慮成為一名數據分析師。


少年,你渴望力量么?


這才是真正的力量,年輕人!

這是Swami Chandrasekaran(名字這麼複雜,一定印度佬)所繪製的一張地圖。名字叫MetroMap to Data Scientist,別稱怎麼死都不知道的。該地鐵一共十條路線,道道路線都不是人走的。因為網上只有英文版,我將其翻譯成中文,再對內容作一些解釋和補充,順便也作為自己的學習。

它主要涉及的是硬(ken)技能,業務理解商業知識等數據科學家的軟技能沒有包含,什麼廣告點擊啊,用戶留存啊,AB測試啊。這個再寫也許又是很多條線路了。我寫不動的。

個人水平一般,內容解讀不算好,不少是來源於網上的摘錄。可能部分內容有錯誤,歡迎指正。

——————
Fundamentals原理
算是多學科的交叉基礎,屬於數據科學家的必備素質。

Matrices Linear Algebra
矩陣和線性代數
矩陣(Matrix)是一個按照長方陣列排列的複數或實數集合。涉及到的機器學習應用有SVD、PCA、最小二乘法、共軛梯度法等。
線性代數是研究向量、向量空間、線性變換等內容的數學分支。向量是線性代數最基本的內容。中學時,數學書告訴我們向量是空間(通常是二維的坐標系)中的一個箭頭,它有方向和數值。在數據科學家眼中,向量是有序的數字列表。線性代數是圍繞向量加法和乘法展開的。
矩陣和線性代數有什麼關係呢?當向量進行線性變換時,這種變換可以想像成幾何意義上的線性擠壓和拉扯,而矩陣則是描述這種變換的信息,由變換後的基向量決定。

矩陣和線性代數是一體的,矩陣是描述線性代數的參數。它們構成了機器學習的龐大基石。


Hash Functions,Binary Tree,O(n)

哈希函數,二叉樹,時間複雜度

哈希函數也叫散列函數,它能將任意的數據作為輸入,然後輸出固定長度的數據,這個數據 叫哈希值也叫散列值,用h表示,此時h就輸入數據的指紋。

哈希函數有一個基本特性,如果兩個哈希值不相同,那麼它的輸入也肯定不相同。反過來,如果兩個哈希值是相同的,那麼輸入值可能相同,也可能不相同,故無法通過哈希值來判斷輸入。

哈希函數常用在數據結構、密碼學中。

二叉樹是計算機科學的一個概念,它是一種樹形結構。在這個結構中,每個節點最多有兩個子樹(左子樹和右子樹),子樹次序不能顛倒。二叉樹又有多種形態。

二叉樹是樹這類數據結構的第一種樹,後續還有紅黑樹等,很多語言的set,map都是用二叉樹寫的。

時間複雜度是編程中的一個概念,它描述了執行演算法需要的時間。不同演算法有不同的時間複雜度,例如快排、冒泡等。

簡便的計算方法是看有幾個for循環,一個是O(n),兩個是O(n^2),三個是O(n^3)。當複雜度是n^3+n^2時,則取最大的量級n^3即可。

與之相對應的還有空間複雜度,它代表的是演算法佔用的內存空間。演算法通常要在時間和內存中取得一個平衡,既內存換時間,或者時間換內存。


Relational Algebra

Relational Algebra

關係代數,是一種抽象的查詢語言。基本的代數運算有選擇、投影、集合併、集合差、笛卡爾積和更名。

關係型資料庫就是以關係代數為基礎。在SQL語言中都能找到關係代數相應的計算。


Inner、Outer、Cross、Theta Join

內連接、外連接、交叉連接、θ連接

這是關係模型中的概念,也是資料庫的查詢基礎。

內連接,只連接匹配的行,又叫等值連接。

外連接,連接左右兩表所有行,不論它們是否匹配。

交叉連接是對兩個數據集所有行進行笛卡爾積運算,比如一幅撲克牌,其中有A集,是13個牌的點數集合,集合B則是4個花色的集合,集合A和集合B的交叉鏈接就是4*13共52個。

θ連接使用where子句引入連接條件,θ連接可以視作交叉連接的一個特殊情況。where 可以是等值,也可以是非等值如大於小於。

不同資料庫的join方式會有差異。


CAP Theorem

CAP定理,指的是在一個分散式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。

一致性(C):在分散式系統中的所有數據備份,在同一時刻是否同樣的值。(等同於所有節點訪問同一份最新的數據副本)

可用性(A):在集群中一部分節點故障後,集群整體是否還能響應客戶端的讀寫請求。(對數據更新具備高可用性)

分區容錯性(P):以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味著發生了分區的情況,必須就當前操作在C和A之間做出選擇。

數據系統設計必須在三個性能方便做出取捨,不同的資料庫,CAP傾向性不同。


tabular data

列表數據,即二維的表格數據,關係型資料庫的基礎。


DataFrames Series

Pandas數據結構

Series是一個一維數據對象,由一組NumPy的array和一組與之相關的索引組成。Python字典和數組都能轉換成數組。Series以0為開始,步長為1作為索引。

x = Series([1,2,3,4,5])

x
0 1
1 2
2 3
3 4
4 5

DataFrames是一個表格型的數據,是Series的多維表現。DataFrames即有行索引也有列索引,可以看作Series組成的字典。


Sharding

分片

分片不是一種特定的功能或者工具,而是技術細節上的抽象處理,是水平拓展的解決方法。一般資料庫遇到性能瓶頸,採用的是Scale Up,即向上增加性能的方法,但單個機器總有上限,於是水平拓展應運而生。

分片是從分區(Partition)的思想而來,分區通常針對錶和索引,而分片可以跨域資料庫和物理假期。比如我們將中國劃分南北方,南方用戶放在一個伺服器上,北方用戶放在另一個伺服器上。

實際形式上,每一個分片都包含資料庫的一部分,可以是多個表的內容也可以是多個實例的內容。當需要查詢時,則去需要查詢內容所在的分片伺服器上查詢。它是集群,但不同於Hadoop的MR。

如果能夠保證數據量很難超過現有資料庫伺服器的物理承載量,那麼只需利用MySQL5.1提供的分區(Partition)功能來改善資料庫性能即可;否則,還是考慮應用Sharding理念。另外一個流傳甚廣的觀點是:我們的數據也許沒有那麼大,Hadoop不是必需的,用sharding即可。


OLAP

聯機分析處理(Online Analytical Processing),是數據倉庫系統主要的應用,主要用於複雜的分析操作。

針對數據分析人員,數據是多維數據。查詢均是涉及到多表的複雜關聯查詢,為了支持數據業務系統的搭建,OLAP可以想像成一個多維度的立方體,以維度(Dimension)和度量(Measure)為基本概念。我們用到的多維分析就是OLAP的具象化應用。

OLAP更偏向於傳統企業,互聯網企業會靈活變動一些。

另外還有一個OLTP的概念。


Multidimensional Data Model

多維數據模型。

它是OLAP處理生成後的數據立方體。它提供了最直觀觀察數據的方法。

涉及鑽取,上卷,切片,切塊,旋轉等操作。

涉及鑽取,上卷,切片,切塊,旋轉等操作。


ETL

ETL是抽取(extract)、轉換(transform)、載入(load)的過程。常用在數據倉庫。

整個流程是從數據源抽取數據,結果數據清洗和轉換,最終將數據以特定模型載入到數據倉庫中去。

ETL是一個古老的概念,在以前SQL數據倉庫時代和OLAP伴隨而生,在現在日新月異的技術生態圈,可能會逐步變化到Hadoop相關的技術了。


Reporting vs BI vs Analytics

報表與商業智能與分析,這是BI的三個組成部分。

Reporting是數據報表。利用表格和圖表呈現數據。報表通常是動態多樣的。數個報表的集合統稱為Dashboard。

BI是商業智能,是對企業的數據進行有效整合,通過數據報錶快速作出決策。

Analytics是數據分析,基於數據報表作出分析。包括趨勢的波動,維度的對比等。


JSON XML

JSON是一種輕量級的數據交換格式,易於閱讀和編寫,也易於機器解析和生成。

JSON的語法規則是:

{ }保存對象;

[ ]保存數組;

數據由逗號分隔;

數據在鍵值對中。

下面範例就是一組JSON值

{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
}
}

XML是可拓展標記語言,被設計用來傳輸和存儲數據,與之對應的HTML則是顯示數據。XML和HTML服務於不同目的,XML是不作為的。

&
&George&
&John&
&Reminder&
&Don"t forget the meeting!&
&

上面的範例,純粹就是用來傳輸的一段信息,沒有任何意義。


NoSQL

泛指非關係型的資料庫,意為Not Only SQL。

NoSQL是隨著大數據時代發展起來的,傳統的關係資料庫在高並發大規模多數據類型的環境下力不從心,而NoSQL就是為了解決這些問題而產生的。

NoSQL主要分為四大類:

鍵值KeyValue資料庫

這類資料庫會使用哈希表,哈希表中有一個特定的鍵指向一個特定的值,KeyValue的特點是去中心化,不涉及業務關係。代表Redis。

列資料庫

這類資料庫用於分散式海量存儲,和KeyValue的區別在於這裡的Key指向的是列。橫向拓展性好,適合大數據量高IO。

代表HBase,Cassandra

文檔型資料庫

屬於KeyValue資料庫的升級版,允許嵌套鍵值。文檔是處理信息的基本單位,一個文檔等於一個關係資料庫的一條記錄。

因為文檔的自由性,文檔型資料庫適合複雜、鬆散、無結構或半結構化的數據模型,和JSON類似,叫做BSON(MongoDB的存儲格式)。

代表MongoDB

圖形資料庫

基於圖論演算法的資料庫,將數據集以圖形元素(點、線、面)建立起來。這種資料庫常應用在社交網路關係鏈,N度關係等。

代表Neo4j


Regex

正則表達式(Regular Expression),正則表通常被用來檢索、替換那些符合某個模式(規則)的字元串。通過特定字元的組合,對字元串進行邏輯過濾。例如註冊賬號時檢查對方郵件格式對不對啊,手機號格式對不對啊。

學起來靠記,記了也會忘,每次用得查,查了還得檢驗。


網上記憶口訣一堆圖表,相關網站也不少,仁者見仁了。


Vendor Landscape

不懂,供應商風景?

有評論指出是業務背景知識。對於數據科學家,業務知識另外一塊很重要的內容。我認為,好的業務知識和解決問題的能力,是大於技術技能本身的。


Env Setup

想了半天,Env應該是環境安裝的意思,IDE啊,GUI啊等等全部安裝上去,再調各種路徑啥的。

針對數據科學家,Anaconda + Rstudio用的比較多。


——————

Statistics 統計

統計是數據科學家的核心能力之一,機器學習就是基於統計學原理的,我不算精通這一塊,許多內容都是網路教科書式的語言。都掌握後再重寫一遍。

Pick a Dataset(UCI Repo)

找數據(UCI數據集)

UCI資料庫是加州大學歐文分校(University of CaliforniaIrvine)提出的用於機器學習的資料庫,這個資料庫目前共有335個數據集,其數目還在不斷增加,可以拿來玩機器學習。

UCI Machine Learning Repository: Data Sets

另外的數據來源是Kaggle競賽等


Descriptive Statistics(mean, median, range, SD, Var)

描述性統計(均值,中位數,極差,標準差,方差)。

均值也叫平均數,是統計學中的概念。小學學習的算數平均數是其中的一種均值,除此以外還有眾數和中位數。

中位數可以避免極端值,在數據呈現偏態的情況下會使用。

極差就是最大值減最小值。

標準差,也叫做均方差。現實意義是表述各數據偏離真實值的情況,反映的是一組數據的離散程度。平均數相同的兩組數據,如[1,9]和[4,6],平均數相同,標準差不一樣,前者的離散程度更大。

方差,是標準差的平方。方差和標準差的量綱是一致的。在實際使用過程中,標準差需要比方差多一步開平方的運算,但它在描述現實意義上更貼切,各有優劣。


Exploratory Data Analysis

探索性數據分析

獲得一組數據集時,通常分析師需要掌握數據的大體情況,此時就要用到探索性數據分析。

主要是兩類:

圖形法,通過直方圖、箱線圖、莖葉圖、散點圖快速匯總描述數據。

數值法:觀察數據的分布形態,包括中位數、極值、均值等,觀察多變數之間的關係。

探索性數據分析不會涉及到複雜運算,而是通過簡單的方式對數據有一個大概的了解,然後才去深入挖掘數據價值,在Python和R中,都有相關的summary函數。


Histograms

直方圖,又稱質量分布圖,是一種表示數據分布的統計報告圖。

近似圖表中的條形圖,不過直方圖的各矩行是連續排列,因為分組數據具有連續性,不能放開。

正常的直方圖是中間高、兩邊低、左右近似對稱。而異常型的直方圖種類過多,不同的異常代表不同的可能情況。


Percentiles Outliers

百分位數和極值,描述性統計的元素。

百分位數指將一組數據從小到大排序,並計算相遇的累積百分值,某一百分位所對應數據的值就稱為這一百分位的百分位數。比如1~100的數組中,25代表25分位,60代表60分位。

我們常將百分位數均勻四等分:第25百分位數,叫做第一四分位數;第50百分位數,稱第二四分位數,也叫中位數;第75百分位數,叫做第三四分位數。通過四分位數能夠簡單快速的衡量一組數據的分布。

百分位數和極值可以用來描繪箱線圖。


Probability Theory

概率論,統計學的核心之一,主要研究隨機現象發生的可能性。


Bayes Theorem

貝葉斯定理,關於隨機事件A和B的條件概率的定理。

現實世界有很多通過某些信息推斷出其他信息的推理和決策,比如看到天暗了、蜻蜓低飛了,那麼就表示有可能下雨。這組關係被稱為條件概率:用P(A|B)表示在B發生的情況下A發生的可能性。

貝葉斯公式:P(B|A) = P(A|B)*P(B) / P(A)

現實生活中最經典的例子就是疾病檢測,如果某種疾病的發病率為千分之一。現在有一種試紙,它在患者得病的情況下,有99%的準確判斷患者得病,在患者沒有得病的情況下,有5%的可能誤判患者得病。現在試紙說一個患者得了病,那麼患者真的得病的概率是多少?

從我們的直覺看,是不是患者得病的概率很大,有80%?90%?實際上,患者得病的概率只有1.9%。關鍵在哪裡?一個是疾病的發病率過低,一個是5%的誤判率太高,導致大多數沒有得病的人被誤判。這就是貝葉斯定理的作用,用數學,而不是直覺做判斷。

最經典的應用莫過於垃圾郵件的過濾。


Random Variables

隨機變數,表示隨機試驗各種結果的實際值。比如天氣下雨的降水量,比如某一時間段商城的客流量。

隨機變數是規律的反應,扔一枚硬幣,既有可能正面、也有可能反面,兩者的概率都是50%。扔骰子,結果是1~6之間的任何一個,概率也是六分之一。雖然做一次試驗,結果肯定是不確定性的,但是概率是一定的。


Cumul Dist Fn(CDF)

累計分布函數(Cumulative Distribution Function),是概率密度函數的積分,能夠完整描述一個實數隨機變數X的概率分布。直觀看,累積分布函數是概率密度函數曲線下的面積。

上圖陰影部分就是一個標準的累積分布函數F(x),給定任意值x,計算小於x的概率為多大。實際工作中不會涉及CDF的計算,都是計算機負責的。記得在我大學考試,也是專門查表的。

上圖陰影部分就是一個標準的累積分布函數F(x),給定任意值x,計算小於x的概率為多大。實際工作中不會涉及CDF的計算,都是計算機負責的。記得在我大學考試,也是專門查表的。

現實生活中,我們描述的概率都是累積分布函數,我們說這個事件有95%的可能性發生,實際指代的是至少95%,包含96%的概率,97%概率等。


Continuos Distributions(Normal, Poisson, Gaussian)

連續分布(正態、泊松、高斯)

分布有兩種,離散分布和連續分布。連續分布是隨機變數在區間內能夠取任意數值。

正態分布是統計學中最重要的分布之一,它的形狀呈鍾型,兩頭低,中間高,左右對稱。

正態分布有兩個參數,期望μ和標準差σ:μ反應了正態分布的集中趨勢位置,σ反應了離散程度,σ越大,曲線越扁平,σ越小,曲線越窄高。

正態分布有兩個參數,期望μ和標準差σ:μ反應了正態分布的集中趨勢位置,σ反應了離散程度,σ越大,曲線越扁平,σ越小,曲線越窄高。

自然屆中大量的現象都按正態形式分布,標準正態分布則是正態分布的一種,平均數為0,標準差為1。應用中,都會將正態分布先轉換成標準正態分布進行計算。很多統計學方法,都會要求數據符合正態分布才能計算。

泊松分布是離散概率分布。適合描述某個隨機事件在單位時間/距離/面積等出現的次數。當n出現的次數足夠多時,泊松分布可以看作正態分布。

高斯分布就是正態分布。


Skewness

偏度,是數據分布傾斜方向和程度的度量,當數據非對稱時,需要用到偏度。

正態分布的偏度為0,當偏度為負時,數據分布往左偏離,叫做負偏離,也稱左偏態。反之叫右偏態。


ANOVA

方差分析,用於多個變數的顯著性檢驗。基本思想是:通過分析研究不同來源的變異對總變異的貢獻大小,從而確定可控因素對研究結果影響力的大小。

方差分析屬於回歸分析的特例。方差分析用於檢驗所有變數的顯著性,而回歸分析通常針對單個變數的。


Prob Den Fn(PDF)

概率密度函數,是用來描述連續型隨機變數的輸出值。

概率密度函數應該和分布函數一起看

藍色曲線是概率密度函數,陰影部分是累積分布函數。我們用概率密度函數在某一區間上的積分來刻畫隨機變數落在這個區間中的概率。概率等於區間乘概率密度,累積分布等於所有概率的累加。

藍色曲線是概率密度函數,陰影部分是累積分布函數。我們用概率密度函數在某一區間上的積分來刻畫隨機變數落在這個區間中的概率。概率等於區間乘概率密度,累積分布等於所有概率的累加。

概率密度函數:f(x) = P(X=x)

累積分布函數:F(x) = P(X&<=x)

概率密度函數是累積分布函數的導數,現有分布函數,才有密度函數。累積分布函數即可以離散也可以連續,而密度函數是用在連續分布中的。


Central Limit THeorem

中心極限定理,它是概率論中最重要的一類定理。

自然屆中很多隨機變數都服從正態分布,中心極限定理就是理解和解釋這些隨機變數的。我們有一個總體樣本,從中取樣本量為n的樣本,這個樣本有一個均值,當我們重複取了m次時,對應有m哥均值,如果我們把數據分布畫出來,得到的結果近似正態分布。它神奇的地方就在於不管總體是什麼分布。


Monte Carlo Method

蒙特卡羅方法,是使用隨機數來解決計算問題的方法。

蒙特卡羅是一個大賭場,以它命名,含義近似於隨機。我們有時候會因為各種限制而無法使用確定性的方法,此時我們只能隨機模擬,用通過概率實驗所求的概率來估計我們感興趣的一個量。最知名的例子有布豐投針試驗。

18世紀,布豐提出以下問題:設我們有一個以平行且等距木紋鋪成的地板,木紋間距為a,現在隨意拋一支長度l比木紋之間距離a小的針,求針和其中一條木紋相交的概率。

布豐計算出來了概率為p = 2l/πa。

為了計算圓周率,人們紛紛投針,以實際的試驗結果來計算。

下圖則是計算機模擬的結果


這就是蒙特卡羅方法的實際應用。它的理論依據是大數定理和中心極限定理。


Hypothesis Testing

假設檢驗,是根據一定的假設條件由樣本推斷總體的方法。

首先根據實際問題作出一個假設,記作H0,相反的假設稱為備擇假設。它的核心思想是小概率反證法,如果這個假設發生的概率太小以至於不可能發生,結果它發生了,那麼我們認為假設是不成立的。

假設檢驗是需要容忍的,因為樣本會存在波動,這個波動範圍不會太嚴格,在這個範圍內出現的事件我們都能接受。但是我們都這麼容忍了,還是出現了違背原假設的小概率事件,那麼說明原假設有問題。不能容忍的範圍即拒絕域,在拒絕域發生的概率我們都認為它是小概率事件。

假設檢驗容易犯兩類錯誤,第一類錯誤是真實情況為h0成立,但判斷h0不成立,犯了「以真為假」的錯誤。第二類錯誤是h0實際不成立,但判斷它成立,犯了「以假為真」的錯誤。

假設檢驗有U檢驗、T檢驗、F檢驗等方法。


p-Value

P值是進行假設檢驗判定的一個參數。當原假設為真時樣本觀察結果(或更極端結果)出現的概率。P值很小,說明原假設發生的概率很小,但它確實發生了,那麼我們就有理由拒絕原假設。

至於P值的選擇根據具體情況,一般是1%,5%幾個檔次。

然而,P值在統計學上爭議很大,P值是否是接受原假設的標準,都是統計學各種流派混合後的觀點。P值從來沒有被證明可以用來接收某個假設(所以我上文的說明並不嚴謹)。所以現在統計學家們也開始倡導:應該給出置信區間和統計功效,實際的行動判讀還是留給人吧。


Chi2 Test

卡方檢驗,Chi讀作卡。通常用作獨立性檢驗和擬合優度檢驗。

卡方檢驗基於卡方分布。檢驗的假設是觀察頻數與期望頻數沒有差別。

獨立性檢驗:卡方分布的一個重要應用是基於樣本數據判斷兩個變數的獨立性。獨立性檢驗使用列聯表格式,因此也被稱為列聯表檢驗。原假設中,列變數與行變數獨立,通過每個單元格的期望頻數檢驗統計量。

擬合優度檢驗:它依據總體分布狀況,計算出分類變數中各類別的期望頻數,與分布的觀察頻數進行對比,判斷期望頻數與觀察頻數是否有顯著差異。目的是判斷假設的概率分布模型是否能用作研究總體的模型。

獨立性檢驗是擬合優度檢驗的推廣。


Estimation

估計

統計學裡面估計分為參數估計和非參數估計。

參數估計是用樣本指標估計總體指標,這個指標可以是期望、方差、相關係數等,指標的正式名稱就是參數。當估計的是這些參數的值時,叫做點估計。當估計的是一個區間,即總體指標在某範圍內的可能時,叫做區間估計,簡單認為是人們常說的有多少把握保證某值在某個範圍內。

參數估計需要先明確對樣本的分布形態與模型的具體形式做假設。常見的估計方法有極大似然估計法、最小二乘法、貝葉斯估計法等。

非參數估計則是不做假設,直接利用樣本數據去做逼近,找出相應的模型。


Confid Int(CI)

置信區間,是參數檢驗中對某個樣本的總體參數的區間估計。它描述的是這個參數有一定概率落在測量結果的範圍程度。這個概率叫做置信水平。

以網上例子來說,如果在一次大選中某人的支持率為55%,而置信水平0.95以上的置信區間是(50%,60%),那麼他的真實支持率有95%的概率落在和50~60的支持率之間。我們也可以很容易的推得,當置信區間越大,置信水平也一定越大,落在40~70%支持率的可能性就有99%了。當然,越大的置信區間,它在現實的價值也越低。

置信區間經常見於抽樣調研,AB測試等。


MLE

極大似然估計,它是建立在極大似然原理的基礎上。

如果試驗如有若干個可能的結果A,B,C…。若在僅僅作一次試驗中,結果A出現,則一般認為試驗條件對A出現有利,也即A出現的概率很大。

此時我們需要找出某個參數,參數能使這個樣本出現的概率最大,我們當然不會再去選擇其他小概率的樣本,所以乾脆就把這個參數作為估計的真實值。


Kernel Density Estimate

核密度估計,概率論中估計未知的密度函數,屬於非參數檢驗。

一般的概率問題,我們都會假定數據分布滿足狀態,是基於假定的判別。這種叫參數檢驗。如果如果數據與假定存在很大的差異,那麼這些方法就不好用,於是便有了非參數檢驗。核密度估計就是非參數檢驗,它不需要假定數據滿足那種分布。


Regression

回歸

回歸,指研究一組隨機變數(Y1 ,Y2 ,…,Yi)和另一組(X1,X2,…,Xk)變數之間關係的統計分析方法,又稱多重回歸分析。通常Y1,Y2,…,Yi是因變數,X1、X2,…,Xk是自變數。

回歸分析常用來探討變數之間的關係,在有限情況下,也能推斷相關性和因果性。而在機器學習領域中,它被用來預測,也能用來篩選特徵。

回歸包括線性回歸、非線性回歸、邏輯回歸等。上圖就是線性回歸。

回歸包括線性回歸、非線性回歸、邏輯回歸等。上圖就是線性回歸。


Convariance

協方差,用于衡量兩個變數的總體誤差,方差是協方差的一種特殊情況,即兩個變數相同。

協方差用數據期望值E計算:cov(x,y) = E[XY]-E[X][Y]。

如果XY互相獨立,則cov(x,y)=0.此時E[XY] = E[X][Y]。


Correlation

相關性,即變數之間的關聯性,相關性只涉及數學層面,即一個變數變化,另外一個變數會不會變化,但是兩個變數的因果性不做研究。

相關關係是一種非確定性的關係,即無法通過一個變數精確地確定另外一個變數,比如我們都認為,一個人身高越高體重越重,但是不能真的通過身高去確定人的體重。


Pearson Coeff

皮爾遜相關係數,度量兩個變數線性相關性的係數,用r表示,其值介於-1與1之間。1表示完全正相關,0表示完全無關,-1表示完全負相關。


Causation

因果性,和相關性是一堆好基友。相關性代表數學上的關係,但並不代表具有因果。

夏天,吃冷飲的人數和淹死的人數都呈現正相關。難道是吃冷飲導致了淹死?不是的,是因為天熱,天熱吃冷飲的人多了,游泳的人也多了。

《大數據時代》曾經強調,我們應該重視相關性而不是因果性,這是存疑的,因為對數據科學家來說,對業務因果性的了解往往勝於相關性,比如你預測一個人是否會得癌症,你不能拿是否做過放療作為特徵,因為放療已經是癌症的果,必然是非常強相關,但是對預測沒有任何幫助,只是測試數據上好看而已。


Least2 fit

最小二乘法,是線性回歸的一種用於機器學習中的優化技術。

最小二乘的基本思想是:最優擬合直線應該是使各點到回歸直線的距離和最小的直線,即平方和最小。它是基於歐式距離的。


Eculidean Distance

歐氏距離,指在m維空間中兩個點之間的真實距離。小學時求的坐標軸軸上兩個點的直線距離就是二維空間的歐式距離。

二維:sqrt{(x_{1}-x_{2}) ^{2} +(y_{1}-y_{2})^{2}}

——————

Programming 編程

數據科學家是需要一定的編程能力,雖然不需要程序員那麼精通,注重的是解決的能力,而不是工程化的能力。作者從內容看更推崇R,我個人是推崇Python的。


Python Basics


Python基礎知識。

人生苦短,我用Python。

Python的基礎內容比R豐富的多,近幾年,Python有作為第一數據科學語言的趨勢。基礎內容就不多複述了。


Working in Excel

Excel幹活,掌握常用函數,懂得數據分析庫,會Power系列加分。VBA這種就不用學了。


R Setup, RStudio R

安裝R和RStudio,R是一門統計學語言。

下列的內容,都是R語言相關。


R Basics

R的基礎,不多作陳述了。


Varibles

變數

變數是計算機語言中的抽象概念,可以理解成我們計算的結果或者值,不同計算語言的變數性質不一樣。主要理解R和Python的變數就行。大數據那塊可能還會涉及到Java和Scala。

R 用 &<- 給變數賦值,=也能用,但不建議。


Vectors

向量,向量是一維數組,可以存儲數值型、字元型或邏輯型數據的一維數組。R裡面使用函數c( )創建向量。

v &<- c(1,2,3,4)

向量中的數據必須擁有相同的數據類型,無法混雜。


Matrices

矩陣是一個二維數組,和向量一樣,每個元素必須擁有相同的數據類型。當維度超過2時,我們更建議使用數組

m &<- matrix(1:20,nrow=5,ncol=4)

Arrays

數組與矩陣類似,但是維度可以大於2,數據類型必須一樣。

a &<- array(1:20,c(4,5))

Factors

因子是R中的有序變數和類別變數。

類別變數也叫做名義變數,它沒有順序之分,比如男女,雖然編碼中可能男為1,女為2,但不具備數值計算含義。有序變數則表示一種順序關係,少年、青年、老年則是一種有序變數。

f &<- factor(c("type1","type2","type1))

在factor函數中加入參數ordered = True,就表示為有序型變數了。


Lists

列表,是R最複雜的數據類型,它可以是上述數據結構的組合。

l &<- list(names = v,m,a,f )

上述例子就包含了向量、矩陣、數組、因子。我們可以使用雙重方括弧[[ ]]選取列表中的元素。R中的下標不從0開始,所以list[[1]] 選取的是v。


Data Frames

數據框,在R和Python中為常用的數據結構。

R語言中為data.frame,Python中為Pandas的DataFrame。這裡以R語言舉例。

數據框可以包含不同數據類型的列,它是比矩陣更廣泛的概念,也是R中最常用的數據結構。每一列的數據類型必須唯一。

x &<- data.frame(col1,col2,col3)

Reading CSV Data

讀取CSV


Reading Raw Data

讀取原始數據,不清楚這和CSV的區別。


Subsetting Data

構建數據集

R提供了常用函數方便我們構建數據集(反正來去都那幾個英文)。

數據集合併使用merge函數。

添加數據行使用rbind函數。

dataframe選取子集用[ row,column]。

刪除變數可以通過 &<- Null。

複雜查詢則使用subset函數。

如果已經習慣SQL函數,可以載入library(sqldf)後用sqldf函數。


Manipulate Data Frames

操作數據框

除了上面的構建數據集的技巧,如果我們需要更複雜的操作,加工某些數據,如求變數和、計算方差等,則要用到R語言的其他函數。

R本身提供了abs(x),sort(x),mean(x),cos(x)等常用的統計方法,如何應用在數據框呢?我們使用apply函數,可將任意一個函數應用在矩陣、數組、數據框中。

apply(dataframe,margin,fun)

Functions

函數

R語言自帶了豐富的統計函數,可以通過官方/第三方文檔查詢,R也可以自建函數。

myfunction &<- function(arg1,arg2,){ statements return(object) }

函數中的對象只在函數內部使用。如果要調試函數,可以使用warning( ),messagr( ),stop( )等糾錯。


Factor Analysis

因子分析,我不知道這塊的編程基礎內容為什麼要加入因子分析。

R語言的因子分析函數是factanal()


Install Pkgs

調包俠

R的包非常豐富(Python更是),可以通過cran下載,包括爬蟲、解析、各專業領域等。函數library可以顯示有哪些包,可能直接加入包。RStudio則提供了與包相關的豐富查詢界面。


——————

Machine Learning機器學習

數據科學的終極應用,現在已經是深度學習了。這條路也叫從調包到科學調參。這裡的演算法屬於經典演算法,但是向GBDT、XGBoost、RF等近幾年競賽中大發異彩的演算法沒有涉及,應該是寫得比較早的原因。


What is ML?

機器學習,區別於數據挖掘,機器學習的演算法基於統計學和概率論,根據已有數據不斷自動學習找到最優解。數據挖掘能包含機器學習的演算法,但是協同過濾,關聯規則不是機器學習,在機器學習的教程上看不到,但是在數據挖掘書本能看到。


Numerical Var

機器學習中主要是兩類變數,數值變數和分量變數。

數值變數具有計算意義,可用加減乘除。數據類型有int、float等。

在很多模型中,連續性的數值變數不能直接使用,為了模型的泛化能力會將其轉換為分類變數。


Categorical Var

分類變數可以用非數值表示。

有時候為了方便和節省存儲空間,也會用數值表示,比如1代表男,0代表女。但它們沒有計算意義。在輸入模型的過程中,會將其轉變為啞變數。


Supervised Learning

監督學習

機器學習主要分為監督學習和非監督學習。

監督學習是從給定的訓練集中學習出一個超級函數Y=F(X),我們也稱之為模型。當新數據放入到模型的時候,它能輸出我們需要的結果達到分類或者預測的目的。結果Y叫做目標,X叫做特徵。當有新數據進入,能夠產生新的準確的結果。

既然從訓練集中生成模型,那麼訓練集的結果Y應該是已知的,知道輸入X和輸出Y,模型才會建立,這個過程叫做監督學習。如果輸出值是離散的,是分類,如果輸出值是連續的,是預測。

監督學習常見於KNN、線性回歸、樸素貝葉斯、隨機森林等。


Unsupervied Learning

非監督學習

無監督學習和監督學習,監督學習是知道結果Y,無監督學習是不知道Y,僅通過已有的X,來找出隱藏的結構。

無監督學習常見於聚類、隱馬爾可夫模型等。


Concepts, Inputs Attributes

概念、輸入和特徵

機器學習包括輸入空間、輸出空間、和特徵空間三類。特徵選擇的目的是篩選出結果有影響的數據。


Traning Test Data

訓練集和測試集

機器學習的模型是構建在數據集上的,我們會採用隨機抽樣或者分層抽樣的將數據分成大小兩個部分,拿出大部分樣本進行建模型,留小部分樣本用剛建立的模型進行預報,通過小樣本的預測結果和真實結果做對比,來判斷模型優劣。這個叫做交叉驗證。

交叉驗證能夠提高模型的穩定性,但不是完全保險的,依舊有過擬合的風險。

通常用80%的數據構建訓練集,20%的數據構建測試集


Classifier

分類

監督學習中,如果輸出是離散變數,演算法稱為分類。

輸出的離散變數如果是二元的,則是二元分類,比如判斷是不是垃圾郵件{是,否},很多分類問題都是二元分類。與之相對的是多元分類。


Prediction

預測

監督學習中,如果輸出是連續變數,演算法稱為預測。

預測即可以是數值型,比如未來的銷量,也可以是介於[0,1]間的概率問題。

有些演算法適合分類、有些則是預測,也有演算法可以兩者混合。比如垃圾郵件判定,將50%以上概率是垃圾郵件的劃歸到是,50%以下的劃歸到否。


Lift

Lift曲線

它是衡量模型性能的一種最常用的度量,它考慮的是模型的準確性。它核心的思想是以結果作導向,用了模型得到的正類數量比不用模型的效果提升了多少?

比如某一次活動營銷,1000個用戶會有200個響應,響應率是20%。用了模型後,我通過演算法,講用戶分群,挑出了最有可能響應的用戶200個,測試後的結果是有100個,此時的響應率變成了50%。此時的Lift值為5。

上圖就是按Lift值畫出曲線的範例。縱坐標是lift值,橫坐標是挑選的的閥值。閥值越低,說明挑選的越嚴格,按上文的例子理解,挑選的就是最有可能響應的用戶。當沒有閥值時,lift就為0了。閥值通常是根據預測分數排序的。

還有一種常用的叫ROC曲線。


Overfitting

過擬合

過擬合是機器學習中常碰到的一類問題。主要體現在模型在訓練數據集上變現優秀,而在真實數據集上表現欠佳。造成的原因是為了在訓練集上獲得出色的表現,使得模型的構造如此精細複雜,規則如此嚴格,以至於任何與樣本數據稍有不同的文檔它全都認為不屬於這個類別。

上圖,黑色的線條是正常模型,綠色的線條是過擬合模型。

不同的機器學習演算法,是否容易擬合的程度也不僅相同。通常採用加大樣本數據量、減少共線性、增加特徵泛化能力的方法解決過擬合。

與之相反的是欠擬合。


Bias Variance

偏差和方差

偏差和方差除了統計學概念外,它們也是解釋演算法泛化能力的一種重要工具。

演算法在不同訓練集上得到的結果不同,我們用偏差度量演算法的期望預測和真實結果的偏離程度,這代表演算法本身的擬合能力,方差則度量了演算法受數據波動造成的影響。

偏差越小、越能夠擬合數據,方差越小、越能夠扛數據波動。


Trees Classification

樹分類

樹分類是需要通過多級判別才能確定模式所屬類別的一種分類方法。多級判別過程可以用樹狀結構表示,所以稱為樹分類器。

最經典的便是決策樹演算法。


Classification Rate

分類正確率

為了驗證模型的好壞,即最終判斷結果的對錯,我們引入了分類正確率。

分類正確率即可以判斷二分類任務,也適用於多分類任務。我們定義分類錯誤的樣本數佔總樣本的比率為錯誤率,精確度則是正確的樣本數比率。兩者相加為1。

為了更好的判斷模型,主要是業務需要,我們還加入了查准率(precision),查全率(recall),查准率是預測為真的數據中有多少是真的。查全率是真的數據中有多少數據被預測對了。

這個有點繞,主要是為了業務判斷,假如我們的預測是病人是否患了某個致死疾病,假設得病為真,我們顯然希望把全部都得病的患者找出來,那麼此時查全率(得病的患者有多少被準確預測出來)比查准率(預測得病的患者有多少真的得病了)更重要,因為這個會死人,那麼肯定是選擇有殺錯無放過。所以演算法也會更追求查全率。

演算法競賽就是基於上述指標評分的。


Decision Tress

決策樹,基本的分類和回歸方法。

可以理解成If-Then的規則集,每一條路徑都互斥且完備。決策樹分為內部節點和葉節點,內部節點就是If-Then的規則,葉節點就是分類結果。

決策樹主流有ID3、C4.5、CART演算法。

因為決策樹形成的結構是根據樹形遞歸產生,它對訓練數據表現良好,但是會產生過擬合現象。為了避免這一現象,會進行減枝。剪枝通過損失函數或代價函數實現。

決策樹的優點是:高校簡單、可解釋性強、在大型資料庫有良好表現、適合高維數據。缺點是:容易過擬合、並且分類結果會傾向擁有更多數值的特徵(基於信息增益)。

隨機森林演算法是基於決策樹的。


Boosting

提升方法,屬於集成學習的一種。提升方法Boosting一般是通過多個弱分類器組成一個強分類器,提高分類性能。簡而言之是三個臭皮匠頂一個諸葛亮。

通過對訓練集訓練出一個基學習器,然後根據基學習器的分類表現跳轉和優化,分類錯誤的樣本將會獲得更多關注,以此重複迭代,最終產生的多個基分類器進行加強結合得出一個強分類器。

主流方法是AdaBoost,以基分類器做線性組合,每一輪提高前幾輪被錯誤分類的權值。


Naive Bayes Classifiers

樸素貝葉斯分類,基於貝葉斯定理的分類方法。樸素貝葉斯法的使用條件是各特徵互相獨立。

這裡引入經典的貝葉斯定理:P(B|A ) =  frac{P(A|B )P(B)}{P(A)}

在演算法中,我們的B就是分類結果Target,A就是特徵。意思是在特徵已經發生的情況下,發生B的概率是多少?

概率估計方法有極大似然估計和貝葉斯估計,極大似然估計容易產生概率值為0的情況。

優點是對缺失數據不太敏感,演算法也比較簡單。

缺點是條件互相獨立在實際工作中不太成立。


K-Nearest Neighbour

K近鄰分類。

K近鄰分類的特點是通過訓練數據對特徵向量空間進行劃分。當有新的數據輸入時,尋找距離它最近的K個實例,如果K個實例多數屬於某類,那麼就把新數據也算作某類。

特徵空間中,每個訓練數據都是一個點,距離該點比其他點更近的所有點將組成一個子空間,叫做單元Cell,這時候,每個點都屬於一個單元,單元將是點的分類。

特徵空間中,每個訓練數據都是一個點,距離該點比其他點更近的所有點將組成一個子空間,叫做單元Cell,這時候,每個點都屬於一個單元,單元將是點的分類。

k值的選擇將會影響分類結果,k值越小,模型越複雜,容易過擬合,不抗干擾。K值越大,模型將越簡單,分類的準確度會下降。上圖是K=1時的子空間劃分,下圖是K=5時的子空間劃分,從顏色很直觀的看到影響。

k值的選擇將會影響分類結果,k值越小,模型越複雜,容易過擬合,不抗干擾。K值越大,模型將越簡單,分類的準確度會下降。上圖是K=1時的子空間劃分,下圖是K=5時的子空間劃分,從顏色很直觀的看到影響。


K近鄰的這類基於距離的演算法,訓練的時間複雜度低,為O(n),適用範圍範圍廣。但是時間複雜度低是通過空間複雜度換來的,所以需要大量的計算資源和內存。另外樣本不平衡問題解決不了。

Logistic Regression

邏輯斯諦回歸,簡稱邏輯回歸。

邏輯回歸屬於對數線性模型,雖然叫回歸,本質卻是分類模型。如果我們要用線性模型做分類任務,則找到sigmoid函數將分類目標Y和回歸的預測值聯繫起來,當預測值大於0,判斷正例,小於0為反例,等於0任意判別,這個方法叫邏輯回歸模型。

模型參數通過極大似然法求得。邏輯回歸的優點是快速和簡單,缺點是高維數據支持不好,容易錢擬合。


Ranking

排序,PageRank

這裡應該泛指Google的PageRank演算法。

PageRank的核心思想有2點:

1.如果一個網頁被很多其他網頁鏈接到的話說明這個網頁比較重要,也就是pagerank值會相對較高;

2.如果一個pagerank值很高的網頁鏈接到一個其他的網頁,那麼被鏈接到的網頁的pagerank值會相應地因此而提高。

PageRank並不是唯一的排名演算法,而是最為廣泛使用的一種。其他演算法還有:Hilltop 演算法、ExpertRank、HITS、TrustRank。


Linear Regression

線性回歸

線性回歸是機器學習的入門級別演算法,它通過學習得到一個線性組合來進行預測。

一般寫成F(x) = wx +b,我們通過均方誤差獲得w和b,均方誤差是基於歐式距離的求解,該方法稱為最小二乘法。簡單來說,就是找到一條線,所有數據到這條線的歐式距離之和最小。

線性回歸容易優化,模型簡單,缺點是不支持非線性。


Perceptron

感知機,是二類分類的線性分類模型。

它通過一個wx+b的超平面S劃分特徵空間。為了找出這個超平面,我們利用損失函數極小化求出。超平面的解不是唯一的,採取不同初值或誤分類點將會造成不同結果。

它通過一個wx+b的超平面S劃分特徵空間。為了找出這個超平面,我們利用損失函數極小化求出。超平面的解不是唯一的,採取不同初值或誤分類點將會造成不同結果。


Hierarchical Clustering

層次聚類,指在不同層次對數據集進行劃分,從而形成樹形的聚類結構。

它將樣本看作一個初始聚類簇,每次運算找出最近的簇進行合併,該過程不斷合併,直到滿足預設的簇的個數。

上圖就是所有樣本重複執行最終K=1時的結果。橫軸是聚類簇之間的距離,當距離=5時,我們有兩個聚類簇,當距離=3時,我們有四個聚類簇。

上圖就是所有樣本重複執行最終K=1時的結果。橫軸是聚類簇之間的距離,當距離=5時,我們有兩個聚類簇,當距離=3時,我們有四個聚類簇。


K-means Clusterning

K聚類

全稱K均值聚類,無監督學習的經典演算法。物以類聚人以群分的典型代表。

K聚類需要將原始數據無量綱化,然後設置聚類點迭代求解。K聚類的核心是針對劃分出的群簇使其最小化平方誤差。直觀說,就是讓樣本緊密圍繞群簇均值。

設置多少個聚類點多少有點主觀的意思,考察的是外部指標,即你聚類本身是想分出幾類,通過對結果的觀察以及E值判斷。

K聚類不適合多維特徵,一般3~4維即可,維度太多會缺乏解釋性,RFM模型是其經典應用。因為物以類聚,所以對偏離均值點的異常值非常敏感。


Neural Networks

神經網路

神經網路是一種模仿生物神經系統的演算法,神經網路演算法以神經元作為最基礎的單位,神經元通過將輸入數據轉換為0或1的閥值,達到激活與否的目的,但是0和1不連續不光滑,對於連續性數據,往往用sigmoid函數轉換成[0,1] 間的範圍。

將這些神經單元以層次結構連接起來,就成了神經網路。因為這個特性,神經網路有許多的參數,可不具備可解釋性。多層神經網路,它的輸入層和輸出層之間的層級叫做隱層,就是天曉得它代表什麼含義。

神經網路的層數一般是固定的,但我們也能將網路層數作為學習的目標之一,找到最適合的層數。

另外,層數越多,參數越多的神經網路複雜度越高,深度學習就是典型的層數很多的神經網路。常見的有CNN、DNN、RNN等演算法。


Sentiment Analysis

情感分析,比較前沿的一個領域。包括情感詞的正面負面分類,標註語料,情感詞的提取等。

情感分析可以通過情感關鍵詞庫計算,比如匯總開心、悲傷、難過的辭彙,計算情感值,再加入表示情感強烈程度的維度,如1~5的數值進行打分。用戶對商品評論的分析就是一個常見的情感分析:這手機太TM破了,就是5分憤怒。

然而情感詞典需要維護,構建成本較高,我們也可以用機器學習的方法將其看待為分類問題。講關鍵詞特徵向量化,常用詞袋模型(bag-of-words )以及連續分布詞向量模型(word Embedding),特徵化後,往往用CNN、RNN或者SVM演算法。


Collaborative Fitering

協同過濾,簡稱CF演算法。協同過濾不屬於機器學習領域,所以你在機器學習的書上看不到,它屬於數據挖掘。

協同過濾的核心是一種社會工程的思想:人們更傾向於向口味比較類似的朋友那裡獲得推薦。協同過濾主要分為兩類,基於用戶的user-based CF以及基於物體的item-based CF。雖然協同過濾不是機器學習,但它也會用到SVD矩陣分解計算相似性。

優點是簡單,你並不需要基於內容做內容分析和打標籤,推薦有新穎性,可以發掘用戶的潛在興趣點。

協同過濾的缺點是無法解決冷啟動問題,新用戶沒行為數據,也沒有好友關係,你是最不到推薦的;推薦會收到稀疏性的約束,你的行為越多,才會越准;隨著數據量的增大,演算法會收到性能的約束,並且難以拓展。

協同過濾可以和其他演算法混合,來提高效果。這也是推薦系統的主流做法。


Tagging

標籤/標註

這裡稍微有歧義、如果是標籤,間接理解為用戶畫像,涉及到標籤系統。用戶的男女、性別、出生地皆是標籤,越豐富的標籤,越能在特徵工程中為我們所用。

如果是分類標籤/標註,則是數據標註。有監督學習需要訓練集有明確的結果Y,很多數據集需要人工添加上結果。比如圖像識別,你需要標註圖像屬於什麼分類,是貓是狗、是男是女等。在語音識別,則需要標註它對應的中文含義,如果涉及到方言,則還需要將方言標註為普通話。

數據標註是個苦力活。


——————

Text Mining / NLP

文本挖掘,自然語言處理。這是一個橫跨人類學、語言學的交叉領域。自然語言的發展還未到成熟應用。這一塊我不是很熟悉,有誤率可能比較高。

中文的自然語言處理更有難度,這是漢語語法特性決定的,英文是一詞單詞為最小元素,有空格區分,中文則是字,且是連續的。這就需要中文在分詞的基礎上再進行自然語言處理。中文分詞質量決定了後續好壞。


Corpus

語料庫指大規模的電子文本庫,它是自然語言的基礎。語料庫沒有固定的類型,文獻、小說、新聞都可以是語料,主要取決於目的。語料庫應該考慮多個文體間的平衡,即新聞應該包含各題材新聞。

語料庫是需要加工的,不是隨便網上下載個txt就是語料庫,它必須處理,包含語言學標註,詞性標註、命名實體、句法結構等。英文語料庫比較成熟,中文語料還在發展中。


NLTK-Data

自然語言工具包

NLTK創立於2001年,通過不斷發展,已經成為最好的英語語言工具包之一。內含多個重要模塊和豐富的語料庫,比如nltk.corpus 和 nltk.utilities。Python的NLTK和R的TM是主流的英文工具包,它們也能用於中文,必須先分詞。中文也有不少處理包:TextRank、Jieba、HanLP、FudanNLP、NLPIR等。


Named Entity Recognition

命名實體識別

命名實體是確切的名詞短語,如組織、人、時間,地區等等。命名實體識別則是識別所有文字中的命名實體,是自然語言處理領域的重要基礎工具。

命名實體有兩個需要完成的步驟,一是確定命名實體的邊界,二是確定類型。漢字的實體識別比較困難,比如南京市長江大橋,會產生南京 | 市長 | 江大橋 ,南京市 | 長江大橋 兩種結果,這就是分詞的任務。確定類型則是明確這個實體是地區、時間、或者其他。可以理解成文字版的數據類型。

實體本身就代表社會和發展的變遷,很多新的實體會出現,或者實體被賦予新的含義和概念。所以不可能用一個統一的模型來刻畫所有的實體內部特徵。

命名實體主要有兩類方法,基於規則和詞典的方法,以及基於機器學習的方法。規則主要以詞典正確切分出實體,機器學習主要以隱馬爾可夫模型、最大熵模型和條件隨機域等為主。


Text Analysis

文本分析。這是一個比較大的交叉領域。以語言學研究的角度看,文本分析包括語法分析和語義分析,後者現階段進展比較緩慢。語法分析以正確構建出動詞、名詞、介詞等組成的語法樹為主要目的。


如果不深入研究領域、則有文本相似度、預測單詞、困惑值等。這是比較成熟的應用。


UIMA
UIMA 是一個用於分析非結構化內容(比如文本、視頻和音頻)的組件架構和軟體框架實現。這個框架的目的是為非結構化分析提供一個通用的平台,從而提供能夠減少重複開發的可重用分析組件。

應該只能用於英文吧,不熟悉。

Term Document Matrix

詞-文檔矩陣是一個二維矩陣,行是詞,列是文檔,它記錄的是所以單詞在所有文檔中出現頻率。所以它是一個高維且稀疏的矩陣。

這個矩陣是TF-IDF(term frequency–inverse document frequency)演算法的基礎。TF指代的詞在文檔中出現的頻率,描述的是詞語在該文檔的重要數,IDF是逆向文件頻率,描述的是單詞在所有文檔中的重要數。我們認為,在所有文檔中都出現的詞肯定是的、你好、是不是這類常用詞,重要性不高,而越稀少的詞越重要。故由總文檔數除以包含該詞的文檔數,然後取對數獲得。

詞-文檔矩陣可以用矩陣的方法快速計算TF-IDF。

它的變種形式是Document Term Matrix,行列顛倒。


Term Frequency Weight

詞頻和權重。

詞頻即詞語在文檔中出現的次數,這裡的文檔可以認為是一篇新聞、一份文本,甚至是一段對話。詞頻表示了詞語的重要程度,一般這個詞出現的越多,我們可以認為它越重要,但也有可能遇到很多無用詞,比如a、an、the、的、地、得等。這些是停用詞,應該刪除。另外一部分是日常用語,你好,謝謝,對文本分析沒有幫助,為了區分出它們,我們再加入權重。

權重代表了詞語的重要程度,像你好、謝謝這種,我們認為它的權重是很低,幾乎沒有任何價值。權重既能人工打分,也能通過計算獲得。通常,專業類辭彙我們會給予更高的權重,常用詞則低權重。

通過詞頻和權重,我們能提取出代表這份文本的特徵詞,經典演算法為TF-IDF。


Support Vector Machines

支持向量機。它是一種二類分類模型,有別於感知機,它是求間隔最大的線性分類。當使用核函數時,它也可以作為非線性分類器。

它可以細分為線性可分支持向量機、線性支持向量機,非線性支持向量機。

非線性問題不太好求解,圖左就是將非線性的特徵空間映射到新空間,將其轉換成線性分類。說的通俗點,就是利用核函數將左圖特徵空間(歐式或離散集合)的超曲面轉換成右圖特徵空間(希爾伯特空間)中的的超平面。

常用核函數有多項式核函數,高斯核函數,字元串核函數。

常用核函數有多項式核函數,高斯核函數,字元串核函數。

字元串核函數用於文本分類、信息檢索等,SVM在高維的文本分類中表現較好,這也是出現在自然語言處理路徑上的原因。


Association Rules

關聯規則,挖掘數據背後存在的信息,最知名的例子就是啤酒與尿布了,雖然它是虛構的。但我們可以理解它蘊含的意思:買了尿布的人更有可能購買啤酒。

它是形如X→Y的蘊涵式,是一種單向的規則,即買了尿布的人更有可能購買啤酒,但是買了啤酒的人未必會買尿布。我們在規則中引入了支持度和置信度來解釋這種單向。支持度表明這條規則的在整體中發生的可能性大小,如果買尿布啤酒的人少,那麼支持度就小。置信度表示從X推導Y的可信度大小,即是否真的買了尿布的人會買啤酒。

關聯規則的核心就是找出頻繁項目集,Apriori演算法就是其中的典型。頻繁項目集是通過遍歷迭代求解的,時間複雜度很高,大型數據集的表現不好。

關聯規則和協同過濾一樣,都是相似性的求解,區分是協同過濾找的是相似的人,將人劃分群體做個性化推薦,而關聯規則沒有過濾的概念,是針對整體的,與個人偏好無關,計算出的結果是針對所有人。


Market Based Analysis

這裡應該是Market Basket Analysis 購物籃分析的意思。

傳統零售業中,購物籃指的是消費者一次性購買的商品,收營條上的單子數據都會被記錄下來以供分析。更優秀的購物籃分析,還會用紅外射頻記錄商品的擺放,顧客在超市的移動,人流量等數據。

關聯規則是購物籃分析的主要應用,但還包括促銷打折對銷售量的影響、會員制度積分制度的分析、回頭客和新客的分析。


Feature Extraction

特徵提取

特徵提取是特徵工程的重要概念。數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。而很多模型都會遇到維數災難,即維度太多,這對性能瓶頸造成了考驗。常見文本、圖像、聲音這些領域。

為了解決這一問題,我們需要進行特徵提取,將原始特徵轉換成最有重要性的特徵。像指紋識別、筆跡識別,這些都是有實體有跡可循的,而表情識別等則是比較抽象的概念。這也是特徵提取的挑戰。

不同模式下的特徵提取方法不一樣,文本的特徵提取有TF-IDF、信息增益等,線性特徵提取包括PCA、LDA,非線性特徵提取包括核Kernel。


Using Mahout

Mahout是Hadoop中的機器學習分散式框架,中文名驅象人。

Mahout包含了三個主題:推薦系統(協同過濾)、聚類和分類。分別對應不同的場景。Mahout在Hadoop平台上,藉助MR計算框架,可以簡便化的處理不少數據挖掘任務。

Mahout已經不再維護新的MR,還是投向了Spark,與Mlib互為補充。


Using Weka

Weka是一款免費的,基於JAVA環境下開源的機器學習以及數據挖掘軟體。


Using NLTK

使用自然語言工具包


Classify Text

文本分類

將文本集進行分類,與其他分類演算法沒有本質區別。假如現在要將商品的評論進行正負情感分類,首先分詞後要將文本特徵化,因為文本必然是高維,我們不可能選擇所有的詞語作為特徵,而是應該以最能代表該文本的詞作為特徵,例如只在正情感中出現的詞:特別棒,很好,完美。計算出卡方檢驗值或信息增益值,用排名靠前的單詞作為特徵。

所以評論的文本特徵就是[word11,word12,……],[word21,word22,……],轉換成高維的稀疏矩陣,之後則是選取最適合的演算法了。

垃圾郵件、反黃鑒別、文章分類等都屬於這個應用。


Vocabulary Mapping

辭彙映射。

NLP有一個重要的概念,本體和實體,本體是一個類,實體是一個實例。比如手機就是本體、iPhone和小米是實體,它們共同構成了知識庫。很多文字是一詞多意或者多詞一意,比如蘋果既可以是手機也可以是水果,iPhone則同時有水果機、蘋果機、iPhone34567的諸多叫法。計算機是無法理解這麼複雜的含義。辭彙映射就是將幾個概念相近的辭彙統一成一個,讓計算機和人的認知沒有區別。


——————

Visualization數據可視化

這是難度較低的環節,統計學或者大數據,都是不斷發展演變,是屬於終身學習的知識,而可視化只要了解掌握,可以受用很多年。這裡並不包括可視化的編程環節。

Uni, Bi Multivariate Viz

在數據可視化中,我們通過不同的變數/維度組合,可以作出不同的可視化成果。單變數、雙變數和多變數有不同作圖方式。


ggplot2

R語言的一個經典可視化包

ggoplot2的核心邏輯是按圖層作圖,每一個語句都代表了一個圖層。以此將各繪圖元素分離。

ggplot(...) +
geom(...) +
stat(...) +
annotate(...) +
scale(...) +

上圖就是典型的ggplot2函數風格。plot是整體圖表,geom是繪圖函數,stat是統計函數,annotate是注釋函數,scale是標尺函數。ggplot的繪圖風格是灰底白格。



ggplot2的缺點是繪圖比較緩慢,畢竟是以圖層的方式,但是瑕不掩瑜,它依舊是很多人使用R的理由。


Histogram Pie(Uni)

直方圖和餅圖(單變數)

直方圖已經介紹過了,這裡就放張圖。



餅圖不是常用的圖形,若變數之間的差別不大,如35%和40%,在餅圖的面積比例靠肉眼是分辨不出來。


Tree Tree Map

樹圖和矩形樹圖。

樹圖代表的是一種結構。層次聚類的實例圖就屬於樹圖。

當維度的變數多大,又需要對比時,可以使用矩形樹圖。通過面積表示變數的大小,顏色表示類目。


Scatter Plot (Bi)

散點圖(雙變數),數據探索中經常用到的圖表,用以分析兩個變數之間的關係,也可以用於回歸、分類的探索。


利用散點圖矩陣,則能將雙變數拓展為多變數。


Line Charts (Bi)

折線圖(雙變數)

常用於描繪趨勢和變化,和時間維度是好基友,如影隨形。


Spatial Charts

空間圖,應該就是地圖的意思。

一切涉及到空間屬性的數據都能使用地理圖。地理圖需要表示坐標的數據,可以是經緯度、也可以是地理實體,比如上海市北京市。經緯度的數據,常常和POI掛鉤。


Survey Plot

不知道具體的含義,粗略翻譯

plot是R中最常用的函數,通過plot(x,y),我們可以設定不同的參數,決定使用那種圖形。


Timeline

時間軸


當數據涉及到時間,或者存在先後順序,我們可以使用時間軸。


不少可視化框架,也支持以時間播放的形式描述數據的變化。

Decision Tree

決策樹。這裡的決策樹不是演算法,而是基於解釋性好的一個應用。

當數據遇到是否,或者選擇的邏輯判斷時,決策樹不失為一種可視化思路。


D3.js

知名的數據可視化前端框架。

d3可以製作複雜的圖形,像直方圖散點圖這類,用其他框架完成比較好,學習成本比前者低。

d3是基於svg的,當數據量變大運算複雜後,d3性能會變差。而canvas的性能會好不少,國內的echarts基於後者。有中文文檔,屬於比較友好的框架。

R語言中有一個叫d3NetWork的包,Python則有d3py的包,當然直接搭建環境也行。


IBM ManyEyes

Many Eyes是IBM公司的一款在線可視化處理工具。該工具可以對數字,文本等進行可視化處理。應該是免費的。圖網上隨便找的。

Tableau

國外知名的商用BI,分為Desktop和Server,前者是數據分析單機版,後者支持私有化部署。加起來得幾千美金,挺貴的。圖網上隨便找的。

——————

Big Data 大數據

越來越火爆的技術概念,Hadoop還沒有興起幾年,Spark第二代已經後來居上。 因為作者寫的比較早,新技術沒有過多涉及。因為工具比較多,沒有涉及的我就簡略了。

Map Reduce Fundamentals

MapReduce框架,Hadoop核心概念就是MapReduce。它通過將計算任務分割成多個處理單元分散到各個伺服器進行。

MapReduce有一個很棒的解釋,如果你要計算一副牌的數量,傳統的處理方法是找一個人數。而MapReduce則是找來一群人,每個人數其中的一部分,最終將結果匯總。分配給每個人數的過程是Map,處理匯總結果的過程是Reduce。


Hadoop Components

Hadoop組件

Hadoo號稱生態,它就是由無數組建拼接起來的。

各類組件包括HDFS、MapReduce、Hive、HBase、Zookeeper、Sqoop、Pig、Mahout、Flume等。最核心的就是HDFS和MapReduce了。

各類組件包括HDFS、MapReduce、Hive、HBase、Zookeeper、Sqoop、Pig、Mahout、Flume等。最核心的就是HDFS和MapReduce了。


HDFS

Hadoop的分散式文件系統(Hadoop Distributed FilesSystem)

HDFS的設計思路是一次讀取,多次訪問,屬於流式數據訪問。HDFS的數據塊默認64MB(Hadoop 2.X 變成了128MB),並且以64MB為單位分割,塊的大小遵循摩爾定理。它和MR息息相關,通常來說,Map Task的數量就是塊的數量。64MB的文件為1個Map,65MB(64MB+1MB)為2個Map。


Data Replication Principles

數據複製原理

數據複製屬於分散式計算的範疇,它並不僅僅局限於資料庫。

Hadoop和單個資料庫系統的差別在於原子性和一致性。在原子性方面,要求分散式系統的所有操作在所有相關副本上要麼提交, 要麼回滾, 即除了保證原有的局部事務的原子性,還需要控制全局事務的原子性; 在一致性方面,多副本之間需要保證單一副本一致性。

Hadoop數據塊將會被複制到多態伺服器上以確保數據不會丟失。


Setup Hadoop (IBM/Cloudera/HortonWorks)

安裝Hadoop

包括社區版、商業發行版、以及各種雲。


Name Data Nodes

名稱和數據節點

HDFS通信分為兩部分,Client和NameNode DataNode。


NameNode:管理HDFS的名稱空間和數據塊映射信息,處理client。NameNode有一個助手叫Secondary NameNode,負責鏡像備份和日誌合併,負擔工作負載、提高容錯性,誤刪數據的話這裡也能恢復,當然更建議加trash。

DataNode:真正的數據節點,存儲實際的數據。會和NameNode之間維持心跳。


Job Task Tracker

任務跟蹤

JobTracker負責管理所有作業,講作業分隔成一系列任務,然而講任務指派給TaskTracker。你可以把它想像成經理。

TaskTracker負責運行Map任務和Reduce任務,當接收到JobTracker任務後幹活、執行、之後彙報任務狀態。你可以把它想像成員工。一台伺服器就是一個員工。


M/R Programming

Map/Reduce編程

MR的編程依賴JobTracker和TaskTracker。TaskTracker管理著Map和Reduce兩個類。我們可以把它想像成兩個函數。

MapTask引擎會將數據輸入給程序員編寫好的Map( )函數,之後輸出數據寫入內存/磁碟,ReduceTask引擎將Map( )函數的輸出數據合併排序後作為自己的輸入數據,傳遞給reduce( ),轉換成新的輸出。然後獲得結果。

網路上很多案例都通過統計詞頻解釋MR編程:

原始數據集分割後,Map函數對數據集的元素進行操作,生成鍵-值對形式中間結果,這裡就是{「word」,counts},Reduce函數對鍵-值對形式進行計算,得到最終的結果。

原始數據集分割後,Map函數對數據集的元素進行操作,生成鍵-值對形式中間結果,這裡就是{「word」,counts},Reduce函數對鍵-值對形式進行計算,得到最終的結果。

Hadoop的核心思想是MapReduce,MapReduce的核心思想是shuffle。shuffle在中間起了什麼作用呢?shuffle的意思是洗牌,在MR框架中,它代表的是把一組無規則的數據盡量轉換成一組具有一定規則的數據。

前面說過,map函數會將結果寫入到內存,如果集群的任務有很多,損耗會非常厲害,shuffle就是減少這種損耗的。圖例中我們看到,map輸出了結果,此時放在緩存中,如果緩存不夠,會寫入到磁碟成為溢寫文件,為了性能考慮,系統會把多個key合併在一起,類似merge/group,圖例的合併就是{"Bear",[1,1]},{"Car",[1,1,1]},然後求和,等Map任務執行完成,Reduce任務就直接讀取文件了。


另外,它也是造成數據傾斜的原因,就是某一個key的數量特別多,導致任務計算耗時過長。


Sqoop: Loading Data in HDFS

Sqoop是一個工具,用來將傳統資料庫中的數據導入到Hadoop中。雖然Hadoop支持各種各樣的數據,但它依舊需要和外部數據進行交互。

Sqoop支持關係型資料庫,MySQL和PostgreSQL經過了優化。如果要連其他資料庫例如NoSQL,需要另外下載連接器。導入時需要注意數據一致性。

Sqoop也支持導出,但是SQL有多種數據類型,例如String對應的CHAR(64)和VARCHAR(200)等,必須確定這個類型可不可以使用。


Flue, Scribe: For Unstruct Data

2種日誌相關的系統,為了處理非結構化數據。


SQL with Pig

利用Pig語言來進行SQL操作。

Pig是一種探索大規模數據集的腳本語言,Pig是接近腳本方式去描述MapReduce。它和Hive的區別是,Pig用腳本語言解釋MR,Hive用SQL解釋MR。

它支持我們對載入出來的數據進行排序、過濾、求和、分組(group by)、關聯(Joining)。並且支持自定義函數(UDF),它比Hive最大的優勢在於靈活和速度。當查詢邏輯非常複雜的時候,Hive的速度會很慢,甚至無法寫出來,那麼Pig就有用武之地了。


DWH with Hive

利用Hive來實現數據倉庫(DataWareHouse)

Hive提供了一種查詢語言,因為傳統資料庫的SQL用戶遷移到Hadoop,讓他們學習底層的MR API是不可能的,所以Hive出現了,幫助SQL用戶們完成查詢任務。

Hive很適合做數據倉庫,它的特性適用於靜態數據分析,但是SQL中的Insert、Update、Del等記錄操作不適用於Hive。

Hive還有一個缺點,也是我經常遇到的,Hive查詢有延時,因為它得啟動MR,這個時間消耗不少。傳統SQL資料庫簡單查詢幾秒內就能完成,在Hive中可能會花費一分鐘。當然數據集如果足夠大,那麼啟動耗費的時間就忽略不計了。

所以Hive適用的場景是每天凌晨跑當天數據等等。它是類SQL預言,數據分析師能直接用,產品經理能直接用,你拎出一個大學生培訓幾天也能用。效率快。

你可以用Hive作為通用查詢,而用Pig定製函數UDF,做各種複雜數據。

Hive和MySQL語言最接近。


Scribe, Chukwa For Weblog

Scribe是Facebook開源的日誌收集系統,在Facebook內部已經得到的應用。

Chukwa是一個開源的用於監控大型分散式系統的數據收集系統。


Using Mahout

上文已經介紹過了


Zookeeper Avro

Zookeeper,是Hadoop的一個重要組件,它被設計用來做協調服務的。主要是用來解決分散式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分散式應用配置項的管理等。

Avro是Hadoop中的一個子項目,它是一個基於二進位數據傳輸高性能的中間件。除外還有Kryo、protobuf等。


Storm: Hadoop Realtime

Storm是最新的一個開源框架,目的是大數據流的實時處理。它的特點是流,Hadoop的數據查詢,優化的再好,也要基於HDFS進行MR查詢,有沒有更快的方法呢?是有的。就是在數據產生時就去監控日誌,然後馬上進行計算。比如頁面訪問,有人點擊一下,我計算就+1,再有人點,+1。那麼這個頁面的UV我也就能實時知道了。

Hadoop擅長批處理,而Storm則是流式處理,吞吐肯定是Hadoop優,而時延肯定是Storm好。


Rhadoop, RHipe

將R和hadoop結合起來2種架構。

RHadoop包含三個包(rmr,rhdfs,rhbase),分別對應MapReduce,HDFS,HBase三個部分。

Spark還有個叫SparkR的。


rmr

RHadoop的一個包,和hadoop的MapReduce相關。

另外Hadoop的刪除命令也叫rmr,不知道作者是不是指代的這個……


Classandra

一種流行的NoSql資料庫。

我們常常說Cassandra是一個面向列(Column-Oriented)的資料庫,其實這不完全對——數據是以鬆散結構的多維哈希表存儲在資料庫中;所謂鬆散結構,是指每行數據可以有不同的列結構,而在關係型數據中,同一張表的所有行必須有相同的列。在Cassandra中可以使用一個唯一識別號訪問行,所以我們可以更好理解為,Cassandra是一個帶索引的,面向行的存儲。

Cassandra只需要你定義一個邏輯上的容器(Keyspaces)裝載列族(Column Families)。

Cassandra適合快速開發、靈活部署及拓展、支持高IO。它和HBase互為競爭對手,Cassandra+Spark vs HBase+Hadoop,Cassandra強調AP ,Hbase強調CP。


MongoDB, Neo4j

MongoDB是文檔型NoSQL資料庫,也是最流行的。

MongoDB如果不涉及Join,會非常靈活和優勢。舉一個我們最常見的電子商務網站作例子,不同的產品類目,產品規範、說明和介紹都不一樣,電子產品尿布零食手機卡等等,在關係型資料庫中設計表結構是災難,但是在MongoDB中就能自定義拓展。

再放一張哲學圖吧。

再放一張哲學圖吧。


Neo4j是最流行的圖形資料庫(Graph Databases)。

圖形資料庫如其名字,允許數據以節點的形式,應用圖形理論存儲實體之間的關係信息。

最常見的場景是社交關係鏈、凡是業務邏輯和關係帶點邊的都能用圖形資料庫。

跟關係資料庫相比,圖形資料庫最主要的優點是解決了圖計算(業務邏輯)在關係資料庫上大量的join操作,你媽媽的姐姐的舅舅的女兒的妹妹是誰?你這得寫幾個Join啊。如果是社交媒體的傳播關係,join操作的代價是巨大的,而GraphDB能很快地給出結果。


——————

Data Ingestion 數據獲取

這一塊的概念比較混亂,主要是涉及太多的名詞概念,很混淆,所以我大致粗略的翻譯一下。不保證一定對


Summary of Data Formats

數據格式概要

在進行數據工程或者數據工作前,數據科學家應該針對數據格式有一個全面的了解。

數據格式各種各樣,既有結構化數據,也有非結構化數據。既有文本數據,數值數據,也有時間日期數據。哪怕同一類,如時間日期,也會因為時區的不同而有差異。

對數據格式的了解有助於後續工作的開展。


Data Discovery

數據發現

這是一個挺大的問題,我也不清楚作者的真實含義,姑妄言之。

從大目標看,是了解自己擁有哪些數據,因為對數據科學家來說,問題不是數據少,而是數據太大了,導致無法確定分析主題而無從下手。我應該用哪些數據?哪些數據有幫助哪些無用?哪些數據有最大的利用價值?哪些數據又真實性存疑?現階段最需要解決的數據問題是哪個?我想都是擺在數據科學家面前的問題。Discovery即是發現,也是探索。

從小細節看,是針對數據進行探索性研究,觀察各變數的分布、範圍。觀察數據集的大小。主要目的是了解數據的細節。

這們把這一過程理解為,在挖掘到數據金礦前,得先知道哪一個地方會埋藏有金礦。


Data Sources Acquisition

數據來源與採集

當你知道這塊地方有金礦時,你得準備好自己的工具了:確定自己需要的數據源。比如要進行用戶行為分析,那麼就需要採集用戶的行為數據。採集什麼時間段、採集哪類用戶、採集多少數據量。如果這些數據不存在,則還需要埋點進行收集。


Data Integration

數據集成

數據集成指代的是將不同來源的數據集成在一起成為一個統一的視圖。即可以是數據戰略層面,比如兩家公司合併(滴滴和Uber,美團和點評),為了業務層面的統一和規範,就需要將用戶數據業務數據都匯總到一起,這個過程就叫做數據集成。

也可以是將某一次分析所需要的數據源匯總。比如上文的用戶行為分析,如果來源於不同數據、則需要確定主鍵,採集後放在一起便於我們使用。

除此以外,第三方數據接入,DMP應也從屬於這個概念。


Data Fusion

數據融合

數據融合不同於數據集成,數據集成屬於底層數據集上的合併。而數據融合接近模型層面,我們可以想成SQL的Join(自己瞎猜的)。


Transformation Enrichament

轉換和濃縮

這一塊,在地圖上和另外一條分支【數據轉換Data Munging】有了交集。兩條支線合併後就是完整的數據特徵工程。這一步驟是將我們採集的數據集進行統計學意義上的變換,成為數據輸入的特徵。


Data Survey

數據調查

我也不了解已經完成數據工程後,為什麼還需要數據調查……


Google OpenRefine

Google發布的開源的數據處理軟體。


How much Data

多大的數據

一句比較偏概念的話,數據量級決定了後續方方面面,比如抽樣和置信度,比如適用的演算法模型,比如技術選型。


Using ETL

使用ETL


——————

Data Munging 數據清理/數據轉換

數據清洗過程,機器學習中最耗費時間的過程了。


Dimensionality Numerosity Reduction

維度與數值歸約。

雖然我們有海量數據,但是我們不可能在海量數據上進行複雜的數據分析和挖掘。所以要應用數據規約技術。它的目的是精簡數據,讓它儘可能的小,又能保證數據的完整性,使得我們在海量數據集和小數據集上獲得相近的結果。

主要是刪除不重要或不相關的特徵,或者通過對特徵進行重組來減少特徵的個數。其原則是在保留、甚至提高原有判別能力的前提下進行。


Normalization

數據規範化。在機器學習過程中,我們並不能直接使用原始數據,因為不同數值間的量綱不一樣,無法直接求和和對比。我們會將數據標準化,使之落在一個數值範圍[0,1]內。方便進行計算。

常見的數據標準化有min-max,z-score,decimal scaling等。

最小-最大規範化(min-max)是對原始數據進行線性變換,新數據 = (原數據-最小值)/(最大值-最小值)。

z-score 標準化是基於均值和標準差進行計算,新數據=(原數據-均值)/標準差。

小數定標標準化(decimal scaling)通過移動數據的小數點位置來進行標準化,小數點移動多少取決於最大絕對值。比如最大值是999,那麼數據集中所有值都除以1000。

溫馨提示,標準化會改變數據,所以標準化應該在備份原始數據後進行操作,別直接覆蓋噢。


Data Scrubbing

數據清洗

數據挖掘中最痛苦的工作,沒有之一。數據一般都是非規整的,我們稱之為臟數據,它是無法直接用於數據模型的,通過一定規則將臟數據規範活著洗掉,這個過程叫做數據清洗。

常見問題為:

缺失數據,表現為NaN,缺失原因各有不同,會影響後續的數據挖掘過程。

錯誤數據,如果數據系統不健全,會伴隨很多錯誤數據,例如日期格式不統一,存在1970錯誤,中文亂碼,表情字元等等。思路最好是從錯誤根源上解決。

非規範數據,如果大平台沒有統一的數據標準和數據字典,數據會有不規範的情況發生。比如有些表,1代表男人,0代表女人,而有些表則反過來,也可能是上海和上海市這類問題。通常通過mapping或者統一的字典解決。

重複數據。將重複數據按主鍵剔除掉就好,可能是Join時的錯誤,可能是抽樣錯誤,等等。

數據清洗是一個長期的過程。很多情況下都是靠人肉解決的。


Handling Missing Values

缺失值處理。數據獲取的過程中可能會造成缺失,缺失影響演算法的結果。

缺失值的處理有兩類思路:

第一種是補全,首先嘗試其他數據補全,例如身份證號碼能夠推斷出性別、籍貫、出生日期等。或者使用演算法分類和預測,比如通過姓名猜測用戶是男是女。

如果是數值型變數,可以通過隨機插值、均值、前後均值、中位數、平滑等方法補全。

第二種是缺失過多,只能剔除這類數據和特徵。或者將缺失與否作為新特徵,像金融風險管控,關鍵信息的缺失確實能當新特徵。


Unbiased Estimators

無偏估計量。

無偏估計指的是樣本均值的期望等於總體均值。因為樣本均值永遠有隨機因素的干擾,不可能完全等於總體均值,所以它只是估計,但它的期望又是一個真實值,所以我們叫做無偏估計量。

機器學習中常常用交叉驗證的方法,針對測試集在模型中的表現,讓估計量漸進無偏。


Binning Sparse Values

分箱稀疏值,兩個合起來我不知道具體意思。

分箱是一種常見的數據清洗方法,首先是將數據排序並且分隔到一些相等深度的桶(bucket)中,然後根據桶的均值、中間值、邊界值等平滑。常見的分隔方法有等寬劃分和等深劃分,等寬範圍是根據最大值和最小值均勻分隔出數個範圍相同的區間,等深則是樣本數近似的區間。

稀疏是統計中很常見的一個詞,指的是在矩陣或者特徵中,絕大部分值都是0。叫做稀疏特徵或稀疏矩陣。協同過濾就用到了稀疏矩陣。


Feature Extraction

特徵提取/特徵工程

前面已經有過這個了,這裡概念再擴大些。我們知道:數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。說的再通俗一點,好演算法+爛特徵是遠比不上爛演算法+好特徵的。

特徵提取的過程主要分為:

數據預處理:將已經清洗過的數據進行轉換,包括去量綱化、歸一化、二元化、離散化、啞變數化、對數變換指數變換等。

特徵選擇:利用各類統計學選擇特徵,主要有Filter過濾法、Wrapper包裝法、Embedded嵌入法。核心目的是找出對結果影響最大的特徵。通常是從業務意義出發,好的業務專家能夠直接挑選關鍵特徵。另外有時候會遇到具備重要業務意義,但是非強特徵的情況,這時候需要依據實際情況做抉擇。

特徵選擇過程中需要考慮模型的泛化能力,避免過擬合。

降維:如果特徵維度過大,會直接影響計算性能,需要降維。常用的降維方法有主成分分析法(PCA)和線性判別分析(LDA)。

當然暴力些也能直接選擇全部變數,扔進RF或者XGBoost模型中跑一個晚上,直接根據Gini指數查看重要性。


Denoising

去噪

在機器學習和數據挖掘中,數據往往由很多雜訊,去除雜訊的方法有多種多樣,一般說來,數據量越大,雜訊造成的影響就越少。

雜訊是非真實的數據,如果一個用戶某些信息沒有填寫,為缺失值,它不應該屬於雜訊,真正的雜訊應該是測試人員、機器人、爬蟲、刷單黃牛、作弊行為等。這類數據沒有業務意義,加入模型會影響結果,在早期就該排除掉。

另外一種雜訊是無法解釋的數據波動,和其他數據不相一致。因為數據會受一些客觀條件影響造成波動,去噪是使異常波動消除。

去噪在數據清洗過程。


Sampling

抽樣。很多時候統計不可能計算整體,比如中國平均工資就是拿14億人口一個個計算過來的么?數據科學中,如果拿全樣本計算,可能單機的內存吃不消,或者沒有伺服器資源。那麼只能抽取部分樣本作為數據分析。

抽樣有簡單隨機抽樣、系統抽樣、分層抽樣、整群抽樣等。無論怎麼樣抽樣,都要求樣本有足夠的代表性,即滿足一定數量,又滿足隨機性。


Stratified Sampling

分層抽樣,是抽樣的一種。將抽樣單位以某種特徵或者規律劃分成不同的層,然後從不同的層中抽樣,最後結合起來作為總樣本。

為什麼需要分層抽樣?如果整群符合隨機性倒還好,如果不是會造成統計上的誤差。我要做社會調研,各類人都需要,那麼就必須有男有女、有老有少、有城市有農村,而不是呆在一個商場門口做調研。前者就屬於分層抽樣。

分層抽樣可以降低樣本量,效率高。


Principal Component Analysis

主成分分析,簡稱PCA,是一種統計方法。在實際工作中,我們會遇到很多變數數據(比如圖像和信號),而我們又不可能一一列舉所有的變數,這時候我們只能拿出幾個典型,將這些變數高度概括,以少數代表多數的方式進行描述。這種方式就叫做主成分分析。

如果變數完全獨立,那麼主成分分析沒有意義。PCA前提條件是存在一定相關性。

通過去均值化的m維原始矩陣乘以其協方差矩陣的特徵向量獲得k維投影,這裡的k維就叫做主成分,用來代表m維。因為PCA的核心是少數代表多數,我們從k個主成分中選擇n個作為代表,標準是能代表80%的原數據集。

在機器學習中,主要用來降維,簡化模型。常見於圖像演算法。


——————

ToolBox

最後內容了,這一塊有拼湊的嫌疑,都是之前已經出現的內容。數據科學的工具更新換代非常快,好工具層出不窮,所以該篇章的工具就仁者見仁,寫的簡略一些。


MS Excel / Analysis ToolPak

微軟的Excel,不多說了。

後者是Excel自帶的分析工具庫,可以完成不少統計操作。


Java, Python

兩種常見編程語言,請在這裡和我念:人生苦短,快用Python。


R, R-Studio, Rattle

R語言不再多介紹了

RStudio是R的IDE,集成了豐富的功能。

Rattle是基於R的數據挖掘工具,提供了GUI。


Weka, Knime, RapidMiner

Weka是一款免費的,基於JAVA環境下開源的機器學習以及數據挖掘軟體。

KNIME是基於Eclipse環境的開源商業智能工具。

RapidMiner是一個開源的數據挖掘軟體,提供一些可擴展的數據分析挖掘演算法的實現。


Hadoop Dist of Choice

選擇Hadoop的哪個發行版。

Hadoop的發行版除了社區的Apache hadoop外,很多商業公司都提供了自己的商業版本。商業版主要是提供了專業的技術支持,每個發行版都有自己的一些特點。


Spark, Storm

Hadoop相關的實時處理框架,作者寫的時候比較早,現在後兩者已經非常火了。是對Hadoop的補充和完善。

它們自身也發展出不少的套件,SparkML,SparkSQL等


Flume, Scribe, Chukwa

Flume是海量日誌採集、聚合和傳輸的系統。

Scribe是Facebook開源的日誌收集系統,在Facebook內部已經得到的應用。

chukwa是一個開源的用於監控大型分散式系統的數據收集系統。


Nutch, Talend, Scraperwiki

Nutch是一個開源Java實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲。

Talend是一家專業的開源集成軟體公司,提供各類數據工具。

ScraperWiKi是一個致力於數據科學領域維基百科網站,幫助個人和企業獲得最專業的可視化數據,並支持對數據進行分析和管理。


Webscraper, Flume, Sqoop

Webscraper是網頁爬蟲。

Flume是海量日誌採集、聚合和傳輸的系統。

Sqoop是Haddop套件。


tm, RWeka, NLTK

tm是R語言的文本挖掘包。

RWeka是R的軟體包,載入後就能使用weka的一些演算法。

NLTK是自然語言工具包。


RHIPE

R與Hadoop相關的開發環境。


D3.js, ggplot2, Shiny

前兩個不多說了。

Shiny是RStudio團隊開發的一款在線網頁交互可視化工具。可以將R語言作為半個BI用。


IBM Languageware

IBM的自然語言處理。


Cassandra, MongoDB

2種NoSql資料庫。

寫到這裡已經全部結束了,內容大大超出當初我的預計,我又屬於比較啰嗦的風格。很多內容限於我的水平比較粗糙,希望能給大家一個簡略的提綱。


————————

文末放一下我的公眾號吧:tracykanc

產品、運營、數據的內容都會有一些,我個人崗位更偏數據運營。


分享一篇文章:數據科學家的完整學習路徑

這篇文章是2年前翻譯的,發表在伯樂翻譯小組,曾經在微博上被大量轉發、收藏,所以這裡拿過來再次和大家分享一下。原文地址:learning-path-data-science-python。

從Python菜鳥到Python Kaggler的旅程(譯註:Kaggle是一個數據建模和數據分析競賽平台)

假如你想成為一個數據科學家,或者已經是數據科學家的你想擴展你的技能,那麼你已經來對地方了。本文的目的就是給數據分析方面的Python新手提供一個完整的學習路徑。該路徑提供了你需要學習的利用Python進行數據分析的所有步驟的完整概述。如果你已經有一些相關的背景知識,或者你不需要路徑中的所有內容,你可以隨意調整你自己的學習路徑,並且讓大家知道你是如何調整的。

步驟0:熱身

開始學習旅程之前,先回答第一個問題:為什麼使用Python?或者,Python如何發揮作用?
觀看DataRobot創始人Jeremy在PyCon Ukraine 2014上的30分鐘演講,來了解Python是多麼的有用。

步驟1:設置你的機器環境

現在你已經決心要好好學習了,也是時候設置你的機器環境了。最簡單的方法就是從http://Continuum.io上下載分發包Anaconda。Anaconda將你以後可能會用到的大部分的東西進行了打包。採用這個方法的主要缺點是,即使可能已經有了可用的底層庫的更新,你仍然需要等待Continuum去更新Anaconda包。當然如果你是一個初學者,這應該沒什麼問題。

如果你在安裝過程中遇到任何問題,你可以在這裡找到不同操作系統下更詳細的安裝說明。

步驟2:學習Python語言的基礎知識

你應該先去了解Python語言的基礎知識、庫和數據結構。Codecademy上的Python課程是你最好的選擇之一。完成這個課程後,你就能輕鬆的利用Python寫一些小腳本,同時也能理解Python中的類和對象。

具體學習內容:列表Lists,元組Tuples,字典Dictionaries,列表推導式,字典推導式。
任務:解決HackerRank上的一些Python教程題,這些題能讓你更好的用Python腳本的方式去思考問題。
替代資源:如果你不喜歡交互編碼這種學習方式,你也可以學習谷歌的Python課程。這個2天的課程系列不但包含前邊提到的Python知識,還包含了一些後邊將要討論的東西。

步驟3:學習Python語言中的正則表達式

你會經常用到正則表達式來進行數據清理,尤其是當你處理文本數據的時候。學習正則表達式的最好方法是參加谷歌的Python課程,它會讓你能更容易的使用正則表達式。

任務:做關於小孩名字的正則表達式練習。

如果你還需要更多的練習,你可以參與這個文本清理的教程。數據預處理中涉及到的各個處理步驟對你來說都會是不小的挑戰。

步驟4:學習Python中的科學庫—NumPy, SciPy, Matplotlib以及Pandas

從這步開始,學習旅程將要變得有趣了。下邊是對各個庫的簡介,你可以進行一些常用的操作:

  • 根據NumPy教程進行完整的練習,特別要練習數組arrays。這將會為下邊的學習旅程打好基礎。
  • 接下來學習Scipy教程。看完Scipy介紹和基礎知識後,你可以根據自己的需要學習剩餘的內容。
  • 這裡並不需要學習Matplotlib教程。對於我們這裡的需求來說,Matplotlib的內容過於廣泛。取而代之的是你可以學習這個筆記中前68行的內容。
  • 最後學習Pandas。Pandas為Python提供DataFrame功能(類似於R)。這也是你應該花更多的時間練習的地方。Pandas會成為所有中等規模數據分析的最有效的工具。作為開始,你可以先看一個關於Pandas的10分鐘簡短介紹,然後學習一個更詳細的Pandas教程。

您還可以學習兩篇博客Exploratory Data Analysis with Pandas和Data munging with Pandas中的內容。

額外資源:

  • 如果你需要一本關於Pandas和Numpy的書,建議Wes McKinney寫的「Python for Data Analysis」。
  • 在Pandas的文檔中,也有很多Pandas教程,你可以在這裡查看。

任務:嘗試解決哈佛CS109課程的這個任務。

步驟5:有用的數據可視化

參加CS109的這個課程。你可以跳過前邊的2分鐘,但之後的內容都是乾貨。你可以根據這個任務來完成課程的學習。

步驟6:學習Scikit-learn庫和機器學習的內容

現在,我們要開始學習整個過程的實質部分了。Scikit-learn是機器學習領域最有用的Python庫。這裡是該庫的簡要概述。完成哈佛CS109課程的課程10到課程18,這些課程包含了機器學習的概述,同時介紹了像回歸、決策樹、整體模型等監督演算法以及聚類等非監督演算法。你可以根據各個課程的任務來完成相應的課程。

額外資源:

  • 如果說有那麼一本書是你必讀的,推薦Programming Collective Intelligence。這本書雖然有點老,但依然是該領域最好的書之一。
  • 此外,你還可以參加來自Yaser Abu-Mostafa的機器學習課程,這是最好的機器學習課程之一。如果你需要更易懂的機器學習技術的解釋,你可以選擇來自Andrew Ng的機器學習課程,並且利用Python做相關的課程練習。
  • Scikit-learn的教程

任務:嘗試Kaggle上的這個挑戰

步驟7:練習,練習,再練習

恭喜你,你已經完成了整個學習旅程。

你現在已經學會了你需要的所有技能。現在就是如何練習的問題了,還有比通過在Kaggle上和數據科學家們進行競賽來練習更好的方式嗎?深入一個當前Kaggle上正在進行的比賽,嘗試使用你已經學過的所有知識來完成這個比賽。

步驟8:深度學習

現在你已經學習了大部分的機器學習技術,是時候關注一下深度學習了。很可能你已經知道什麼是深度學習,但是如果你仍然需要一個簡短的介紹,可以看這裡。

我自己也是深度學習的新手,所以請有選擇性的採納下邊的一些建議。deeplearning.net上有深度學習方面最全面的資源,在這裡你會發現所有你想要的東西—講座、數據集、挑戰、教程等。你也可以嘗試參加Geoff Hinton的課程,來了解神經網路的基本知識。

附言:如果你需要大數據方面的庫,可以試試Pydoop和PyMongo。大數據學習路線不是本文的範疇,是因為它自身就是一個完整的主題。


=============================================================

作者主頁:笑虎(Python愛好者,關注爬蟲、數據分析、數據挖掘、數據可視化等)

作者專欄主頁:擼代碼,學知識 - 知乎專欄

作者GitHub主頁:擼代碼,學知識 - GitHub

歡迎大家拍磚、提意見。相互交流,共同進步!

==============================================================


我有點慌了,知乎上對數據科學家的定義太高了,似乎要什麼都會才行。我厚著臉皮勉強答一下。

我在美東某大型諮詢公司僥倖混了個工作,我們給客戶公司做data driven,evidence based的分析,服務,預測等等。我最近開發了個基於圖模型的分析系統,僥倖有幾個consultant願意拿出去賣。不賣模型只賣分析結果。一般來說工作都是客戶過來說他們要什麼什麼,我們說好好好,給您做。我以前也拿過客戶滿意獎,說明我給的結果也還行是吧?那我勉強算數據科學家吧?啊?哦對了。我們還投nips,icdm這些會議,以及jmr這種市場營銷的期刊,也搞專利(雖然沒卵用),但這樣好跟客戶吹牛逼忽悠人家掏錢買我們的服務。


我覺得要混份工作,乞丐屌絲版可以分四步。

第一步,上一門機器學習的課程,由於很多學校的ml課不如直接看Andrew Ng的公開課,還是要看一下ng的公開課。

第二步,熟悉python裡面的那些package。

第三步,參加kaggle。找實習。跟老師做項目。

第四步,開始投簡歷找工作,進了公司邊干邊學。

這四步走完,估計能找到工作,找到工作再跳槽唄。data scientists的職位比research的職位更看重工作經驗。

數據科學家也分高配低配版,我是入門乞丐版屌絲數據科學家,但我覺得你們叫我數據分析從業人員我還是能理直氣壯答應一聲的。哎,那邊那個數據分析員你過來一下,嗯,我來了。


當然肯定還有高配版,但是高配版我真不知道,哭臉。我覺得能既建模又當data engineer的都是大神。

### 下面是原答案

我覺得數據科學從業者需要兩方面的技能,一方面是道,一方面是術。道是建模能力,這需要對已有數學模型的理解和熟悉。術是編程能力,是對計算機工具的掌握。我們建立好模型,訓練模型是在計算機上編個程序,那基本的debug能力還是要有的吧。

這兩者就比較像劍宗和氣宗的關係,一開始可以只重視術,拿現成的程序過來改一改,跑一跑就可以得到不錯的結果,可以極大地激發初學者學習的動力。但是僅僅注意術很快就會碰到瓶頸,比如可能會不理解為什麼樸素貝葉斯是樸素的,為什麼邏輯回歸是個deterministic model。但總體來說,我還是建議從術開始,先做實驗,有了直觀的感受,再去學習理論。邊做實驗邊看理論。

剛開始的時候,會machine learning的那些模型,有寫python的能力,也就可以試試找工作了吧。更多的是要到了公司裡面邊干邊學吧,比如我們做項目的同時會碰到新問題,也會學到更多新的技術。

每個公司對他們的data scientists的要求都是不一樣的,甚至每個崗位都不一樣。我們組有人很擅長hadoop,有人sql很溜,有人特別會表達和溝通,不知道大家算不算是數據科學家。有點慌。但我們這麼出去忽悠,行業里的朋友也沒人罵過我們呀,汗。

你說我現在會什麼,我好像什麼都會一點點,但最擅長的還是建模吧。

你們要是有興趣,看一下我寫的這個入門貼,裡面的東西更詳細:

https://zhuanlan.zhihu.com/p/26704424


Quora回答:

Quora回答:http://www.quora.com/Career-Advice/How-do-I-become-a-data-scientist


我來提供一個不那麼網頁羅列、技能羅列的短答案吧。

首先,數據科學是什麼?數據科學家又是什麼?這本身就是個見仁見智的問題,幾乎每個人都會給你一個不同的答案。所以你能做的只能是找出自己的理解,就像我只能提供給你我個人的理解。

本人進入數據分析行當快兩年了,從一開始執著「數據科學家」的名分(因為聽著新鮮有趣,那還是 2013 年下半年呢,呵呵兩年過去看世界都變成什麼樣了),到後來一直不斷翻新個人的理解,也算經歷了一個找尋的過程,並且還在找尋中把。

在這個過程中,一開始我也是把注意力集中在「硬」技能上,就是那些常見的技能羅列的東西。這種清單,你可以隨便去 LinkedIn 上搜索一個 Data Scientist 職位,然後在 desired skills 清單里一抓一大把,你會發現不同公司的要求變化相當大,所以不存在標準答案。然後你可以從數據分析的角度把自己最心儀公司招 Data Scientist 的要求的核心部分給總結一下,看看有哪些核心部分(就是交集啦)。那應該能提供給你一個比在這裡提問更有效的答案。

不過我個人感覺真正的重要的技能還是「軟」技能,也就是把關於行業的了解完全滲透到做數據分析的過程當中去。這裡面有一個要點,就是始終清楚自己做數據的目的到底是什麼。好比我上面提到用數據的角度去找出「數據科學家的核心技能集合」,當你做這樣的事情的時候,你完全清楚自己的目的是什麼,使用不管什麼方式方法,你在做的就是一個「目的性明確的數據分析」工作。

現實中充滿了各種各樣的問題,有很多都可以轉化成數據問題來解決。因此我在個人網頁上寫了下面這句話:

In the world of data mining, there"s always an answer to your question

也許通過你自己的道路,你能獲得更我相似或者不同的心得。這是個體成長上的收穫,都是非常值得珍惜的。另外,收了幾本個人感覺收穫最高的數據科學相關書籍在這裡,僅供參考:Data Science


我本科是學會計的,大四那年幸運得到內推機會,到一家歐洲的基金公司工作,幫老闆研究對沖基金的策略。這裡有個學數學的法國帥哥每天在用VBA和matlab做衍生品的定價,後來我不小心知道了他的收入,整個人都不好了。恰好那一年,IBM用統計學習技術做出的Watson在Jeopardy上打敗了所有的人類對手,我感到了一種前所未有的恐懼感,在Watson面前,我這種靠記憶和小聰明吃飯的人還有什麼價值?於是我辭職回家準備出國,要學統計學,申請失敗後繼續考研,經過許多驚險之後,到了交大讀統計碩士。

成為一名數據科學家是一個很大的挑戰,我從大四開始用了三四年的時間慢慢轉型到了數據科學的方向,深感這個過程對商科、社科(以及不是計算機和數學方向的理工科)的青年來說有多大的挑戰。數據科學是人類信息技術和數理科學的大融合,其知識密度和知識深度超過了大多數傳統職業,要想從門外從到門內,學會開始駕馭這個龐然大物,有著一座又一座的知識山峰要去攀登,很像是一場創業的經歷,高風險、高回報、很辛苦、但也很快樂。

這幾年我一直在思考這個問題,到底大數據對我們意味著什麼,我們又怎樣適應大數據的時代,我覺得無論是要轉型成為數據科學家,還是掌握數據分析技能,這是我們每一個人的事情。就像馬雲最近說的」數據是未來的石油「,誰都離不開它。我想根據自己的經歷,從挑戰和機遇這兩個角度來談談,怎麼從外行(社科、商科、傳統工科)轉型成為一名數據科學家,幫助更多像我一樣的普通人能夠少走些彎路。

  • 大數據時代的技能大挑戰

大數據時代,掌握數學和統計,就像在全球化時代掌握英語一樣重要。數據已經成為了經濟、管理、科研、政府等各個領域的共同工作語言,不懂數學和統計會面臨很大的溝通成本。如何在碎片化的時代,克服數學焦慮,掌握數學和統計知識,是每個人都面臨的挑戰。

數學焦慮是人們面對數學問題時產生的習慣性的焦慮或恐懼情緒,會極大地影響人們解決數學問題的能力,並降低學習數學的興趣。心理學家發現,對於數學的恐懼是一個很普遍的現象。調查反映,美國有60%的大學生都存在著數學焦慮情緒,而僅有10%的學生是對數學感興趣的。從牛頓發明微積分算起,現代數學體系是人類最近300年發展出的一套理論體系。數學符號化、抽象化的運作方式,和人類大腦先天視覺化、具體化的思維習慣有著很大的差異。

數學學習需要學生保持長時間的注意力集中,也就是要坐得住冷板凳,而這一點正在變得越來越困難。美國高度發達的娛樂產業,已經使得多動症成為了高發的兒童心理疾病。美國中學生的數學水平測試,已經遠遠落後於亞洲和北歐的學生。雖然有著高質量的教育資源,但薄弱的數學基礎使得美國大學生不願意選擇理工科專業,僅有20%的美國大學生畢業於理工科。

理工科人才的缺口,已經限制到了美國經濟的發展,迫使奧巴馬在2011年發布了「STEM人才培養計劃」,其中的「STEM」,是科學、技術、工程、數學四個英文的縮寫。BCG在2014年發表的研究報告中發現,美國的高科技行業面臨著嚴重的人才緊缺。科技產業發達的華盛頓州中,有三分之二的科技高端崗位都無法找到合適的員工。 中國學生的數學基礎教育是全球領先的,但是數學焦慮也同樣普遍。數學基礎課的掛科率在各個院校都排名靠前,而大多數學生對數學課程也缺少興趣。高校的數學系也是報考人數不足,每年都需要通過調劑招生。

數據工作者的門檻不僅在於數學和統計學知識,也在於編程能力和行業經驗。 大數據分析基於海量數據的儲存、傳輸和處理,從原始數據到分析結果,需要運用一系列程序。數據分析常用的軟體包括比如Hadoop、SQL、R、SPSS、Tableau、Excel,很多工作都需要編程的技能。數據分析的目標是發現問題、解決問題、提高效益,但每一個行業都有特定的問題。行業經驗能夠讓數據分析人員找到問題的方向,抓住問題的重點,從而更有效地利用數據,也能夠使分析的結果發揮更大的價值。編程能力和行業經驗多許多大學生,也有著不小的門檻,這更是讓優秀的大數據人才顯得彌足珍貴。

  • 全球資源為我所用

站在國際視角,大數據是所有中國學生的一個機會。大數據技術仍然在發展初期,中國和歐美髮達國家站在了同一起跑線。根據聯合國的學業能力測試,中國學生的數學基礎教育是全球領先的,而且中國的理工科學生佔到了總數的50%,遠超出美國的20%。中國人口眾多,移動互聯網的普及也使得數據存量迅速增長。人才儲備和數據儲備,為中國發展大數據行業奠定了最重要的基礎。大數據行業剛剛起步,不僅有著廣闊的職業發展空間,而且人才缺口巨大,正在從各個行業吸納人才。無論是什麼專業背景、職業經歷,只要堅定個人轉型升級的信念,就能抓住大數據時代的機遇。

教育是一個人最重要的投資,其價值在技術變革的時代更加凸顯。旺盛的需求使得教育成本迅速增長,對於很多家庭,教育已經成為了房產之外最大的負擔。而我們在此前的報告也指出,隨著高校和企業的差距被技術變革迅速拉大,高校所提供的知識和技能已經難以適應生產力要求。大數據時代的轉型升級,前提就是要跟上生產力升級的步伐,充分利用互聯網的力量。 大數據生長在互聯網的土壤之上,數據通過互聯網採集,通過雲計算得到處理,而大數據分析所要教育資源和軟體工具,幾乎全都都能通過互聯網獲得。

教育作為文化產品,其價格和價值之間並沒有必然關係。在傳統課堂中投入過多的資金和時間,並不是最明智的選擇。互聯網教育的發展,讓價值巨大的優秀教育也已成為免費的服務。在Edx、Coursera這些在線教育平台上,全球範圍內最優秀的教育資源,已經免費開放給了全世界的用戶,許多大數據領域的國際專家都在這些平台上開設了免費的學習課程。

優質、免費的教育是互聯網給所有青年的禮物,而大數據領域最前沿的技術,也向所有人免費開源。只要掌握了使用方法,每個人都可以運用Hadoop搭建數據儲存和計算平台,用R語言進行數據建模和可視化分析。免費的大數據工具功能強大而且性能穩定,在Facebook和IBM這類頂尖企業也被廣泛運用。 分析工具的免費,使得每個人都有了學習和運用大數據技術的機會。大數據工具的迅速普及,車多司機少,駕馭工具的人才就出現了嚴重的供不應求。

吸收大數據分析的知識,應用大數據分析的工具,是實現數據化升級的必要條件。掌握大數據的知識和工具雖然有著很高的學習門檻,但是獲取大數據的教育資源和分析工具的門檻卻已經完全消失。

  • 在實踐中贏取持久戰

大數據包含了很多領域的知識和技能,數學、統計、計算機是基礎,行業經驗、背景知識也必不可少。龐大的知識體量,使得大數據的學習成為了一場持久戰。按部就班地學習教科書中的理論,對於大多數人來說並不現實。理論的討論是可以無限延伸的,面對龐雜的技術理論和漫長的學習周期,很少有人能夠堅持下來,這也是數據人才長期緊缺的原因之一

真正可行的方式,是小處著手,循序漸進,在實踐中學習理論。實踐問題有著具體的場景,理解的成本更低,學習的目標也更明確,從而更容易堅持下去。麻雀雖小,五臟俱全,許多大數據項目的技術相對簡單,卻蘊含著很大的價值。比如銀行業廣泛應用的信貸風險模型,採用了基礎的回歸模型,大幅降低了銀行壞賬和經濟損失。學習大數據,不妨選定一個感興趣的職業方向,在實踐項目中磨練技能,理解理論。在階段性的成果中,不斷獲得成長的動力,在良好的心態中贏取這場持久戰。

只要用數據思維看問題,實踐大數據技術的機會其實很多。阿里巴巴的首席數據官,車品覺先生就給出一個精彩而樸實的例子。他看到屬於個人的信息資料,已經遠遠超出了人們的記憶負荷,於是運用大數據的思想,在「印象筆記」中把自己所有的重要資料都進行了系統化地標記和檢索,大幅度提高了工作的效率。 信息化的時代,利用數據創造價值的機會越來越多 ,而通過實踐內化數據化的思維和技能,我們才能真正抓住這樣的機會。我們能用從學會用大數據管理個人數據開始,到Kaggle這樣的平台中參與大數據分析比賽開始,在項目團隊中學習知識,實踐技能。

  • 大數據時代的合作精神

要想做好大數據分析,除了知識和經驗,還要有充分的合作精神。大數據是信息技術和數理理論的大融合,沒有人能解決全部的問題。在企業和學術界,一個典型的大數據分析項目,需要各方面的專業人士的通力合作,包括擅長統計理論的數據科學家,搭建計算平台的數據工程師,經驗豐富的行業專家和數據分析師,以及負責數據可視化的設計師。計算機、管理、設計、數學、統計等各個專業的同學,都能夠在大數據項目中,找到屬於自己的獨特位置。 在大數據分析項目,每一個同學的專業技能不僅僅停留在腦海中,而是在各個專業的同伴幫助下,轉化成有實際價值的作品。

我們的高校仍然沿襲著工業化的組織結構,不同知識背景的同學被專業和學院割裂開來,身邊的朋友和自己的背景都十分類似。要想開始大數據的實踐,就必須找到目標一致、又技能互補的合作夥伴。可是怎樣找到一群可以共事的合作者?首先可以加入學校的數學建模社團、數據分析協會,這裡往往聚集了全校數學基礎最紮實的同學。我們也可以尋找有特定技能和背景的同學,組成優勢互補的項目團隊,一起參加大數據分析的比賽。

真正的機會往往是以挑戰的形式出現,大數據帶來的職業挑戰背後,正是絕佳的發展機會。大數據技術要求的數學基礎和編程技能,確實有著很高的學習門檻,然而優質的教育資源、開源的數據分析工具、合作實踐平台,也讓我們擁有了駕馭大數據,實現大價值的機會。 是留在門檻之下,做一個隨時可能被技術替代的舊青年,還是在實踐積累中跨越門檻,成為掌控技術能量的新青年,選擇在我們自己手中。


各位大神應該都說的很好了,自己想分享自己的經歷吧。畢竟年後,不管最後去哪家公司,自己都要扛上 data scientist 的 title 了。

剛剛訂了60個小時之後紐約飛長沙的機票,但是現在自己再去弗吉尼亞的火車上,還有5個小時才能到達。從2011年本科入學到今天5年半,好好理一理。

2011年,進入某top3大學(大家懂的,我就不給母校招黑了)的數學基地班,20人不到小班,第一學期一周7節數學分析,5節高等代數,用的不是本校編寫的教材,而是南開那套老教材和原版英文書。雖然現在看起來不算什麼,但是對於那年的我來說,那本哈佛出的大概600頁的英文教材確實是自己的夢魘。如果2011年冬天在西區5樓自習室早上7點看到一個男生一把鼻滴一把淚在抄那本磚頭一般厚的英文教材(人蠢就要默定理),那就是我。

大一就是這樣,雖然不知道純數學到底有啥用,有沒有工作,但是也挺單純,就是認真學,一天自習四五個小時翻來覆去的看。譜分解,Jordan標準型,雖然那個時候不知道這些純理論的東西學了有什麼用,但是自己確實盡心儘力學了,而且學的不錯。現在回想起來,還是感覺非常幸運打好了一個數學基礎。上周某國內出行巨頭面試官問我最喜歡的數學定義是什麼,然後我就開始聊譜分解和對偶空間~ 想想大一的時候,三個人在寢室里,就是這麼你一句我一句聊著數學睡著的。

到大二的時候,問題來了,我開始想,這玩意兒學了到底有啥用?有沒有工作可以找?畢業了幹什麼?

當時的自己並沒有解決這些問題的能力,想這些就是把自己給害了。

學的東西仍然是基礎理論,微分幾何,實變,概率論,ODE等等。一方面,因為我開始質疑學這些東西到底有沒有收益,我每天自己時間下降到了不足4小時,但是開始看了一大堆文學歷史什麼的。另一方面,我漸漸意識到我根本不適合做數學。

我的分析,概率論學的很好,但是我對於幾何沒有任何天賦。我想像不出流形,我也算不出ODE。更加深入的代數也是,室友已經開始看同調了,我連抽代都看不進,不喜歡。代數不好,憑什麼做數學~~~

大二,動蕩的一年。沒有目標,沒有理想,不知道畢業後到底該去幹嘛,只有在質疑自己是否智商足夠學好數學,也漸漸喪失了徹夜爭論數學的興趣,也不知道以後到底能不能用得上。在談sir的指導下開始讀了一些運籌學的paper,太難了根本看不懂。。。。。。

人窮思變,我開始到處跑,想照照自己的興趣到底在哪。

暑假去了HKU,商院。哈哈我一個數學系的去business 幹嘛?不知道,換個環境吧~~~香港真是一個紙醉金迷的腐朽世界,匯聚了世界各地好吃的。自己水了一個月,什麼都沒有學到。嗯,以後如果讀研肯定不會學商科專業了。

大三第一個學期,數學系給錢,去了美國中部一所學校數學系交流。因為我們是top3大學的基地班,所以領導為了展示教學成果,給我們規定只能選研究生課程,而且必須取得不錯的成績。(數學系領導應該不上知乎吧~~~囧)

就這樣,修了三門研究生課,還有無數次溜進phd的辦公室向學長們請教數學題目~大三的和博三的一起上課考試,嗯,就算是初生牛犢不怕虎吧。

真是一個純粹學習數學的學期,一天課後至少看8個小時數學,交作業那天都是2點才睡。。。最後三門課要麼A,要麼雖然是B,但是也是班上的平均成績,英國人古板給分嚴格。這樣回國交差領導們也就不好說什麼了。

但是現在想來,真是對自己影響很大的一個學期,一是美國大學畢竟是一個更加開放包容的環境,在無數次和那些phd學長們請教問題,吃飯聊天之後,自己意識到了除了純數研究,數學真的有很多發展機會。二就是自己發揮了比較自來熟的特點,認識了一堆各個專業的phd。其中有一個是CS的,告訴我他的方向是機器學習。WTF,how can a machine learn something? 現在想起來自己真是一個無知的小白,不過學長人好,很nice的給我介紹了Andrew NG和coursera,還帶我去看了騎士和76人的比賽。現在他在google,好人一生平安。

大三下回國,國內大學數學系必修課已經不多了。自己也到了需要認真考慮未來的時候。純數學自己走不通了,估計還等走應用數學那條路。自己閑著沒事開始玩遊戲(哎,最悔恨的一個學期),但是玩累了也開始看NG的公開課,覺得還是挺有意思的。而且看起來和自己的數學背景也比較match。另外就是在美國的半年也極大的提高了自己的自信心,所以大三下也就開始去上研究生的數學課了。到畢業的時候,概統和運籌方面的一般研究生課程自己都上完了。博士生小班課或者討論班沒去,畢竟不考慮以後做數學了。

大四下,決定出國讀研,方向 Data Science。原因很簡單,CS背景太弱了,自己申不上。數學不想念了,統計的話太多證明,本科已經證煩了。商科不喜歡。DS作為一個各方面都沾一點邊的,可能比較適合自己這種學藝不精有喜歡貪多的渣渣吧。而且周圍「大數據」漸漸火了起來,以後的事情誰知道呢?

自己的G,T都很爛,草草申請完之後,就開始自己看書了。猶記得大四,室友已經決定去港大數學系讀博了,天天在寢室看復幾何,自己就在邊上用R,Python碼代碼。也沒有什麼方法,基本上就是書看一遍,例子實現一遍,習題做一遍。周圍的人都在刷數學書,自己面子也不能太難堪~~~ Amazon這方面當時有的4星級以上的書自己全部看完了,室友也完成了未來的博士導師交代的讀書任務,開始自己看paper了。

大四下,可能就是因為GT太差和CS背景不強(自己基本上沒上CS課,都是自己看書),被拒的稀里嘩啦。最後只有一個top30的小學校要我。被幾個dream school拒了之後,自己可以說是心情抑鬱了很長一段時間。當時都打算不讀書去找工作了,畢竟自己三年一獎,畢業也會拿到優秀畢業生,說不定consulting會要我,說不定私募基金會讓我去打雜,說不定~~~但是自己最後確實沒有勇氣說不讀了去工作吧,所以,嗯,出國了。

我還記得我們summer semester是2015年7月11開始,所以本科畢業暑假我休了一周,就去上課了。

一年制的項目,找工作是從第一天開始的。我作為班上中國人裡面唯一一個非美本,擁有最爛的口語和聽力,和最弱的簡歷。(沒有實習,沒有論文)。所以沒辦法,只能玩命學了。這一點,相信所有來美股讀研,理工科,希望畢業找到工作的人都會有親身感觸。7點起,12點睡,每天8+小時在圖書館看書,改簡歷,寫cover letter,投工作,寫作業,刷題,學習這個圈子的遊戲規則~~~一學期下來,長進很多。但是不幸的是,面試全掛。

第二學期,堅持每周投70-100份簡歷的狀態。拿到了一個在曼哈頓的暑期實習。於是我申請了延期半年到2016年12月畢業,這樣暑假就可以去實習了。這個學期自己上了兩門很硬的課,text mining 和 data visualization。 TM這門課寫的人都升華了~~~我和小夥伴寫到12點開始罵人,然後去酒吧喝兩杯,第二天醒了接著寫題。循環往複,現在language model的各種smoothing方法自己都可以白板bug free,至於模型可以說已經浸入我的血液了。DV這門課,用d3js做可視化效果,只記得眼藥水用的特別快~~~對我這種沒有任何藝術天賦的人來說,真的會有一個independent project需要做50小時。

暑期結束去實習了。原本以為自己這一年學了很多東西會很牛逼,結果22個實習生裡面斯坦福就是4個哦~我們數據部門4個實習生,除了我,一個布朗,一個普林斯頓,一個芝加哥。而且,自己的口語聽力上課沒問題,工作的話問題很大~~~猶記得實習第7天下班那天自己坐在曼哈頓河邊,心想自己怎麼搓成這樣,聽不懂說不出都沒人理我~~~~~~~但是好在最後熬下來了,made great impact to the whole company,交了很多朋友。在公司,實力和解決實際問題的能力才是贏得尊重的根本,尤其還是一個外國人。在之後其他的面試里,面試官都對我實習做的東西非常感興趣。自己內心也很驕傲,畢竟真的能夠用好文本挖掘和其他數據挖掘方法去評估分析公司風險和資產組合分析的,真不多。

最後一個學期,狂投簡歷找全職。不得不說由於科技業增速下降(聽說國內已經資本寒冬?),美國這邊縮招的很多,尤其是對newly graduate縮招更厲害。另外就是新總統上台帶來的一些對H1B簽證的不確定性,普遍不願意招國際生。所以校招慘淡。最後是在自己都快絕望的時候,朋友內推去了灣區的一家公司,然後自己也漸漸拿到了一些面試。昨天面完了最後一家公司,(在普林斯頓,這地方真是太美了!),今天定下來回國的機票。如果不出意外,休假三個禮拜之後就要飛三番,工作內容就是:

"Data Science = statistics who uses python and lives in San Francisco"

自己真心希望自己的工作,這個世界上最愉快的事情莫過於別人花錢讓自己做自己喜歡做的事情。Data analytics, Python, Algorithm,真的可以帶給自己最純粹的開心,就好像大一晚上大家都在數學討論中睡著。

遇到能讓自己開心的事情,這種感覺真是太棒了!整個校招季,自己拿到的第一個offer是國內一家基金,開了我爸年薪2倍的基本工資(怒黑一發我爸,從小批評我好高騖遠不腳踏實地,「你真的以為你一畢業就可以掙一萬一個月嗎!」)。雖然當時還沒有其他的 offer,但是最後還是拒了。算 cash flow 哪有 user profile construction 有趣!

新的冒險又要開始了,希望不要被加州大牛們智商碾壓,希望自己保持過去一年多的成長速度,將來有一天可以成為業界有影響力的data scientist。

終於要回國了,暑假吃遍紐約城,還是懷念長沙王府井後面小飯店晚上幾個人一起鐵板韭菜還有紅牛混雪碧,還有南門口長郡的一磚一瓦一草一木。暑假老闆請客世貿中心旁邊30多層高級餐廳,哪有過年奶奶做的烤辣椒好吃!

地鐵穿過 journal square 的時候旁邊工地的集裝箱寫著CSX三個字母,第一反應就是長沙黃花機場。嗯,回家啦!

然後,又是新的冒險!


DataCamp的一張圖

在這種觀點下,你的五個步驟應該是:

  • 應用或使用Python來編碼數學,統計學和機器學習;
  • 了解資料庫;
  • 了解數據科學工作流程;
  • 獲取大數據;
  • 成長,連接和學習

DataCamp 是一個不錯的學習網站,主要提供在線學習R、Python和數據科學。

參考 What are you doing to become a better data scientist?

這裡有10本必讀書籍,用於機器學習和數據科學!

1、Think Stats: Probability and Statistics for Programmers

Think Stats是對Python程序員的概率和統計的介紹。

Think Stats強調了可以用來探索真實數據集並回答有趣問題的簡單技術。 該書使用美國國家衛生研究院的數據提供案例研究。 鼓勵讀者從事具有真實數據集的項目。

2、Probabilistic Programming Bayesian Methods for Hackers

從計算/理解第一,數學 - 第二觀點來看,貝葉斯方法和概率編程的介紹。

貝葉斯方法是推理的自然方法,但它是隱藏在讀者背後的慢慢的數學分析。 貝葉斯推理的典型文本涉及概率論二到三章,然後進入貝葉斯推理。 不幸的是,由於大多數貝葉斯模型的數學難處理性,讀者只顯示簡單,人為的例子。 這可以讓用戶對貝葉斯推理有一種如此的感覺。 其實這是筆者本人以前的意見。

3. Understanding Machine Learning: From Theory to Algorithms

機器學習是計算機科學發展最快的領域之一,具有深遠的應用。 本教科書的目的是以原則性的方式介紹機器學習及其提供的演算法範例。 本書提供了機器學習基礎知識和將這些原理轉化為實際演算法的數學推導的理論論述。 在介紹了基礎知識後,本書涵蓋了以前教科書無法解決的廣泛的中心課題。 這些包括討論學習的計算複雜性和凸度和穩定性的概念; 重要的演算法範例包括隨機梯度下降,神經網路和結構輸出學習; 以及諸如PAC-Bayes方法和基於壓縮的邊界等新興理論概念。

4、The Elements of Statistical Learning

這本書在共同的概念框架中描述了這些領域的重要思想。 雖然這種方法是統計學的,但重點在於概念而不是數學。 給出了許多例子,自由地使用彩色圖形。 對科學或行業數據挖掘感興趣的統計人員和任何人都應該是寶貴的資源。 這本書的範圍廣泛,從監督學習(預測)到無監督學習。 許多話題包括神經網路,支持向量機,分類樹和提升 - 在任何一本書中,這個主題的第一個綜合處理。

5、An Introduction to Statistical Learning with Applications in R

本書提供了統計學習方法的介紹。 主要針對上級本科生,碩士生,博士生。 非數學科學的學生。 該書還包含了一些R實驗室,詳細介紹了如何在現實生活中實現各種方法,並為實踐數據科學家提供了寶貴的資源。

6、Foundations of Data Science

雖然計算機科學的傳統領域仍然非常重要,但越來越多的研究人員將參與使用計算機來了解和提取應用程序中出現的大量數據的可用信息,而不僅僅是如何使計算機對特定的明確問題有用。 考慮到這一點,我們寫了這本書來涵蓋在未來40年可能有用的理論,正如對自動機理論,演算法和相關主題的理解給了學生在過去40年中的優勢。

7、 A Programmer"s Guide to Data Mining: The Ancient Art of the Numerati

本指南遵循逐步學習的方法。 而不是被動地閱讀這本書,我鼓勵您通過練習和實驗我提供的Python代碼。 希望您能積极參与數據挖掘技術的試用和編程。 教科書作為一系列小步驟,建立在彼此之間,直到完成本書為止,您為了解數據挖掘技術奠定了基礎。

8、Mining of Massive Datasets

這本書是基於斯坦福計算機科學課程CS246:挖掘大量數據集(和CS345A:數據挖掘)。

這本書和課程一樣,是在本科計算機科學層面設計的,沒有正式的先決條件。 為了支持更深入的探索,大部分章節將補充進一步的閱讀參考。

9、 Deep Learning

深度學習教科書是旨在幫助學生和從業人員進入機器學習領域,特別是深入學習的資源。 該書的在線版本現已完成,並將在線免費提供。

10、Machine Learning Yearning

AI,機器學習和深度學習正在改變眾多行業。 但建立機器學習系統需要做出實際的決定:

你應該收集更多的培訓數據嗎?
你應該使用端到端的深度學習嗎?
您如何處理與您的測試集不匹配的訓練集?
還有很多。
歷史上,學習如何制定這些「策略」決策的唯一途徑是研究生課程或公司的多年學徒制。 我正在寫一本書,以幫助您快速獲得此技能,以便您可以更好地構建AI系統。

上面提到的所有書都是免費的!


謝邀,之前在國外聽過一堂相關的課,有些個人看法,可以分享一二。

其實數據科學家範圍很廣泛,一切數據統計數字數據管理收集者都以可成為數據科學家,其中包括軟體工程也包括圖書管理,基於目前的大數據時代背景,在這裡介紹相對有用的種種。

目前的數據科學不同於傳統的數學,統計學,要求對大數據進行研究分析的能力,要成為一個數據科學家,在專業知識過硬的同時,更要有邏輯判斷能力、創新思維突破精神等等內在條件,無論什麼學科都要記得實踐出真知。

下圖是挺有意思的一張圖,能夠比較直觀的詮釋一個數據科學家應具備的能力。

首先你需要「樓房建基」,例如數學,統計學等豐厚的基礎知識,在大數據云集的互聯網時代,數據科學本身就包含著網路雲數據處理的內涵,因此也需要高度熟練掌握計算機科學,數據科學等高頻使用的知識。

打好基礎之後,則需要往更專業的方向努力,數字與數據的區別在具體和大量,微觀和宏觀,也許數學天才未必就能領會數據分析的奧秘,學習編程語言,資料庫,數據挖掘分析等技能能夠迅速讓你進入數據科學的門檻,而且這些專業技能的學習操作相比前一步的理論知識,要有趣靈活,你可以選擇你喜歡或擅長的專註學習,培養自己成為某個細方面的精英。

當然數據科學家需要掌握數據處理方面全面的技能,不是說可以偷懶選擇,而是建議可以專註下功夫,目前摸下水的人已經不少,但是能夠在一個方面稱之為大神「打不死」的則很難得,以後的數據科學人才,一定是「大T型人才「,能夠擁有紮實的技術,又能了解其他行業,在T型的交匯點成為一個領域的專家,之前看 @TalkingData 的數據科學家課表的時候就看到,在縱向課程上有數學,統計,計算機這一類的基礎課程,在橫向課程上也有銀行金融風控,計算廣告這一類的場景化課程,相信以後這類的課程設置一定會更多的。

第三步,很重要的,你需要關注一些具體實際的應用經驗,你所貯存的知識庫可以開始輸出,以便更好地理解枯燥單調的數據知識。

而到了實踐這一步,就必須要提到這個問題提出的強有力的現實意義。

過去數年裡,以數字化為基礎的數據化升級逐漸加速,越來越多的業務流程藉助互聯網,雲計算進化至數字化形態,同時伴隨業務流程產生大量業務數據。

隨著智能手機的普及,移動化及移動應用的數量不斷擴大,移動端數據因此更加普及,與以往的業務數據不同,這些數據更加個人化,也更適合於各種不同場景的應用。

無論是來自企業端的業務數據,還是來自終端用戶的行為數據,目前已經進入爆發階段,這些不斷向前飛奔的發展進程,推動著數據化與智能化的結合與現實應用,《黑鏡》,《西部世界》中出現的數據化未來已越來越被發展現實所拉近。

成為一個數據科學家的要參與的具體方法方案、項目實踐,就必然是結合了目前的機構運營現狀:我們正生活在被大數據驅動的時代,大數據與商業的結合,對我們的思考模式,生活習慣和商業法則都進行著顛覆。

而在這種趨勢之下,在傳統企業和數據化轉型之間出現了一個「中介」、「第三者」,就是將數據處理能力作為唯一「賣品」,提供給企業轉型方案的演算法公司,它們作為企業轉型的中堅橋樑,成為新興有力的又一產業,同樣也是數據科學家的廣袤新天地。

舉例,TalkingData是其中一個國內領先的獨立第三方移動數據服務平台,用數據幫助傳統企業完成基於移動互聯的數字化轉型,升級成為數據驅動的新時代企業。

在互聯網的時代,傳統產業面臨轉型和技術陌生的困境,在眾多產業試驗電商運營,微商運營的趨勢中,其實僅僅依靠渠道的變化,已經無法從本質上更新傳統產業的競爭內涵,目前的零售,百貨,連鎖等商業分戰場上,生產水平越來越高質齊平,其他環節也相互學習,迅速複製,在這種環境下商品高度同質化就會不斷形成。

也就是現在在市場上流通的同種商品已經看不出什麼優劣區別,於是由客戶主動尋找產品的過去,應該轉向大數據分析客戶需求,提升用戶體驗水平的新興方向,而轉型中數據科學的運用就是命脈。

舉例,步步高作為典型的傳統企業,就藉助了TalkingData的數據整合分析力量,為企業做出了高度邏輯性的轉型升級,TalkingData以大數據的視角幫助步步高了解客戶特徵及市場競爭,建立會員體系,指導優化運營現狀。

第四步,數據科學家應對具體業務作出可靠地指導和提升。

TalkingData給步步高 這樣的傳統零售企業的轉型方案是大數據思維精確指引客群市場,將來使步步高擁有數據驅動的操作能力,同時調研市場,為步步高進行數據資產化治理,打通業務與行為,線上與線下數據間的隔閡,實現全景客群畫像。

再分析內場人,貨,場三者之間關係的同時深刻分析區域以及市場的競爭環境,通過線上和線下渠道相結合的方式,指導全渠道營銷,並以數據為驅動為後續決策落地奠定堅實基礎。

即目前倉促迷茫轉型的傳統企業,往往網上數據統計不夠及時,深入,線下數據收集空白或雜亂,線上線下無法統一整合,則使得大量數據報廢或者反饋甚微,而雙向整合,加入數據驅動力,才能夠勾畫出整體人群的習慣偏好。

TalkingData將步步高全渠道高效轉化,實現會員運營跨越0到1的距離,各種渠道用數據連接打通後,企業的整個運營便帶有了數據驅動的內核。

這也是傳統轉型的最終落腳點,可以說要成為一個數據科學家,擁有這樣的業務支持才算是真正邁入社會數據應用門檻的一步。

擁有了業務實踐能力,你需要總結那些把自己的理解和暢想演繹為現實的機會中的經驗,從而在實踐中收穫思想的升華,得到一些書本上無法學到的歷練知識。

第五步,你要有機敏的邏輯分析能力,牢靠的總結歸納能力等,這些思維能力幫助你不只停留在死板的數據流程,還能夠根據各種市場,企業,人群細微的聯繫變化,得出經驗性的思維,把握數據時代的深入脈絡。

數據運營的TalkingData提出的「三重門」理論我認為是是有必必須要掌握的思維路程,它把運營者的數據業務分為「交易門」,「交互門」和「公開市場門」,三者呈邏輯遞進深入的關係。

「交易門」中為客戶與企業的交易數據,這重門以交易數據,日誌數據為主,通過企業內部的生產作業系統記錄留存,基本以「事後」數據為主,數據存在形式以結構化數據為主體。

即客戶和企業直接的來往買賣數據,包括買賣,刷卡,查詢,投訴等。

「交互門」中為客戶與企業的交互數據,其特點是以用戶與企業的各種交互數據為主,此類數據開始出現大量非結構化,流式數據等多種形態。

即客戶對企業的單向行為,如如位置,點擊,瀏覽,企業App內的操作行為,線下則為到店足跡等實體行為。

「公開市場門」 即客戶在一個開放市場中的各種行為數據,其本身往往並不直接與企業的業務相關,但是對這些數據的獲取和分析可以很大程度上輔助企業業務的開展,如移動App的數據,社交數據,微信微博的輿情數據,品牌偏好數據,職住娛位置聚集和遷徙數據,區塊內人群消費能力數據,觀影偏好數據等等。


Road Map to Data Scientist
最好看大圖。
哈哈手機黨對不住了,請謹慎點擊。


如何用8步成為數據科學家:

這是國外數據科學學習平台DataCamp成員寫的一篇圖文《8步成為數據科學家》。我們具體來看下有哪些學習內容和學習資源。

這裡說的8步,不是你用8周就可以完成,而是一種學習的方法。這些步驟雖然沒有那麼簡單,但是都是可操作,可實踐的。只要你投入時間去學習,相信時間的積累力量,就可以掌握這些知識。

首先,什麼是大數據科學家?

數據科學家是一個跨學科人才,是比軟體工程師更擅長統計學,比統計學家更擅長軟體工程的人。需要掌握的知識有數學統計,編程能力,機器學習,研究能力等。


目前,數據科學家大部分是本科或者碩士學歷(本科37%,碩士31%)。但是不要擔心,從調查數據來看,有5%高中畢業的人也成為了數據科學家。這足以證明,只要你努力去提供自己,英雄是不問出處的。

第1步:學好統計、數學和機器學習

下面給出了學習這些知識的資源。如果感覺這些資源學起來太難,可以從《赤裸裸的統計學》、《深入淺出統計學》這兩本書入門。

第2步:學會編程

掌握計算機科學的基礎知識,學會系統開發的整個過程(end-to-end development),因為你做的東西會成為其他系統的一部分。

選擇一種數據分析的編程語言,例如開源軟體的R , Python語言等,或者商業軟體的SAS, SPSS等。

在學習過程中可以用DataCamp, tryR, Codecademy或Google Class進行互動式學習。

第3步:理解資料庫

在大部分的實際數據分析項目中,數據大部分是存儲在資料庫中的,所以你的學會資料庫的操作,如關係資料庫MySQL,非關係型資料庫MongoDB等。

第4步:學會數據預處理、可視化和報表製作

1. 數據預處理


在數據分析師的工作中,有多達60%的時間都花在了實際分析前數據的準備上。數據預處理的目標是為了把數據改變成我們喜歡的樣子,以便於後期的分析處理。這就好比,現在很多女孩照相喜歡用美圖秀秀,眼睛不大,那我就用美圖秀秀把眼睛變大。變成自己喜歡的樣子。


數據預處理可自學Coursera中《Getting and Cleaning Data》的 課程(作者:John Hopkins)。也可以用工具DataWrangler、R語言的data.table和dply包。

2.數據可視化是將數據分析的結果顯示出來,便於展示。實用工具有ggvis, D3, vega。


3.數據報表作為數據分析的最後一步,是將數據分析和結果製作成易於理解的報告。實用工具有Tableau, Spotfire和R Markdown。

第5步:提升到大數據級別

當你開始處理海量規模的數據時,絕大多數的數據科學家要解決的問題,都無法在單機上完成,需要用分散式處理大數據集,使用的工具有Hadoop,Apache Spark。

第6步:多實踐,與數據科學家大牛多交流

幸好是互聯網時代,我們可以通過網路認識大牛,並從他們分享的知識內容中學到更多經驗知識。當然,你也可以通過參加比賽,做小項目獲得更多的實踐經驗。

第7步:實習、實戰、或找份工作

判別自己是不是一個真正的數據科學家的最佳途徑,就是用你新學的知識迎難而上,進入數據分析的工作領域。

第8步:通過專業社區學到更多

數據分析的網站有:DataTau, Kdnuggets, fivethirtyeight, datascience101, r-bloggers。


可以看這些數據科學大牛的博客:Hilary Mason, David Smith, Nate Silver, dj patil。


可以從quandl上獲取數據。


ps:關於大數據分析的資料已經整理好,可以點擊下面獲取:

我要 &>&> 大數據分析學習資料


原文: How to become a data scientist

數據科學是目前最受歡迎的領域之一,數據科學家也處於極度需求之中。 有了很好的理由 - 數據科學家正在從創建自駕車到自動字幕圖像方面做了一切。 鑒於所有有趣的應用,數據科學是一個非常搶手的職業。

數據科學應用於許多領域,包括開發自駕車。

如果你正在閱讀這篇文章,我假設你想學習如何成為一名數據科學家。如果你已經做了一些研究,你可能已經閱讀了幾十本從「學習線性代數」開始的指南,並在5年後結束了「學習Spark」。當我學習的時候,我試圖遵循這些指南,但是我最終感到無聊,沒有任何實際的數據科學技能來顯示我的時間。這些方法就像一個學校的老師,遞給我一堆書,告訴我讀完這些書 —— 一種從未吸引過我的學習方法。

關於所有「成為5年輕數年的數據科學家」指南的不幸部分是它們是已經是專家數據科學家的人寫的。他們看著自己,說「有什麼需要學習做我每天做的事情?」他們忘記了自己想要學習一些東西是什麼樣的事情,需要動力來推動下一個障礙是什麼。

當我學習數據科學時,我意識到當我正在研究一個我感興趣的問題時,我會最有效地學習,而不是學習技能清單,我決定專註於圍繞實際數據構建項目。這種學習方法不但激勵了我,而且也與您在數據科學家角色中所做的工作密切相關。

在這篇文章中,我將分享幾個步驟,幫助您成為數據科學家的旅程。這個旅程並不容易,但是比傳統的方法更能激勵人心。

1、多問為什麼

數據科學的吸引力是使用實際的數據和代碼來回答有趣的問題。 這些問題可以從「我可以預測是否有任何航班準時」?「美國每個學生在教育中花費多少?」 為了能夠提出和回答這些問題,您需要發展分析心態。

發展這種觀念的最好方法是開始使用新聞文章。 查找文章,Can Running Make You Smarter?、Is Sugar Really Bad for You?。 想一想:

  • 根據數據,他們如何得出結論
  • 你如何設計研究進一步調查
  • 如果您有權訪問基礎數據,您可能會問什麼問題

一些文章,像this one on gun deaths in the US、Dissecting Trump』s Most Rabid Online Following 實際上有底層數據可供下載。 此時你可以這樣做:

  • 下載數據,並以Excel或等效工具打開
  • 肉眼觀察,可以在數據中找到什麼模式
  • 你認為數據支持文章的結論嗎? 為什麼或者為什麼不?
  • 你還有什麼其他問題可以使用數據來回答?

以下是找到數據驅動文章的好地方:

  • FiveThirtyEight
  • New York Times
  • Vox
  • The Intercept

閱讀文章幾個星期後,反思您是否喜歡提出問題並回答問題。成為數據科學家是一條漫長的道路,您需要非常熱衷於該領域,使之成為一切。數據科學家不斷提出問題,並使用數學模型和數據分析工具對其進行回答。

如果你不喜歡關於數據推理和提問的過程,你應該考慮嘗試找到你喜歡的數據和事物之間的重疊。例如,也許你不喜歡在抽象中提出問題的過程,但也許你真的喜歡分析健康數據或教育數據。我個人對股市數據非常感興趣,這促使我建立一個預測市場的模式。

在進入下一步之前,請確保您對激情的數據科學過程有所了解。我不能強調這點。如果你的目標是成為一名數據科學家,但你沒有一個特定的激情,那麼你可能不會在努力工作的幾個月中學習。

來自FiveThirtyEight的信息圖

2.學習基礎知識

一旦知道如何提出問題,您就可以開始學習技術技能來開始回答問題。我將首先學習Python編程基礎知識。 Python是一種具有一致語法的編程語言,通常建議初學者使用。幸運的是,它還具有多功能性,使您能夠進行非常複雜的數據科學和機器學習相關工作,如深度學習。

很多人擔心語言選擇,但關鍵點是記住是:

  • 數據科學是關於能夠回答問題和驅動業務價值,而不是工具
  • 學習概念比學習語法更重要
  • 建立項目並分享它們是您在實際的數據科學角色中所做的工作,並以這種方式學習,將為您帶來開始

如上所述,關鍵是不要學習所有的數據科學工具。要學習足夠的技術方面開始建設項目。一些好的做法是:

  • Dataquest - Dataquest通過分析有趣的數據集,如NBA評分或CIA隱蔽操作的數據,教你Python和數據科學的基礎知識。
  • Codecademy - Codecademy教你Python的基礎知識,以及如何構建程序。

關鍵在於學習基礎知識,並開始回答您在過去幾周內提出的一些問題。 這將有助於您鞏固您的學習,並開始構建投資組合。

Enjoying this post? Learn data science with Dataquest!
Learn from the comfort of your browser.
Work with real-life data sets.
Build a portfolio of projects.

Start for Free

3.構建項目

當您學習編碼的基礎知識時,您應該開始構建回答有趣問題的項目,並展示您的數據科學技能。 項目不一定非常複雜。 例如,您可以分析Super Bowl winners以尋找模式。 關鍵是找到有趣的數據集,詢問有關數據的問題,然後用代碼回答這些問題。 如果您需要幫助查找數據集,請查看此帖子以獲取找到它們的好地方列表。

在構建項目時,請記住:

  • 大多數數據科學工作是數據清理。
  • 最常見的機器學習技術是線性回歸。
  • 每個人都從某個地方開始,即使你覺得你做的不是非常優秀,但是還是值得的。

構建項目不僅可以幫助您了解真實的數據科學工作和實踐您的技能,還可幫助您建立一個作品集,向潛在的僱主展示。 以下是一些更為詳細的構建項目指導:

  • Storytelling with data
  • Machine learning project

一旦你建立了一些較小的項目,找到一個你可以深入的興趣領域是極好的。對我來說,就是試圖預測股市。 關於預測股市的好處是,您可以從很弱的Python基礎開始,並嘗試每個月或每周進行預測。 隨著你的技能的增長,你可以通過添加細微的價格和更準確的預測來增加問題的複雜性。

您可以迭代開發的其他一些項目示例如下:

  • 健康跟蹤。 您可以先手動輸入和分析數據,並隨著時間的推移繼續添加更多的相關性和預測因素。
  • 預測NBA比賽獲勝者。 您可以通過手動輸入分數並使用啟發式進行預測,但您可以隨時隨地獲取更多數據並進行更準確的預測。

數據科學項目的一個例子 - 這張地圖顯示了美國的種族多樣性

4、分享你的工作

一旦你建立了一些項目,你應該與他人分享! 將它們上傳到Github是個好主意,其他人可以查看它們。 您可以在這裡閱讀關於將項目上傳到Github的,以及有關在此創作作品集的更多信息。 上傳項目將:

  • 強迫您考慮如何最好地呈現他們,這是您在數據科學角色中所做的工作
  • 允許同行查看您的項目和評論
  • 允許僱主查看你的項目

隨著將工作上傳到Github,您還應該考慮發布博客。 當我學習數據科學時,寫博客文章幫助我:

  • 獲得招聘人員的入站興趣
  • 更深入地學習概念(教學過程真的有助於您學習)
  • 與同齡人聯繫

您可以在此閱讀有關如何發布博客的良好指南。 博客文章的一些好主題是:

  • 解釋數據科學和編程概念
  • 討論你的項目,並走過你的發現
  • 討論學習數據科學的過程,以及你如何做

來自我的博客的信息圖表顯示了每個辛普森角色喜歡的人物

5.向別人學習

在構建項目後,開始與其他數據科學家交流是一個好主意。 您可以面談或在線社區交流。 一些好的在線社區有:

  • /r/datascience
  • DataTau
  • Data Science Slack
  • Quora
  • Kaggle

當我學習的時候,我個人對Quora和Kaggle非常活躍,這對我來說非常有幫助。 參與在線社區是一個很好的方法:

  • 向其他人學習
  • 增強您的個人資料,並尋找機會
  • 通過學習他人來加強你的知識

您也可以通過Meetups親自與人交流。 親身參與可以幫助您向您所在地區的更有經驗的數據科學家那裡了解和學習。

6、向你的極限前進

公司希望聘請數據科學家,他們找到那些可以節省資金或讓他們的客戶更快樂的重要方法。 您必須將相同的過程應用於學習 - 繼續尋找新的問題來回答,並繼續回答更困難和更複雜的問題。 如果您回顧一兩個月前您的項目,而不會對您所做的事情感到尷尬,那麼您可能沒有達到您的極限。 你應該每個月都取得很大的進步,這應該在你的工作中體現出來。

超越極限的一些方法是:

  • 嘗試使用比您喜歡的更大的數據集
  • 啟動一個需要你不了解的項目
  • 嘗試使您的項目運行更快
  • 看看你是否可以教別人你做的項目

你已經知道怎麼做了

學習數據科學並不容易,但關鍵是要保持積極性,享受你正在做的事情。如果您一直在構建項目並進行共享,您將建立您的專業知識,並獲得所需的數據科學家工作機會。

我沒有給你一個學習數據科學的準確路線圖,但是如果你遵循文中這個過程,你會比你想像的走更遠。任何人,包括你和我,如果你有足夠的動力,可以成為一個數據科學家。

由於對傳統網站教的數據科學很失望,我最近創建了Dataquest,這是在線學習數據科學的更好方式。 Dataquest解決了MOOC的問題,在那裡你永遠都不知道接下來要採取什麼行動,而且你從來沒有受到你正在學習的動機。 Dataquest利用我所學到的經驗教訓,幫助數千人學習數據科學,並專註於使學習經歷更有吸引力。在Dataquest中,您將建立數十個項目,並學習成為成功的數據科學家所需的所有技能。 Dataquest學生已經被僱用在像埃森哲和SpaceX這樣的公司。

祝你好運成為數據科學家,如果您有任何有關如何學習的技巧,請在評論讓其他人中知道!

=========================分割線============================================

在Quora上也有答案 How can I become a data scientist?

最後附上一張圖,共勉


本科國內211 IE專業,Master 美國 專排前十 IEOR專業,因為不想做IE偏製造的工作 也無法靠master 背景混到OR工作 所以一咬牙一跺腳轉型吧!從此立志成為一名數據科學家 自學+面試直到找到工作耗時四五個月 還算高效地成功轉了型 貼一下我簡歷中的skill set. (初入行菜鳥一枚求溫柔對待


除了最後一行OR的,這裡邊囊括了我自學的所有內容(那個 3years是瞎掰的嘎嘎 練熟了三個月冒充三年沒大問題 至今沒被識破過...),至於怎麼學,看個人喜好了,時間多的可以去看書,像我自己比較浮躁,全程GOOGLE,一個知識點一個知識點地磨,看YouTube, 看公開課,看博客,看到自己滿意為止。然後找開源數據 自己做project加深理解。就醬。

------------2016.3.12 說更咱就更!----------------
統一回復下在評論里質疑我在偽造三年工作經驗的,你們再看眼我skills的第二行,我寫的是三年R語言使用經驗。像R 呀 SAS 呀都是非常簡單的語言,對於任何一個有編程基礎的人,掌握起來非常快的,雖然三個月前剛學的,但跟面試官表示我三年前就開始用了呢並不會引來懷疑,你可以理解成三年前就用R做過project,是不是很正常。至於工作經驗我都是照實寫的。
另外,想對正在噴我的,和打算噴我的朋友說一句:你有更好的經驗也歡迎來分享呀,噴我又不能造福人類!

回歸正題

自學是一件非常寂寞的事情,希望所有有理想成為Data scientist的你能堅持下來,人生會因此大不同。

答主通過學習過來人經驗總結,諮詢前輩,大量研究 job description, 制定了自學的幾大塊內容:統計,SAS R Python編程,機器學習,Hadoop家族產品。

統計:
1)統計基礎:相信大部分專業本科和研究生的基礎課程都少不了統計基礎,什麼F檢驗,T檢驗,ANOVA,置信區間,幾款經典的distribution 等等。那花個兩三天時間來鞏固一下熱熱身吧!我用的是PSU Applied Statistics 文字版網課 Welcome to STAT 500! 內容完善講解細緻的良心之作啊!

2)Regression: 必學,一個系列的網課 Welcome to STAT 501! 一共15個Lesson,一天一個,兩個禮拜輕鬆搞定,同時找些作業題來做,google一下一大把。學完之後如果感覺良好漸入佳境了,後面的學習就可以適當提提速啦。

3)DOE: 答主上過這門課所以沒有自學經驗可分享,有同系列網課大家可以用用看看 Welcome to STAT 502! 和 Welcome to STAT 503!

4)Analysis of Discrete Data: Welcome to STAT 504!
Applied Multivariate Statistical Analysis: Welcome to STAT 505!
Time Series: Welcome to STAT 510!
都是很基礎很有用的!時間富餘的朋友一定要仔細認真學+做題,答主當時著急速成,強迫自己高負荷運作,每門課用時四五天過了一遍,沒深究沒做題,學完都累懵逼了。

SAS:
廣泛應用在各行各業,尤其是大公司,尤其是銀行保險業,把 base 和advanced 兩個證考了,基本就掌握得差不多了,面試的題都不會超出這個範圍。答主考證的學習材料:
Base Learning Path
Advanced Learning Path
答主一年前就考了,當時挺閑的,身邊也有人在考,就跟風考個玩玩,沒想到還真派上用場了,忍不住廢話一句:在學東西的時候永遠不要去想我學這有什麼用,總有一天它的價值會顯現。
建議有空就早點考,挺簡單的,用不了多長時間。

R:
coursera 上有 R programming 的課程:coursera.org 的頁面 適合作為新手掃盲課程。快速學完之後,可以專項突擊一下,Data Frame 的各種操作還有幾個重點學習了的package: reshape2, dplyr, ggplot2. 答主不是專家,多是憑自己興趣(比如覺得數據可視化很炫酷)和手邊材料傾向性地學了點,不一定值得借鑒。不過下面這些書真的都很好,認真看完一到兩本必會很有幫助。

Data Visualization:

  • ggplot2: Elegant Graphics for Data Analysis - Hadley Wickham (2009)

Programming:

  • R Cookbook - Paul Teetor (2011)
  • R in a Nutshell: A Desktop Quick Reference - Joseph Adler (2010)
  • The R Book - Michael Crawley (2007)

Advanced Programming:

  • Software for Data Analysis: Programming with R - John Chambers (2008)
  • Practical Data Science with R - Nina Zumel and John Mount (2014)

Python:
關於Python的公開課也有不少,可惜答主都沒看過,不能給出意見,初學的時候參考的這本書:Learn Python。之後重點學習了幾個數據分析必備package:Numpy, Scipy, Pandas, Matplotlib, Regular Expression, BeautifulSoup。 沒有參考特定書籍,google一下就會有非常多很棒的內容直接拿來學。另外,演算法和數據結構也需要大致學習了一下。

因為答主有C,C#,Matlab的編程經驗,這些上手起來很快。如果你沒有編程基礎也沒關係,先把R學好,做幾個project漲漲自信,再慢慢啃Python,不怕多花時間,一定要學明白!


機器學習:
Andrew Ng 非常有名的 machine learning 公開課:coursera.org 的頁面 淺顯易懂,值得一學。另外,上面截圖skills 裡邊的提到的 learning algorithm,答主都逐一google,從Youtube到博客到論文,看懂原理,結合Python 的scikit learn實現一遍。 最後,來一發Udacity的付費網課 Machine Learning Engineer Nanodegree 收尾,裡邊有四個很贊的小project,認真做一遍,技能點飆升。


Hadoop家族產品
Udacity 網課:Intro to Hadoop and MapReduce 講得很好,課後練手小作業也不錯。
同時配合看了這麼兩本書:
Hadoop: The Definitive Guide 4th Edition (amazon.com 的頁面)
Learning Spark: Lightning-Fast Big Data Analysis 1st Edition (amazon.com 的頁面)

------------2016.03.28 更新!----------------
Project那些事:
當時做Project靈感的來源是linkedin,搜data scientist,上面有很多很厲害的大神,參考他們做過的Project,多看多想,然後呢,網上有很多公開資料庫,稍微有點想法了之後,找個合適的dataset實踐一下。
我自己做了以下幾個方面的Projects 列在簡歷里:
web scraping
text mining
market segmentation
Customer Churn Prediction
recommender system (master"s 畢業論文)

做Project就是一個把自己所學進行總結歸納升華的階段,一定要有自己的想法,是的,自己的想法非常重要,要勤思考,不懂的東西勤問google。

先說這些,如果有什麼具體的問題,歡迎找我一起探討。
最近事情很多,更新略慢了,見諒。

另外,答主是玻璃心,懷抱著一顆來分享交流的心答題,卻聽到了不少不友善的聲音。
可能一開始寫得太隨意輕鬆了,讓有的人以為我污了scientist這個頭銜,我來答題可不是什麼資深數據科學家在這分享行業精華,我只是靠自己一點一點努力積累,勉強擠進了這個行業,然後想給完全不懂行但又很想入行的朋友一點建議,而已。輕描淡寫不代表我學得隨意,這不是抒情貼,自學的過程有多孤單挫敗,難道不是學了的人自己知道就可以了么。
不巧答主即不是那種溫柔大方能容忍情商高的女生,也不是喜歡無休無止跟人撕逼的類型,落到最後就是一個人悶悶不樂收場。這也是我當初沒有預料到的。


我推薦「清華大數據(微信號:FudanBigData)」的一篇文章:


圖說:成為一個性感的數據科學家,總共分幾步?

「數據科學家」 是二十一世紀最性感的職業。所謂性感,既代表著難以名狀的誘惑,又說明了大家都不知道它乾的是什麼。那麼想要成為一個性感的數據科學家,總共分幾步?


「清華大數據(微信號:Tsinghua_Big_Data)」 二維碼:


其實這個問題在網站Quora中也出現了,並且獲得了大量的關注、回復、評論。小編特意將高分答案翻譯過來並編輯成文送給關注這個問題的各位小夥伴:
數據分析師的基本素養--論如何成為一名數據科學家 Part 1

這裡有一些我收集的關於數據處理方面的材料,希望能夠對你有所幫助(請注意:我是一名本科生,下面提到的資料僅為個人整理所得,在任何方面都不可視為專家意見)。

  1. 了解矩陣因式分解
  • 學習計算機線性代數相關的課程(這類課程有時也叫做線性代數應用、矩陣計算、數值分析或者矩陣分析等,它既可以屬於計算機科學,也可以屬於應用數學課程)。矩陣分解演算法是許多數據挖掘應用的基礎,而在標準的"機器學習"課程中使用的矩陣分解演算法通常不具有代表性。面對TB規模的數據時,Matlab等傳統工具無法有效地執行數據處理工作,你不可能在大數據上只執行一條eig()語句就可以得出預期的結果。分散式矩陣計算包,例如Apache Mahout[1] 中包含的那些,試圖填補這方面的空白,但是,你仍需要理解數值演算法/LAPACK/BLAS [2][3][4][5]的工作機制,以便正確使用它們,針對特殊情況進行調整,構建自己的數據處理工具,並將其擴展到商業機器集群中TB級別規模的數據之上[6]。數學課程通常基於本科代數與微積分的基礎,因此你應該具有良好的先決條件。
  • 我推薦下面這些自學和參考資料:Jack Dongarra的一些課程以及有哪些不錯的學習數值分析的資料?
  • 了解分散式計算
    • 了解如何使用Linux集群以及如何設計可擴展的分散式演算法(如果你打算對大數據進行分析的話,可以看看這篇文章:為什麼人們現在執著於大數據?)非常重要。
    • 過去的Cray和連接機器如今已經被廉價的雲主機節點所替代,計算成本也從1984年的1500萬美元降低至2011年的低於1.80美元/ GFlop:http://en.wikipedia.org/wiki/FLOPS。
    • 如果你想充分利用自己的(租用的)硬體環境,那麼如何儘可能地發揮多核硬體的性能也至關重要(詳見http://en.wikipedia.org/wiki/Moore#x27;s_law)。
    • 請注意:這部分內容並不在標準的機器學習課程的範圍之內,但你或許可以在計算機科學授課目錄中找到諸如分散式系統或者並行編程之類的課程。可參考一些分散式系統的資料,對於初學者也可以參照計算機網路簡介。
    • 在學習了網路和分散式系統的基礎知識後,我建議你了解下分散式資料庫,這些資料庫不久將隨著數據規模的迅速增長以及縱向規模達到極限而得到普及。詳見分散式資料庫的一些關鍵工作與研究趨勢,對於初學者也可以參照關係型資料庫導論以及分散式資料庫導論(HBase實戰)。
  • 了解統計分析
    • 剛開始學習統計學時可以使用R編程:R語言有哪些必備的參考書?並結合真實數據進行實驗:哪裡可以找到公開的大型數據集?
    • Cosma Shalizi編寫了一些非常優秀的關於計算統計學的資料,你可以查看他的授課課件,以及有哪些不錯的學習統計分析的資料?
    • 我發現比起按部就班地學習Stats 101課程,在特定領域中(例如,自然語言處理)學習統計學會更加輕鬆。我個人的建議是學習哥倫比亞大學Michael Collins教授的課程(這門課程你也可以在Coursera上找到)。
    • 你也可以挑選一個需要應用定量統計和因果原則[7]的領域,比如說分子生物學[8]、癌症研究[9]等比較有趣的子領域、腫瘤血管生成的遺傳分析[10]以及其他更窄的領域等等。嘗試回答該特定領域中的重要問題,並了解在這個過程中需要掌握哪些知識。
  • 了解最優化
    • 這部分知識是理解許多機器學習與信號處理演算法的前提。
    • 可以從Stephen P. Boyd的視頻課程學起,也可以參考有哪些不錯的學習最優化的資料?
  • 了解機器學習
    • 在你準備演算法之前,你需要仔細檢查現有的數據並從中挑選出有助於過濾信號雜訊的數據特徵。可以看看Jeremy Howard對此的看法:在Kaggle中,知道得太多並不一定就是好事。
    • 也可以參考如何學習機器學習?以及有哪些適合初學者的學習大規模機器學習的資料?分別有什麼特點?
    • 統計學VS機器學習,加油!:http://brenocon.com/blog/2008/12/statistics-vs-machine-learning-fight/
    • 你可以根據MIT、斯坦福以及其他頂尖高校的在線課程目錄和課表來制定自己的學習計劃。結合數據多做實驗,修改一些代碼,多提問題,與周圍的人多討論,並自己實現一個網路爬蟲:搜索引擎剖析。
    • 你可以選擇加入一家初創公司,在實踐中學習:有哪些初創公司會聘用擅長機器學習與NLP的工程師?
    • 如果你想更加正式地學習這些知識的話,你也可以去參加計算機科學或者機器學習的培訓,當然這種培訓的費用也相當昂貴。詳見:計算機科學專業的碩士學位值得嗎?為什麼?
    • 盡量避免專業化程度過高的情況。當進入一個新的領域並著手處理棘手問題時,廣度優先的方法往往最為有效,可以結合貝格爾號第二次遠航的故事,想一想一名年輕的數據挖掘師在大數據中的探險。
  • 了解信息檢索
    • 機器學習實際上並沒有聽起來那麼酷:http://teddziuba.com/2008/05/machine-learning-is-not-as-coo.html
    • 有哪些不錯的適合初學者學習信息檢索的資料?為什麼?
  • 了解信號檢測與評估
    • 這是一個經典的課題,而且在我看來這是"數據科學"中最為優秀的部分。這些方法曾指導阿波羅登月計劃,並用於敵方潛艇的探測,至今這些方法仍在許多領域中有著廣泛的使用。這部分內容通常是電子工程課程中的一部分。
    • 有很多不錯的參考資料,例如,Robert F. Stengel關於優化控制與評估的授課課件: Rob Stengel的主頁和Alan V. Oppenheim的信號與系統課程。以及有哪些不錯的學習信號評估與檢測的資料?此外也需要關注下卡爾曼過濾器,其在時間序列預測中得到了廣泛的應用。
    • 說到數據,你可能想了解一些關於信息的知識:信息的傳播、壓縮以及如何從雜訊中過濾出信號。通信技術工程師在20世紀60年代設計的方法(例如維特比解碼器,如今應用於約10億部的手機中,還有Gabor小波,在虹膜識別領域得到了廣泛應用)適用於各種各樣的數據分析任務,從基於統計的機器翻譯到理解分子網路的組織結構與功能等等都有其用武之地。對於初學者而言,Robert G. Gallager的資訊理論和可靠通訊是一本不錯的資料。也可以參考有哪些不錯的學習資訊理論的資料?
  • 掌握演算法與數據結構
    • 有哪些最適合初學者學習演算法的資料?
  • 實踐
    • 學習數據科學你需要了解什麼?
    • 工匠:http://software-carpentry.org/
    • 數據科學領域有哪些好玩的問題?
    • 工具:最好的數據分析工具有哪些?
    • 在哪裡能夠找到公開的大型數據集?

    如果你打算攻讀碩士學位:

    1. 學習工程學
    • 我建議你在計算機科學領域中,將重心放在信息檢索、機器學習或者二者的結合上,並參加一些相關的系統課程。作為一名"數據科學家",你必須親手編寫大量代碼,可能還需要開發分散式演算法或系統來處理海量規模的數據。統計學的碩士學位會讓你學會如何建模,並進行回歸分析,而不是如何實現一個系統,我認為,隨著數據規模的迅速增長以及現有分析工具逐漸過時,後者在現在看來更為重要。能夠從頭搭建數據挖掘系統的工程師相對來說比較短缺。你可以從相關圖書中獲取統計數據並使用R進行實驗(詳見建議3),或者你也可以在攻讀計算機科學學位時報名參加一些統計學的課程。

    祝你好運。

    [1] http://mahout.apache.org/
    [2] http://www.netlib.org/lapack/
    [3] http://www.netlib.org/eispack/
    [4] http://math.nist.gov/javanumeric...
    [5] http://www.netlib.org/scalapack/
    [6] http://labs.google.com/papers/ma...
    [7] Amazon.com: Causality: Models, Reasoning and Inference (9780521895606): Judea Pearl: Books
    [8] Introduction to Biology, MIT 7.012 video lectures
    [9] Hanahan Weinberg, The Hallmarks of Cancer, Next Generation: Page on Wisc
    [10] The chaotic organization of tumor-associated vasculature, from The Biology of Cancer: Robert A. Weinberg: 9780815342205: Amazon.com: Books, p. 562

    Monica Rogati,數據科學顧問。曾在Jawbone與LinkedIn擔任數據副總裁與數據科學工程師職位。

    長話短說:做一個你真正感興趣的項目。公開並維護這個項目。

    成為一名數據科學家是一件很有趣的事情,原因有很多:高影響力、高工作滿意度、高薪酬以及高需求。在互聯網上稍微查找一下就能找到很多對你有所幫助的資源——MOOC、個人博客、Quora上關於此類問題的回答、圖書、碩士課程、相關培訓、自主課程、論文、各種各樣的論壇以及播客節目等等。這些資源的質量參差不齊,其中一些是非常優秀的資料和課程,但也有一些只是單純地想騙取點擊量的誘餌。由於數據科學家是一個相對比較新興的職位,大家對於這個職位應當扮演什麼樣的角色並沒有達成一致的看法,初學者很難搞清楚該從哪裡開始,面對眾多選擇時不知所措。

    有很多資料都遵循著一個相同的模式:1)這裡有你需要的技能,2)你在這裡可以學習這些技能。在這個鏈接中學習Python,在這裡可以學習R;參加一門機器學習課程,複習線性代數。下載虹膜數據集,然後訓練一個分類器("在實踐中學習!")。安裝Spark和Hadoop。哦,不要忘了深度學習——你可以按照TensorFlow的教程(面向機器學習新手的資料,所以當你不理解它如何工作時可能會感到更加無力)按部就班地學。買一本橙色的《模式識別》教材,然後讀了兩章選擇放棄,隨手丟到一邊。

    這樣講是有道理的,我們的教育機構教導我們這就是學習新事物的方式。從總體上看這種方法或許是有效的——但是,這確實也是一個不必要且低效率的過程。一些課程會有實案項目(通常使用預先組織好的精簡數據集,制定了明確的目標,看起來不錯但實際上卻沒什麼幫助)。許多人意識到,"在工作中學習"是不可代替的——但是,你最開始怎麼才能找到一份數據科學方面的工作?

    與這些方式相反,我建議搭建並開源一些簡單但有趣的項目。在實際操作的過程中,你會學到你需要的所有知識,甚至也可以參考上面提到的各種資源。但是,你需要強大的動力推動自己這樣做,你會對大部分知識有很深刻的印象,而不是被動地記憶那些複雜公式,然後在一個月內就把它們忘得一乾二淨。如果對你來說獲得一份數據科學家的工作是當務之急,那麼這些開源項目會為你開啟就職的大門,而且,如果你的課題、發現或者產品能夠引起大家的興趣,那麼你接到的招聘電話可能會超乎你的想像。

    以下是我推薦的學習步驟。它們能夠優化你的學習路線,並提高你獲得數據領域崗位的機會。

    1. 選擇一個你熱愛或感興趣的主題

    貓,健身,初創企業,政治,蜜蜂,教育,人權,祖傳番茄,勞動力市場等等。研究有哪些可用的數據集,或者只需最少的工作和開銷就能創建或獲取的數據集。也許你現在已經就職於一家具有獨特數據的公司,或者你可以在類似的非營利機構中擔任志願者。你的目標是回答有趣的問題,或者在一周之內實現一些很酷的東西(時間可以更長一些,但一周的時間可以引導你規劃自己的時間)。

    你找到值得深入分析的數據了嗎?你是否對自己能夠提出一些問題感到興奮並好奇別人的回答?你能否將這份數據與其他數據集合併在一起,分析出一些別人還未發現的獨特看法?人口普查數據、郵政編碼或州級人口統計數據、天氣和氣候數據都是不錯的選擇。你渴望開始你的探索嗎?如果你的回答是"哦"或者對此提不起興趣,那麼換一個新的主題,重新開始。

    2. 先寫一條微博

    你可能永遠都不會發微博,你也可能認為微博不是傳播科學發現的正規途徑。但是在你開始之前,有必要就自己的(假設的)發現寫一兩句話。盡量切合實際(特別是能夠在一周之內完成)並且保持樂觀(對實際取得的任何發現,或者其它有趣的東西要有信心)。思考一種可能的情況,它可能不夠準確(你可以就這一點展開工作),但你知道這值得去探索。

    這裡有一些例子:

    • "我使用LinkedIn數據來探索企業家的不同之處——結果表明他們比你想像中的更老,他們更傾向於物理,而非護理學或神學。我估計很難獲得風險投資資金來開創自己的宗教。"
    • "我使用Jawbone數據來了解天氣是如何影響人們日常活動的——我發現,紐約人對天氣變化的敏感程度低於加利福尼亞人。你認為是因為紐約人更強壯還是只是更多地在室內工作?"
    • "我結合BBC的訃告數據和維基百科的條目來研究2016年是否和那些名人一樣令我們感到糟糕。"

    如果你的目標是學習一些具體的技術或者找到一份工作,把它們加進來。

    • 來自Shelby Sturgis:"我搭建了一個Web應用,通過提供關於學校排名的分析以及不同學科領域的表現,幫助教師和管理員提高學生教學質量。我使用MySQL、Python、Javascript、Highcharts.js和D3.js來存儲、分析並可視化加利福尼亞STAR測試數據。"
    • "我使用TensorFlow來恢復黑白照片,並為其自動著色。我為奶奶做了一個巨大的拼貼畫——這是最好的聖誕節禮物!"

    想像一下你在聚會和面試的時候反覆重複這個過程。想像這刊登在今日美國或者華爾街日報上(不提及具體的技術,只介紹模糊的"演算法"或者"AI"或許真的可以做到)。你是厭煩自己,覺得解釋起來很麻煩,還是感到開心和自豪?如果你的回答是"哦",那麼重複第二步(也可能是第一步),直到你有兩三個吸引人的想法。從其他人那裡獲得反饋——這是不是聽起來很有趣?你會採訪為了獲得數據領域崗位而做了這些事情的人嗎?

    記住,在這一點上,坦白地講,除了研究數據集、初步了解需要使用哪些技術和工具以及它們的用途,你還沒有動手寫任何代碼,也沒有做任何數據方面的工作。這一階段很容易反覆進行,直到你找到自己想要做的事情。這是顯而易見的,但是人們總是喜歡隨便找一個教程或一門課,感受下自己的實踐能力,然後花幾個月的時間沉浸在一個毫無價值的項目之中。

    3. 進行數據分析

    探索隱含在數據之中的信息。進行數據清洗,並可視化數據。反覆重複。查看每列最頻繁出現的10個屬性值。研究數據中的異常點。檢查數據分布。若數據過於分散,將相似值歸為一類。尋找數據間的相似性以及缺失值。嘗試各種聚類和分類演算法。調試代碼。了解實際使用的演算法為什麼在某些數據上工作或不工作。如果你的數據集較大,在AWS上創建數據管道。在你的非結構化文本數據上嘗試各種NLP工具庫。是的,你可能會用到Spark、numpy、pandas、nltk、矩陣分解以及TensorFlow——這不是因為別人告訴你要學,而是你需要使用這些工具完成你在意的事情。化身為一名偵探,思考新的問題以及以前沒有想到的方向。看看所做的事情是否有意義。你是否在數據採集的過程中發現了關鍵問題?如果你加入了另外一個數據集會怎麼樣?駕馭數據。偶爾出現的困難應該令你感到刺激而有趣。從Kaggle、導師以及做同樣事情的同伴那裡獲得幫助和反饋。

    如果你在這樣的學習過程中仍然找不到樂趣,那麼回到第一步。如果這樣的想法讓你厭惡生活,重新考慮一下,是否還要成為一名數據科學家:這是一件有趣的事情,但是,如果你對這樣的工作提不去興趣,你將無法承受實際數據科學工作中的辛勤勞作。

    4. 溝通

    使用簡潔的語言描述你的發現,並使用簡單形象的方式將其可視化。我強烈建議你在這個過程中學習幾種數據可視化工具,這會是你在技能培養上的一筆投資。如果你實現了一個原型系統,整理出一個簡潔有趣的演示文檔或視頻。技術細節和代碼應該以鏈接的形式提供。把它發布出來,然後看看能夠得到什麼樣的反饋。這種公開的方式可使你以更高的標準要求自己,並保持良好的代碼質量、文檔編寫水平與可視化效果。

    Peter Skomoroch,LinkedIn數據科學工程師

    如果你有時間去參加課程學習,不要猶豫。

    1. 試著報名參加一些你錯過的本科數學課程。線性代數、高等微積分、微分方程、概率論、統計學等等都是非常重要的課程。在這之後,你可以參加一些機器學習課程。閱讀幾本著名的機器學習教材,時常翻閱相關的學術期刊,保持對機器學習領域良好的了解。
    2. 了解頂級數據公司現在都在做什麼。學習完一兩門機器學習課程之後,你應該具備了足夠的背景知識來學習大多數的學術論文。在真實數據上實現一些這樣的演算法。
    3. 如果你使用了大型的數據集,那麼你應該熟悉使用最新的技術和工具(Hadoop、NoSQL、Spark等等),並把它們應用在實際的工作(或工作之外的地方)當中。
    4. 在產品開發的角度上看,大部分的數據科學本質上都屬於軟體工程,並且能夠創建、修改和實現相應的演算法。正如William Chen所提到的,許多數據科技家都知道Python、R、scikits-learn等等,但是它們大多用於分析或原型設計。如果你需要在生產環境中或大規模地實現一些演算法,你可能就需要學習如何使用Java或C++來編寫代碼。你可以閱讀《程序員修鍊之道 : 從小工到專家》這本書,如果你可能在科研背景下進行軟體開發,可以看看Software Carpentry上的課程。

    我最近和Semil Shah在TCTV電視台進行了一次訪談,在節目中,我們就如何才能成為一名數據科學家這個問題進行了深入的討論:http://techcrunch.com/2012/09/06/in-the-studio-linkedins-pete-skomoroch-discusses-the-voltron-of-data-science/

    Rohit Malshe,就職於英特爾公司

    當我在整個互聯網中查閱數據科學相關的材料時,我只會使用C和Matlab。我精通這些語言,但直到那個時候,我所做的以及能做的任何事情都不過是工程計算。我生成大量的數據,並創建一些圖表。當我被大量湧現的數據包圍時,我開始思考如何在其他地方應用這些數據。我開始尋找各種課程和方法,想要使用數據做些與眾不同的事情。最開始的時候,我感到無從下手,不知道該從哪裡學起,也不知道該學些什麼。幸運的是,我身邊幾乎總是有那麼幾個深入了解數據科學的人。

    和我一起工作的人,其中一些人編寫C/C++程序來生成GB級別的數據,一些人管理著分布在大型資料庫上的TB級數據,一些人是頂尖的SQL、Python和R程序員,還有一些人使用Hadoop、Sap以及商業智能等搭建了組織範圍內的資料庫。

    對於剛剛入門數據科學的新手,我有以下幾點建議:

    1. 在Coursera上學習各種基礎知識,但是,如果要我把能在Coursera上學到的知識同數據科學本身相比較,我只能說——Coursera就好比在Chipotle Mexican Grill吃墨西哥雞肉卷。你肯定能吃飽,但僅僅這樣是不夠的,還需要些別的東西。
    2. 深入學習數據科學真的很不容易,我認為它相當於五星級自助餐,提供20種美食和500種不同的食譜。
    3. 從Coursera開始學習當然很不錯,我們當然應該學習這些課程,但是我個人從來沒有在Coursera上付過費,隨著時間的推移,我肯定可以學到各種各樣的知識。
    4. Kaggle對於那些嶄露頭角的工程師來說真的是一個非常不錯的資源,在這裡他們可以了解到其他人的各種想法,並把這些想法實現出來。

    我自己是在具體實踐中學習數據科學的。我從SQL開始學起,接著我學了Python和R,然後我學了許多Python和R中的工具庫。之後我學了Html、使用VB腳本的GUI編程以及C#編程。後來我還學了Scikit learn。最後,我在辦公室與各種各樣的統計學家討論,他們每天的工作就是對數據進行分析並得出結論,在和他們交流的過程中我學到了JMP/JSL腳本和很多統計學知識。

    下面是我學習數據科學的完整流程。

    首先我想建議大家的是,學習科學。數據科學是90%的科學加上10%的數據管理。不了解科學,不知道自己想要得到什麼,也不知道為什麼要得到它,你將無法使用你在Coursera上學到的任何知識。在這一點上,我幾乎可以向你保證。

    我曾見到我朋友學習了Coursera上的一些課程,但是到了最後,他們沒有實現任何東西,他們無法得出正確的結論,他們實際上並沒有"應用"任何他們學到的知識。除此之外,他們甚至沒有使用他們獲得的技能。

    我按照如下的方式學習數據科學:

    1. 深入數據,了解數據的結構,了解數據的不同類型。在這個過程中,我理解了我們為什麼要收集數據,我們如何收集這些數據並存儲它們,以及我們在存儲之前如何對數據進行預處理。
    2. 學習如何使用這些編程語言高效地處理數據。我學會了清洗數據,按照我預期的方式加工數據,並使用每一種可能的方法可視化數據。僅僅繪製數據就會花費我好多小時的時間,查看不同圖表之間數據展示效果的不同。
    3. 我從負責資料庫管理的朋友那裡學習他們是如何管理和操作資料庫的。我學習了資料庫中表的結構。
    4. 學習如何繪製相關性圖表,以及如何計算任何投資操作的收益。這是數據科學中的各類知識開始交叉的地方。沒有什麼圖表是我不能畫的。基本上,我在互聯網上看到的圖表我都會學習它的繪製方法。這點非常重要,圖表是你用數據講故事的關鍵。
    5. 學習一些自動化的東西,這真的很神奇,因為你可以自動地完成一些事情,這可以為你節省很多時間。
    6. 自動化很容易通過Python、R、VBscript或C#編程來實現。我可以告訴你,對我來說大概沒有什麼是不能用自動化的方式解決的。只需要按一下按鈕,事情就這麼完成了。
    7. 學習如何撰寫報告。我意識到,我不得不以郵件的形式給其他人發送大量的數據和圖表。相信我,大家都沒有時間,也沒有興趣。 但是如果你做出的圖表形象生動,寫的報告通俗易懂,能夠闡述你想說明的一切,並將豐富且強有力的數據展示在幾幅有趣的圖表之中,你就能夠說服別人。
    8. 學習如何講述故事。這也就是說,你應該能夠向公司的副總裁說清楚自己部門存在的最大問題是什麼。你通過生成吸引人的圖表來講述故事,進而引出你的結論。做不到這一點,你無法說服任何人。人們對數字不感興趣。他們只記得名字、地點、事情、靈感,以及其他人做某些事的理由。一名真正的數據科學家也是一名真正的數據展示者。
    9. 最後,閱讀互聯網上所有能找到的博客,看看其他人如何做這些事情,如何編寫程序,如何創建各種各樣的圖表,如何用自動化的方式處理任務等等。有些人憑藉自己的技能完成了一些不可思議的項目,我也受到他們經歷的啟發,萌生出許多想法。這是一種了解別人想法的很好的方式。你可以基於大家的想法,做一些可以為你生活或工作帶來便利的事情,並且在這個過程中發揮自己的想像力。

    這裡有一些博客或許對你有所幫助:數據科學博客終極指南。

    這些博客我讀了很多,也深入學習了其中的知識。可能需要花費數周的時間才能學完這些博客,編寫代碼和結合數據設計實驗可能也要佔用幾個周末的時間。

    我最常訪問的網站包括

    • Stack Overflow
    • Python Programming Tutorials
    • The Comprehensive R Archive Network
    • Seaborn: statistical data visualization
    • Your Home for Data Science
    • 16+ Free Data Science Books
    • ipython/ipython
    • vinta/awesome-python
    • scikit-learn: machine learning in Python
    • Grace: Gallery(這裡有很多神奇的圖表)
    • Practical Programming for Total Beginners
    • Learn python the hard way
    • YouTube
    • Toad World
    • SQL Tutorial
    • CodeAcademy: Python
    • http://mahout.apache.org/
    • http://www.netlib.org/lapack/
    • http://www.netlib.org/eispack/
    • http://www.netlib.org/scalapack/
    • RegExr: Learn, Build, amp; Test RegEx
    • Regex for JavaScript, Python, PHP, and PCRE
    • StatsModels: Statistics in Python
    • Installing NLTK - NLTK 3.0 documentation

    我讀得最多的書

    1. Python學習手冊
    2. R語言編程藝術
    3. 很多統計方面的書,我隨後會在這裡更新。

    現在我會給你提供一個更詳細的方法,你可能會得到一些堅持下去的動力。

    一名典型的數據科學工程師的工作是什麼樣子的?數據科學又是如何發揮作用的?

    1. 決策制定:在我的工作中,我每天都需要制定一些決策和計劃。此外,我還需要向各位股東彙報進展,指導不同的員工,查看各種各樣的數據,處理各種各樣的工具和機器。這些機器中,其中一部分是用來處理任務的實際物理節點,也有一部分是維護物理節點的計算機程序和軟體平台。
    2. 數據:我們擁有的大部分數據要麼存儲在分布於各個數據單元的若干伺服器上,要麼存儲在一些共享設備上,或者存儲在伺服器中的硬碟驅動器上。
    3. 資料庫:這些資料庫伺服器可用於使用SQL語句獲取數據、直接地提取數據、使用FTP拷貝數據、以表格、CSV或文本的形式輸出數據等等。通常我們會使用多種方法從資料庫中提取數據。有很多種SQL平台,如TOAD、商務智能以及自建的內部平台等等。
    • 基於這些平台可以很輕鬆地學習SQL,也可以創建很多SQL腳本。
    • 你甚至可以創建能自動生成腳本的腳本。
    • 我建議你學習SQL,因為它是獲取數據最常使用的語言之一。
  • 還是數據:資料庫中的數據可以按高度結構化的形式組織,也可以採用非結構化的形式,比如用戶評論等等。
    • 這些數據通常具有固定數量的變數,有時變數的數量也可能會發生變化。
    • 數據有時也可能會丟失,也可能會錯誤地輸入到資料庫中。
      • 發現這樣的問題時,應該立刻向資料庫管理員發送郵件,並由他們改正系統中的錯誤。
      • 通常在為整個大型項目創建資料庫之前,幾個人會聚在一起討論數據大致的形式,如何將它們劃分到各個數據表中,以及不同數據表間應該如何連接。
      • 這些人是真正的數據科學家,他們知道終端用戶每天的需求是什麼。
      • 他們總是嘗試以結構化的形式組織數據,因為這樣可以使數據處理操作變得更加容易。
  • 腳本與規劃:當我在專用計算機的各個文件夾中獲取和轉儲數據時,我會使用多個專門設置在特定時間運行或自動運行的腳本。我有一個相當大的硬碟用來存儲大量數據。
    • 我通常會把新數據追加到現有的數據集合中,然後適時地清除舊數據。
    • 有時候我會在程序運行期間設置休眠指令,到達預定時間時快速地檢查一下,然後再次進入休眠狀態。
  • 更多的腳本:此外,還有一些腳本專門用於壓縮這些數據集並基於這些數據制定一系列決策。
    • 清洗數據,繪製有價值的數據透視表,要想從數據中挖掘信息,圖表至關重要。
    • 要做到這點,首先你需要對自己的數據有全面的了解,你應該能夠進行各種手工計算,生成excel表格並可視化數據。
    • 科學:我建議你在從事數據科學之前,先學習科學,了解隱藏在數據背後的物理學,深入研究並掌握這些知識。比如說,如果你在一家T恤公司工作,你應該熟悉T恤的方方面面,你應該了解所有可能的關於T恤的知識,即使沒有任何數據,你也應該很清楚客戶想要什麼。
    • 如果沒有對科學的良好認知,數據科學將毫無價值,基於數據科學的各種探索也只會徒勞無功
    • 注意事項:我看到很多人甚至不知道在圖表中應該繪製些什麼。
      • 我見過最糟糕的情況是,有些人圍繞一些隨機變數,根據任意兩個隨機變數間的關係繪製圖表,並從這樣的圖表中分析結論。
      • 當然,很多地方都隱含著事物間的聯繫,但是你一定要清楚對比的變數之間是否存在一定的因果關係。
      • 示例:諾貝爾獎獲得者的數量與許多國家的人均巧克力消耗量間存在著明顯的相關性,但是這是一種因果關係嗎?可能並不是!

    最後,但也同樣重要的是——僅僅使用SQL、C、Python、R和http://VB.Net,你就可以在數據中挖掘出自己感興趣的信息。你當然不需要受限於這些技術,但學習新的技術需要時間、耐心以及一項接一項的系統規劃。

    祝你好運!


    在業界數據科學家的定義很多,很不統一。兩個不同公司的data scientist的工作內容和技能可能非常不一樣。在大公司或者數據工程tech stack非常成熟的公司一般會區分data analyst,data scientist以及data engineer這三種不同的數據相關的工程師。但是在一個start up或者規模不大的公司,一個data scientist可能會扮演這三種角色,也就是大家所說的full stack數據工程師。

    個人認為一個data scientist的核心技術由三大塊組成:Machine Learning,演算法和coding,以及統計。一個這三個技術的combination也就是是一種flavor的data scientist。例如前台的data analyst可以看作是ML(10%) + algorithm/coding (10%) + statistical inference and predictive modeling (80%)。中台的機器學習演算法方向的data scientist可以看作是ML(50%) + algorithm/coding (40%) + statistical inference and predictive modeling (10%)。後台的machine learning engineer或者是big data engineer可能是ML(10%) + algorithm/coding (80%) + statistical inference and predictive modeling (10%)。這裡的前台,中台和後台的說法是按照數據流動的方向來定義的。

    至於如何成為一個數據科學家也就depends on你想成為以上哪一種類型的數據科學家了。假如你想提取數據信息,做data visualization,做產品上線的決策,那你需要統計的intuition。假如你想開發新的在線演算法,做feature engineering,做用戶模型,那你就得對machine learning有著非常深刻的理解。假如你對大數據架構充滿熱情,那你就得理解distributed system,MapReduce演算法架構等。

    Data scientist是一個被overload的詞。在不同的場景下會有很不一樣的意義。


    推薦閱讀:

    TAG:互聯網 | 數據挖掘 | 數據分析 | 數據科學家 | 大數據 |