演習課題「IQRの算出」
右のコードエリアではスキルチェックの提出データが読み込まれています。submissionsにおける"time"列について、IQRを算出して表示してください(ノートブック上で表示されていれば、print()で出力する必要はありません)。採点の前にはすべてのセルを実行し、ノートブックを保存してください。
ヒント:IQRは(第3四分位数 - 第1四分位数)で求められます。
#07:外れ値の除去
このチャプターでは、問題データや提出データの統計的な特徴を、外れ値を除去したうえで再び調べます。
import pandas as pd
import seaborn as sns
problems = pd.read_csv("csv/problems.csv")
submissions = pd.read_csv("csv/submissions.csv")
problems.columns = ["problem_name", "rank", "difficulty"]
submissions.columns = ["problem_name", "bytes", "score", "language", "time"]
submissions = submissions.dropna()
accepted = submissions.query("score == 100")
prob_diff = problems.loc[:, ["problem_name", "difficulty"]]
accepted_with_diff = pd.merge(accepted, prob_diff)
- IQR = 第3四分位数 - 第1四分位数
- データの散らばり具合の尺度となる
def remove_outliers(data, col):
q1 = data[col].quantile(0.25)
q3 = data[col].quantile(0.75)
iqr = q3 - q1
return data.query(f"@q1 - 1.5 * @iqr < {col} < @q3 + 1.5 * @iqr")
accepted_with_diff_gb_lang = accepted_with_diff.groupby("language")
for lang, data in accepted_with_diff_gb_lang:
modified_data = remove_outliers(data, "bytes")
corr = modified_data["bytes"].corr(modified_data["difficulty"])
print(f"{lang}: {corr}")