
作者 | 磐懟懟
來源 | 磐創AI
數據科學家是“在統計方面比任何軟件工程師都要出色,在軟件工程方面比任何統計學家都出色的人”。許多數據科學家都有統計學背景,但很少有軟件工程經驗。我是一位高級數據科學家,在Python編碼的Stackoverflow上排名第一,并與許多(初級)數據科學家合作。下面是我經??吹降?0個常見錯誤。
1. 不共享代碼中引用的數據
數據科學需要代碼和數據。因此,要使其他人能夠重現您的結果,他們需要有權訪問數據。雖然看起來很基礎,但是很多人忘記了共享代碼的數據。
import pandas as pd
df1 = pd.read_csv('file-i-dont-have.csv') # 錯誤
do_stuff(df)
解決方案:使用d6tpipe共享數據文件,或上傳到S3 / web / google等或保存到數據庫,以他人可以檢索文件(但不要將它們添加到git,詳見下文)。
2. 硬編碼無法訪問的路徑
與錯誤1相似,如果您對其他人無法訪問的路徑進行硬編碼,則他們將無法運行您的代碼,因此要查看很多地方手動更改路徑。
import pandas as pd
df = pd.read_csv('/path/i-dont/have/data.csv') # 錯誤
do_stuff(df)
# or
impor os
os.chdir('c:\\Users\\yourname\\desktop\\python') # 錯誤
解決方案:使用相對路徑,配置全局路徑變量或d6tpipe使數據易于訪問。
3. 將數據與代碼混合
由于數據科學代碼需要數據,為什么不將其存儲到同一目錄?當您使用它時,也可以在其中保存圖像,日志和其他垃圾文件。
├── data.csv ├── ingest.py ├── other-data.csv ├── output.png ├── report.html └── run.py
解決方案:將目錄按照類別進行組織,例如數據,日志,代碼等。
4. Git提交帶有源代碼的數據
現在大多數人都可以控制他們的代碼版本(如果不使用,那是另一個錯誤!參見git)。為了共享數據,可能想將數據文件添加到版本控制中。如果是很小的文件還可以,但是git并沒有對數據文件進行優化,尤其是大文件。
git add data.csv
解決方案:使用問題1中提到的工具來存儲和共享數據。如果確實要對控制數據進行版本控制,請參閱d6tpipe,DVC和Git大文件存儲。
5. 編寫函數而不是DAG
有足夠的數據,接下來談談實際的代碼!由于在學習代碼時首先要學習的內容之一就是函數,因此數據科學代碼通常被組織為一系列線性運行的函數。這可能會導致幾個問題。
def process_data(data, parameter): data = do_stuff(data) data.to_pickle('data.pkl') data = pd.read_csv('data.csv') process_data(data) df_train = pd.read_pickle(df_train) model = sklearn.svm.SVC() model.fit(df_train.iloc[:,:-1], df_train['y'])
解決方案:最好將數據科學代碼編寫為一組任務,并且它們之間具有依賴性,而不是線性鏈接函數。使用d6tflow或airflow。
6. 循環
和函數一樣,for循環是在學習編碼時首先要學習的東西。它們易于理解,但它們速度慢且過于冗長,通常表示您不知道有向量化的替代方案。
x = range(10) avg = sum(x)/len(x); std = math.sqrt(sum((i-avg)**2 for i in x)/len(x)); zscore = [(i-avg)/std for x] # should be: scipy.stats.zscore(x) # or groupavg = [] for i in df['g'].unique(): dfg = df[df[g']==i] groupavg.append(dfg['g'].mean()) # should be: df.groupby('g').mean()
解決方案:Numpy,scipy和pandas具有向量化功能,可用于大多數的循環。
7. 不編寫單元測試
隨著數據,參數或用戶輸入的更改,您的代碼可能會中斷,有時您可能不會注意到。這可能會導致錯誤的輸出,如果有人根據您的輸出做出決策,那么錯誤的數據將導致錯誤的決策!
解決方案:使用assert語句檢查數據。pandas有相等測試,d6tstack有數據攝取和檢查,d6tjoin數據連接。代碼示例:
assert df['id'].unique().shape[0] == len(ids) # 數據是否有所有的id assert df.isna().sum()<0.9 # 檢查缺失的數據 assert df.groupby(['g','date']).size().max() ==1 # 是否有重復的數據 assert d6tjoin.utils.PreJoin([df1,df2],['id','date']).is_all_matched() # 所有的id是否匹配
8. 不記錄代碼
我明白你著急進行一些分析。您可以一起努力取得成果給客戶或老板。然后一個星期后,他們說“請您更新此內容”。您看著您的代碼,不記得為什么要這么做?,F在想象其他人需要運行它。
def some_complicated_function(data):
data = data[data['column']!='wrong']
data = data.groupby('date').apply(lambda x: complicated_stuff(x))
data = data[data['value']<0.9]
return data
解決方案:即使在完成分析之后,也要花點時間記錄所做的工作。您將感謝自己,其他人更加感謝!
9. 將數據另存為csv或pickle
回到數據,畢竟是數據科學。就像函數和for循環一樣,通常使用CSV和pickle文件,但它們實際上并不是很好。CSV不包含架構,因此每個人都必須再次解析數字和日期。pickle可以解決此問題,但只能在python中工作,并且不能壓縮。兩者都不是存儲大型數據集的良好格式。
def process_data(data, parameter): data = do_stuff(data) data.to_pickle('data.pkl') data = pd.read_csv('data.csv') process_data(data) df_train = pd.read_pickle(df_train)
解決方案:使用parquet 或其他具有數據格式的二進制數據格式,最好是壓縮數據的格式。d6tflow自動將任務的數據輸出保存為parquet,不需要你進行處理。
10. 使用jupyter筆記本
讓我們以一個有爭議的結論來結束:jupyter notebooks 與CSV一樣普遍。很多人使用它們,那并不是好事。Jupyter notebooks 促進了上述許多不良的軟件工程習慣,尤其是:
入門很容易,但是擴展性很差。
解決方案:使用pycharm或spyder。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23