
【第22回】クロス集計-前編
今回はアンケート調査でよく用いられるクロス集計についてまとめます。
高等学校の情報Iの授業では、その意義の説明とともに、集計方法の実習をきちんと行いたいところです。
そこで悩むのが、集計に使う手法として何を選択するかです。次の3つが代表的なところです。
表計算ソフトのCOUNTIFS関数・複合参照
表計算ソフトのピボットテーブル
Pandasのcrosstabメソッド
正直に言うと、「どれも学んでもらいたい!でもそんな時間がない!」といったところです。
本記事では2回に分けてこれら3つの方法についてまとめ、最後に個人的な見解を述べたいと思います。
早速、具体例を使ってみてみましょう。
アンケート例
次のようなアンケートをある中学生・高校生合わせて500名を対象に行ったとします。
(1) あなたの校種を答えてください。
( )中学生 ( )高校生
(2) これまでにPythonを学んだ経験がありますか?
( )ある ( )ない
単純集計
これを設問ごとに集計を行ったのが単純集計です。
例えば、次のようにまとまります。
(1) 校種
中学生 200名(40%) 高校生 300名(60%)
(2) Pythonの経験
ある 150名(20%) ない 350名(80%)
これはこれで、全く意味がないわけではないのですが、私たちにとって気になるのは、中学生・高校生別のPythonを学んだことのある生徒の割合だと思われます。
クロス集計
そこで校種ごとにPythonを学んだことがあるかどうかを2×2の表で整理しましょう。

このような2つの質問項目の回答内容をかけ合わせ、回答者属性ごとの反応の違いを見るようなときに用いる集計方法をクロス集計といいます。
では、1件1件の回答データ(Googleフォームの回答スプレッドシートのようなデータ)をどのようにクロス集計したらよいのでしょうか。
方法1: COUNTIFS関数
まずは、表計算ソフトのCOUNTIFS関数を用いる方法です。
この関数の使い方は、次の通りです。
=COUNTIFS(検索範囲1, 検索条件1, 検索範囲2, 検索条件2)
これだけ見てても辛いので、早速具体例で見てみます。
列Aと列Bに500名分の回答データが入っており、クロス集計表をD2:H5に作成していきます。

まず、セルF3には「中学生」かつ「Python経験あり」の人数が入ります。
つまり、列Aが「中学生」で列Bが「あり」であるような行の数を数えるということになります。まとめると次の通りです。
検索範囲A2~A501から「中学生」(セルE3)に一致
検索範囲B2~B501から「あり」(セルF2)に一致
これより、セルF3に入力する関数は次のようになります。
=COUNTIFS(A2:A501, E3, B2:B501, F2)
さあ、これを下(F4)と右(G3)にコピーしてみましょう。
複合参照
これまでも見てきましたが数式中でセル番地をそのまま書きますと、コピー元の位置に合わせて数式が自動的に変わってくれます。
これを「相対参照」と言いました。
そこで、数式をどこにコピーしても参照するセルを変えないようにする参照方式である「絶対参照」を利用します。
これは、行番号と列番号の前に$(ドル)をつけてセル番地を記述したものでした。
ここでコピーによって変わって欲しいところと変わって欲しくないところを分けてみたいと思います。

そうすると、次のようにまとめられます。
A2:A501、B2:B501はすべて行・列ともに変わって欲しくない。
E3は列(E)は変わって欲しくないが、行(3)は変わって欲しい。
F2は列(F)は変わって欲しいが、行(2)は変わって欲しくない。

これらより、セルF3に入力する数式は最終的に、次のようになります。
=COUNTIFS($A$2:$A$501, $E3, $B$2:$B$501, F$2)
このような、行・列の一方を相対参照、他方を絶対参照にするような数式の参照方式を複合参照といいます。
ともあれ、これをセルF4、G3、G4にコピーして完成です。
ここまでのまとめ
複合参照は複雑で、数式の参照方式をじっくりと考える必要があり、学ぶ意義は大きいと考えています。
一方で、相対参照や絶対参照の理解があやふやな状況では、理解は難しいため、生徒の習熟度をよく確認しておく必要があります。
最初は掛け算九九の表を作成するなど、別の実習で慣れておくのも1つの方法なのかもしれません。
また、こちらの方法ではなく、次回記事のピボットテーブルやPythonを使う方法を考えるのも1つの方法かもしれません。
実際に高等学校で授業をされている先生方からご意見をお伺いできましたら幸いです。
最後までお読みいただき、ありがとうございました。