中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

10個數(shù)據(jù)科學家常犯的編程錯誤(附解決方案)

2019-05-28    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

數(shù)據(jù)科學家是“比軟件工程師更擅長統(tǒng)計學,比統(tǒng)計學家更擅長軟件工程的人”。許多數(shù)據(jù)科學家都具有統(tǒng)計學背景,但是在軟件工程方面的經(jīng)驗甚少。我是一名資深數(shù)據(jù)科學家,在Stackoverflow的python編程方面排名前1%,并與許多(初級)數(shù)據(jù)科學家共事。以下是我經(jīng)常看到的10大常見錯誤,本文將為你相關(guān)解決方案:

♦ 不共享代碼中引用的數(shù)據(jù)
♦ 對無法訪問的路徑進行硬編碼
♦ 將代碼與數(shù)據(jù)混合
♦ 在Git中和源碼一起提交數(shù)據(jù)
♦ 編寫函數(shù)而不是DAG
♦ 寫for循環(huán)
♦ 不編寫單元測試
♦ 不寫代碼說明文檔
♦ 將數(shù)據(jù)保存為csv或pickle文件
♦ 使用jupyter notebook

1. 不共享代碼中引用的數(shù)據(jù)

數(shù)據(jù)科學需要代碼和數(shù)據(jù)。因此,為了讓別人可以復現(xiàn)你的結(jié)果,他們需要能夠訪問到數(shù)據(jù)。道理很簡單,但是很多人忘記分享他們代碼中的數(shù)據(jù)。



解決方案:使用d6tpipe(https://github.com/d6t/ d6tpipe)來共享你的代碼中的數(shù)據(jù)文件、將其上傳到S3/web/google驅(qū)動等,或者保存到數(shù)據(jù)庫,以便于別人可以檢索到文件(但是不要將其添加到git,原因見下文)。

2. 對無法訪問的路徑進行硬編碼

與錯誤1相似,如果你對別人無法訪問的路徑進行硬編碼,他們將無法運行你的代碼,并且必須仔細查看代碼來手動更改路徑。令人崩潰!



解決方案:使用相對路徑、全局路徑配置變量或d6tpipe,使你的數(shù)據(jù)易于訪問。

d6tpipe:

https://github.com/d6t/d6tpip

3. 將代碼與數(shù)據(jù)混合

既然數(shù)據(jù)科學的代碼中包含數(shù)據(jù),為什么不把它們放到同一目錄中?那樣你還可以在其中保存圖像、報告和其他垃圾。哎呀,真是一團糟!



解決方案:將你的目錄進行分類,比如數(shù)據(jù)、報告、代碼等。請參閱Cookiecutter Data Science或d6tflow項目模板[見#5],并使用#1中提到的工具來存儲和共享數(shù)據(jù)。

Cookiecutter Data Science:

https://drivendata.github.io/cookiecutter-data-science/

d6tflow項目模板:

https://github.com/d6t/d6tflow-templat

4. 在Git中和源碼一起提交數(shù)據(jù)

現(xiàn)在,大多數(shù)人對他們的代碼使用版本控制(如果你不使用,那就是另外一個錯誤,請參閱git:https://git-scm.com/)。在嘗試共享數(shù)據(jù)時,很容易將數(shù)據(jù)文件添加到版本控制中。當文件很小時是可以的,但是git并沒有針對數(shù)據(jù)進行優(yōu)化,尤其是大文件。



解決方案:使用第1點中提到的工具來存儲和共享數(shù)據(jù)。如果你真的希望對數(shù)據(jù)進行版本控制,請參閱 d6tpipe,DVC和Git大文件存儲。

d6tpipe:

https://github.com/d6t/d6tpipe

DVC:

https://dvc.org/

Git大文件存儲:

https://git-lfs.github.com

5. 編寫函數(shù)而不是DAG

關(guān)于數(shù)據(jù)部分已經(jīng)夠多了,現(xiàn)在來談一談實際的代碼!在學習編程時最先學習的內(nèi)容之一就是函數(shù),數(shù)據(jù)科學代碼通常由一系列線性運行的函數(shù)組成。

這會導致一些問題,請參閱“為什么你的機器學習代碼可能不好的4個原因”:

https://github.com/d6t/d6t-python/blob/master/blogs/reasons-why-bad-ml-code.rst



解決方案:數(shù)據(jù)科學代碼不是一系列線性連接的函數(shù),而是一組具有依賴關(guān)系的任務集合。請使用d6tflow或airflow。

d6tflow:

https://github.com/d6t/d6tflow-template

airflow:

https://airflow.apache.org

6. 寫for循環(huán)

與函數(shù)類似,for循環(huán)也是你學習編程時最初學習的內(nèi)容。它們易于理解,但是運行緩慢且過于冗長,通常意味著你不了解矢量化的替代方案。



解決方案:Numpy,scipy和pandas為你需要for循環(huán)的情況提供了矢量化函數(shù)。

Numpy:

http://www.numpy.org/

scipy:

https://www.scipy.org/

pandas:

https://pandas.pydata.org

7. 不編寫單元測試

隨著數(shù)據(jù)、參數(shù)或用戶輸入的改變,你的代碼可能會出現(xiàn)問題,有時你并沒有注意到。這可能會導致糟糕的輸出結(jié)果,而如果有人基于你的輸出做出決策,那么糟糕的數(shù)據(jù)將會導致糟糕的決策。

解決方案:使用assert語句來檢查數(shù)據(jù)質(zhì)量。pandas有相等測試,d6tstack有數(shù)據(jù)提取檢查以及用于數(shù)據(jù)連接的d6tjoin。

pandas相等測試:

https://pandas.pydata.org/pandas-docs/stable/reference/general_utility_functions.html

d6tstack:

https://github.com/d6t/d6tstack

d6tjoin:

https://github.com/d6t/d6tjoin/blob/master/examples-prejoin.ipyn

以下是數(shù)據(jù)檢查的示例代碼:



8. 不寫代碼說明文檔

我明白,你急著做出一些分析結(jié)果。你把事情匯總到一起分析,將結(jié)果交給你的客戶或老板。一個星期之后,他們回來說,“可以把XXX改一下嗎”或者“可以更新一下這里嗎”。你看著你的代碼,但是并不記得你當初為什么這么寫,F(xiàn)在就像是在運行別人的代碼。



解決方案:即使在你已經(jīng)提交分析報告后,也要花費額外的時間,來對你做的事情編寫說明文檔。以后你會感謝自己,別人更會感謝你。那樣顯得你很專業(yè)!

9. 將數(shù)據(jù)保存為csv或pickle文件

回到數(shù)據(jù),畢竟是在講數(shù)據(jù)科學。就像函數(shù)和for循環(huán)一樣,CSV和pickle文件很常用,但是并不好用。CSV文件不包含綱要(schema),因此每個人都必須再次解析數(shù)字和日期。Pickle文件解決了這個問題,但是它只能在python中使用,并且不能壓縮。兩者都不是存儲大型數(shù)據(jù)集的最優(yōu)格式。



解決方案:使用parquet或其他帶有數(shù)據(jù)綱要的二進制數(shù)據(jù)格式,在理想情況下可以壓縮數(shù)據(jù)。d6tflow將任務的數(shù)據(jù)輸出保存為parquet,無需額外處理。

parquet:

https://github.com/dask/fastparquet

d6tflow:

https://github.com/d6t/d6tflow-template

10. 使用jupyter notebook

最后一個是頗有爭議的錯誤:jupyter notebook和csv文件一樣普遍。許多人使用它們,但是這并不意味著它們很好。jupyter notebook助長了上述提到的許多不良編程習慣,尤其是:

♦ 把所有文件保存在一個目錄中
♦ 編寫從上至下運行的代碼,而不是DAG
♦ 沒有對代碼進行模塊化
♦ 很難調(diào)試
♦ 代碼和輸出混在一個文件中
♦ 沒有很好的版本控制
♦ 它容易上手,但是擴展性很差。

解決方案:使用pycharm和/或spyder。

pycharm:

https://www.jetbrains.com/pycharm/

spyder:

https://www.spyder-ide.org

作者簡介:Norman Niemer是一家大規(guī)模資產(chǎn)管理公司的首席數(shù)據(jù)科學家,他在其中發(fā)布數(shù)據(jù)驅(qū)動的投資見解。他有哥倫比亞大學的金融工程專業(yè)理學碩士學位,和卡斯商學院(倫敦)的銀行與金融專業(yè)理學學士學位。

原文標題:Top 10 Coding Mistakes Made by Data Scientists

原文鏈接:https://github.com/d6t/d6t-python/blob/master/blogs/top10-mistakes-coding.md

標簽: [db:TAGG]

版權(quán)申明:本站文章部分自網(wǎng)絡,如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:推薦系統(tǒng)工程師必看:Embedding 技術(shù)在深度學習 CTR 模型中的應用

下一篇:中國工程院院士張堯?qū)W:大數(shù)據(jù)能形成產(chǎn)業(yè)嗎?