LESSON

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分