Step 2 クイズ:PandasとNumPyでデータを操作しよう
Pandasの基本操作、データ操作、欠損値処理、結合と変形について理解度を確認しましょう。
Q1. df.groupby('category')['amount'].agg(['sum', 'mean']) の結果として正しいのはどれか?
A. categoryごとのamountの合計と平均を持つDataFrame B. amount全体の合計と平均を持つSeries C. categoryのユニーク値一覧 D. エラーが発生する
答えを見る
正解:A. categoryごとのamountの合計と平均を持つDataFrame
groupbyでcategoryごとにグループ化し、aggで複数の集計関数を適用しています。結果は、インデックスがcategory、カラムがsum・meanのDataFrameになります。
Q2. 欠損値のパターンで「欠損が欠損値自体に依存する」のはどれか?
A. MCAR(完全にランダム) B. MAR(条件付きランダム) C. MNAR(ランダムでない) D. NA(該当なし)
答えを見る
正解:C. MNAR(ランダムでない)
MNAR(Missing Not At Random)は、欠損が欠損値自体に依存するパターンです。例えば「高所得者ほど所得を回答しない」場合、所得の欠損は所得の値自体に依存しています。MNARの場合、単純な削除や補完ではバイアスが生じるため、注意が必要です。
Q3. 以下のコードの結果、resultの行数はordersと比べてどうなる可能性があるか?
result = pd.merge(orders, customers, on='customer_id', how='left')
A. 必ずordersと同じ行数になる B. ordersより少なくなる可能性がある C. ordersと同じか多くなる可能性がある D. 必ずordersより多くなる
答えを見る
正解:C. ordersと同じか多くなる可能性がある
LEFT JOINでは左テーブル(orders)の全行が保持されます。customersのcustomer_idに重複がある場合、1つのorderレコードが複数のcustomerレコードと結合され、行数が増加します。customersのcustomer_idが一意であれば、ordersと同じ行数になります。結合後は必ず行数を確認しましょう。
Q4. 横持ちデータを縦持ちに変換するPandasの関数はどれか?
A. pd.pivot() B. pd.melt() C. pd.concat() D. pd.merge()
答えを見る
正解:B. pd.melt()
pd.melt()は横持ち(wide format)を縦持ち(long format/tidy data)に変換する関数です。逆の変換(縦持ち→横持ち)にはpd.pivot()やpd.pivot_table()を使います。分析やグラフ作成には縦持ちデータが適しているため、meltは頻繁に使用されます。
Q5. 歪んだ分布(右裾が長い)を持つ数値データの欠損値補完に最も適切なのはどれか?
A. 平均値で補完 B. 中央値で補完 C. 最頻値で補完 D. 0で補完
答えを見る
正解:B. 中央値で補完
歪んだ分布(例:売上金額のように右裾が長い分布)では、平均値が外れ値に引っ張られて大きくなります。中央値は外れ値に対して頑健(ロバスト)なため、歪んだ分布の代表値としてより適切です。最頻値はカテゴリカル変数向け、0で補完するとデータの分布を歪めてしまいます。
結果
5問中何問正解できましたか?
| 正解数 | 評価 |
|---|---|
| 5問 | 完璧です!Step 3に進みましょう |
| 3-4問 | 良い理解度です。間違えた部分を復習しましょう |
| 1-2問 | Step 2のレッスンをもう一度確認しましょう |
| 0問 | Pandasの基礎から見直しましょう |
推定所要時間:30分