1. 程式人生 > >像資料科學家一樣思考:12步指南(中)

像資料科學家一樣思考:12步指南(中)

像資料科學家一樣思考:12步指南(上)《像資料科學家一樣思考》

7-工程

下一步是建立統計軟體。如果統計是分析和從資料中得出結論的框架,那麼軟體就是將這個框架付諸行動的工具。資料科學家必須為任何專案做出許多軟體選擇。如果你有一個喜歡的軟體,這通常是一個不錯的選擇,但是有充分的理由去挑選別的東西。如果你是資料科學或統計軟體的新手,或許很難找到一個起點。

電子表格和基於GUI的應用程式通常是執行任何型別資料分析的首選。特別是如果資料是表格形式的,例如CSV,並且資料不是太多,那麼在電子表格中開始分析就很容易了。此外,如果你需要進行的計算並不複雜,那麼電子表格甚至可以涵蓋專案的所有軟體需求。這裡常用的軟體工具包括Excel、SPSS、Stata、SAS和Minitab。學習這些中級工具之一的程式語言可能是學習真正的程式語言的一個很好的一步,這些語言本身就非常有用。特別是SAS在統計行業中擁有廣泛的追隨者,學習它的語言本身就是一個合理的目標。

MATLAB是一種專有的軟體環境和程式語言,而且MATLAB的成本相當高。有些人決定在一個名為Octave的開源專案中複製它。隨著Octave的成熟,它在可用功能和功能方面越來越接近MATLAB。除了使用附加軟體包(工具箱)的程式碼之外,用MATLAB編寫的絕大多數程式碼都可以在Octave中工作,反之亦然。

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

R語言是基於貝爾實驗室S程式語言建立的。它是開源的,但其許可證比Python和Java等其他流行語言更具限制性,特別是你正在構建商業軟體產品時。與MATLAB相比,R中更容易載入和處理不同型別的資料。MATLAB擅長處理表格資料,但一般來說,對於包含標題、混合列型別(整數,小數,字串等)、JSON和資料庫查詢的表,R更好。

R的另一個優點是開源,開發人員可以更輕鬆地在他們認為合適的地方為語言和包開發做出貢獻。這些開源貢獻幫助R大幅增長並擴充套件了與其他軟體工具的相容性。CRAN網站提供了數以千計的R包,你可以找到你想要進行的分析型別的軟體包,這是R語言的最大優勢。MATLAB也有包,但不是很多,儘管它們通常非常好。總體而言,對於統計學家和其他追求資料探索性工作而不是在軟體行業中構建生產軟體的人來說,R是一個不錯的選擇。

Python是一種功能強大的語言,可用於編寫指令碼和建立生產軟體。它更適合非統計任務,例如與其他軟體服務整合,建立API和Web服務以及構建應用程式。可能因為Python最初是一種通用程式語言,它有一個強大的面向物件設計框架。

儘管Python最初並不是一種專門用於統計的語言,但有些人已經為Python開發了幾個軟體包,這些軟體包提升了它的統計能力,現在足夠與R和MATLAB競爭。在使用向量、陣列和矩陣時,數值方法的numpy包是必不可少的。軟體包scipyscikit-learn在優化、整合、叢集、迴歸、分類和機器學習等功能中很受歡迎。使用了這三個軟體包,Python可以與R和MATLAB的核心功能相媲美,在某些領域,例如機器學習,Python似乎在資料科學家中更受歡迎。對於資料處理,pandas已經變得非常受歡迎。

然而,資料科學中最著名的Python包之一是Natural Language Toolkit(NLTK)。它是自然語言處理(NLP)中最受歡迎和最強大的工具。如果有人正在從Twitter、新聞源、電子郵件語料庫或其他地方解析和分析文字,那麼他們很可能已經使用了NLTK。總的來說,Python非常適合想要進行一些資料科學以及其他一些純粹的非統計軟體開發的人。

雖然Java不是指令碼語言,不太適合探索性的資料科學,但Java是軟體應用程式開發中最著名的語言之一,因此它經常用於分析應用程式開發。導致Java不利於探索性資料科學的許多原因使其更有利於應用程式開發。Java對於探索性資料科學來說並不是很好,但它對於基於資料科學的大規模或生產程式碼來說非常有用。Java有許多統計庫,可用於從優化到機器學習,其中許多都是由Apache Software Foundation提供和支援的。

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

·       靈活性:除了能夠執行你想要的主要統計分析之外,如果統計工具可以執行一些相關方法,通常也會有所幫助。通常你會發現你選擇的方法並不像你希望的那樣好,而且你在這個過程中學到的東西會讓你相信一種不同的方法可能會更好。

·       良好的文件:除了常用之外,統計軟體工具應該有全面而有用的文件。如果你無法找到一些重要問題的答案,例如如何配置進行線性迴歸的輸入或如何格式化機器學習功能,這是一個不好的跡象。如果大問題的答案不在文件中,那麼找到你將不可避免地遇到的更具體問題的答案就更難了。

·       :某些軟體工具或其軟體包是為特定目的而構建的,之後又添加了其他功能。例如,MATLAB和R中的矩陣代數例程在構建語言時是主要關注的問題,因此可以安全地假設它們是全面且健壯的。相比之下,矩陣代數在初始版本的Python和Java中並不是主要關注的問題,因此這些功能稍後以包和庫的形式新增。

·       互操作性:如果你正在使用資料庫,那麼使用可以直接與資料庫互動的工具會很有幫助。如果你要根據結果構建Web應用程式,則可能需要選擇支援Web框架的工具或者至少可以使用JSON或其他一些Web友好格式匯出資料的工具。如果你將在各種型別的計算機上使用統計工具,那麼你將希望該軟體能夠在各種作業系統上執行。

·       可證:如果你將商業軟體用於商業目的,那麼使用學術或學生許可這樣做具有法律風險。將商業軟體(無論是否經過修改)出售給其他人而不確認許可證是否禁止此類軟體也是危險的。

8-優化產品

接下來我們就需要使用補充軟體優化產品。我們在上一步中建立的軟體工具可以是多功能的,但它們本質上是統計的。軟體可以做的不僅僅是統計資料,特別是,有許多工具可用於有效地儲存,管理和移動資料。有些可以使計算和分析的每個方面都更快且更容易管理。這裡有4種流行的軟體,可以使你作為資料科學家的工作更輕鬆。

資料庫很常見,在專案期間跨越不同資料庫的可能性相當高,特別是如果你要使用其他人的資料。但是,當然不是僅僅接觸,而是自己建立一個數據庫來幫助你完成專案。最常見的兩種型別是關係型(SQL)和非關係型(NoSQL,ElasticSearch),與將資料儲存在計算機的檔案系統上相比,資料庫具有許多優勢。大多數情況下,資料庫可以提供對資料的任意訪問且比檔案系統更快,並且它們還可以通過冗餘方式擴充套件,這種方式優於檔案系統擴充套件。

高效能運算(HPC)是一個通用術語,適用於需要進行大量計算並且希望儘快完成計算的情況。你可以選擇使用超級計算機計算機叢集圖形處理單位(它們非常適合執行高度可並行化的計算)。如果你有權訪問,那麼HPC是等待PC計算所有需要計算的東西的好選擇。使用HPC產品的好處有很多,但是在你選擇之前你必須要衡量一下成本。

最大的雲服務提供商主要是大型科技公司,例如阿里巴巴、谷歌和微軟等公司在向公眾開放之前都已經擁有大量的計算和儲存資源。但他們並不總是將資源用到最大負荷,因此他們決定出租過剩的產能並擴大其收益,結果證明這是一系列有利可圖的商業決策。提供的服務通常大致相當於個人計算機,計算機叢集或本地網路的功能。所有這些可以在世界各地的地理區域中獲得,可通過線上連線和標準連線協議訪問,以及通常是Web瀏覽器介面。如果你沒有足夠的資源來充分滿足你的資料科學需求,你可以選擇嘗試購買雲服務。

最後,你可以嘗試大資料技術:Hadoop,HBase和Hive等。大資料技術的設計不是為了移動資料,而是當資料集處於非常大的規模時,利用大資料技術可以節省大量的時間和金錢。每當計算任務受資料傳輸限制時,大資料可以提高效率。但是,與本章中描述的其他技術相比,大資料系統軟體需要花費一些精力。

9-執行計

構建階段的最後一步是執行產品的構建計劃。大多數軟體工程師可能熟悉構建複雜軟體的試驗和磨難,但他們可能不熟悉構建處理可疑質量資料的軟體的難度。另一方面,統計人員知道擁有髒資料的情況,但可能沒有建立更高質量軟體的經驗。同樣,與專案相關的不同角色的每個人可能擁有各種經驗,併為不同的事情做好準備。

·       如果你是一名統計學家,你會知道有髒資料,而且你知道偏差和誇大結果的重要性。但你可能沒有太多經驗來構建業務軟體,特別是生產軟體。你應該諮詢具有實踐經驗的軟體工程師,以瞭解如何提高軟體的穩健性。

·       如果你是件工程,你知道開發生命週期是什麼樣的,並且你知道如何在部署和交付之前測試軟體。但是你可能不瞭解資料,無論你在軟體設計和開發方面有多好,資料最終都會以你從未想過的方式破壞你的應用程式。這需要在構建軟體時採用新的思維模式以及對錯誤有容忍度,因為它們會頻繁地發生。你應該諮詢精通預測和處理有問題資料的統計人員,例如異常值,缺失值。

·       如果你開始從事資料科學,沒有豐富的統計學或軟體工程經驗,如果你可以向他們解釋你的專案和目標,那麼有經驗的人可以向你提供一些可靠的建議。作為一個初學者,你在這個過程階段有職責來彌補經驗的不足。

·       如果你只是該專案的一個團隊,那麼溝通和協調是至關重要的。你不必瞭解團隊中發生的所有事情,但有必要明確目標和期望,並確保有人管理整個團隊。

設計計劃應包含多個路徑和選項,所有這些都取決於專案的結果、目標和期限。無論計劃有多好,隨著專案的進展,總有可能對其進行修訂。即使你考慮到所有不確定因素並且意識到每一種可能的結果,計劃範圍之外的事情也可能會發生變化。計劃需要改變的最常見原因是新資訊從專案外部的來源出現,並且計劃的一個或多個路徑發生變化或目標本身發生變化。

隨著專案的進展,你通常會看到越來越多的結果積累,讓你有機會確保它們符合你的期望。一般而言,在涉及統計的資料科學專案中,期望基於統計顯著性的概念或基於這些結果的實際有用性概念。統計意義和實際有用性通常密切相關,當然不是相互排斥的。作為專案計劃的一部分,你可能包含了在統計分析結果中達到某種準確性或重要性的目標,實現這些目標將被視為該專案的成功。


原文連結
本文為雲棲社群原創內容,未經