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