データ分析実践
上級問題チェック
問題 25 /40
次のpandasの記述に関して、正しい説明はどれか。
df = pd.DataFrame(
{'身長': [145, 155, 156, 164, 168, 170, 172, 176, 180, 199]})
df.assign(
身長_クリップ = df['身長'].clip(
lower = avg - 2 * sigma,
upper = avg + 2 * sigma))
*avgは平均、sigmaは標準偏差とする。
選択 1
assignメソッドはDataFrameに列を追加するが、「身長_クリップ」が文字列として指定されていないためエラーになる。
選択 2
clipメソッドは、lower引数とupper引数を同時に指定することはできない。
選択 3
clipメソッドは、下限値と上限値を超えたレコードを削除する。
選択 4
clipメソッドは、下限値と上限値を超えていない場合、値はそのままになる。
解説
選択肢4が正解です。
df = pd.DataFrame(
{'身長': [145, 155, 156, 164, 168, 170, 172, 176, 180, 199]})
▶︎
df.assign(
身長_クリップ = df['身長'].clip(
lower = avg - 2 * sigma,
upper = avg + 2 * sigma))
▶︎
【選択肢1】
assignメソッドはDataFrameに列を追加するが、「身長_クリップ」が文字列として指定されていないためエラーになる。
誤った説明です。
assingメソッドで追加する列の名前はキーワード引数で指定するため、「身長_クリップ = 〜」と指定します。「身長_クリップ」を「'身長_クリップ'」のように文字列で指定するとエラーになります。
【選択肢2】
clipメソッドは、lower引数とupper引数を同時に指定することはできない。
誤った説明です。
同時に指定することもできますし、片方だけ指定することもできます。
【選択肢3】
clipメソッドは、下限値と上限値を超えたレコードを削除する。
誤った説明です。
削除ではなく、lower引数とupper引数で指定した値で置き換えます。
問題文の場合、lowerとupperの値は以下となります。
avg = df['身長'].mean()
▶︎ 168.5
sigma = df['身長'].std()
▶︎ 15.072049186048547
lower = avg - 2 * sigma
▶︎ 138.3559016279029
upper = avg + 2 * sigma
▶︎ 198.6440983720971
問題文のデータの場合、インデックス0の値は145で、下限値(lower)を下回っていないため、145のままになります。
インデックス10の値は199で、上限値(upper)を上回っているため、上限値である198.644098に置き換わります。
【選択肢4】
clipメソッドは、下限値と上限値を超えていない場合、値はそのままになる。
正しい説明です。
問題文のデータの場合、インデックス0〜9は下限値〜上限値の範囲に収まっているため、値はそのままです(avgとsigmaがfloat64のため、「身長_クリップ」の列はfloat64になり小数点がつきます)。
(公式書籍 p.186)
df.assign(
身長_クリップ = df['身長'].clip(
lower = avg - 2 * sigma,
upper = avg + 2 * sigma))
▶︎
【選択肢1】
assignメソッドはDataFrameに列を追加するが、「身長_クリップ」が文字列として指定されていないためエラーになる。
誤った説明です。
assingメソッドで追加する列の名前はキーワード引数で指定するため、「身長_クリップ = 〜」と指定します。「身長_クリップ」を「'身長_クリップ'」のように文字列で指定するとエラーになります。
【選択肢2】
clipメソッドは、lower引数とupper引数を同時に指定することはできない。
誤った説明です。
同時に指定することもできますし、片方だけ指定することもできます。
【選択肢3】
clipメソッドは、下限値と上限値を超えたレコードを削除する。
誤った説明です。
削除ではなく、lower引数とupper引数で指定した値で置き換えます。
問題文の場合、lowerとupperの値は以下となります。
avg = df['身長'].mean()
▶︎ 168.5
sigma = df['身長'].std()
▶︎ 15.072049186048547
lower = avg - 2 * sigma
▶︎ 138.3559016279029
upper = avg + 2 * sigma
▶︎ 198.6440983720971
問題文のデータの場合、インデックス0の値は145で、下限値(lower)を下回っていないため、145のままになります。
インデックス10の値は199で、上限値(upper)を上回っているため、上限値である198.644098に置き換わります。
【選択肢4】
clipメソッドは、下限値と上限値を超えていない場合、値はそのままになる。
正しい説明です。
問題文のデータの場合、インデックス0〜9は下限値〜上限値の範囲に収まっているため、値はそのままです(avgとsigmaがfloat64のため、「身長_クリップ」の列はfloat64になり小数点がつきます)。
(公式書籍 p.186)