像数据科学家一样思考:12步指南(中)
像數(shù)據(jù)科學家一樣思考:12步指南(上)《像數(shù)據(jù)科學家一樣思考》
7-工程產(chǎn)品
下一步是建立統(tǒng)計軟件。如果統(tǒng)計是分析和從數(shù)據(jù)中得出結論的框架,那么軟件就是將這個框架付諸行動的工具。數(shù)據(jù)科學家必須為任何項目做出許多軟件選擇。如果你有一個喜歡的軟件,這通常是一個不錯的選擇,但是有充分的理由去挑選別的東西。如果你是數(shù)據(jù)科學或統(tǒng)計軟件的新手,或許很難找到一個起點。
電子表格和基于GUI的應用程序通常是執(zhí)行任何類型數(shù)據(jù)分析的首選。特別是如果數(shù)據(jù)是表格形式的,例如CSV,并且數(shù)據(jù)不是太多,那么在電子表格中開始分析就很容易了。此外,如果你需要進行的計算并不復雜,那么電子表格甚至可以涵蓋項目的所有軟件需求。這里常用的軟件工具包括Excel、SPSS、Stata、SAS和Minitab。學習這些中級工具之一的編程語言可能是學習真正的編程語言的一個很好的一步,這些語言本身就非常有用。特別是SAS在統(tǒng)計行業(yè)中擁有廣泛的追隨者,學習它的語言本身就是一個合理的目標。
MATLAB是一種專有的軟件環(huán)境和編程語言,而且MATLAB的成本相當高。有些人決定在一個名為Octave的開源項目中復制它。隨著Octave的成熟,它在可用功能和功能方面越來越接近MATLAB。除了使用附加軟件包(工具箱)的代碼之外,用MATLAB編寫的絕大多數(shù)代碼都可以在Octave中工作,反之亦然。
總的來說,MATLAB和Octave非常適合在信號處理、通信、圖像處理和優(yōu)化等方面使用大型矩陣的工程師(特別是電氣工程師)。
R語言是基于貝爾實驗室S編程語言創(chuàng)建的。它是開源的,但其許可證比Python和Java等其他流行語言更具限制性,特別是你正在構建商業(yè)軟件產(chǎn)品時。與MATLAB相比,R中更容易加載和處理不同類型的數(shù)據(jù)。MATLAB擅長處理表格數(shù)據(jù),但一般來說,對于包含標題、混合列類型(整數(shù),小數(shù),字符串等)、JSON和數(shù)據(jù)庫查詢的表,R更好。
R的另一個優(yōu)點是開源,開發(fā)人員可以更輕松地在他們認為合適的地方為語言和包開發(fā)做出貢獻。這些開源貢獻幫助R大幅增長并擴展了與其他軟件工具的兼容性。CRAN網(wǎng)站提供了數(shù)以千計的R包,你可以找到你想要進行的分析類型的軟件包,這是R語言的最大優(yōu)勢。MATLAB也有包,但不是很多,盡管它們通常非常好。總體而言,對于統(tǒng)計學家和其他追求數(shù)據(jù)探索性工作而不是在軟件行業(yè)中構建生產(chǎn)軟件的人來說,R是一個不錯的選擇。
Python是一種功能強大的語言,可用于編寫腳本和創(chuàng)建生產(chǎn)軟件。它更適合非統(tǒng)計任務,例如與其他軟件服務集成,創(chuàng)建API和Web服務以及構建應用程序。可能因為Python最初是一種通用編程語言,它有一個強大的面向對象設計框架。
盡管Python最初并不是一種專門用于統(tǒng)計的語言,但有些人已經(jīng)為Python開發(fā)了幾個軟件包,這些軟件包提升了它的統(tǒng)計能力,現(xiàn)在足夠與R和MATLAB競爭。在使用向量、數(shù)組和矩陣時,數(shù)值方法的numpy包是必不可少的。軟件包scipy和scikit-learn在優(yōu)化、集成、集群、回歸、分類和機器學習等功能中很受歡迎。使用了這三個軟件包,Python可以與R和MATLAB的核心功能相媲美,在某些領域,例如機器學習,Python似乎在數(shù)據(jù)科學家中更受歡迎。對于數(shù)據(jù)處理,pandas已經(jīng)變得非常受歡迎。
然而,數(shù)據(jù)科學中最著名的Python包之一是Natural Language Toolkit(NLTK)。它是自然語言處理(NLP)中最受歡迎和最強大的工具。如果有人正在從Twitter、新聞源、電子郵件語料庫或其他地方解析和分析文本,那么他們很可能已經(jīng)使用了NLTK。總的來說,Python非常適合想要進行一些數(shù)據(jù)科學以及其他一些純粹的非統(tǒng)計軟件開發(fā)的人。
雖然Java不是腳本語言,不太適合探索性的數(shù)據(jù)科學,但Java是軟件應用程序開發(fā)中最著名的語言之一,因此它經(jīng)常用于分析應用程序開發(fā)。導致Java不利于探索性數(shù)據(jù)科學的許多原因使其更有利于應用程序開發(fā)。Java對于探索性數(shù)據(jù)科學來說并不是很好,但它對于基于數(shù)據(jù)科學的大規(guī)模或生產(chǎn)代碼來說非常有用。Java有許多統(tǒng)計庫,可用于從優(yōu)化到機器學習,其中許多都是由Apache Software Foundation提供和支持的。
在選擇統(tǒng)計軟件工具時,請牢記以下標準:
·???????靈活性:除了能夠執(zhí)行你想要的主要統(tǒng)計分析之外,如果統(tǒng)計工具可以執(zhí)行一些相關方法,通常也會有所幫助。通常你會發(fā)現(xiàn)你選擇的方法并不像你希望的那樣好,而且你在這個過程中學到的東西會讓你相信一種不同的方法可能會更好。
·???????良好的文檔:除了常用之外,統(tǒng)計軟件工具應該有全面而有用的文檔。如果你無法找到一些重要問題的答案,例如如何配置進行線性回歸的輸入或如何格式化機器學習功能,這是一個不好的跡象。如果大問題的答案不在文檔中,那么找到你將不可避免地遇到的更具體問題的答案就更難了。
·???????專用:某些軟件工具或其軟件包是為特定目的而構建的,之后又添加了其他功能。例如,MATLAB和R中的矩陣代數(shù)例程在構建語言時是主要關注的問題,因此可以安全地假設它們是全面且健壯的。相比之下,矩陣代數(shù)在初始版本的Python和Java中并不是主要關注的問題,因此這些功能稍后以包和庫的形式添加。
·???????互操作性:如果你正在使用數(shù)據(jù)庫,那么使用可以直接與數(shù)據(jù)庫交互的工具會很有幫助。如果你要根據(jù)結果構建Web應用程序,則可能需要選擇支持Web框架的工具或者至少可以使用JSON或其他一些Web友好格式導出數(shù)據(jù)的工具。如果你將在各種類型的計算機上使用統(tǒng)計工具,那么你將希望該軟件能夠在各種操作系統(tǒng)上運行。
·???????許可證:如果你將商業(yè)軟件用于商業(yè)目的,那么使用學術或學生許可這樣做具有法律風險。將商業(yè)軟件(無論是否經(jīng)過修改)出售給其他人而不確認許可證是否禁止此類軟件也是危險的。
8-優(yōu)化產(chǎn)品
接下來我們就需要使用補充軟件優(yōu)化產(chǎn)品。我們在上一步中創(chuàng)建的軟件工具可以是多功能的,但它們本質上是統(tǒng)計的。軟件可以做的不僅僅是統(tǒng)計數(shù)據(jù),特別是,有許多工具可用于有效地存儲,管理和移動數(shù)據(jù)。有些可以使計算和分析的每個方面都更快且更容易管理。這里有4種流行的軟件,可以使你作為數(shù)據(jù)科學家的工作更輕松。
數(shù)據(jù)庫很常見,在項目期間跨越不同數(shù)據(jù)庫的可能性相當高,特別是如果你要使用其他人的數(shù)據(jù)。但是,當然不是僅僅接觸,而是自己建立一個數(shù)據(jù)庫來幫助你完成項目。最常見的兩種類型是關系型(SQL)和非關系型(NoSQL,ElasticSearch),與將數(shù)據(jù)存儲在計算機的文件系統(tǒng)上相比,數(shù)據(jù)庫具有許多優(yōu)勢。大多數(shù)情況下,數(shù)據(jù)庫可以提供對數(shù)據(jù)的任意訪問且比文件系統(tǒng)更快,并且它們還可以通過冗余方式擴展,這種方式優(yōu)于文件系統(tǒng)擴展。
高性能計算(HPC)是一個通用術語,適用于需要進行大量計算并且希望盡快完成計算的情況。你可以選擇使用超級計算機,計算機集群或圖形處理單位(它們非常適合執(zhí)行高度可并行化的計算)。如果你有權訪問,那么HPC是等待PC計算所有需要計算的東西的好選擇。使用HPC產(chǎn)品的好處有很多,但是在你選擇之前你必須要衡量一下成本。
最大的云服務提供商主要是大型科技公司,例如阿里巴巴、谷歌和微軟等公司在向公眾開放之前都已經(jīng)擁有大量的計算和存儲資源。但他們并不總是將資源用到最大負荷,因此他們決定出租過剩的產(chǎn)能并擴大其收益,結果證明這是一系列有利可圖的商業(yè)決策。提供的服務通常大致相當于個人計算機,計算機集群或本地網(wǎng)絡的功能。所有這些可以在世界各地的地理區(qū)域中獲得,可通過在線連接和標準連接協(xié)議訪問,以及通常是Web瀏覽器界面。如果你沒有足夠的資源來充分滿足你的數(shù)據(jù)科學需求,你可以選擇嘗試購買云服務。
最后,你可以嘗試大數(shù)據(jù)技術:Hadoop,HBase和Hive等。大數(shù)據(jù)技術的設計不是為了移動數(shù)據(jù),而是當數(shù)據(jù)集處于非常大的規(guī)模時,利用大數(shù)據(jù)技術可以節(jié)省大量的時間和金錢。每當計算任務受數(shù)據(jù)傳輸限制時,大數(shù)據(jù)可以提高效率。但是,與本章中描述的其他技術相比,大數(shù)據(jù)系統(tǒng)軟件需要花費一些精力。
9-執(zhí)行計劃
構建階段的最后一步是執(zhí)行產(chǎn)品的構建計劃。大多數(shù)軟件工程師可能熟悉構建復雜軟件的試驗和磨難,但他們可能不熟悉構建處理可疑質量數(shù)據(jù)的軟件的難度。另一方面,統(tǒng)計人員知道擁有臟數(shù)據(jù)的情況,但可能沒有建立更高質量軟件的經(jīng)驗。同樣,與項目相關的不同角色的每個人可能擁有各種經(jīng)驗,并為不同的事情做好準備。
·???????如果你是一名統(tǒng)計學家,你會知道有臟數(shù)據(jù),而且你知道偏差和夸大結果的重要性。但你可能沒有太多經(jīng)驗來構建業(yè)務軟件,特別是生產(chǎn)軟件。你應該咨詢具有實踐經(jīng)驗的軟件工程師,以了解如何提高軟件的穩(wěn)健性。
·???????如果你是軟件工程師,你知道開發(fā)生命周期是什么樣的,并且你知道如何在部署和交付之前測試軟件。但是你可能不了解數(shù)據(jù),無論你在軟件設計和開發(fā)方面有多好,數(shù)據(jù)最終都會以你從未想過的方式破壞你的應用程序。這需要在構建軟件時采用新的思維模式以及對錯誤有容忍度,因為它們會頻繁地發(fā)生。你應該咨詢精通預測和處理有問題數(shù)據(jù)的統(tǒng)計人員,例如異常值,缺失值。
·???????如果你剛開始從事數(shù)據(jù)科學,沒有豐富的統(tǒng)計學或軟件工程經(jīng)驗,如果你可以向他們解釋你的項目和目標,那么有經(jīng)驗的人可以向你提供一些可靠的建議。作為一個初學者,你在這個過程階段有職責來彌補經(jīng)驗的不足。
·???????如果你只是該項目的一個團隊成員,那么溝通和協(xié)調(diào)是至關重要的。你不必了解團隊中發(fā)生的所有事情,但有必要明確目標和期望,并確保有人管理整個團隊。
設計計劃應包含多個路徑和選項,所有這些都取決于項目的結果、目標和期限。無論計劃有多好,隨著項目的進展,總有可能對其進行修訂。即使你考慮到所有不確定因素并且意識到每一種可能的結果,計劃范圍之外的事情也可能會發(fā)生變化。計劃需要改變的最常見原因是新信息從項目外部的來源出現(xiàn),并且計劃的一個或多個路徑發(fā)生變化或目標本身發(fā)生變化。
隨著項目的進展,你通常會看到越來越多的結果積累,讓你有機會確保它們符合你的期望。一般而言,在涉及統(tǒng)計的數(shù)據(jù)科學項目中,期望基于統(tǒng)計顯著性的概念或基于這些結果的實際有用性概念。統(tǒng)計意義和實際有用性通常密切相關,當然不是相互排斥的。作為項目計劃的一部分,你可能包含了在統(tǒng)計分析結果中達到某種準確性或重要性的目標,實現(xiàn)這些目標將被視為該項目的成功。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉載。
總結
以上是生活随笔為你收集整理的像数据科学家一样思考:12步指南(中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老代码多=过度耦合=if else?阿里
- 下一篇: (Python)零起步数学+神经网络入门