データ解析を行う場合、外れ値を含んでいると相関係数などを求めたときにおかしな値が得られてしまうことがあります。今回はこの外れ値を含む行を取り除く関数を、pandasのdataframeを使用して紹介します。
参考:Pandas で四分位数を基準に外れ値を NaN で埋める
四分位範囲を基準に外れ値をNanで埋める関数
outlier_iqr.py
def outlier_iqr(df):
for i in range(len(df.columns)):
# 列を抽出する
col = df.iloc[:,i]
# 四分位数
q1 = col.describe()['25%']
q3 = col.describe()['75%']
iqr = q3 - q1 #四分位範囲
# 外れ値の基準点
outlier_min = q1 - (iqr) * 1.5
outlier_max = q3 + (iqr) * 1.5
# 範囲から外れている値を除く
col[col < outlier_min] = None
col[col > outlier_max] = None
return df
2σを基準に外れ値をNanで埋める関数
outlier_2s.py
def outlier_2s(df):
for i in range(len(df.columns)):
# 列を抽出する
col = df.iloc[:,i]
# 平均と標準偏差
average = np.mean(col)
sd = np.std(col)
# 外れ値の基準点
outlier_min = average - (sd) * 2
outlier_max = average + (sd) * 2
# 範囲から外れている値を除く
col[col < outlier_min] = None
col[col > outlier_max] = None
return df
あとはNanを含む行を以下のコードで消してください。
df.dropna(how='any', axis=0)
ちなみに列を消したい場合はaxis=1と指定してください。
#まとめ
今回は四分位範囲と2σを基準に外れ値を含む行を削除する方法を紹介させていただきました。
また、外れ値を取り除くのではなく、平均値や中央値などで穴埋めしたいという方もいらっしゃるかと思います。そんな方には以下のサイトが参考になるかと思いますので是非ご参照ください。
pandasで欠損値NaNを除外(削除)・置換(穴埋め)する