【Python】データマイニング分析とクリーニング - 欠損値処理方法のまとめ


この記事へのリンク: https://blog.csdn.net/weixin_47058355/article/details/128866686

序文

ネット上でデータクリーニングの方法を完全にまとめている人が少ないのを見かけましたが、ここ数年で覚えたばかりの色々な方法はちょっとごちゃごちゃしているので、自分でまとめてみると便利です自分自身のため、そして他の人を助けるため、みんなが間違いに気づいてくれることを願っています、コメント欄やプライベートメッセージでそれについて話し、お互いに話し合って学ぶことができます。

1. 欠損値の割合を表示する

欠損値を表示する一般的な方法は、欠損値の割合を計算することです。

queshi_bili=((data_train.isnull().sum())/data_train.shape[0]).sort_values(ascending=False).map(lambda x:"{:.2%}".format(x)) #queshibili是数据名 data_train是训练集数据
queshi_bili

ここに画像の説明を挿入

2 つ目は、describe() 関数を使用することです。

data_train.describe()

ここに画像の説明を挿入

2. 統計学に基づく欠損値処理手法

私は欠損値の処理方法を大きく2種類に分けており、1つは統計に基づいた埋め込み方法、もう1つは機械学習に基づいた埋め込み方法です。
フォローアップでは、data_train 内の他の現在のアセットの機能を例として取り上げます
ここに画像の説明を挿入

2.1 削除

欠損値の割合が大きい一部のデータは依然として削除する必要があり、欠損値の補充は予測と計算のために現在のデータにのみ基づいており、特定の誤差が存在します。ただし、データを入力しすぎるとエラーが発生するだけです。

del data['列名']

ここに画像の説明を挿入

割合に応じて削除します。ここでは 80% の割合に応じて削除します

t = int(0.8*data_train.shape[0]) # 确定删除的比例下,占数据多少
data_train_shanchu = data_train.dropna(thresh=t,axis=1)#保留至少有 t 个非空的列
data_train_shanchu

ここに画像の説明を挿入

2.2 固定値の入力

欠損値を指定された定数で埋める

data.fillna(0, inplace=True) # 填充 0 第一个参数控制填充的常数

ここに画像の説明を挿入

辞書形式で固定値を埋めることもできますが、与えられた辞書が十分に埋められていない場合は、値が欠落した状態のままになります。

data.fillna({
    
    0:1000, 1:100, 2:0, 4:5}) 

ここに画像の説明を挿入

2.3 中央値、平均値、モードの充填

これら 3 つの数値のコードは似ていますが、関数を別のものに変更するだけで済みます。写真は平均的な充填例です

data.fillna(data.mean(),inplace=True) # 填充均值
data.fillna(data.median(),inplace=True) # 填充中位数
data.fillna(data.mode(),inplace=True) # 填充众数

ここに画像の説明を挿入

2.4 値の充填前または後の補間による充填

補間法の原理は、欠損値データの上下のデータを足して2で割る、つまり平均をとることですが、欠点は前にも後ろにも値がない場合、 、欠損値はまだ存在します。

data = data.interpolate()#上下两个数据的均值进

ここに画像の説明を挿入

前後の値を埋める、欠損値の前または次のデータを埋める、欠点は補間方法と同じです。欠点は、前にも後ろにも値がない場合、欠損値はまだ存在します。(写真は例として前回の値を示しています)

data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值

ここに画像の説明を挿入

3. 機械学習に基づく欠損値の補完

欠損値を埋めるために使用される機械学習アルゴリズムは、精度の点では統計的手法よりも優れていますが、必要な相対的な計算能力と時間は統計的手法よりもはるかに大きくなります。
ここではコード実装のデモのみを示します。アルゴリズムの原理はご自身で検索してください。

3.1 knn アルゴリズムに基づく充填

from fancyimpute import KNN
data_train_knn = pd.DataFrame(KNN(k=6).fit_transform(data_train_shanchu)#这里的6是对周围6个数据进行欧式距离计算,得出缺失值的结果,可以自行调整
columns=data_train_shanchu.columns)
data_train_knn

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

3.2 ランダムフォレストに基づく塗りつぶし

欠損値を埋めるにはランダム フォレストを使用します。lightgbm や xgboost などの他の方法も可能です。ここではランダム フォレストを例として取り上げます。この操作では、
他の特徴をデータとして使用し、欠損データを埋めて欠損値を取得します。

from sklearn.ensemble import RandomForestRegressor
#利用随机森林树进行填补缺失值
train_data = train_data[['其他流动资产', '货币资金', '资产总计']]
df_notnull = train_data.loc[(train_data['其他流动资产'].notnull())]
df_isnull = train_data.loc[(train_data['其他流动资产'].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

ここに画像の説明を挿入

要約する

現時点ではこれらが一般的に使用されている欠損値処理方法ですが、将来的には他のデータ クリーニング方法も更新する予定です。有料コラムは設けませんが、皆様のお役に立てれば幸いです!

おすすめ

転載: blog.csdn.net/weixin_47058355/article/details/128866686