
數(shù)據(jù)科學中“專業(yè)化”意味著什么
我作為一個數(shù)據(jù)科學家的經(jīng)歷跟我在書本和博客上所讀到的根本不一樣。我曾讀到過為數(shù)字超級新星公司工作的數(shù)據(jù)科學家,他們聽上去像是英雄,可以寫出自動化(近乎有感知能力的)算法并不斷地大量獲取認知結(jié)果。我也讀到過像百戰(zhàn)天龍那樣的數(shù)據(jù)科學家黑客,他們可以通過將他們周圍有的任意原始材料拼湊出數(shù)據(jù)產(chǎn)品來拯救世界。
我的團隊創(chuàng)建的數(shù)據(jù)產(chǎn)品并沒有重要到可以評價大型的企業(yè)級基礎(chǔ)設(shè)施。只是我覺得,投資超高效的自動化以及產(chǎn)品控制是不值得的。另一方面,我們的數(shù)據(jù)產(chǎn)品影響了企業(yè)中的重要決策,并且我們的努力是可測量,這一點十分重要。我們負擔不起總是將所有的事情人為來做,但我們也需要高效的方法來為成千上萬的人們共享結(jié)果。
現(xiàn)實中大部分還是 “常規(guī)”的數(shù)據(jù)科學家。我們比黑客們更有組織但是并不需要一個超級英雄般的數(shù)據(jù)科學老巢。我們一組人聚在一起進行思維碰撞,我們在此對于寫出穩(wěn)定的代碼的最佳實踐進行頭腦風暴。這篇文章是對這次對話的一個總結(jié),并且試圖將我們的知識收集起來,取其精華至于一處。
如何變得專業(yè)化
數(shù)據(jù)科學家需要具備一些軟件工程的技能,只不過并不是一個專業(yè)的軟件工程師所需要的所有技能。我將具備必要的數(shù)據(jù)產(chǎn)品工程技能的數(shù)據(jù)科學家稱為專業(yè)的數(shù)據(jù)科學程序員。專業(yè)并不是指類似一個證書或者多少小時的經(jīng)驗,我所指的是方法上的專業(yè)性。專業(yè)的數(shù)據(jù)科學程序員在他們建立數(shù)據(jù)產(chǎn)品的過程中是可以自我改正的。他們有著常見的策略來識別工作中的問題并糾正錯誤。
專業(yè)的數(shù)據(jù)科學程序員不得不將一個假說用一個可以測試的程序來表達出來。數(shù)據(jù)科學編程在軟件工程中是獨特的,這是因為數(shù)據(jù)科學家所處理的那些問題類 型。巨大的挑戰(zhàn)在于數(shù)據(jù)科學本質(zhì)就是實驗性的。這些挑戰(zhàn)經(jīng)常是困難的,數(shù)據(jù)是混亂的。對于很多這類問題,并沒有已知的解決方案和策略,通往解決方案的路是前所未有的,可能的解決方案都是步步為營取最優(yōu)來得出的。在下面的內(nèi)容中,我會介紹一個規(guī)范的、有生產(chǎn)力的試錯的常見策略:將問題分成多個小步驟,分別嘗試解決方案,在過程中一直做出糾正和改進。
像專業(yè)人士一樣思考
為了成為一個專業(yè)的數(shù)據(jù)科學程序員,你必須了解比系統(tǒng)是如何構(gòu)造的更多。你必須知道如何設(shè)計一個解決方案,在你有一個解決方案時你必須能夠識別出 來,你也必須在你沒有完全理解你的方案時有所察覺。最后一點是你必須能夠自我糾錯。當你識別出你方法中的概念差異的時候,你能夠自己將其完善。為了以一個你可以自我糾錯的方式來設(shè)計數(shù)據(jù)科學解決方案,我發(fā)現(xiàn)依照以下基本步驟是很有用的:觀察、理解、想象以及展示。
第一步:觀察。從掃描環(huán)境開始。做背景研究并對所有可能與你試圖解決的問題有關(guān)的細枝末節(jié)有所了解。以盡量寬廣的視野來看待你的問題。盡量多的發(fā)現(xiàn)場景并且收集各類不同的信息。
第二步:理解。將你發(fā)現(xiàn)的各種信息碎片抽象成符合黑板模式的元素。在這個階段,你正在將問題中的元素轉(zhuǎn)化為有意義的技術(shù)性的概念。理解問題是為可行的設(shè)計奠定基礎(chǔ)的關(guān)鍵步驟。
第三步:想象。根據(jù)你理解的技術(shù)概念,想象一些可以使你往目標更近一步的實現(xiàn)。如果你不能想象出一個實現(xiàn),那么你可能在你觀察問題的時候錯過了什么。
第四步:展示。首先將你的解決方案解釋給自己聽,然后是你的伙伴,然后是你的老板,最后是你的目標客戶。每一次解釋只需要以傳達到你的觀點的正式程 度即可:一次飲水機旁的短暫談話,一封電子郵件、一次15分鐘的散步。這是在成為一個自我糾錯的專業(yè)數(shù)據(jù)程序員的過程中最重要的常規(guī)實踐。如果你的方案有任何漏洞,那么他們將會在你嘗試解釋的時候發(fā)現(xiàn)它?;c時間來填充這些溝通代溝,并且確保你可以恰當?shù)亟忉寙栴}和針對它的解決方案。
像專業(yè)人士一樣設(shè)計
創(chuàng)建和發(fā)布一個數(shù)據(jù)產(chǎn)品的活動是多樣且復雜的,但是,一般來說,你將要做的會在阿利斯泰爾克羅爾(Alistair Croll )描述的大數(shù)據(jù)供應鏈中所包含。
由于數(shù)據(jù)產(chǎn)品依照一個范式(實時、批量或者兩者的混合)來執(zhí)行,你很有可能發(fā)現(xiàn)你自己正在一個數(shù)據(jù)供應鏈活動和一個數(shù)據(jù)范式的整合之中:注入和清理 批量更新的數(shù)據(jù),建立一個算法來分析實時數(shù)據(jù),將批處理的結(jié)果進行共享等。幸運的是,黑板架構(gòu)模式給予了我們一個基礎(chǔ)的藍圖來應用良好的軟件工程應對這些場景。
黑板模式
圖片由Jerry Overton提供
黑板模式告訴我們通過將整個任務進行劃分來找到一系列更小的自包含的子任務的方式來解決問題。每一個子任務將你的假說轉(zhuǎn)化為一個更容易解決或是解法已知的假說。每一個任務逐漸改進解決方案,并且理想的情況下通向一個可行的解決方案。
數(shù)據(jù)科學被工具所淹沒,每一個都有其獨特的優(yōu)點。生產(chǎn)力是很重要的,我喜歡讓我的團隊選擇任何他們最熟悉的工具。使用黑板模式使得從一系列不同的技 術(shù)來構(gòu)建數(shù)據(jù)產(chǎn)品變得可行。算法之間的協(xié)作通過共享數(shù)據(jù)倉庫來發(fā)生。每一個算法可以獲取數(shù)據(jù),將它們作為輸入并且將結(jié)果返回給數(shù)據(jù)倉庫為其他的算法作為輸入。
最后,所有的算法都通過使用單個代表用來解決問題的啟發(fā)者的控制組件來互相協(xié)作。控制器是你已經(jīng)選擇的解決問題的策略的實現(xiàn)。這是最高層面的對問題 的抽象和理解,這是由可以交互的并且決定所有算法順序的技術(shù)所實現(xiàn)的??刂破骺梢允窍褚粋€cron的定時任務或者腳本一樣的自動化組件?;蛘呖梢允侨斯?的,按照順序執(zhí)行不同步驟。但總體來說,這是解決問題的根本策略。這是一個你可以從頭到尾了解問題解決方案的地方。
這一基本的方法已被證明在構(gòu)建必須通過不完全數(shù)據(jù)解決不確定的、假設(shè)的問題的軟件系統(tǒng)時是有用的。最棒的一部分是它使得我們通過確定的部分在不確定 的問題上獲得進展。不幸的是,我們并不保證你的努力真的一定會解決問題。你最好盡早知道如果你走的路是不起作用的。你需要通過你實現(xiàn)系統(tǒng)的順序來完成。
像專業(yè)人士一樣構(gòu)建
你不一定非要以固定的順序來構(gòu)筑數(shù)據(jù)產(chǎn)品的元素(例如,先建立數(shù)據(jù)倉庫,然后是算法,然后是控制器)。專業(yè)的方法是按照最高的技術(shù)風險來構(gòu)建。從最高風險的元素先開始。一個元素會因為很多原因成為技術(shù)風險。最有風險的部分可能是那個有著最高工作負載的或者是你最不了解的部分。
你可以通過專注于單個元素然后解決其他的方式以任意順序構(gòu)建組件。例如,如果你決定從構(gòu)建算法開始,無視數(shù)據(jù)輸入并且定義一個臨時點來寫入算法輸出。
圖片由Jerry Overton提供
然后,以技術(shù)風險高低的順序?qū)崿F(xiàn)數(shù)據(jù)產(chǎn)品:風險最高的元素最先開始。專注于一個特定的元素,無視其他的,稍后再替換它們。
這里的關(guān)鍵是以小塊的方式構(gòu)建并執(zhí)行:以你理解的小步驟來寫算法,一個數(shù)據(jù)源一次的方式構(gòu)建數(shù)據(jù)倉庫,以及一個算法執(zhí)行步驟一次的方式構(gòu)建你的控制器。目標是總是有一個可以工作的數(shù)據(jù)產(chǎn)品,只不過它只有到最后才是功能完備的。
專業(yè)人士的工具
每一個專業(yè)人員需要有質(zhì)量的工具。有太多的選擇可以使用。下面列出了一些公認最常用的工具,我附上了鏈接使得你們可以了解更多信息:
D3.js: D3.js (或者D3, 數(shù)據(jù)驅(qū)動文檔) 是一個JavaScript 庫,旨在在瀏覽器中建立動態(tài)的可交互的數(shù)據(jù)可視化。它利用了廣泛被實現(xiàn)的SVG, HTML5以及 CSS 標準。
版本控制:
GitHub: GitHub 是一個基于網(wǎng)絡的Git倉庫服務,它提供了所有的Git的分布式修訂控制和源代碼管理功能,也添加了它自己的功能特性。GitHub提供了一個基于網(wǎng)絡的圖形化界面和移動端的桌面應用。
編程語言:
R: R 是一個針對統(tǒng)計計算和圖形化的編程語言及軟件環(huán)境。R語言在統(tǒng)計學家和開發(fā)統(tǒng)計軟件和數(shù)據(jù)分析的數(shù)據(jù)挖掘者中被廣泛使用。
Python: Python 是一種被廣泛使用的通用的高層次的編程語言。它的設(shè)計理念強調(diào)代碼的可讀性,它的語法允許編程人員用比C++和Java更少的代碼來表達概念。
Scala: Scala 是一種針對通用軟件應用的對象函數(shù)式編程語言。Scala有著對函數(shù)式編程的全面支持,以及一個非常健壯的靜態(tài)類型系統(tǒng)。這使得用Scala寫的程序非常簡潔因而比其他通用編程語言尺寸更小。
Java: Java 是一種通用的計算機編程語言,它是并發(fā)的、基于類的、面向?qū)ο蟮?、特別為了減少實現(xiàn)依賴而設(shè)計的。它旨在讓應用“一次編寫,隨處執(zhí)行”
Hadoop生態(tài)系統(tǒng):
Hadoop: Hadoop 是一個用Java開發(fā)的開源的軟件框架,為了在基于商業(yè)硬件的計算機集群上進行分布式存儲和分布式處理海量數(shù)據(jù)集。
Pig: Pig 是一個為了創(chuàng)建Hadoop之上MapReduce程序的高層平臺
Hive: Hive 是一個在Hadoop之上構(gòu)建的數(shù)據(jù)倉庫基礎(chǔ)結(jié)構(gòu),旨在提供數(shù)據(jù)匯總、查詢和分析。
Spark: Spark的內(nèi)存原語操作為某些應用提供了高達100倍的性能提升
結(jié)束語:本文來自哪里
這篇文章起始于一次偶然的關(guān)于我的團隊中正面臨的生產(chǎn)力問題的討論。我們最終將問題追溯到技術(shù)平臺和我們的軟件工程知識。我們需要在我們的軟件工程實踐中補上漏洞,但是每次的經(jīng)驗都太抽象或是太細節(jié)(對于專業(yè)的軟件開發(fā)者來說)。我是一個由外至內(nèi)數(shù)據(jù)科學方法的擁護者,我決定主辦一個開放的群聊來討論這些事。
我們獲得了相當大的參與度:30分鐘之內(nèi)有179條發(fā)布;600個觀點,以及28000多個訪問。我主持了討論并基于最有影響力的答案總結(jié)了我們的發(fā)現(xiàn),然后我將那個總結(jié)作為本文的基礎(chǔ)。我想要感謝所有那些參加了這一過程的人們,并花一些時間來認可他們的貢獻。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(RNN)家族中,長短期記憶網(wǎng)絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網(wǎng)絡(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03