【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!
數據探索和預處理是任何數據科學或機器學習工作流中的重要步驟。在使用教程或訓練數據集時,可能會出現這樣的情況:這些數據集的設計方式使其易于使用,并使所涉及的算法能夠成功運行。然而,在現實世界中,數據是混亂的!它可能有錯誤的值、不正確的標簽,并且可能會丟失部分內容。
丟失數據可能是處理真實數據集時最常見的問題之一。數據丟失的原因很多,包括傳感器故障、數據過時、數據管理不當,甚至人為錯誤。丟失的數據可能以單個值、一個要素中的多個值或整個要素丟失的形式出現。
重要的是,在進行數據分析或機器學習之前,需要我們對缺失的數據進行適當的識別和處理。許多機器學習算法不能處理丟失的數據,需要刪除整行數據,其中只有一個丟失的值,或者用一個新值替換(插補)。
根據數據的來源,缺失值可以用不同的方式表示。最常見的是NaN(不是數字),但是,其他變體可以包括“NA”、“None”、“999”、“0”、“ ”、“-”。如果丟失的數據是由數據幀中的非NaN表示的,那么應該使用np.NaN將其轉換為NaN,如下所示。
df.replace('',?np.NaN)missingno 庫
Missingno 是一個優秀且簡單易用的 Python 庫,它提供了一系列可視化,以了解數據幀中缺失數據的存在和分布。這可以是條形圖、矩陣圖、熱圖或樹狀圖的形式。
從這些圖中,我們可以確定缺失值發生的位置、缺失的程度以及是否有缺失值相互關聯。通常,缺失的值可能被視為沒有貢獻任何信息,但如果仔細分析,可能有潛在的故事。
missingno庫可以使用pip命令安裝:
pip?install?missingno數據集
在本教程中,我們將使用 Xeek and FORCE 2020舉辦的機器學習競賽中公開可用數據集的一個子集。競賽的目的是根據現有的標記數據預測巖性。數據集包括來自挪威海的118口井。
這些數據包含了測井儀器采集的一系列電測量數據。測量結果用于描述地下地質特征和確定合適的油氣藏。本文的數據和筆記本可以在 GitHub 中找到
https://github.com/andymcdgeo/missingno_tutorial導入庫和加載數據
該過程的第一步是導入庫。在本文中,我們將使用 pandas 來加載和存儲我們的數據,并使用 missingno 來可視化數據完整性。
將pandas導入為 pd
import?pandas?as?pd import?missingno?as?msno df?=?pd.read_csv('xeek_train_subset.csv')Pandas 快速分析
在使用 missingno 庫之前,pandas庫中有一些特性可以讓我們初步了解丟失了多少數據。
第一種是使用.descripe()方法。這將返回一個表,其中包含有關數據幀的匯總統計信息,例如平均值、最大值和最小值。在表的頂部是一個名為counts的行。在下面的示例中,我們可以看到數據幀中的每個特性都有不同的計數。這提供了并非所有值都存在的初始指示。
我們可以進一步使用.info()方法。這將返回數據幀的摘要以及非空值的計數。
從上面的例子中我們可以看出,我們對數據的狀態和數據丟失的程度有了更簡明的總結。
我們可以使用的另一種快速方法是:
df.isna().sum()這將返回數據幀中包含了多少缺失值的摘要。isna()部分檢測dataframe中缺少的值,并為dataframe中的每個元素返回一個布爾值。sum()部分對真值的數目求和。
此行返回以下信息從這個總結中,我們可以看到許多列,即WELL、DEPTH、GROUP、GR 和 LITHOFACIES ?沒有空值。所有其他的都有大量不同程度的缺失值。
使用 missingno 識別缺失數據
在missingno庫中,有四種類型的圖用于可視化數據完整性:條形圖、矩陣圖、熱圖和樹狀圖。在識別缺失數據方面,每種方法都有自己的優勢。
讓我們依次看一下這些。
條形圖
條形圖提供了一個簡單的繪圖,其中每個條形圖表示數據幀中的一列。條形圖的高度表示該列的完整程度,即存在多少個非空值。它可以通過調用:
msno.bar(df)在繪圖的左側,y軸比例從0.0到1.0,其中1.0表示100%的數據完整性。如果條小于此值,則表示該列中缺少值。
在繪圖的右側,用索引值測量比例。右上角表示數據幀中的最大行數。
在繪圖的頂部,有一系列數字表示該列中非空值的總數。
在這個例子中,我們可以看到許多列(DTS、DCAL和RSHA)有大量的缺失值。其他列(如WELL、DEPTH_MD和GR)是完整的,并且具有最大的值數。
矩陣圖
如果使用深度相關數據或時間序列數據,矩陣圖是一個很好的工具。它為每一列提供顏色填充。有數據時,繪圖以灰色(或您選擇的顏色)顯示,沒有數據時,繪圖以白色顯示。
通過調用以下命令可以生成矩陣圖:
msno.matrix(df)如結果圖所示,DTS、DCAL和RSHA列顯示了大量缺失數據。這是在條形圖中確定的,但附加的好處是您可以「查看丟失的數據在數據框中的分布情況」。繪圖的右側是一個迷你圖,范圍從左側的0到右側數據框中的總列數。上圖為特寫鏡頭。當一行的每列中都有一個值時,該行將位于最右邊的位置。當該行中缺少的值開始增加時,該行將向左移動。
熱圖
熱圖用于確定不同列之間的零度相關性。換言之,它可以用來標識每一列之間是否存在空值關系。
接近正1的值表示一列中存在空值與另一列中存在空值相關。
接近負1的值表示一列中存在空值與另一列中存在空值是反相關的。換句話說,當一列中存在空值時,另一列中存在數據值,反之亦然。
接近0的值表示一列中的空值與另一列中的空值之間幾乎沒有關系。
有許多值顯示為<-1。這表明相關性非常接近100%負。
熱圖可由以下代碼生成:
msno.heatmap(df)在這里我們可以看到ROP柱與RHOB、NPHI和PEF柱呈輕微的負相關,與RSHA呈輕微的正相關。如果我們看一下DRHO,它的缺失與RHOB、NPHI和PEF列中的缺失值高度相關。
熱圖方法更適合于較小的數據集。
樹狀圖
樹狀圖提供了一個通過層次聚類生成的樹狀圖,并將空相關度很強的列分組在一起。
如果在零級將多個列組合在一起,則其中一列中是否存在空值與其他列中是否存在空值直接相關。樹中的列越分離,列之間關聯null值的可能性就越小。
樹狀圖可通過以下方式生成:
msno.dendrogram(df)在上面的樹狀圖中,我們可以看到我們有兩個不同的組。第一個是在右側(DTS、RSHA和DCAL),它們都具有高度的空值。第二列在左邊,其余的列比較完整。
LITHOFACIES, GR, GROUP, WELL, 和 DEPTH_MD 都歸為零,表明它們是完整的。
RDEP、Z?LOC、X?LOC和Y?LOC組合在一起,接近于零。RMED位于同一個較大的分支中,這表明該列中存在的一些缺失值可以與這四列相關聯。
摘要
在應用機器學習之前識別缺失是數據質量工作的一個關鍵組成部分。這可以通過使用missingno庫和一系列可視化來實現,以了解有多少缺失數據存在、發生在哪里,以及不同數據列之間缺失值的發生是如何關聯的。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10如何屏蔽删除电脑右下角的广告
- 下一篇: 搜狗输入法为什么按空格出字 搜狗输入法按