<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
你一定聽說過這句著名的資料科學名言:
在資料科學專案中, 80% 的時間是在做資料處理。
如果你沒有聽過,那麼請記住:資料淨化是資料科學工作流程的基礎。 機器學習模型會根據你提供的資料執行,混亂的資料會導致效能下降甚至錯誤的結果,而乾淨的資料是良好模型效能的先決條件。 當然乾淨的資料並不意味著一直都有好的效能,模型的正確選擇(剩餘 20%)也很重要,但是沒有乾淨的資料,即使是再強大的模型也無法達到預期的水平。
在本文中將列出資料淨化中需要解決的問題並展示可能的解決方案,通過本文可以瞭解如何逐步進行資料淨化。
當資料集中包含缺失資料時,在填充之前可以先進行一些資料的分析。 因為空單元格本身的位置可以告訴我們一些有用的資訊。 例如:
missingno這個python庫就可以用於檢查上述情況,並且使用起來非常的簡單,例如下圖中的白線是 NA:
import missingno as msno msno.matrix(df)
對於缺失值的填補計算有很多方法,例如:
不同的方法相互之間有優勢和不足,並且沒有適用於所有情況的“最佳”技術。具體可以參考我們以前釋出的文章
異常值是相對於資料集的其他點而言非常大或非常小的值。 它們的存在極大地影響了數學模型的效能。 讓我們看一下這個簡單的範例:
在左圖中沒有異常值,我們的線性模型非常適合資料點。 在右圖中有一個異常值,當模型試圖覆蓋資料集的所有點時,這個異常值的存在會改變模型的擬合方式,並且使我們的模型不適合至少一半的點。
對於異常值來說我們有必要介紹一下如何確定異常,這就要從數學角度明確什麼是極大或極小。
大於Q3+1.5 x IQR或小於Q1-1.5 x IQR都可以作為異常值。 IQR(四分位距) 是 Q3 和 Q1 之間的差 (IQR = Q3-Q1)。
可以使用下面函數來檢查資料集中異常值的數量:
def number_of_outliers(df): df = df.select_dtypes(exclude = 'object') Q1 = df.quantile(0.25) Q3 = df.quantile(0.75) IQR = Q3 - Q1 return ((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).sum()
處理異常值的一種方法是可以讓它們等於 Q3 或 Q1。 下面的lower_upper_range 函數使用 pandas 和 numpy 庫查詢其外部為異常值的範圍, 然後使用clip 函數將值裁剪到指定的範圍。
def lower_upper_range(datacolumn): sorted(datacolumn) Q1,Q3 = np.percentile(datacolumn , [25,75]) IQR = Q3 - Q1 lower_range = Q1 - (1.5 * IQR) upper_range = Q3 + (1.5 * IQR) return lower_range,upper_range for col in columns: lowerbound,upperbound = lower_upper_range(df[col]) df[col]=np.clip(df[col],a_min=lowerbound,a_max=upperbound)
異常值問題是關於數位特徵的,現在讓我們看看字元型別(分類)特徵。 資料不一致意味著列的唯一類具有不同的表示形式。 例如在性別欄中,既有m/f,又有male/female。在這種情況下,就會有4個類,但實際上有兩類。
這種問題目前沒有自動處理的辦法,所以需要手動進行分析。 pandas 的unique函數就是為了這個分析準備的,下面看一個汽車品牌的例子:
df['CarName'] = df['CarName'].str.split().str[0] print(df['CarName'].unique())
maxda-mazda, Nissan-nissan, porcshce-porsche, toyouta-toyota等都可以進行合併。
df.loc[df['CarName'] == 'maxda', 'CarName'] = 'mazda' df.loc[df['CarName'] == 'Nissan', 'CarName'] = 'nissan' df.loc[df['CarName'] == 'porcshce', 'CarName'] = 'porsche' df.loc[df['CarName'] == 'toyouta', 'CarName'] = 'toyota' df.loc[df['CarName'] == 'vokswagen', 'CarName'] = 'volkswagen' df.loc[df['CarName'] == 'vw', 'CarName'] = 'volkswagen'
無效的資料表示在邏輯上根本不正確的值。 例如,
對於數值列,pandas的 describe 函數可用於識別此類錯誤:
df.describe()
無效資料的產生原因可能有兩種:
1、資料收集錯誤:例如在輸入時沒有進行範圍的判斷,在輸入身高時錯誤的輸入了1799cm 而不是 179cm,但是程式沒有對資料的範圍進行判斷。
2、資料操作錯誤
資料集的某些列可能通過了一些函數的處理。 例如,一個函數根據生日計算年齡,但是這個函數出現了BUG導致輸出不正確。
以上兩種隨機錯誤都可以被視為空值並與其他 NA 一起估算。
當資料集中有相同的行時就會產生重複資料問題。 這可能是由於資料組合錯誤(來自多個來源的同一行),或者重複的操作(使用者可能會提交他或她的答案兩次)等引起的。 處理該問題的理想方法是刪除複製行。
可以使用 pandas duplicated 函數檢視重複的資料:
df.loc[df.duplicated()]
在識別出重複的資料後可以使用pandas 的 drop_duplicate 函數將其刪除:
df.drop_duplicates()
在構建模型之前,資料集被分成訓練集和測試集。 測試集是看不見的資料用於評估模型效能。 如果在資料淨化或資料預處理步驟中模型以某種方式“看到”了測試集,這個就被稱做資料洩漏(data leakage)。 所以應該在清洗和預處理步驟之前拆分資料:
以選擇缺失值插補為例。數值列中有 NA,採用均值法估算。在 split 前完成時,使用整個資料集的均值,但如果在 split 後完成,則使用分別訓練和測試的均值。
第一種情況的問題是,測試集中的推算值將與訓練集相關,因為平均值是整個資料集的。所以當模型用訓練集構建時,它也會“看到”測試集。但是我們拆分的目標是保持測試集完全獨立,並像使用新資料一樣使用它來進行效能評估。所以在操作之前必須拆分資料集。
雖然訓練集和測試集分別處理效率不高(因為相同的操作需要進行2次),但它可能是正確的。因為資料洩露問題非常重要,為了解決程式碼重複編寫的問題,可以使用sklearn 庫的pipeline。簡單地說,pipeline就是將資料作為輸入傳送到的所有操作步驟的組合,這樣我們只要設定好操作,無論是訓練集還是測試集,都可以使用相同的步驟進行處理,減少的程式碼開發的同時還可以減少出錯的概率。
到此這篇關於利用Python進行資料淨化的操作指南的文章就介紹到這了,更多相關Python資料淨化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45