成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Python進行數據清洗的完整指南

開發 前端
在本文中將列出數據清洗中需要解決的問題并展示可能的解決方案,通過本文可以了解如何逐步進行數據清洗。

你一定聽說過這句著名的數據科學名言:

在數據科學項目中, 80% 的時間是在做數據處理。

如果你沒有聽過,那么請記住:數據清洗是數據科學工作流程的基礎。 機器學習模型會根據你提供的數據執行,混亂的數據會導致性能下降甚至錯誤的結果,而干凈的數據是良好模型性能的先決條件。 當然干凈的數據并不意味著一直都有好的性能,模型的正確選擇(剩余 20%)也很重要,但是沒有干凈的數據,即使是再強大的模型也無法達到預期的水平。

在本文中將列出數據清洗中需要解決的問題并展示可能的解決方案,通過本文可以了解如何逐步進行數據清洗。

缺失值

當數據集中包含缺失數據時,在填充之前可以先進行一些數據的分析。 因為空單元格本身的位置可以告訴我們一些有用的信息。 例如:

  • NA值僅在數據集的尾部或中間出現。 這意味著在數據收集過程中可能存在技術問題。 可能需要分析該特定樣本序列的數據收集過程,并嘗試找出問題的根源。
  • 如果列NA數量超過 70–80%,可以刪除該列。
  • 如果 NA 值在表單中作為可選問題的列中,則該列可以被額外的編碼為用戶回答(1)或未回答(0)。

missingno這個python庫就可以用于檢查上述情況,并且使用起來非常的簡單,例如下圖中的白線是 NA:

import missingno as msno
msno.matrix(df)

對于缺失值的填補計算有很多方法,例如:

  • 平均,中位數,眾數
  • kNN
  • 零或常數等

不同的方法相互之間有優勢和不足,并且沒有適用于所有情況的“最佳”技術。具體可以參考我們以前發布的文章

異常值

異常值是相對于數據集的其他點而言非常大或非常小的值。 它們的存在極大地影響了數學模型的性能。 讓我們看一下這個簡單的示例:

在左圖中沒有異常值,我們的線性模型非常適合數據點。 在右圖中有一個異常值,當模型試圖覆蓋數據集的所有點時,這個異常值的存在會改變模型的擬合方式,并且使我們的模型不適合至少一半的點。

對于異常值來說我們有必要介紹一下如何確定異常,這就要從數學角度明確什么是極大或極小。

大于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'

無效數據

無效的數據表示在邏輯上根本不正確的值。 例如,

  • 某人的年齡是 560;
  • 某個操作花費了 -8 小時;
  • 一個人的身高是1200 cm等;

對于數值列,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就是將數據作為輸入發送到的所有操作步驟的組合,這樣我們只要設定好操作,無論是訓練集還是測試集,都可以使用相同的步驟進行處理,減少的代碼開發的同時還可以減少出錯的概率。


責任編輯:華軒 來源: 今日頭條
相關推薦

2024-10-28 12:57:36

Pandas數據清洗

2023-05-05 19:16:22

Python數據清洗

2023-05-05 19:29:41

2019-02-22 08:25:19

數據清洗預處理機器學習

2023-09-26 01:03:36

Pandas數據數據集

2025-04-07 00:30:00

DeepSeek大數據數字化

2021-07-27 15:40:39

Python數據清洗函數

2018-04-03 12:07:53

數據清洗PandasNumpy

2024-12-19 15:00:00

數據清洗Python

2022-11-02 14:45:24

Python數據分析工具

2017-10-31 11:55:46

sklearn數據挖掘自動化

2017-02-16 08:41:09

數據Vlookup匹配

2021-07-17 22:41:53

Python數據技術

2019-09-30 10:12:21

機器學習數據映射

2009-09-08 16:50:12

使用LINQ進行數據轉

2009-03-16 10:29:45

數據挖掘過濾器Access

2017-09-26 19:02:09

PythonInstagram數據分析

2023-08-15 16:20:42

Pandas數據分析

2022-06-24 09:58:35

大數據JavaPython

2009-07-16 14:46:48

jdbc statem
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区在线 | 91正在播放| 亚洲成人一二区 | 成人做爰www免费看视频网站 | av黄色在线播放 | 日韩三片 | 欧美日韩国产一区二区三区 | 国产精品一区二区三区在线 | 亚洲欧美激情国产综合久久久 | 日本三级网站在线 | 国产精品一区二区在线 | 青青激情网 | 麻豆精品国产91久久久久久 | 国产精品久久久久久av公交车 | 91中文字幕在线 | 免费影视在线观看 | 欧美在线一区二区三区 | 国产精品国产a级 | 久久久久久久久久久91 | 99久久久国产精品免费消防器 | 成年人视频在线免费观看 | 羞羞视频在线观看免费观看 | 嫩草研究影院 | 97伊人| 久久久久久免费看 | 久久久久一区二区 | 激情久久网 | 操操操操操 | 免费在线观看av的网站 | 亚洲一区综合 | 一区二区不卡视频 | 岛国av一区二区三区 | 日韩欧美一二三区 | 欧美激情一区二区三区 | 欧美在线不卡 | 亚洲精品免费在线 | 久久宗合色 | 欧美成人精品一区二区三区 | 欧美视频一区二区三区 | 成人福利视频网站 | 亚洲伊人久久综合 |