導航:首頁 > 數據處理 > 日常中缺失值數據有哪些

日常中缺失值數據有哪些

發布時間:2023-12-04 12:00:50

❶ 不完美的數據有哪些數據

沒有完成的數據
很多同學經常會混淆不完全數據(imcomplete data)和缺失數據(missing data). 然而,不完全數據的概念遠遠廣於缺失數據.
1. 不完全數據(imcomplete data)的反義詞是完全數據(complete date). 可見,所有「不完全的數據」都叫做不完全數據. 不完全數據一般包括四類數據:截斷數據(truncated data),刪失數據(censored data),既截斷又刪失數據(truncated and censored data)以及缺失數據(missing data). 接下來,我將分別介紹每一種不完全數據,我將給出例子以及定義.
2. 截斷數據(truncated data). 在現實生活中,一般常見的是左截斷數據(left-truncated data). 偶爾,也會存在右截斷數據(right-truncated data). 在這里,我們只介紹左截斷數據,右截斷數據的定義類似. 左截斷數據分為兩種:第一,固定左截斷數據. 比如說,上海有一個黑馬會所,這個會所規定,只有大於18歲的會員才可以進入. 這樣的話,黑馬會所裡面所有會員的年齡age≥18,所有age<18的會員的資料都被剔除了(當然這些人不能入內). 從而,你在黑馬會所裡面看到的每一個會員(即觀察到的每一個樣本),都是age≥18的. 這就是我們所說的固定左截斷數據.
接下來看第二個例子,隨機左截斷數據. 我們還是討論黑馬會所裡面的會員. 假設黑馬會所一面的一部分會員感染了艾滋病,在病發的時候去了同濟附屬醫院. 由於艾滋病具有一定的潛伏期,所以不同的人發病的年齡可能不同. 有的人可能18歲就發病了,有的人可能50歲的時候發病. 因此,在同濟附屬醫院裡面就診的艾滋病病人,在他們確診之前的所有資料(即各項醫學檢查指標等)都是沒有的. 這就是我們常說的隨機左截斷數據.

❷ ​一文看懂數據清洗:缺失值、異常值和重復值的處理

作者:宋天龍

如需轉載請聯系華章 科技

數據缺失分為兩種:一種是 行記錄的缺失 ,這種情況又稱數據記錄丟失;另一種是 數據列值的缺失 ,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,資料庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字元串來代替,但空字元串絕對不同於缺失值。從對象的實體來看,空字元串是有實體的,實體為字元串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這里重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明了,直接刪除帶有缺失值的行記錄(整行刪除)或者列欄位(整列刪除),減少缺失數據記錄對總體數據的影響。 但丟棄意味著會消減數據特徵 ,以下任何一種場景都不宜採用該方法。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分布規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是, 我們承認缺失值的存在,並且把數據缺失也作為數據分布規律的一部分 ,將變數的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變數的實際值可以作為變數值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別欄位為例,很多資料庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變數的多個值分布狀態轉換為多個變數的真值分布狀態。

然後將這3列新的欄位作為輸入維度替換原來的1個欄位參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用, 很多模型對於缺失值有容忍度或靈活的處理方法 ,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網路和樸素貝葉斯、DBSCAN(基於密度的帶有雜訊的空間聚類)等。這些模型對於缺失值的處理思路是:

在數據建模前的數據歸約階段,有一種歸約的思路是 降維 ,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少欄位的值缺失數量有多少)的欄位對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的欄位或特徵的重要性判斷也是決定是否處理欄位缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分布佔比,以及缺失值是否具有顯著的無規律分布特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個欄位設置一個默認值。以MySQL為例,在設計資料庫表時,可通過default指定每個欄位的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有採集到數據,欄位的值應該為Null,雖然由於在建立庫表時設置了默認值會導致「缺失值」看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

異常數據是數據分布的常態,處於特定分布區域或范圍之外的數據通常會被定義為異常或「噪音」。產生數據「噪音」的原因很多,例如業務運營操作、數據採集問題、數據同步問題等。

對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:

大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

1. 異常值正常反映了業務運營結果

該場景是由業務部門的特定動作導致的數據分布異常,如果拋棄異常值將導致無法正確反饋業務結果。

例如:公司的A商品正常情況下日銷量為1000台左右。由於昨日舉行優惠促銷活動導致總銷量達到10000台,由於後端庫存備貨不足導致今日銷量又下降到100台。在這種情況下,10000台和100台都正確地反映了業務運營的結果,而非數據異常案例。

2. 異常檢測模型

異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。

異常檢測模型常用於客戶異常識別、信用卡欺詐、貸款審批識別、葯物變異識別、惡劣氣象預測、網路入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。

3. 包容異常值的數據建模

如果數據演算法和模型對異常值不敏感,那麼即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。

數據集中的重復值包括以下兩種情況:

去重是重復值處理的主要方法,主要目的是保留能顯示特徵的唯一數據記錄。但當遇到以下幾種情況時,請慎重(不建議)執行數據去重。

1. 重復的記錄用於分析演變規律

以變化維度表為例。例如在商品類別的維度表中,每個商品對應的同1個類別的值應該是唯一的,例如蘋果iPhone7屬於個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當所有商品類別的值重構或升級時(大多數情況下隨著公司的發展都會這么做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。

此時,我們在數據中使用Full join做跨重構時間點的類別匹配時,會發現蘋果iPhone7會同時匹配到個人電子消費品和手機數碼2條記錄。對於這種情況,需要根據具體業務需求處理。

2. 重復的記錄用於樣本不均衡處理

在開展分類數據建模工作時,樣本不均衡是影響分類模型效果的關鍵因素之一。解決分類方法的一種方法是對少數樣本類別做簡單過采樣,通過隨機過采樣,採取簡單復制樣本的策略來增加少數類樣本。

經過這種處理方式後,也會在數據記錄中產生相同記錄的多條數據。此時,我們不能對其中的重復值執行去重操作。

3. 重復的記錄用於檢測業務規則問題

對於以分析應用為主的數據集而言,存在重復記錄不會直接影響實際運營,畢竟數據集主要是用來做分析的。

但對於事務型的數據而言, 重復數據可能意味著重大運營規則問題 ,尤其當這些重復值出現在與企業經營中與金錢相關的業務場景時,例如:重復的訂單、重復的充值、重復的預約項、重復的出庫申請等。

這些重復的數據記錄通常是由於數據採集、存儲、驗證和審核機制的不完善等問題導致的,會直接反映到前台生產和運營系統。以重復訂單為例:

因此,這些問題必須在前期數據採集和存儲時就通過一定機制解決和避免。如果確實產生了此類問題,那麼數據工作者或運營工作者可以基於這些重復值來發現規則漏洞,並配合相關部門,最大限度地降低由此而帶來的運營風險。

本文摘編自《Python數據分析與數據化運營》(第2版),經出版方授權發布。

❸ 缺失值處理

 缺失數據 

1 缺失值的統計和刪除 

1.1 缺失信息的統計

缺失數據可以使用 isna 或 isnull (兩個函數沒有區別)來查看每個單元格是否缺失,通過和 sum 的組合可以計算出每列缺失值的比例。

如果想要查看某一列缺失或者非缺失的行,臘困信可以利用 Series 上的 isna 或者 notna 進行布爾索引。例如,查看身高缺失的行:

如果想要同時對幾個列,檢索出全部為缺失或者至少有一個缺失或者沒有缺失的行,可以使用 isna, notna 和any, all 的組合。例如,對身高、體重和轉系情況這 3 列分別進行這三種情況的檢索

1.2 缺失信息的刪除

數據處理中經常需要根據缺失值的大小、比例或其他特徵來進行行樣本或列特徵的刪除,pandas 中提供了dropna 函數來進行操作。

dropna 的主要參數為軸方向 axis (默認為 0,即刪除行)、刪除方式 how 、刪除的非缺失值個數閾值 thresh(非缺失值沒有達到這個數量的相應維度會被刪除)、備選的刪除子集 subset ,其中 how 主要有 any 和 all兩種參數可以選擇。

2 缺失值的填充和插值 

2.1 利用 fillna 進行填充 

在 fillna 中有三個參數是常用的:value, method, limit 。其中,value 為填充值,可以是標量,也可以是索引到元素的字輪輪典映射;method 為填充方法,有用前面的元素填充 ffill 和用後面的元素填充 bfill 兩種類型,limit 參數表示連續缺失值的最大填充次數。

2.2 插值函數 

在關於 interpolate 函數的 文檔 描述中,列舉了許多插值法,包括了大量 Scipy 中的方法。由於很多插值方法涉及到比較復尺禪雜的數學知識,因此這里只討論比較常用且簡單的三類情況,即線性插值、最近鄰插值和索引插值。

對於 interpolate 而言,除了插值方法(默認為 linear 線性插值)之外,有與 fillna 類似的兩個常用參數,一個是控制方向的 limit_direction ,另一個是控制最大連續缺失值插值個數的 limit 。其中,限制插值的方向默認為 forward ,這與 fillna 的 method 中的 ffill 是類似的,若想要後向限制插值或者雙向限制插值可以指定為 backward 或 both

關於 polynomial 和 spline 插值的注意事項

在 interpolate 中 如 果 選 用 polynomial 的 插 值 方 法, 它 內 部 調 用 的 是scipy.interpolate.interp1d(*,*,kind=order) , 這 個 函 數 內 部 調 用 的 是 make_interp_spline方法,因此其實是樣條插值而不是類似於 numpy 中的 polyfit 多項式擬合插值;而當選用 spline方法時,pandas 調用的是 scipy.interpolate.UnivariateSpline 而不是普通的樣條插值。這一部分的文檔描述比較混亂,而且這種參數的設計也是不合理的,當使用這兩類插值方法時,用戶一定要小心謹慎地根據自己的實際需求選取恰當的插值方法。

3 Nullable 類型

3.1 缺失記號及其缺陷

在 python 中的缺失值用 None 表示,該元素除了等於自己本身之外,與其他任何元素不相等:

在 numpy 中利用 np.nan 來表示缺失值,該元素除了不和其他任何元素相等之外,和自身的比較結果也返回False

值得注意的是,雖然在對缺失序列或表格的元素進行比較操作的時候,np.nan 的對應位置會返回 False ,但是在使用 equals 函數進行兩張表或兩個序列的相同性檢驗時,會自動跳過兩側表都是缺失值的位置,直接返回 True :

在時間序列的對象中,pandas 利用 pd.NaT 來指代缺失值,它的作用和 np.nan 是一致的

那麼為什麼要引入 pd.NaT 來表示時間對象中的缺失呢?仍然以 np.nan 的形式存放會有什麼問題?在 pandas中可以看到 object 類型的對象,而 object 是一種混雜對象類型,如果出現了多個類型的元素同時存儲在 Series中,它的類型就會變成 object

NaT 問題的根源來自於 np.nan 的本身是一種浮點類型,而如果浮點和時間類型混合存儲,如果不設計新的內置缺失類型來處理,就會變成含糊不清的 object 類型,這顯然是不希望看到的。

同時,由於 np.nan 的浮點性質,如果在一個整數的 Series 中出現缺失,那麼其類型會轉變為 float64 ;而如果在一個布爾類型的序列中出現缺失,那麼其類型就會轉為 object 而不是 bool

因此,在進入 1.0.0 版本後,pandas 嘗試設計了一種新的缺失類型 pd.NA 以及三種 Nullable 序列類型來應對這些缺陷,它們分別是 Int, boolean 和 string 。

3.2 Nullable 類型的性質

從字面意義上看 Nullable 就是可空的,言下之意就是序列類型不受缺失值的影響。例如,在上述三個 Nullable類型中存儲缺失值,都會轉為 pandas 內置的 pd.NA

在 Int 的序列中,返回的結果會盡可能地成為 Nullable 的類型

對於 boolean 類型的序列而言,其和 bool 序列的行為主要有兩點區別:

第一點是帶有缺失的布爾列表無法進行索引器中的選擇,而 boolean 會把缺失值看作 False

第二點是在進行邏輯運算時,bool 類型在缺失處返回的永遠是 False ,而 boolean 會根據邏輯運算是否能確定唯一結果來返回相應的值。那什麼叫能否確定唯一結果呢?舉個簡單例子:True | pd.NA 中無論缺失值為什麼值,必然返回 True ;False | pd.NA 中的結果會根據缺失值取值的不同而變化,此時返回 pd.NA ;False& pd.NA 中無論缺失值為什麼值,必然返回 False 。

3.3 缺失數據的計算和分組

當調用函數 sum, prob 使用加法和乘法的時候,缺失數據等價於被分別視作 0 和 1,即不改變原來的計算結果

當使用累計函數時,會自動跳過缺失值所處的位置:

當進行單個標量運算的時候,除了 np.nan ** 0 和 1 ** np.nan 這兩種情況為確定的值之外,所有運算結果全為缺失(pd.NA 的行為與此一致),並且 np.nan 在比較操作時一定返回 False ,而 pd.NA 返回 pd.NA

另外需要注意的是,diff, pct_change 這兩個函數雖然功能相似,但是對於缺失的處理不同,前者凡是參與缺失計算的部分全部設為了缺失值,而後者缺失值位置會被設為 0% 的變化率

對於一些函數而言,缺失可以作為一個類別處理,例如在 groupby, get_mmies 中可以設置相應的參數來進行增加缺失類別:

4 練習 

4.1 Ex1:缺失值與類別的相關性檢驗

.4.2 Ex2:用回歸模型解決分類問題

閱讀全文

與日常中缺失值數據有哪些相關的資料

熱點內容
季節性調整數據取多少 瀏覽:686
dd37交易成功什麼時候能提現 瀏覽:506
無錫母嬰信息管理系統花費多少 瀏覽:499
如何讓店員推廣本公司產品 瀏覽:58
洗護產品如何打堆頭 瀏覽:452
產品監測有哪些部門完成 瀏覽:709
墊江有哪些建材市場 瀏覽:593
有技術沒學歷怎麼進大公司 瀏覽:144
網戀摩羯座對象生氣了怎麼發信息 瀏覽:812
shinecloud怎麼交易 瀏覽:583
火車票開票信息如何查詢 瀏覽:171
如何做衣服代理 瀏覽:192
陌陌上收到的信息在哪裡 瀏覽:477
銀川交易市場在哪裡 瀏覽:783
如何保護數據信息 瀏覽:247
安居客交易經紀人怎麼弄 瀏覽:963
湘典檳榔來了代理得多少錢 瀏覽:271
ups市場如何 瀏覽:369
什麼地方可以做茶葉代理 瀏覽:218
機器人代理商是什麼 瀏覽:852