官术网_书友最值得收藏!

第0章 發(fā)現(xiàn)、出發(fā)

最近一年里,知乎社區(qū)有不少朋友邀請我回答關(guān)于數(shù)據(jù)挖掘的問題,其中提問最多的是關(guān)于“如何改行做數(shù)據(jù)挖掘”。我想他們之所以邀請我回答這類問題,不是因為我做數(shù)據(jù)挖掘做得好,而是好奇我是如何改行做數(shù)據(jù)挖掘的?說來也巧,我本科是學(xué)電子的,研究生是學(xué)控制的,而我的職業(yè)理想是成為一個“先知”,但我并不知道如何才能實現(xiàn)這一職業(yè)理想。自公元632年人類最后一位先知默罕默德去世之后,將近1400年沒人做先知了,既沒有人可以指導(dǎo)我,也沒有可以效仿的對象。2011年到2013年發(fā)生了一系列事件,包括IBM的沃森在“危險邊緣”節(jié)目中擊敗了人類選手、Google Brain某些成果的展示、美國統(tǒng)計學(xué)家Nate Silver對于總統(tǒng)大選的預(yù)測等,這些事件都有一個共同點,那就是讓“數(shù)據(jù)科學(xué)”從學(xué)術(shù)研究蛻變?yōu)閷嶋H的應(yīng)用。這也讓我意識到也許我可以做得更好——通過“數(shù)據(jù)科學(xué)”建造一個“先知”,雖然直到現(xiàn)在我還沒有實現(xiàn)這個目標,不過我愿意把這一路積累的經(jīng)驗?zāi)贸鰜砼c大家分享,希望這些東西能夠幫助各位讀者實現(xiàn)自己的目標,或者找到自己的目標。現(xiàn)在,就讓我們出發(fā)吧!

0.1 何謂數(shù)據(jù)科學(xué)

在家用計算機普及之前,數(shù)學(xué)、邏輯學(xué)、哲學(xué)及自然科學(xué)研究的目的都是為了追求完美的理論證明,或者是提供某種確定性的規(guī)則,用以解釋某種自然現(xiàn)象,或者為某些技術(shù)提供理論依據(jù)。那個時候人類產(chǎn)生數(shù)據(jù)的能力和收集數(shù)據(jù)的能力還很有限,或許公司的經(jīng)營賬目和計算導(dǎo)彈發(fā)射彈道的演算紙就屬于數(shù)據(jù)最集中的地方了。在那個年代,這些數(shù)據(jù)分析和處理的工作大都是由人工完成的,最多也只會借助某些由機械或電子構(gòu)成的計算裝置罷了。在互聯(lián)網(wǎng)興起之后,人類將現(xiàn)實世界中的很多信息以數(shù)據(jù)的形式存儲到網(wǎng)絡(luò)空間中,比如生活中發(fā)生的一段故事,或者旅行中家人的照片,這些數(shù)據(jù)記錄了人類的行為和社會的發(fā)展,甚至包括了自然環(huán)境的變化。當(dāng)今,大量的、各種各樣的數(shù)據(jù)快速產(chǎn)生,并存儲在互聯(lián)網(wǎng)中,而這些數(shù)據(jù)自然而然地構(gòu)成了一個人造的環(huán)境,稱為數(shù)據(jù)界(data nature)。通過對數(shù)據(jù)界中數(shù)據(jù)的研究,我們不僅可以了解數(shù)據(jù)本身的種類、狀態(tài)、屬性及變化形式和規(guī)律,還能從中洞悉人類的某些行為,了解人類的某些社會屬性。并且這些研究方法還能擴展到其他依賴數(shù)據(jù)的學(xué)科中,比如氣象科學(xué)、地震科學(xué)、金融學(xué)、基因科學(xué),等等。在可以預(yù)見的未來,我相信,不僅在互聯(lián)網(wǎng)行業(yè)中會有數(shù)據(jù)科學(xué)家的身影,在各行各業(yè)中,只要與計算機打交道,我們就不得不為已經(jīng)產(chǎn)生和將要產(chǎn)生的數(shù)據(jù)做好充分的準備。所以,我認為在這個數(shù)字化的時代,不同的專業(yè)領(lǐng)域,都需要從大量的數(shù)據(jù)中尋找到一系列的理論和實踐,這就是數(shù)據(jù)科學(xué)。

0.1.1 海量的數(shù)據(jù)與科學(xué)的方法

“如何才能成功?”無數(shù)成功學(xué)方面的書本和布道者都沒法給出一個方程或流程圖來向所有人解釋這一過程。最多只能根據(jù)統(tǒng)計學(xué)(或者是臆想)列舉出一些可能的必要條件,比如努力、機遇、貴人或僅僅只是運氣好。我們能否對人類的行為做一個精確的建模?太難了,比如,不同的人對于成功的定義不同,有的人認為掙錢是成功,有的人認為出名是成功。再比如就算大家都認為成為企業(yè)家可以算作某種意義上的成功,但是企業(yè)的種類又各有不同,有的人是在電商領(lǐng)域成功的,有的人是在金融行業(yè)成功的,他們的成功經(jīng)歷也各不相同。

事實上,關(guān)于“成功”的變量我可以列舉無數(shù)個,但即使窮盡了所有可能的變量,也還會遇到數(shù)據(jù)缺失的問題——一個人成功之前的數(shù)據(jù)又該如何準確地記錄?這個世界有60億人,如果每個人出生時就攜帶一個電子記錄儀,那么就可以記錄這個人生活中發(fā)生的所有事情。這有可能么?可能,不僅是可能的,而且我們現(xiàn)在就在做類似的事情,智能手機正源源不斷地收集人類的數(shù)據(jù)并且存儲到網(wǎng)絡(luò)中,我們購物的數(shù)據(jù)、興趣的數(shù)據(jù)、人口統(tǒng)計學(xué)的數(shù)據(jù)等都將用作描述我們每一個人的“數(shù)字化身”,這是存在于網(wǎng)絡(luò)中的我們。并且隨著智能硬件、物聯(lián)網(wǎng)、工業(yè)4.0的推進,整個現(xiàn)實生活中的人類社會在網(wǎng)絡(luò)中都會有一份“副本”。為了處理這些數(shù)據(jù),并且從中找到對我們有價值的結(jié)果,需要更先進的技術(shù)與方法,其中將會涉及數(shù)據(jù)的收集、轉(zhuǎn)換、存儲、可視化、分析與解釋等內(nèi)容,這將會是一項非常有價值的課題。

0.1.2 數(shù)據(jù)科學(xué)并不是新概念

在過去的幾年中,大數(shù)據(jù)、人工智能、數(shù)據(jù)挖掘等詞匯被媒體炒得熱火朝天,一方面我樂于見到我所從事的工作受到人們的關(guān)注,另一方面我也發(fā)現(xiàn)越來越多的人開始疑惑。就像本書開篇中所提到的那樣,我每天都會收到來自不同工作領(lǐng)域的人(有時候是記者或化工專業(yè)的從業(yè)者,有時候是程序員或數(shù)學(xué)系的學(xué)生,有時是一些在實際工作中遇到困難的工程師)的提問,有的是希望能澄清一些概念,有的是問如何入門,有的是希望我針對他遇到的麻煩提一些建議。我很樂意幫助他們,順便抱怨一下某些不負責(zé)任的媒體,是它們把大數(shù)據(jù)吹得天花亂墜,把各種神秘的力量都賦予數(shù)據(jù)科學(xué),好像數(shù)據(jù)科學(xué)家就是新時代的先知一樣,能夠預(yù)測未來,改變?nèi)祟惖拿\。而且媒體給公眾傳遞的信息是這樣的:大數(shù)據(jù)是上個月才出現(xiàn)的,Google在上周才提出了深度學(xué)習(xí)方法,一舉解決了人工智能難題。我擔(dān)心在這樣冒進的社會氛圍下,這些被扭曲的報道掩蓋了事實的真相,那些對這個領(lǐng)域感興趣的人會被嚇跑,這顆科學(xué)史上的新星會隕落(在我收到過的提問里,甚至有人問:大數(shù)據(jù)的浪潮是不是過去了,現(xiàn)在學(xué)還來得及么?)。如果要追溯數(shù)據(jù)科學(xué)的起源,可以從1974年在美國和瑞典同時出版的《計算機方法的簡明調(diào)查》一書中看到,作者彼得·諾爾對數(shù)據(jù)科學(xué)下過這樣的定義“數(shù)據(jù)科學(xué)是處理數(shù)據(jù)的科學(xué),一旦數(shù)據(jù)與其所代表的事物的關(guān)系被建立起來,就能為其他領(lǐng)域與科學(xué)提供借鑒”。

在“大數(shù)據(jù)”出現(xiàn)以前,統(tǒng)計學(xué)家覺得他們所做的就是數(shù)據(jù)科學(xué),他們會通過分析一些數(shù)據(jù)來為公司或政府提供一些決策上的幫助。比如,大型上市公司的財報,或者每一次美國大選之前所做的民意調(diào)查就屬于此類范疇。當(dāng)然,不能認為互聯(lián)網(wǎng)時代的數(shù)據(jù)科學(xué)是新瓶裝舊酒,經(jīng)歷了這么多年的沉淀和積累,加上廣泛的需求,數(shù)據(jù)科學(xué)發(fā)展出了一套與之相適應(yīng)的理論和方法。我也希望能幫助更多的人了解數(shù)據(jù)科學(xué),促進數(shù)據(jù)科學(xué)的發(fā)展。

0.1.3 數(shù)據(jù)科學(xué)是一個系統(tǒng)工程

現(xiàn)代工業(yè)界喜歡談生態(tài)和閉環(huán),其實數(shù)據(jù)科學(xué)也要貫穿數(shù)據(jù)的整個生命周期。下面將數(shù)據(jù)的生命周期簡單地劃分為如下幾個階段。

? 數(shù)據(jù)采集

? 數(shù)據(jù)清洗

? 數(shù)據(jù)處理

? 數(shù)據(jù)查詢與可視化

數(shù)據(jù)采集傳統(tǒng)的手段主要來自于經(jīng)營數(shù)據(jù)和網(wǎng)絡(luò)爬蟲采集的數(shù)據(jù)。現(xiàn)在還包含一些“數(shù)據(jù)化”的過程,2013年一篇題為“The Rise of Big Data”(大數(shù)據(jù)的崛起)的文章中提到了“數(shù)據(jù)化”的概念,即數(shù)據(jù)化是一種流程,可以將生活中的方方面面轉(zhuǎn)化為數(shù)據(jù)。各種手機上的傳感器,智能穿戴等設(shè)備采集數(shù)據(jù)的過程都屬于數(shù)據(jù)化。

數(shù)據(jù)清洗主要負責(zé)處理數(shù)據(jù)中的噪聲或缺失數(shù)據(jù)。由于填寫表單時的疏忽,或者是爬蟲程序的故障,再或者是傳感器失靈等原因,總是會產(chǎn)生一些我們意料之外的數(shù)據(jù),這些數(shù)據(jù)可能不符合某些格式的要求,或者會缺失部分數(shù)據(jù),需要通過數(shù)據(jù)清洗來剔除或修正這些數(shù)據(jù)。如果數(shù)據(jù)量巨大,這就需要我們有處理海量數(shù)據(jù)的能力。

數(shù)據(jù)處理可以使用統(tǒng)計學(xué)的方法或機器學(xué)習(xí)的方法從數(shù)據(jù)中發(fā)現(xiàn)我們想要的價值,通常所說的數(shù)據(jù)挖掘就是在這一步中進行的。之所以這里沒有使用“數(shù)據(jù)挖掘”這個詞,是因為有些時候,在某些項目中僅僅使用簡單的統(tǒng)計方法就可以得出很有價值的結(jié)論,并沒有使用數(shù)據(jù)挖掘的專門技法。而且,與普通人的直覺相反,數(shù)據(jù)挖掘結(jié)果的價值往往是通過與業(yè)務(wù)的緊密結(jié)合才能體現(xiàn)出來的,胡亂套用算法往往得不出任何有價值的東西。比如,通過歷史房產(chǎn)中介的銷售數(shù)據(jù)(包括房屋的價格、面積、層數(shù)、每層住戶數(shù)等信息)來為新的樓盤定價、預(yù)測目標客戶群體就是兩個不同任務(wù),前者通常只需要簡單統(tǒng)計(實際上我們過去一直就在這么做)即可,而后者可能就要使用分類預(yù)測算法了。

數(shù)據(jù)查詢數(shù)據(jù)可視化這兩項是為了將處理過后的數(shù)據(jù)呈現(xiàn)給需要的人。有的時候是需要索引巨量的數(shù)據(jù),比如搜索引擎。有的時候是規(guī)律性的結(jié)果需要以圖表的形式呈現(xiàn),比如一些信息圖(盡管目前大多數(shù)信息圖都是人工統(tǒng)計的數(shù)據(jù)),或者在處理之前對大數(shù)據(jù)集進行探索。

上面列舉的幾個階段,每一個都面臨著巨大的挑戰(zhàn),雖然工業(yè)界有一些解決方案,但離成熟還遠得很。并且在面對不同的公司、不同的開發(fā)人員、不同的業(yè)務(wù)需求時,要將這幾個階段有機地整合起來更是難上加難。在其中起到核心作用的人就稱為“數(shù)據(jù)科學(xué)家”。

0.2 如何成為數(shù)據(jù)科學(xué)家

讀者應(yīng)該知道這個問題很難回答,失敗的原因總是相似的,成功的經(jīng)歷卻各有不同。從來沒有人靠復(fù)制他人的經(jīng)歷就能獲得同樣的成就,就像“人不能兩次踏入同一條河流”的哲學(xué)觀點一樣,沒有人可以復(fù)制別人的經(jīng)歷,更何談成就。因此在回答這個問題時,我只假設(shè)一些概念上的前提條件:良好的計算機科學(xué)基礎(chǔ),較高的英文讀寫水平,極強的自學(xué)能力,還有一些個人品質(zhì)比如耐心、毅力、樂于分享,等等。不過最重要的還是“興趣”,我相信能花上幾十塊錢購買這本書的讀者一定是有興趣的,因為這本書是給那些對數(shù)據(jù)科學(xué)有一些了解,希望學(xué)習(xí)具體方法的人準備的。所以,即使上面所說的前提條件你一個都不具備,只要有興趣,那么讓我們從現(xiàn)在就開始吧。

我需要數(shù)學(xué)或計算機科學(xué)的學(xué)位嗎

最好有!如果你恰好是在校大學(xué)生,又碰巧學(xué)習(xí)數(shù)學(xué)或計算機相關(guān)專業(yè)(在這個程序員匱乏的年代,所有必修C語言的專業(yè)都稱為“計算機相關(guān)專業(yè)”),希望你能學(xué)習(xí)好學(xué)校的課程,下面是一份技能清單,如果其中有一些技能沒有在你的課程安排里,那么最好是通過選修或自學(xué)的方式進行補充。

? 一門編程語言

? 算法、數(shù)據(jù)庫、操作系統(tǒng)

? 概率與統(tǒng)計、線性代數(shù)

? 英語

對于已經(jīng)錯過了花季、雨季的社會人來講,如果你并非從事計算機程序開發(fā)的相關(guān)工作,上述幾項技能對你來說可能要求太高了。不過,你還是需要多付出一些努力來補上這些知識,當(dāng)然是在讀過本書之后。得益于互聯(lián)網(wǎng)的發(fā)達,很多教學(xué)資源都能夠從網(wǎng)上獲取,這里也向各位讀者推薦一些好的網(wǎng)站。

? 編程學(xué)習(xí):

https://www.codecademy.com/

https://www.codeschool.com/

這是國外的兩家編程學(xué)習(xí)網(wǎng)站,擁有交互式解釋器、美觀的講義,有一些課程還有手把手的視頻教程,可能讀英文對你來說有點慢,不過這是一個好的開始。

? 算法學(xué)習(xí):

http://www.brpreiss.com/books/opus7/

這是由布魯諾·R·普萊斯所著的一系列算法圖書的在線版,包括C++版、Java版、C#版、Python版、Ruby版、Lua版、Perl版、PHP版、Objective-C版等,你能想到的常用編程語言都有對應(yīng)的版本,它們中的一部分有過正式引進的中文版,或者有愛好者翻譯的版本,當(dāng)然推薦閱讀原版。

另外,本書會帶領(lǐng)讀者復(fù)習(xí)一下概率與統(tǒng)計和線性代數(shù)的基本概念,以及介紹一些SQL方面的知識。最后,不要忘記本書的目的是通過數(shù)據(jù)科學(xué)實戰(zhàn)學(xué)習(xí)Python編程。希望讀者在讀過這本書之后,能有充分的知識來支持后續(xù)的學(xué)習(xí)。

0.3 為什么是Python

通過書名,各位讀者就應(yīng)該知道這是一本講解Python編程的書了。數(shù)據(jù)科學(xué)只是個引子,我希望能通過相關(guān)的例子和練習(xí)激發(fā)出讀者的興趣,幫助讀者除掉編程這條攔路虎。在很多非計算機相關(guān)專業(yè)的人的概念里,編程是要歸為玄學(xué)分類的,通過一堆意義不明的符號就能驅(qū)動計算機完成各種各樣的任務(wù),是不是有點像魔法師口中所念的咒語。但事實上,計算機只能做兩件事情,執(zhí)行計算并記錄結(jié)果,只不過它的這兩項能力遠遠超過人類大腦的能力(讀者可能看過一些文章,其中有些研究聲稱嘗試估算過人類大腦的計算能力,發(fā)現(xiàn)人腦的計算能力仍然比現(xiàn)今最先進的計算機還要快很多倍。但是人類大腦中有些模塊,比如視覺、語言,是人類經(jīng)過億萬年的演化,大自然進行極致優(yōu)化所產(chǎn)生的結(jié)果。這里對于計算和存儲能力的比較僅是指數(shù)學(xué)計算和文字存儲方面)。以我正在使用的筆記本來說,其擁有主頻為2.5GHz的雙核處理器,總計約等于50億次/秒的計算速度。而512GB的硬盤則可以存儲10萬本書(按每本書5MB計算,實際上5MB大小的書應(yīng)該算是鴻篇巨著了。假如按UTF-8UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,可以編碼世界上大部分語系的字符,也是使用最為普遍的一種編碼方式。除了UTF-8之外還有專門的中文編碼——GBK,日文編碼——Shift_JIS有在使用。編碼,每個中文占3~4個字節(jié)(byte),而5MB約有500萬個字節(jié),這至少是一本百萬字的書)。如果想要使用計算機這種能力強大的工具,就需要掌握一門編程語言,用來和計算機進行溝通。雖然我也想為各位讀者科普一下眾多的編程語言,不過這畢竟是一本教授Python編程的書,所以這里只通過以下幾個方面來闡述一下用Python作為數(shù)據(jù)科學(xué)工具的理由。

(1)簡單易上手

Python被譽為可執(zhí)行的“偽代碼”,其語法風(fēng)格接近人類的語言,即使是第一次看代碼的人也能很容易理解程序所要實現(xiàn)的功能,讀者可以試著閱讀下面這段代碼Python代碼的縮進應(yīng)該總是4個空格,這是保證程序正確性、可讀性的前提。

      for i in range(0,  10):
          print(i)

上面的代碼中range代表一段區(qū)間,0代表下界,10代表上界,通常Python程序的上下界是左閉右開的一個區(qū)間。for的含義表示“這其中的每一個數(shù)”,print就不言自明了,代表打印結(jié)果到屏幕上。

除了優(yōu)雅的語法之外,Python還屬于解釋性語言,我們可以不經(jīng)過編譯、鏈接等步驟直接獲得程序執(zhí)行的結(jié)果。而且Python還擁有交互式解釋器,可以讓我們隨時隨地測試我們的代碼,如圖0-1所示。

圖0-1 初次使用Python

(2)資源豐富、應(yīng)用廣泛

已經(jīng)有很多書講解了Python相關(guān)的技巧,比如《編程導(dǎo)論》是麻省理工學(xué)院(MIT)計算機科學(xué)導(dǎo)論的課程;《Python編程實戰(zhàn)》是一本Python編程技巧進階的好書,介紹了在Python中如何實踐設(shè)計模式;《機器學(xué)習(xí)實戰(zhàn)》主要講解了機器學(xué)習(xí)的常見算法,其中使用Python編寫了全部的代碼;《Python高手之路》對如何使用Python構(gòu)建大型系統(tǒng)提出了很多有益的見解。而且使用Python的知名項目也很多,比如OpenStack開源云計算平臺就是由Python編寫的,還有世界上最大的視頻網(wǎng)站YouTube也是使用Python開發(fā)的,等等。當(dāng)然Python在大數(shù)據(jù)應(yīng)用上也有其獨特的優(yōu)勢,科學(xué)計算庫NumPy和SciPy、繪圖模塊Pylab、統(tǒng)計庫Pandas、機器學(xué)習(xí)庫Scikit-learn都是為Python所設(shè)計的,現(xiàn)在流行的Hadoop和Spark也都提供了Python接口。可以說在“大數(shù)據(jù)”“數(shù)據(jù)科學(xué)”領(lǐng)域,如果某一個產(chǎn)品不支持Python,那么其前景將會是難以想象的。

(3)跨平臺、免費

Python官方提供了多平臺的解釋器,包括Windows、Mac OS X、Linux甚至更多的其他平臺,你所寫的Python代碼,可以在不經(jīng)修改的情況下移植,比如在Windows上開發(fā),在Linux服務(wù)器上運行,不會有任何問題。而且Python是免費且開源的,不僅標準庫可以隨意閱讀其源碼,連官方解釋器的C語言實現(xiàn)也可以獲得其源碼。Python社區(qū)是鼓勵分享的,讀者不僅可以從中學(xué)到很多編程的技巧,甚至還可以做出一些貢獻。

0.4 一個簡單的例子

下面是一段用Python編寫的有趣的代碼,這里所用的模塊并不會在本書中進行講解,僅僅是向購買本書的你表示我的感激。

代碼清單如下:

          # !  /usr/bin/python
          # -*- coding: utf-8-*-
          import sys

          from colorama import init
          init(strip=not sys.stdout.isatty())
          from termcolor import cprint
          from pyfiglet import figlet_format

          cprint(figlet_format('welcome',  font='starwars'),
                  'yellow',  'on_blue',  attrs=['bold'])

其輸出的結(jié)果如圖0-2所示。

圖0-2 打印藝術(shù)學(xué)的Python程序

這段代碼非常酷,它會將一個英文單詞轉(zhuǎn)換成字符拼接的文字,如果你還看不懂該程序,也沒關(guān)系,在學(xué)完第1章之后你就能明白這段代碼的含義了,祝你閱讀愉快。

主站蜘蛛池模板: 隆林| 松原市| 尚志市| 东海县| 名山县| 大石桥市| 滦南县| 栖霞市| 德令哈市| 临朐县| 峨边| 龙江县| 南部县| 太谷县| 绥宁县| 盐津县| 那曲县| 赤水市| 普兰店市| 建始县| 武威市| 宜兰县| 宿迁市| 化德县| 出国| 克东县| 饶河县| 云林县| 台北县| 潜江市| 泰宁县| 潜江市| 尖扎县| 清远市| 营山县| 和硕县| 闽侯县| 如东县| 潢川县| 玛纳斯县| 沙坪坝区|