本文鏈接:https://blog.csdn.net/weixin_47058355/article/details/128866686
數(shù)據(jù)挖掘系列:
缺失值處理方法匯總
離散化方法匯總
離群點(異常值)處理方法匯總
標準化(數(shù)據(jù)歸一化)處理方法匯總
特征選擇(特征篩選)方法匯總
特征選擇篩選(降維)方法匯總
分類預測方法匯總
前言
看了下網(wǎng)絡上做完整的數(shù)據(jù)清洗方法總結的人不多,這幾年剛好學的各類方法都有點雜亂,因此自己做個總結,算是方便自己,也幫助別人,也希望大家看到錯誤,能在評論區(qū)或者私信說一下,互相探討學習一下。
一、查看缺失值比例
常見的查看缺失值方法,第一種計算缺失值比例
queshi_bili=((data_train.isnull().sum())/data_train.shape[0]).sort_values(ascending=False).map(lambda x:"{:.2%}".format(x)) #queshibili是數(shù)據(jù)名 data_train是訓練集數(shù)據(jù)
queshi_bili
第二種是使用describe()函數(shù)
data_train.describe()
二、基于統(tǒng)計的缺失值處理方法
缺失值的處理方法我一般分為兩種,一種是基于統(tǒng)計學的填補方法,另外一種是基于機器學習的填補方法。
后續(xù)以data_train當中的 其他流動資產(chǎn)這個特征為例
2.1 刪除
一些缺失值比例過大的數(shù)據(jù)還是需要將其刪除的,缺失值填補也僅僅只是基于當前數(shù)據(jù)進行預測,計算的,存在一定誤差。但填補的數(shù)據(jù)過多,反而只會帶來誤差。
del data['列名']
按照比例進行刪除,這里是按照80%的比例進行刪除
t = int(0.8*data_train.shape[0]) # 確定刪除的比例下,占數(shù)據(jù)多少
data_train_shanchu = data_train.dropna(thresh=t,axis=1)#保留至少有 t 個非空的列
data_train_shanchu
2.2 填充固定值
將缺失值都填充為給定常數(shù)
data.fillna(0, inplace=True) # 填充 0 第一個參數(shù)控制填充的常數(shù)
也可以通過字典的形式,進行固定值填充,所給字典不夠填充的,就還是處于缺失值狀態(tài)
data.fillna({0:1000, 1:100, 2:0, 4:5})
2.3 填充中位數(shù)、平均數(shù)、眾數(shù)
這三個數(shù)代碼相近,只需要將函數(shù)改為其他的即可。圖片是以平均數(shù)填充為例
data.fillna(data.mean(),inplace=True) # 填充均值
data.fillna(data.median(),inplace=True) # 填充中位數(shù)
data.fillna(data.mode(),inplace=True) # 填充眾數(shù)
2.4 插值法填充,前值或者后值填充
插值法原理是將缺失值的數(shù)據(jù)的上下兩個數(shù)據(jù)相加除以2,也就是取平均,缺點是如果前面沒有值和后面沒有值,都將會導致缺失值依然存在。
data = data.interpolate()#上下兩個數(shù)據(jù)的均值進
填充前面值或者后面值,填充缺失值的上一個數(shù)據(jù)或者下一個數(shù)據(jù),缺點與插值法相同,缺點是如果前面沒有值和后面沒有值,都將會導致缺失值依然存在。(圖片以前值為例)
data.fillna(method='pad', inplace=True) # 填充前一條數(shù)據(jù)的值,但是前一條也不一定有值
data.fillna(method='bfill', inplace=True) # 填充后一條數(shù)據(jù)的值,但是后一條也不一定有值
三、基于機器學習的缺失值填充
采用的機器學習算法對于缺失值進行填充,從精度上是優(yōu)于統(tǒng)計方法的填充,但是相對的需要付出的算力和時間是遠遠大于統(tǒng)計方法的。
這里僅僅對代碼實現(xiàn)作為一個演示,其中的算法原理,可以自行搜索。
3.1 基于knn算法進行填充
from fancyimpute import KNN
data_train_knn = pd.DataFrame(KNN(k=6).fit_transform(data_train_shanchu)#這里的6是對周圍6個數(shù)據(jù)進行歐式距離計算,得出缺失值的結果,可以自行調(diào)整
columns=data_train_shanchu.columns)
data_train_knn
3.2 基于隨機森林進行填充
使用隨機森林進行缺失值填補,其他像lightgbm,xgboost都是可行的,這里以隨機森林為例子
操作就是將其他特征作為數(shù)據(jù) 然后對缺失的數(shù)據(jù)進行填補,得到缺失值
from sklearn.ensemble import RandomForestRegressor
#利用隨機森林樹進行填補缺失值
train_data = train_data[['其他流動資產(chǎn)', '貨幣資金', '資產(chǎn)總計']]
df_notnull = train_data.loc[(train_data['其他流動資產(chǎn)'].notnull())]
df_isnull = train_data.loc[(train_data['其他流動資產(chǎn)'].isnull())]
X = df_notnull.values[:,1:]
Y = df_notnull.values[:,0]
# use RandomForestRegression to train data
RFR = RandomForestRegressor(n_estimators=1000, n_jobs=-1)
RFR.fit(X,Y)
predict = RFR.predict(df_isnull.values[:,1:])
predict
文章來源:http://www.zghlxwxcb.cn/news/detail-432040.html
總結
大概目前的話,常用的缺失值處理方法就這些,后續(xù)的話我會接著更新其他的數(shù)據(jù)清洗的方法。我就不設置付費專欄啦,希望對各位有幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-432040.html
到了這里,關于【python】數(shù)據(jù)挖掘分析清洗——缺失值處理方法匯總的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!