- 第一四分位数(Q1)と第三四分位数(Q3)を計算します。
- IQRを計算します。IQR = Q3 – Q1(データセットの中央50%の範囲)
- 下限値を Q1 – 1.5 * IQR、上限値を Q3 + 1.5 * IQR として定義。
- 下限値より小さい、または上限値より大きいデータを外れ値とみなし、これらを除外。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'data': [1, 2, 2, 3, 4, 10, 11, 12, 19, 20]
})
# 第一四分位数と第三四分位数を計算
Q1 = df['data'].quantile(0.25)
Q3 = df['data'].quantile(0.75)
IQR = Q3 - Q1
# 外れ値を除外
filtered_df = df.query('(@Q1 - 1.5 * @IQR <= data <= @Q3 + 1.5 * @IQR)')
print(filtered_df)
dataframeとseriesから四分位範囲(IQR)をもとにして外れ値を除外する関数
import pandas as pd
def remove_outliers_from_series(series: pd.Series) -> pd.Series:
Q1 = series.quantile(0.25)
Q3 = series.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 外れ値を除外したSeriesを返す
return series[(series >= lower_bound) & (series <= upper_bound)]
def remove_outliers_from_dataframe(df: pd.DataFrame, column_name: str) -> pd.DataFrame:
# 指定された列での第一四分位数と第三四分位数を計算
Q1 = df[column_name].quantile(0.25)
Q3 = df[column_name].quantile(0.75)
IQR = Q3 - Q1
# 外れ値の範囲を定義
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 外れ値を除外したDataFrameを返す
return df[(df[column_name] >= lower_bound) & (df[column_name] <= upper_bound)]
コメント