資料科學中“專業化”意味著什麼

OReillyData發表於2016-06-02


640?wx_fmt=jpeg



我作為一個資料科學家的經歷跟我在書本和部落格上所讀到的根本不一樣。我曾讀到過為數字超級新星公司工作的資料科學家,他們聽上去像是英雄,可以寫出自動化(近乎有感知能力的)演算法並不斷地大量獲取認知結果。我也讀到過像百戰天龍那樣的資料科學家黑客,他們可以通過將他們周圍有的任意原始材料拼湊出資料產品來拯救世界。


我的團隊建立的資料產品並沒有重要到可以評價大型的企業級基礎設施。只是我覺得,投資超高效的自動化以及產品控制是不值得的。另一方面,我們的資料產品影響了企業中的重要決策,並且我們的努力是可測量,這一點十分重要。我們負擔不起總是將所有的事情人為來做,但我們也需要高效的方法來為成千上萬的人們共享結果。


現實中大部分還是 “常規”的資料科學家。我們比黑客們更有組織但是並不需要一個超級英雄般的資料科學老巢。我們一組人聚在一起進行思維碰撞,我們在此對於寫出穩定的程式碼的最佳實踐進行頭腦風暴。這篇文章是對這次對話的一個總結,並且試圖將我們的知識收集起來,取其精華至於一處。


如何變得專業化


資料科學家需要具備一些軟體工程的技能,只不過並不是一個專業的軟體工程師所需要的所有技能。我將具備必要的資料產品工程技能的資料科學家稱為專業的資料科學程式設計師。專業並不是指類似一個證照或者多少小時的經驗,我所指的是方法上的專業性。專業的資料科學程式設計師在他們建立資料產品的過程中是可以自我改正的。他們有著常見的策略來識別工作中的問題並糾正錯誤。


專業的資料科學程式設計師不得不將一個假說用一個可以測試的程式來表達出來。資料科學程式設計在軟體工程中是獨特的,這是因為資料科學家所處理的那些問題型別。巨大的挑戰在於資料科學本質就是實驗性的。這些挑戰經常是困難的,資料是混亂的。對於很多這類問題,並沒有已知的解決方案和策略,通往解決方案的路是前所未有的,可能的解決方案都是步步為營取最優來得出的。在下面的內容中,我會介紹一個規範的、有生產力的試錯的常見策略:將問題分成多個小步驟,分別嘗試解決方案,在過程中一直做出糾正和改進。


像專業人士一樣思考


為了成為一個專業的資料科學程式設計師,你必須瞭解比系統是如何構造的更多。你必須知道如何設計一個解決方案,在你有一個解決方案時你必須能夠識別出來,你也必須在你沒有完全理解你的方案時有所察覺。最後一點是你必須能夠自我糾錯。當你識別出你方法中的概念差異的時候,你能夠自己將其完善。為了以一個你可以自我糾錯的方式來設計資料科學解決方案,我發現依照以下基本步驟是很有用的:觀察、理解、想象以及展示


第一步:觀察。從掃描環境開始。做背景研究並對所有可能與你試圖解決的問題有關的細枝末節有所瞭解。以儘量寬廣的視野來看待你的問題。儘量多的發現場景並且收集各類不同的資訊。


第二步:理解。將你發現的各種資訊碎片抽象成符合黑板模式的元素。在這個階段,你正在將問題中的元素轉化為有意義的技術性的概念。理解問題是為可行的設計奠定基礎的關鍵步驟。


第三步:想象。根據你理解的技術概念,想象一些可以使你往目標更近一步的實現。如果你不能想象出一個實現,那麼你可能在你觀察問題的時候錯過了什麼。


第四步:展示。首先將你的解決方案解釋給自己聽,然後是你的夥伴,然後是你的老闆,最後是你的目標客戶。每一次解釋只需要以傳達到你的觀點的正式程度即可:一次飲水機旁的短暫談話,一封電子郵件、一次15分鐘的散步。這是在成為一個自我糾錯的專業資料程式設計師的過程中最重要的常規實踐。如果你的方案有任何漏洞,那麼他們將會在你嘗試解釋的時候發現它。花點時間來填充這些溝通代溝,並且確保你可以恰當地解釋問題和針對它的解決方案。


像專業人士一樣設計


建立和釋出一個資料產品的活動是多樣且複雜的,但是,一般來說,你將要做的會在阿利斯泰爾克羅爾(Alistair Croll )描述的大資料供應鏈中所包含。


640?wx_fmt=jpeg

 

圖片由Jerry Overton提供


由於資料產品依照一個正規化(實時、批量或者兩者的混合)來執行,你很有可能發現你自己正在一個資料供應鏈活動和一個資料正規化的整合之中:注入和清理批量更新的資料,建立一個演算法來分析實時資料,將批處理的結果進行共享等。幸運的是,黑板架構模式給予了我們一個基礎的藍圖來應用良好的軟體工程應對這些場景。


黑板模式


640?wx_fmt=jpeg

圖片由Jerry Overton提供


黑板模式告訴我們通過將整個任務進行劃分來找到一系列更小的自包含的子任務的方式來解決問題。每一個子任務將你的假說轉化為一個更容易解決或是解法已知的假說。每一個任務逐漸改進解決方案,並且理想的情況下通向一個可行的解決方案。


資料科學被工具所淹沒,每一個都有其獨特的優點。生產力是很重要的,我喜歡讓我的團隊選擇任何他們最熟悉的工具。使用黑板模式使得從一系列不同的技術來構建資料產品變得可行。演算法之間的協作通過共享資料倉儲來發生。每一個演算法可以獲取資料,將它們作為輸入並且將結果返回給資料倉儲為其他的演算法作為輸入。


最後,所有的演算法都通過使用單個代表用來解決問題的啟發者的控制元件來互相協作。控制器是你已經選擇的解決問題的策略的實現。這是最高層面的對問題的抽象和理解,這是由可以互動的並且決定所有演算法順序的技術所實現的。控制器可以是像一個cron的定時任務或者指令碼一樣的自動化元件。或者可以是人工的,按照順序執行不同步驟。但總體來說,這是解決問題的根本策略。這是一個你可以從頭到尾瞭解問題解決方案的地方。


640?wx_fmt=jpeg


圖片由Jerry Overton提供


這一基本的方法已被證明在構建必須通過不完全資料解決不確定的、假設的問題的軟體系統時是有用的。最棒的一部分是它使得我們通過確定的部分在不確定的問題上獲得進展。不幸的是,我們並不保證你的努力真的一定會解決問題。你最好儘早知道如果你走的路是不起作用的。你需要通過你實現系統的順序來完成。


像專業人士一樣構建


你不一定非要以固定的順序來構築資料產品的元素(例如,先建立資料倉儲,然後是演算法,然後是控制器)。專業的方法是按照最高的技術風險來構建。從最高風險的元素先開始。一個元素會因為很多原因成為技術風險。最有風險的部分可能是那個有著最高工作負載的或者是你最不瞭解的部分。

你可以通過專注於單個元素然後解決其他的方式以任意順序構建元件。例如,如果你決定從構建演算法開始,無視資料輸入並且定義一個臨時點來寫入演算法輸出。


640?wx_fmt=jpeg


圖片由Jerry Overton提供


然後,以技術風險高低的順序實現資料產品:風險最高的元素最先開始。專注於一個特定的元素,無視其他的,稍後再替換它們。


這裡的關鍵是以小塊的方式構建並執行:以你理解的小步驟來寫演算法,一個資料來源一次的方式構建資料倉儲,以及一個演算法執行步驟一次的方式構建你的控制器。目標是總是有一個可以工作的資料產品,只不過它只有到最後才是功能完備的。


專業人士的工具


每一個專業人員需要有質量的工具。有太多的選擇可以使用。下面列出了一些公認最常用的工具,我附上了連結使得你們可以瞭解更多資訊:


資料視覺化:

  • D3.js: D3.js (或者D3, 資料驅動文件) 是一個JavaScript 庫,旨在在瀏覽器中建立動態的可互動的資料視覺化。它利用了廣泛被實現的SVG, HTML5以及 CSS 標準。


版本控制:

  • GitHub: GitHub 是一個基於網路的Git倉庫服務,它提供了所有的Git的分散式修訂控制和原始碼管理功能,也新增了它自己的功能特性。GitHub提供了一個基於網路的圖形化介面和移動端的桌面應用。


程式語言:

  • R: R 是一個針對統計計算和圖形化的程式語言及軟體環境。R語言在統計學家和開發統計軟體和資料分析的資料探勘者中被廣泛使用。

  • Python: Python 是一種被廣泛使用的通用的高層次的程式語言。它的設計理念強調程式碼的可讀性,它的語法允許程式設計人員用比C++和Java更少的程式碼來表達概念。

  • Scala: Scala 是一種針對通用軟體應用的物件函數語言程式設計語言。Scala有著對函數語言程式設計的全面支援,以及一個非常健壯的靜態型別系統。這使得用Scala寫的程式非常簡潔因而比其他通用程式語言尺寸更小。

  • Java: Java 是一種通用的計算機程式語言,它是併發的、基於類的、物件導向的、特別為了減少實現依賴而設計的。它旨在讓應用“一次編寫,隨處執行”


Hadoop生態系統:

  • Hadoop: Hadoop 是一個用Java開發的開源的軟體框架,為了在基於商業硬體的計算機叢集上進行分散式儲存和分散式處理海量資料集。

  • Pig: Pig 是一個為了建立Hadoop之上MapReduce程式的高層平臺

  • Hive: Hive 是一個在Hadoop之上構建的資料倉儲基礎結構,旨在提供資料彙總、查詢和分析。

  • Spark: Spark的記憶體原語操作為某些應用提供了高達100倍的效能提升



結束語:本文來自哪裡


這篇文章起始於一次偶然的關於我的團隊中正面臨的生產力問題的討論。我們最終將問題追溯到技術平臺和我們的軟體工程知識。我們需要在我們的軟體工程實踐中補上漏洞,但是每次的經驗都太抽象或是太細節(對於專業的軟體開發者來說)。我是一個由外至內資料科學方法的擁護者,我決定主辦一個開放的群聊來討論這些事。


我們獲得了相當大的參與度:30分鐘之內有179條釋出;600個觀點,以及28000多個訪問。我主持了討論並基於最有影響力的答案總結了我們的發現,然後我將那個總結作為本文的基礎。我想要感謝所有那些參加了這一過程的人們,並花一些時間來認可他們的貢獻。

 

 

作者Jerry Overton


Jerry Overton是一名英聯邦科學委員會的資料科學家以及傑出工程師,下一代IT解決方案的全球領軍人物。Jerry是高階分析研究的帶頭人以及英聯邦科學委員會高階分析實驗室的創始人。在他的部落格“做資料科學”(Doing Data Science)中,Jerry分享了他在領導資料科學的公開研究中的經驗。



閱讀原文( read more )瀏覽Strata +Hadoop World 會議網站



相關文章