想從事數(shù)據(jù)科學,編碼技能夠格了嗎?
先來看看這樣一個故事:
“那是周五的晚上。我記得非常清楚,要去跟父母一同度假。那是他們是第一次去班加羅爾,我都計劃好了帶他們逛逛。工作已經(jīng)完成,且一般周五晚都不會太忙??删驮谙掳鄷r,對方突然發(fā)郵件問我要很早以前的報告,這份報告一年前就不再遞交了。
雖然不高興,不過運行標準的代碼倒也不太費事。媽呀!我錯了,耗了一晚上才整理完……”
這與我們的話題有什么關(guān)系?機智的你應該猜到了吧~
當今各個企業(yè)都將數(shù)據(jù)科學作為決策循環(huán)每個階段的關(guān)鍵操縱桿,促成重要的商業(yè)戰(zhàn)略。可是數(shù)據(jù)科學難在哪?數(shù)據(jù)分析師、商業(yè)分析師或數(shù)據(jù)科學家又是如何工作的呢?
所有數(shù)據(jù)科學的問題都可一分為二,一套“活動”和幾步“絕佳操作過程”。
“活動”包括數(shù)據(jù)收集、數(shù)據(jù)清理、數(shù)據(jù)整理、假設驗證、模型開發(fā)、驗證等。如果你常與分析行業(yè)打交道,那對這些術(shù)語一定不陌生。
但“絕佳操作過程”卻鮮有人知,實踐的也不多。事實上,它強調(diào)最多的是項目管理、建立庫、文件管理、溝通和代碼維護。作為數(shù)據(jù)科學家,必須保證堅持“3個C”:
- consistency(一致)
- ommunication(溝通)
- consumption(消費)
工作要始終如一,與利益相關(guān)方溝通商業(yè)細節(jié),最重要的是你在被消費。
“如今的企業(yè)都在找尋能夠創(chuàng)造適用多個團隊的方案的數(shù)據(jù)科學家。就好比一個產(chǎn)品,人人都用得心應手的那個。如此不但可以節(jié)省資金,不再浪費錢解決不同商業(yè)活動中相似的問題,還能節(jié)約時間和精力。”
數(shù)據(jù)科學中的編碼與軟件開發(fā)截然不同。不僅要知道怎么做,還得懂相當多的數(shù)據(jù)和商業(yè)內(nèi)容。
今天筆者打算談談“一致”,以及如何在編碼中做到這一點。在Mu Sigma商業(yè)方案工作的三年,以及至今遇到的所有挑戰(zhàn),讓我總結(jié)出了許多絕佳經(jīng)驗。
下面這五點會簡單講解什么是“數(shù)學+商業(yè)+數(shù)據(jù)+科技=數(shù)據(jù)科學”,助你功力大增!
1. 代碼可讀性是否高
格式化良好且眾人點評過的代碼是天堂。它有助于輕松修補漏洞,確保順利完成質(zhì)量檢查。每一個數(shù)據(jù)科學團隊都追隨“Peer Quality Checks(QC,同行質(zhì)量檢查)”的理念,以求數(shù)據(jù)能準確輸出。在將最終結(jié)果遞交之前先讓同行過目,這是一種絕佳實踐??勺x代碼包含:
- 項目名、代碼目的、版本、作者名、創(chuàng)建日期、完善日期、最近一次修改、從哪些改變開始
- 在執(zhí)行運算之前,每個代碼片段都要有一行描述(通過這些代碼準確獲取商業(yè)規(guī)則信息或者使用的過濾系統(tǒng))
- 每兩個代碼片段之間有適當?shù)目崭瘢粲凶銐蚓嚯x
- 合理使用慣例命名表格。不要起“創(chuàng)建表格”的名字,可以換成“創(chuàng)建表格客戶-頁數(shù)-概述”。這樣會讓表格更直觀,無需瀏覽余下的所有代碼片段。
2. 代碼是否具備可重復使用的模塊
多數(shù)時候,我們都是根據(jù)當下的商業(yè)問題,運用相似模式不同過濾器處理數(shù)據(jù)集,或者用同一表格簡要描述商業(yè)問題中的各種情況。
舉個例子,現(xiàn)在你手中有一個客戶數(shù)據(jù)集,信息包含客戶ID、交易ID、交付日期、產(chǎn)品類型和銷售數(shù)據(jù)。你被告知要找出給每個產(chǎn)品貢獻80%銷售額的頂級客戶。
通常會創(chuàng)建一組專門的代碼,復制粘貼后再利用另一個過濾器。而優(yōu)秀的編碼人員會站在用戶角度創(chuàng)建模塊,將產(chǎn)品類型和銷售價格區(qū)域輸入進去,得出理想的結(jié)果。
可重復使用的模塊在所有平臺都可創(chuàng)建,避免冗余的代碼行,輕松實現(xiàn)質(zhì)量控制。
3. 輸入的代碼是否可恢復
任何輸入都可恢復就意味著不管輸入什么類型,都可輸出結(jié)果。代碼實踐中最棘手的問題就是讓輸入復原,實現(xiàn)代碼的重復利用。
分析師可能會收到來自各個利益相關(guān)方的數(shù)據(jù)請求,理想的情況就是編寫迎合各種商業(yè)請求的代碼。
例如,電子設備和化妝品公司的銷售主管想要了解各自客戶信息對應的產(chǎn)品消費記錄。分析師之前都是在筆記本或平板上操作的,知道所有電子產(chǎn)品名都是小寫的。
但要核實化妝品信息,可能就要先過濾一遍所有的產(chǎn)品,然后看客戶數(shù)據(jù)中與化妝品有關(guān)的交易如何。
但實際上,在產(chǎn)品列中用UPPER()就可避免不必要的檢查。在現(xiàn)實世界中,很難做到每個輸入的代碼都可恢復,要考慮所有可控的例外情況。
4. 輸出結(jié)果是否經(jīng)得起數(shù)據(jù)和商業(yè)的常規(guī)檢查
傳輸精準數(shù)據(jù)是項目制勝的關(guān)鍵。很多商業(yè)決策都基于報告的數(shù)據(jù),一點點的差錯都會造成巨大影響。
假如你被告知要根據(jù)客戶交易額找到前百名忠實客戶,企業(yè)會根據(jù)你推薦的結(jié)果給這些人提供30%的優(yōu)惠。
理念就是找出鐵桿顧客,引導其購買更多的產(chǎn)品。通過降低價格帶來更高的交易額。然而很多人并沒有意識到多數(shù)公司利用的數(shù)據(jù)集并不是絕對真實的,在用之前需要進行處理。
比如某客戶付款時可能沒有操作成功,但系統(tǒng)也記錄下來了。最后在計算交易額時這種錯誤信息理應去除,否則得出的每位客戶的交易額預算不會準確。難就難在識別異常信息。
以下是編碼過程中必做的檢查:
- 掌握指向業(yè)績的關(guān)鍵風向標,有助于實現(xiàn)每一步的數(shù)據(jù)匯總。上述例子中,所有客戶交易都是這個風向標。根據(jù)企業(yè)的年度報告,會發(fā)現(xiàn)近有12,000位客戶在網(wǎng)站上購買產(chǎn)品。但是在查詢數(shù)據(jù)時,只有8000名消費者的信息。數(shù)據(jù)準確嗎?再次檢查代碼或跟利益相關(guān)方一同解決數(shù)據(jù)問題。
- 在進行任何操作之前必須檢查數(shù)據(jù)集的級別。根據(jù)是否為單一數(shù)列還是組合數(shù)列對其進行劃分,這些數(shù)列可以識別數(shù)據(jù)庫或表格中的異常信息。幫助識別重復錄入的部分,防止重復計算。
- 不管是加入一個或幾個表格,都要確保在同一級別。一定要在所有加入信息顯示前后追蹤記錄的數(shù)量。這將有助于識別多項數(shù)據(jù)圖或重復計算的信息。
- 快速地給數(shù)據(jù)集做一個描述性統(tǒng)計。這將有助于找出數(shù)據(jù)分布和所有可能遺漏的值。
5. 引導處理例外情況
例外情況的處理,似乎和輸入代碼可恢復聽起來有些相似,但操作完全不同。
問大家?guī)讉€問題:你覺得一家企業(yè)的客戶數(shù)據(jù)中包含多少條記錄?是上面展示的20,252條嗎?別開玩笑了!所有客戶數(shù)據(jù)中各個產(chǎn)品的交易記錄能達幾百萬條。在SQR、R、Python或Alteryx中查詢都要花上幾個小時。
試想一下,如果你需要查詢不同產(chǎn)品的表格,如何處理意外情況呢?
- 保證檢查查詢時間。通常查詢大型數(shù)據(jù)集所耗費的時間都超出預計,這是因為存在同時使用的情況,即多個用戶會同時查詢同一數(shù)據(jù)集。要保證代碼運行超過一定程度時能夠自動停止執(zhí)行。
- 所有編程語言都允許設置執(zhí)行例外處理,查詢失敗接下來的代碼片段也會停止執(zhí)行。這樣,在出狀況或有錯誤時就可立即采取必要的糾正措施,而不是等著整個代碼執(zhí)行完畢。
圖源:unsplash
“我的手機突然震動了,一晃到已上午八點。過去的五個小時我都在找錯誤匹配的數(shù)字。雖然一年前就干這個,但我?guī)缀跤洸黄饋砣魏问褂眠^的商業(yè)規(guī)則。每一步的處理流程都不完善,質(zhì)量控制數(shù)據(jù)不夠,這讓尋找問題變得更棘手?,F(xiàn)在我可算認識到良好編碼實踐的重要性了。”
這個“痛心疾首”的故事,足以引起你對良好編碼實踐的重視了嘛~