像數據科學家一樣思考:12步指南(下)

  • 2019 年 10 月 4 日
  • 筆記

-數據分析

我們的數據科學過程的第6步是數據的統計分析。統計方法通常被認為是做好數據科學所需技能和知識的近一半,或至少三分之一。另一個較大的部分是軟體開發和/或應用程式,其餘較小的部分是主題或領域專長。

統計學的一邊是數學,另一邊是數據。數學——尤其是應用數學——為統計提供了一套工具,使分析和解釋成為可能。在任何情況下,數學一般不會觸及現實世界。數學完全建立在邏輯的基礎上,總是從一組假設開始,必須先假設一個它能描述的世界,然後才開始描述它。每一個數學命題都可以從一個if(假設為真)開始表述,而這個if將命題及其結論提升為抽象。這並不是說數學在現實世界中沒有用;恰恰相反。數學,而不是一門科學,更多的是我們用來描述事物的辭彙。其中一些可能在現實世界中。就辭彙表及其所包含的單詞而言,描述很少是完全正確的。我們的目標是儘可能接近正確。

然而,數學確實提供了統計學所使用的許多重型機械。統計分布通常用具有實際科學意義的根的複雜方程來描述。擬合統計模型通常採用數學優化技術。即使一個項目的數據被假定存在的空間必須用數學來描述,即使這個描述僅僅是「n維歐幾里德空間」。

除了數學之外,統計還擁有自己的一組技術,這些技術主要以數據為中心。

描述性統計通常是一種直觀或簡單的統計,它可以很好地概述數據,而不會過於複雜或難以理解。從某種意義上說,描述性統計通常與數據緊密相關。

推理統計本質上是從數據中刪除一個或多個步驟。推理是基於可測量的相關量來估計未知量的過程。通常,推理統計涉及一個統計模型,它定義了數量、可測量的和不可測量的,以及它們之間的關係。從推理統計學的方法可以從非常簡單到非常複雜,它們的精確性、抽象性和可解釋性也各不相同。

統計建模是使用統計結構描述系統,然後使用該模型幫助分析和解釋與系統相關的數據的一般實踐。描述性統計和推理統計都依賴於統計模型,但在某些情況下,模型本身的顯式構造和解釋起著次要的作用。

使用統計建模,主要的焦點是理解模型和它所描述的底層系統。數學建模是一個相關的概念,它更強調模型的構建和解釋,而不是它與數據的關係。統計建模關注的是模型與數據的關係。以下是一些重要的統計建模概念,你應該知道:

  • 線性,指數,多項式,樣條,微分,非線性方程。
  • 潛在的變數。
  • 量化不確定性:隨機性、方差和誤差項。
  • 擬合模型:最大似然估計、最大後驗估計、期望最大化、變分貝葉斯、馬爾可夫鏈蒙特卡羅、過擬合。
  • 貝葉斯統計與頻率統計。
  • 假設檢驗。
  • 聚類。
  • 成分分析。

離原始數據最遠的是一組統計技術,無論好壞,這些技術通常被稱為黑盒方法。「黑匣子」一詞指的是,一些統計方法有如此多相互之間有著複雜關係的活動部件,以至於幾乎不可能剖析方法本身,因為它被應用於特定上下文中的特定數據。來自機器學習和人工智慧的許多方法都符合這種描述。如果你嘗試個人出現在一個數據集劃分成幾類,而你應用機器學習技術隨機森林或神經網路等, 那麼在事實發生之後,通常很難說為什麼某個個體被以某種方式分類。數據進入黑盒子,分類出來,你通常不確定兩者之間到底發生了什麼。以下是一些最流行的機器學習演算法,可應用於從數據點提取的特徵值:

  • 隨機森林
  • 支援向量機
  • Boosting
  • 神經網路
  • 深度學習

7-工程產品

我們的下一步是構建統計軟體。如果統計是分析和從數據中得出結論的框架,那麼軟體就是使這個框架起作用的工具。除此之外,數據科學家必須為任何項目做出許多軟體選擇。如果你有一個最喜歡的程式,這通常是一個不錯的選擇,如果沒有其他原因,除了你對它的熟悉。但也有很好的理由選擇其他的。如果你剛接觸數據科學或統計軟體,你可能很難找到一個起點。

對於任何花費大量時間使用Microsoft Excel或其他電子表格應用程式的人來說,電子表格和基於gui的應用程式通常是執行任何類型的數據分析的首選。特別是如果數據是表格形式的,比如CSV,並且沒有太多的表格形式,那麼在電子表格中開始分析是很容易的。此外,如果您需要做的計算並不複雜,電子表格甚至可以涵蓋項目所需的所有軟體。這裡常用的軟體工具有Excel、SPSS、Stata、SAS和Minitab。如果您的目標是學習一門真正的程式語言,那麼學習這些中級工具之一的程式語言是一個很好的步驟。這些語言本身就非常有用。特別是SAS,在統計行業擁有廣泛的追隨者,學習其語言本身就是一個合理的目標。

程式語言比中級統計應用程式更加通用。任何一種流行語言的程式碼都有潛力做任何事情。這些語言可以在任何機器上執行任意數量的指令,可以通過api與其他軟體服務交互,還可以包含在腳本和其他軟體中。與父應用程式綁定的語言在這些能力方面受到嚴重限制。

MATLAB是一種專有的軟體環境和程式語言,擅長處理矩陣。MATLAB的成本相當高,但對學生和其他大學附屬人員有很大的折扣。有些人決定在一個名為Octave的開源項目中複製它。隨著Octave的成熟,它在可用的功能和能力上越來越接近MATLAB。除了使用附加包的程式碼(也就是工具箱),MATLAB中編寫的絕大多數程式碼都可以使用八度音階,反之亦然。,如果您發現自己有一些Matlab程式碼,但沒有許可證,這很好。

總的來說,MATLAB和Octave對於在訊號處理、通訊、影像處理和優化等方面處理大型矩陣的工程師(特別是電氣工程師)來說非常適合。

R是基於貝爾實驗室開發的S程式語言。它是開放源碼的,但是它的許可比其他一些流行的語言,如Python和Java,有更多的限制,特別是如果您正在構建一個商業軟體產品。與MATLAB相比,在R中更容易載入和處理不同類型的數據。MATLAB擅長處理表格數據,但一般來說,R更適合處理帶有頭、混合列類型(整數、小數、字元串等)、JSON和資料庫查詢的表格。當讀取表格數據時,R傾向於默認返回數據幀類型的對象。數據幀是多用途對象,包含列中的數據,其中每個列可以是不同的數據類型——例如,數值、字元串,甚至矩陣——但是每個列中的所有條目必須相同。一開始,使用數據幀可能會讓人感到困惑,但經過一段時間後,它們的通用性和強大性肯定會變得非常明顯。

R是開源的一個優點是,無論開發人員在什麼地方認為合適,他們都更容易為語言和包開發做出貢獻。這些開源貢獻幫助R極大地成長,並擴展了它與其他軟體工具的兼容性。在CRAN網站上有成千上萬的程式包可供R使用。這是R語言唯一的最大優勢;您很可能會找到一個軟體包,它可以幫助您執行您想要執行的分析類型,因此已經為您完成了一些工作。MATLAB也有軟體包,但沒有那麼多,儘管它們通常都很好。R有好的和壞的,以及介於兩者之間的所有東西。您還會發現大量的R程式碼可以在公共repos中免費獲得,但它們可能還沒有達到正式的包狀態。

總的來說,R對於統計學家和其他從事數據量大、探索性工作的人來說是一個不錯的選擇,而不是從事分析軟體行業等生產軟體方面的工作。

Python是一種強大的語言,可以用於編寫腳本和創建生產軟體。它更自然地適合於與其他軟體服務集成、創建api和web服務以及構建應用程式等非統計任務。可能因為Python最初是一種通用程式語言,所以它有一個穩健的的面向對象設計框架。

雖然Python最初並沒有打算成為一種高度統計語言,但是已經為Python開發了幾個包,使其能夠與R和MATLAB競爭。當處理向量、數組和矩陣時,數值方法的numpy包是必不可少的。scipy和scikit-learn包在優化、集成、集群、回歸、分類和機器學習等技術中添加了功能。有了這三個包,Python可以與R和MATLAB的核心功能相媲美,而且在一些領域,比如機器學習,Python似乎更受數據科學家的歡迎。在數據處理方面,pandas包已經變得非常流行。它在某種程度上受到R中的數據幀概念的影響,但從那以後在功能上已經超過了這個概念。如果您的數據集足夠大,可以降低計算速度,但又足夠小,可以容納電腦的記憶體,那麼pandas可能適合您。

然而,數據科學中最著名的Python包之一是自然語言工具包(NLTK)。它是自然語言處理(NLP)中最流行、最穩健的工具。現在,如果有人正在解析和分析來自twitter、newsfeeds、enron電子郵件庫或其他地方的文本,那麼他們很可能已經使用了NLTK。它利用其他NLP工具如wordnet和各種標記化和投票方法,在一個地方提供最全面的nlp功能集。

總的來說,Python非常適合那些想要做一些數據科學以及其他一些純粹的、非統計軟體開發的人。它是唯一一種流行的、穩健的語言,可以同時做好這兩件事。

雖然不是腳本語言,也不適合探索性數據科學,但是Java是軟體應用程式開發中最突出的語言之一,因此在分析應用程式開發中經常使用它。許多使Java不利於探索性數據科學的相同原因使得它對應用程式開發有好處。

Java對於探索性數據科學不是很好,但對於基於數據科學的大規模或生產程式碼來說,它是很好的。Java有許多統計庫,用於從優化到機器學習。許多這些都是由Apache軟體基金會提供和支援的。

在選擇統計軟體工具時,請牢記以下準則:

方法的實現:如果您正在使用一個相當常見的方法,那麼許多工具可能已經有了一個實現,最好使用其中之一。已經被很多人使用過的程式碼通常是相對沒有錯誤的,相比之下,你一天寫的一些程式碼只使用一兩次。

靈活性:除了能夠執行您想要的主要統計分析之外,如果統計工具能夠執行一些相關的方法,這通常是有幫助的。通常你會發現你選擇的方法並不像你所希望的那樣有效,在這個過程中你學到的東西會讓你相信另一種方法可能會更好。如果您的軟體工具沒有其他選擇,那麼您要麼堅持使用第一種選擇,要麼必須切換到另一種工具。

資訊性:一些統計工具,特別是像統計程式語言這樣的高級統計工具,提供了查看幾乎所有統計方法和結果的能力,甚至像機器學習這樣的黑箱方法。這些內部並不總是用戶友好的,但至少它們是可用的。

共性:使用軟體的人越多,意味著更多的人嘗試過它,得到了結果,檢查了結果,並且可能報告了他們遇到的問題(如果有的話)。這樣一來,軟體,尤其是開源軟體,就有了一個回饋循環,能夠以合理及時的方式修復錯誤和問題。參與這個回饋循環的人越多,一個軟體就越有可能是相對無缺陷的,或者是穩定的。

良好的文檔:除了常用之外,一個統計軟體工具應該有全面和有用的文檔。如果你找不到一些大問題的答案,比如如何為線性回歸配置輸入,或者如何為機器學習設置特徵,這是一個壞兆頭。如果大問題的答案不在文檔中,那麼對於以後不可避免地遇到的更具體的問題,要找到答案將更加困難。

專門構建:一些軟體工具或其軟體包是為特定目的而構建的,然後在以後添加其他功能。例如,Matlab和R語言中的矩陣代數常式是構建語言時主要關注的問題,因此可以安全地假設它們是全面的和穩定的。相反,在Python和Java的初始版本中,矩陣代數並不是首要關注的問題,因此這些能力後來以包和庫的形式添加。

互操作性:如果您使用的是資料庫,那麼使用可以直接與資料庫交互的工具會很有幫助。如果要基於結果構建web應用程式,可能需要選擇支援web框架的工具,或者至少選擇一個可以導出json或其他一些web友好格式的數據的工具。或者,如果您將在各種類型的電腦上使用統計工具,那麼您將希望軟體能夠在各種作業系統上運行。將統計軟體方法集成到完全不同的語言或工具中並不少見。

許可證:如果您將商業軟體用於商業目的,那麼使用學術或學生許可證這樣做可能會有法律風險。在未確認許可證不禁止的情況下,將商業軟體(無論是否經過修改)出售給其他人也可能是危險的。

8 -優化數據

我們流程的第八步是使用輔助軟體優化產品。我們第七步中的軟體工具可以是多功能的,但它們本質上是統計的。軟體能做的遠不止統計。特別是,有許多工具可用於有效地存儲、管理和移動數據。有些方法可以使計算和分析的幾乎每個方面都更快、更容易管理。下面是4個流行的軟體,可以使你作為一個數據科學家的工作更容易。

資料庫是常見的,而且在項目中運行資料庫的可能性相當高,特別是當您要使用其他人經常使用的數據時。但是,與其只是理所當然地遇到一個資料庫,不如自己建立一個資料庫來幫助您完成項目。最常見的兩種類型是關係類型(SQL)和面向文檔類型(NoSQL、ElasticSearch)。與將數據存儲在電腦的文件系統上相比,資料庫和其他相關類型的數據存儲具有許多優點。大多數情況下,資料庫可以通過查詢以比文件系統更快的速度提供對數據的任意訪問,而且它們還可以以優於文件系統擴展的便捷方式擴展到具有冗餘的大容量。

高性能計算(High-performance computing, HPC)是一個通用術語,適用於需要進行大量計算並希望儘可能快地進行計算的情況。您可以使用超級電腦(比個人電腦快數百萬倍)、電腦群集(一組相互連接的電腦,通常通過本地網路,並配置為在執行計算任務時能夠很好地協同工作)或圖形處理單元(非常擅長執行高度並行化的計算)。如果你有訪問許可權,那麼HPC是一個很好的替代方案,可以讓你的電腦計算所有需要計算的東西。在您選擇加入之前,必須權衡使用雲HPC產品(以及一些功能強大的機器)的好處和金錢成本。

最大的雲服務提供商大多是以其他業務為核心的大型技術公司。亞馬遜、Google和微軟等公司在向公眾開放之前就已經擁有了大量的計算和存儲資源。但他們並不總是把資源用在最大的產能上,因此他們決定出租多餘的產能,並擴大總產能,結果是一系列有利可圖的商業決策。所提供的服務通常大致相當於個人電腦、電腦群集或本地網路的功能。所有這些都可以在世界各地的地理區域中使用,通過在線連接和標準連接協議以及通常的web瀏覽器介面訪問。如果您沒有足夠的資源來充分滿足您的數據科學需求,那麼值得考慮使用雲服務。

最後,您可以嘗試大數據技術:Hadoop、HBase和Hive等。大數據技術的設計初衷並不是為了大量移動數據。當數據集的規模非常大時,這可以節省時間和金錢,而這些數據集正是為這些技術設計的。只要計算任務是數據傳輸綁定的,大數據就可以提高效率。但是,與本章描述的其他技術相比,大數據軟體需要付出一些努力才能與您的軟體一起運行。只有當您有時間和資源來擺弄軟體及其配置,並且幾乎確定您將從中獲得可觀的收益時,您才應該跨出這一步。

9 -執行計劃

構建階段的最後一步是執行產品的構建計劃。大多數軟體工程師可能都熟悉構建複雜軟體的測試和磨難,但他們可能不熟悉構建處理品質可疑數據的軟體的難度。另一方面,統計學家知道擁有臟數據是什麼感覺,但在構建高品質軟體方面可能沒有什麼經驗。同樣,與項目相關的不同角色的個人,他們每個人都可能擁有不同的經驗和能力,將期望和準備不同的事情。

如果你是一個統計學家,你知道臟數據,你知道偏見和誇大結果的重要性。另一方面,您可能沒有太多為業務構建軟體的經驗,特別是生產軟體。您應該諮詢具有實際經驗的軟體工程師,以了解如何提高軟體的穩定性。

如果您是一名軟體工程師,您知道開發生命周期是什麼樣子的,並且知道如何在部署和交付之前測試軟體。但是您可能不了解數據,而且無論您多麼擅長軟體設計和開發,數據最終都會以您從未想到過的方式破壞您的應用程式。在構建軟體時,這需要新的思維模式和對錯誤和bug的容忍度,因為錯誤和bug會經常發生。您應該諮詢統計學家,他們非常擅長預測和處理有問題的數據,比如異常值、缺失值和損壞值。

如果你剛開始學數據科學,沒有太多的統計或軟體工程經驗,任何有經驗的人都可以給你一些可靠的建議,如果你能向他們解釋你的項目和你的目標。作為一個新手,在這個階段你有雙重責任來彌補經驗的不足。

如果你只是這個項目團隊中的一員,溝通和協調是至關重要的。你不需要知道團隊中發生的每件事,但是目標和期望是明確的,並且有人作為一個整體管理團隊的領袖是必要的。

計劃應該包含多個路徑和選項,所有這些都取決於項目的結果、目標和截止日期。不管計劃有多好,總有可能隨著項目的進展而修改。即使你考慮了所有的不確定性,並且知道每一個可能的結果,超出計劃範圍的事情可能會改變它。計劃需要更改的最常見原因是新資訊的出現,來自項目外部的源,或者計劃的一個或多個路徑更改,或者目標本身更改。

隨著項目的進展,您通常會看到越來越多的結果,這給了您一個機會來確保它們滿足您的期望。一般來說,在涉及統計的數據科學項目中,預期不是基於統計意義的概念,就是基於對這些結果的實際有用性或適用性的其他概念,或者兩者兼而有之。統計意義和實際用途往往密切相關,當然也不是相互排斥的。作為項目計劃的一部分,您可能在統計分析的結果中包含了實現某種準確性或重要性的目標。達到這些目標將被認為是項目的成功。

第三階段-收尾

一旦產品構建好了,您仍然有一些事情要做,以使項目更成功,並使您未來的工作更容易。那麼,我們如何才能完成我們的數據科學項目呢?

10 -交付產品

完成階段的第一步是產品交付。為了創建一個可以交付給客戶的有效產品,首先必須理解客戶的視角。其次,您需要為項目和客戶選擇最佳的媒體。最後,您必須選擇要在產品中包含哪些資訊和結果,以及要刪除哪些內容。在產品創建和交付過程中做出正確的選擇可以極大地提高項目成功的機會。

交付媒體可以採取多種形式。在數據科學中,產品最重要的一個方面是,客戶是否被動地從產品中獲取資訊,或者客戶是否積極地參與到產品中,並能夠使用產品回答許多可能的問題中的任何一個。各種類型的產品可以在被動和主動之間的任何位置:

報告或白皮書可能是向客戶交付結果的最簡單的選擇,其中包括文本、表格、數字和其他資訊,這些資訊可以解決項目要回答的部分或全部問題。報告和白皮書可以列印在紙上,也可以以pdf或其他電子格式發送。

在一些數據科學項目,分析和數據集的結果還可以用於數據超出原項目的範圍,其中可能包括在原始數據生成的數據(在未來),類似的數據從不同的來源,或其他數據尚未分析因為這樣或那樣的原因。在這些情況下,如果您能為客戶創建一個分析工具來執行這些分析並在新的數據集上生成結果,那麼這將對客戶很有幫助。如果客戶能夠有效地使用這個分析工具,它可能允許他們生成任意數量的結果,並在未來很長一段時間內繼續回答他們的主要問題以及各種(但相似的)數據集。

如果你想交付一個比分析工具更主動的產品,你可能需要構建一個成熟的應用程式。如果您正在考慮交付互動式圖形應用程式,那麼最重要的是您必須設計、構建和部署它。通常,這些都不是一個小任務。如果您希望應用程式具有許多功能並具有靈活性,那麼設計和構建它將變得更加困難。

除了決定交付結果的媒介之外,還必須決定它將包含哪些結果。一旦你選擇了一種產品,你必須弄清楚你將用來填充它的內容。

一些結果和內容可能是包含的明顯選擇,但是對於其他資訊來說,決策可能不是那麼明顯。通常,您希望包含儘可能多的有用資訊和結果,但是您希望避免客戶可能誤解或誤用您選擇包含的任何結果。在許多情況下,這可能是一種微妙的平衡,它在很大程度上取決於具體的項目以及客戶和其他受眾的知識和經驗。

11 -進行修訂

在交付產品之後,我們在最初的回饋之後繼續修改產品。一旦客戶開始使用產品,就有可能出現一系列新的問題。儘管你盡了最大的努力,你可能並沒有預料到你的客戶會使用(或試圖使用)你的產品的每一個方面。即使產品做了它應該做的事情,你的客戶和用戶也可能沒有做這些事情並且沒有有效地去做。

獲得回饋很難。一方面,很難從客戶、用戶或其他人那裡獲得建設性的回饋。另一方面,如果不把它看作是對你花了大量時間和精力構建的產品的攻擊或誤解,你很難聽取回饋和批評。一些數據科學家交付產品卻忘記了它們。一些數據科學家交付產品並等待客戶給出回饋。一些數據科學家不斷地提供產品和打擾那些客戶。通常,與客戶保持聯繫是一個好主意,以確保您交付的產品能夠解決一些問題。

進行產品修訂可能比較棘手,而找到合適的解決方案和實現策略取決於您遇到的問題的類型以及您必須更改什麼來修復它。如果在整個項目過程中,你一直保持著對不確定性的意識,並且在前進的每一步中都對許多可能的結果保持著意識,那麼你發現自己現在面對的結果與之前預期的結果不同,可能就不足為奇了。但同樣的意識實際上可以保證你至少接近一個可行的解決方案。實際上,這意味著你從來沒有想過第一次就能把所有的東西100%正確,所以當然也有問題。但如果你一直很勤奮,問題就會變得很小,修復起來也相對容易。

一旦您發現了產品的一個問題,並確定了如何修復它,就仍然需要決定是否修復它。有些人的最初傾向是,每個問題都需要解決;這並不一定是真的。您可能有理由不希望對產品進行修正來解決問題,正如您有理由這樣做一樣。重要的是停止並考慮這些選項,而不是盲目地解決發現的每個問題,這會花費大量的時間和精力。

12 -完成項目

我們的數據科學過程的最後一步是結束它。當數據科學的一個項目結束時,看起來所有的工作都已經完成了,剩下的就是在你完全停止對項目的思考並進入下一個項目之前修復任何剩餘的錯誤或其他問題(持續的產品支援和改進沒有經受住NG)。但是,在完成這個項目之前,你可以做一些事情來增加你將來成功的機會,無論是擴展這個項目還是完全不同的項目。

有兩種方法可以讓你現在做的事情增加你將來成功的機會。一種方法是確保在將來的任何時候都可以輕鬆地再次獲取此項目並重新執行、擴展或修改它。通過這樣做,你將增加你在後續項目中成功的機會,與幾個月或幾年後你挖掘你的項目材料和程式碼,發現你不記得你到底做了什麼或是怎麼做的情況相比。有兩種可行的方法是通過文檔和存儲。

如果你只從每個項目中吸取一個教訓,那麼它可能與一路上發生的最大意外有關。不確定性可以滲透到你工作的方方面面,記住過去給你帶來問題的所有不確定性,有希望防止類似的事情再次發生。從數據到分析再到項目目標,幾乎任何事情都可能在短時間內改變。意識到所有的可能性不僅是一個困難的挑戰,而且幾乎是不可能的。一個好的數據科學家和一個偉大的數據科學家的區別在於,他們能夠預見可能出現的錯誤並做好準備。

結論

數據科學仍然帶著一個新領域的光環。它的大部分組成部分——統計、軟體開發、基於證據的問題解決等等——都是直接從成熟的、甚至是舊的領域發展而來的,但數據科學似乎是將這些部分重新組合成新的東西。數據科學的核心並不關注特定的資料庫實現或程式語言,即使這些對於實踐者來說是必不可少的。核心是數據內容、給定項目的目標和用於實現這些目標的數據分析方法之間的相互作用。