在數據挖掘中,前期數據預處理,會涉及到很多缺失值的處理問題。
現以python代碼實現為例,看如何具體處理的。
所需python包
from pandas import Series, DataFrame
import pandas as pd
尋找缺失值
def FindFeactureNAorValue(data, feacture_cols, axis=0, value = 'NA', prob_dropFct = 0.95):
'''
函數說明:尋找每一個特征有多少value值,默認為:缺失值,及所占比率
輸入:data——整個數據集,包括Index,target
feacture_cols——特征名
prob_dropFct——大于這個比例,就丟掉該特征
輸出:numValue——DataFrame index='feacture1', columns=['numnumValue', 'probnumValue']
dropFeacture_cols——要丟掉的特征列名
'''
#計算x中value值個數
def num_Value(x, value = 'NA'):
if value == 'NA':
return sum(x.isnull()) #尋找缺失值個數
else:
return sum(x == value) #尋找某個值value個數
numValue = data[feacture_cols].apply(num_Value, axis=axis,args=[value])
numValue = DataFrame(numValue, columns = ['numValue'])
nExample = data.shape[0]
probValue = map(lambda x: round(float(x)/nExample, 4), numValue['numValue'])
numValue['probValue'] = probValue
#尋找缺失值大于prob_dropFct的特征 m, , ,.
dropFeacture = numValue[numValue['probValue'] >= prob_dropFct]
dropFeacture_cols = list(dropFeacture.index)
return numValue,dropFeacture_cols
處理數值型特征缺失值
def FillNAorValueOfNum(data, numFct_cols, value = 'NA', replaceNA = 'mean'):
'''
函數說明:為數值變量填上缺失值,缺失值為特征均值,中位數,眾數
輸入:data——整個數據集,包括Index,target
numFct_cols——數值特征名
value ——'NA'或-1,-1也有可能為NA
replaceNA——'mean'、'mode'、'median'
輸出:newData——DataFrame 替換value值
'''
#用均值、眾數、中位數替換每一個特征缺失值或value值
def fillValue(x, value=-1, replaceNA='mean'):
if replaceNA == 'mean':
replaceValue = x.mean()
if replaceNA == 'mode':
x_mode = x.mode()
if len(x_mode) > 1:
replaceValue = x_mode[0]
else:
replaceValue = x_mode
if replaceNA == 'median':
replaceValue = x.median()
replaceValue = x.mean()
x[x == value] = replaceValue
return x
numData = data[numFct_cols]
if replaceNA == 'mean':
if value == 'NA':
newData = numData.fillna(numData.mean(),inplace=True)
else:
newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))
if replaceNA == 'mode':
if value == 'NA':
newData = numData.fillna(numData.mode(),inplace=True)
else:
newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))
if replaceNA == 'median':
if value == 'NA':
newData = numData.fillna(numData.median(),inplace=True)
else:
newData = numData.apply(fillValue, axis = 0, args=(value, replaceNA))
return newData
處理類別型特征缺失值
from sklearn.preprocessing import LabelEncoder
def FillNAofCat(data, feacture_cols):
'''
函數說明:為類別變量填上缺失值,認為缺失值是新的一類
輸入:data——整個數據集,包括Index,target
feacture_cols——特征名
輸出:catData——DataFrame 數值化后的類別特征樣本
'''
catData = data[feacture_cols]
catData = catData.fillna(value = -9999)
#創建分類特征的標簽編碼器 jiushi字符串轉化為數字
for var in feacture_cols:
number = LabelEncoder()
catData[var] = number.fit_transform(catData[var].astype('str'))
return catData
def CatToDummy(data, catfct_cols):
'''
函數說明:類別變量轉化為啞變量
輸入:data——整個數據集,包括Index,target
catfct_cols——類別特征名
輸出:dummyCatData——DataFrame
'''
catData = data[catfct_cols]
dummyCatData = pd.get_dummies(catData,columns=catfct_cols, sparse = True)
return dummyCatData
為每個特征缺失值標上標志位
def GetNewValueOfNAfeacture(data, feacture_cols):
'''
函數說明:為有缺失值的變量創建一個新的變量 對缺失值標志為1,否則為0
輸入:data——整個數據集,包括Index,target
feacture_cols——特征名
輸出:newData——DataFrame類型
'''
newData = data[feacture_cols]
for var in feacture_cols:
if newData[var].isnull().any() == True:
newData[var+'_NA'] = newData[var].isnull()*1
newData = newData.drop(feacture_cols,1)
return newData
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
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大咖簡介: 劉凱,CDA大咖匯特邀講師,DAMA中國分會理事,香港金管局特聘數據管理專家,擁有豐富的行業經驗。本文將從數據要素 ...
2025-04-22CDA持證人簡介 劉偉,美國 NAU 大學計算機信息技術碩士, CDA數據分析師三級持證人,現任職于江蘇寶應農商銀行數據治理崗。 學 ...
2025-04-21