事例374
プログラム・データサイエンス・コンテンツ制作 3つの柱で学ぶ情報II
神奈川県立神奈川総合産業高校 大石智広先生

今回は、「情報Ⅱ」の2単位を通して、どのような内容で授業を行ったか、ということをお話しします。同じようなことで悩んでいる先生もいらっしゃると思いますので、参考になればと思います。
「情報Ⅱ」は、「プログラム」「データサイエンス」「コンテンツ制作」の3つの柱で行いました。
今回の目次です。最初に、どのような考えで年間指導計画を作ったか、というところを簡単にお話しします。
そして、柱の1つ目、2つ目、3つ目の内容を紹介して、最後に課題を挙げてまとめます。
私は、現在神奈川総合産業高校の情報科におります。現在DXハイスクール事業を手掛けており、以前にはリーディングDX生成AIパイロット校や神奈川県のICT利活用授業といった事業にも関わってまいりました。

生徒の学習や仕事の基盤になり、将来活用する可能性が高い「3つの柱」を決める
まず、背景として神奈川総合産業高校をご紹介します。単位制の総合産業科という、非常に珍しい学科です。学校設定科目が豊富で、工業や電気の科目などもあり、プログラムを学ぶ授業も多数あります。
ただし、どの科目を取るかは生徒によって違うため、履修を前提にはできないという事情があります。
また、単位制ですので、同じ「情報Ⅱ」の講座を、2年生と3年生が一緒に受講する場合もあります。本年度は、24人くらいの講座が2講座開講されました。
また、これも本校の特徴ですが、セメスター制を取っていて、半期で2単位を取るため、「情報Ⅱ」も週4時間の授業で、半期で終わることになります。そのため、授業研究の時間が通常の半分以下になり、急いで授業研究をしなければならない中で作った授業です。

私が2単位の指導計画を考える上での、基本的な考え方がこちらです。
まずは学習指導要領や教科書を見て感じたのは、結構難しい、ということでした。それをかなり広い範囲について学ぶので、広く薄く教えようとすると、どうしても先生が早口で説明するだけの授業になってしまって、生徒にとっては習得できるものが少ないか、習得することが非常に難しい授業になってしまうのではないかと感じました。
そこで、大事なポイントを見定めて、濃淡を付けることが大切ではないかと考えました。
そして「プログラム」「データサイエンス」そして「コンテンツ制作」という3つに絞り、これを柱にすることにしました。この3つとしたのは、今後の生徒の学習や、仕事をしていく上での基盤になり、将来活用する可能性が高い要素であると考えたからです。

第1の柱 プログラム~前半は基礎、後半はデータサイエンスにつなぐシミュレータのプログラムを作る
まず、第1の柱のプログラムの授業を説明します。
環境はGoogle Colaboratryを、言語はPythonを選択しました。
Pythonを使うのは、2つ目の柱としてデータサイエンスがあるので、そことつながりやすいからです。
先ほど、本校はプログラムを学ぶ科目がたくさんある、という話をしましたが、そういった科目を取っている生徒もいれば、「情報Ⅰ」しか取っていない生徒もいて、バックグラウンドにはかなり差があります。
そのため、プログラミングはほとんど初学に近い生徒もいるので、この授業で基本からやるしかない、と考えました。授業はグループワークで、生徒同士が基本事項の教え合うということにして、できるだけスキルの差を埋めるような設計にしました。そして目標としては、せっかく「情報Ⅱ」を取るのですから、少しはプログラムを書けるようになることとしました。

扱う題材は、後半は徐々にデータサイエンスの題材を入れていって、次の柱であるデータサイエンスにつながるようにしました。
授業の流れをざっくりと2つに分けるとすると、前半は変数や選択、繰り返し、関数、配列といった基本をやって、次にデータサイエンスにつながるように、Pythonを使ってグラフの書き方を学習しています。
後半はそれらを活用した何らかの問題解決を行うこととして、モンテカルロ法やガチャのシミュレータなど、統計的な要素のある題材を扱いました。その中で、プログラムを作るだけでなく、グラフ等を用いて分析や考察を行うようにさせて、データサイエンスにつながるようにしています。

こちらは、ガチャを扱った例です。ソーシャルゲームの開発者になったという設定で、確率100分の1のガチャの天井の回数を設定します。
天井というのは、何回までガチャを回したら必ず当たるという回数ですが、「マーケティング部から『天井に達するユーザを全体の10%にするように』という指示があったので、天井の回数を何回にしたらよいか、根拠を持って報告しなさい」という課題を提示しました。

これは、解析的にやっても解けますが、直感的に解くのは難しいので、シミュレーションで考えるのにぴったりの題材です。
流れとして、まず生徒に直感で予想させます。すると、60回から1000回とかいろいろな予想が出て来ます。
その後、Pythonでシミュレーションしよう、ということで、プログラムを作らせました。その結果をグラフで分析しよう、ということで、Pythonでグラフを作らせて、どんなグラフを使ったらよいか、ということを考えてもらいました。
そうすると、最初は折れ線グラフとか、棒グラフとかいろいろ出て来ますが、そのうちに、スライドの右側にあるように、累積ヒストグラムを使うと分かりやすいことがだんだんわかってきます。そういったことをグループワークで深めていって、レポートを書けるようになる、という流れにしています。
早く終わった生徒には、現実のガチャの確率と天井の回数を調べて、シミュレータをかけてみて、何%ぐらいが天井に行くように設定しているのか、それはゲームによって差があるのか、ということを調べて考察させました。
※クリックすると拡大します
第2の柱 データサイエンス~1つの題材やデータをもとに、ストーリー性がある授業を展開
次に、データサイエンスです。
ここでは、1つの題材やデータをもとに、ストーリー性があるような授業を展開したいと考えました。
ちょうど本校がある相模原には、サッカーチームがあるので、それを題材にすることにしました。
「皆の学校がある町には、SC相模原というサッカーチームがあるけど、J3なので知名度が低いよね。それを強くするために、皆でデータアナリストになって、データを使ってチームを強くしよう」と意識付けをします。

そして、J3の2年間のデータを、公式サイト(※1)やフットボールラボ(※2)などから取ってきて、このような形で整理しました。
この分析はPythonで行います。スプレッドシートから直接データを読んで分析できるようなコードを私の方で組んでおいて、生徒は分析だけができるような形にしています。
※1 https://data.j-league.or.jp/SFTP01/
※2 https://www.football-lab.jp/
※クリックすると拡大します
授業の流れがこちらです。

まず1つ目は、チームから「安定したストライカーを獲得したいので、いい選手を選んでくれ」という指令が来た、という設定です。
生徒には、3人の候補選手がいて、それぞれ何年に何点取ったというデータがある中で、どの人が安定したストライカーなのかを選ぶための指標を考えましょう、という課題を与えました。
例えば、ゴール数の平均や、最大、最小といったいろいろな基本統計量を使って考えます。数Bを学習している生徒もいるので、「分散を使えばいいんじゃないか」とか「四分位範囲がいいんじゃないか」という議論を進めてくれます。
それでは、実際何を使ったらよいのか、Pythonでプログラムを組んで計算して求めてみよう、ということで作業を進めて、「この場合は、分散がいいね」とか「四分位範囲がいいね」といったことを検討し、最終的に「こういった理由でこの選手を獲得すべきだ」というレポートを作るという授業です。
2つ目の「チームの得点が伸びたら、本当に勝ち点が伸びるのか」という課題については、後で詳しく説明しますが、得点と勝ち点の関係をグラフで表したり、相関係数を使って表したり、回帰分析まで行っています。
3つ目の「相関と因果関係」は、「相関関係が、因果関係を意味するわけではない」ということを、いろいろなデータをもとに理解します。サッカーと関係するところとしては、勝ち点と観客動員数を題材にして、相関と因果の関係を学びます。
最後の「そのサイコロは公平か?」は、城山高校の浅井雄大先生の授業(※3)にヒントをもらいました。歪んだサイコロを振って、サイコロが公平かどうか確かめることを、仮説検定を使って確認する授業です。
※3 https://www.wakuwaku-catch.net/jirei24320/
「得点が伸びたら本当に勝ち点は伸びるのか」をデータから検証する
この2つ目の、「得点が伸びたら本当に勝ち点は伸びるか」という課題について、詳しく説明します。
これは、チームから「守備コーチが、『ストライカーを獲得する』というチームの方針に文句をつけてきて、『得点よりも、失点しないことの方が重要ではないか。得点が伸びたら、本当に勝てるようになるのか。勝ち点が伸びるのか』と言っているので、得点と勝ち点の関係を表す視標やグラフがないか」と言ってきた、という設定で行っています。
ここまでに、生徒がPythonでいろいろなグラフを作れるようにしておいた状態で、どんなグラフで表現したらようかを考えさせます。最初は、折れ線グラフを作ってみて、これはどうもおかしい。そのうちに、散布図を使えばいい、ということが分かってきて、スライド右下のようなグラフを書けるようになります。
こうなってくると、相関係数というのがあったことを思い出してくれるので、あらためて相関係数についても復習することができます。
この課題では、実際にPythonを使ってグラフを書いて、相関係数を求めて、得点と勝ち点の関係についてどのようなことが言えるかを考察して、記述させることにしています。
※クリックすると拡大します
この生徒は、まず得点と勝ち点の相関係数が0.85で、強い正の相関があるので、得点と勝ち点には強い関係があると言える、ということを述べた上で、さらに失点と勝ち点の関係も調べて(これはプログラムをちょっといじると見られるようになっていますが)、その相関係数は、-0.58で、相関は中程度なので、失点よりも得点を増やすことが重要だということを述べていて、かなり説得力があることを書けています。

この課題では、実際のJ3のチームの生のデータを使っています。
J3についていえば、実際、得点のほうが重要であるということが言えると思います。その後、回帰分析についても解説して、「例の『安定したストライカー』を獲得したことで、得点が10点増えたら、勝ち点がいくつになるか」ということを予測しています。
この結果、得点が70まで伸びれば、勝ち点74になる、といった予測が出ることもここで理解できます。データサイエンスの授業は、このような感じで仮説検定まで行っています。
※クリックすると拡大します
第3の柱 コンテンツ制作~第1・第2の柱の学習を活かして、操作性のあるものを作る
3つ目の柱のコンテンツ制作です。
ここまで学習したプログラムとデータサイエンスの学習を生かしたいということと、どうせコンテンツを作るのであれば、何か操作できるものを作りたい、という思いがありました。
この2つを生かすために、アンケートと、それを分析するシステムを制作しようと考えました。これは神戸大学の西田健志先生のWebサイト(※4)を参考にさせていただきました。
※4 https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-02.html#basic

ここでは、前半でアンケート分析システムを制作します。どんな調査するか、ということを考えて、システムを作って、アンケートの収集まで行います。そして、最後にその結果に基づいてレポートを作成します。

授業の内容です。
アンケート収集分析システムは、Google Site、Webアプリ、Google Spread Sheet、データを分析するPythonのプログラムの4つの層から成っています。このアンケートの内容も、自分たちで考えます。作業は、4人1チームのグループワークで、1人が1層を担当します。

システムの構成がこちらです。黄色いところがGoogle Site、紫のところがWebアプリ、緑がSpread Sheet、水色がPythonです。
GoogleSiteは、一番外側のページの概要を整えるところです。
そこにGoogle Appsスクリプトで作ったWebアプリを埋め込みます。このアプリは、Google Spread Sheetに書いてある質問の文章を読み込んで、動的にHTMLで質問文を作成します。
さらに、「回答」というボタンを押すと、ユーザが回答した結果を、Google Spread Sheetに書き込む処理を行います。
Pythonは、Spread Sheetに書かれたユーザの回答結果を分析して、仮説検定や、基本統計量の計算を行い、有意か/有意ではないか、といったことを判定して、Spread Sheetに結果を書き込むという役割です。
この結果を、結果を表示するアプリが読み取って動的にWebページを制作し、それをまたGoogle Siteに埋め込んで表示する、という流れになっています。
※クリックすると拡大します
各層の担当には、それぞれ「○○マネージャー」というそれらしい役職名を付ける演出をしています。
分担については、役割と主に担当するシステム、それに必要なスキルを提示して、自分たちで決めさせています。
※クリックすると拡大します
できあがったシステムがこちらです。このチームは、ゲームのプレイ時間と評定平均の関係を調べています。いわゆるGoogle Siteの形ですが、ピンクの枠に囲まれた部分は、Webページが動的に作ったページになります。
ここにある「10時間未満」「10時間以上20時間未満」という選択肢はGoogle Spread Sheetに書いてあり、それを読み取って、動的に作ったHTMLがここに出ています。「回答送信」というボタンを押すと、その結果がまたGoogle Spread Sheetに書き込まれるという役割になっています。
※クリックすると拡大します
こちらが結果を表示するアプリです。この結果の部分も、Google Spread Sheetに書いてある有意水準やp値を読み取って、動的にWebページを作って表示します。
Pythonのプログラムが動いて、p値や検定結果が書き換わると、動的に生成されるページも変わるので、動的にこの内容も変わります。
※クリックすると拡大します
このような3本柱で授業を行ってみて感じたことですが、プログラムの単元にどうしても時間数がかかってしまいます。全体の3分の1を超えてしまっているので、もう少し短くできないか、と感じています。プログラムを書くことを諦めて、写経にするなどの改善が必要かもしれません。もしくは、もう少し効率よく書くことができるようにするための方策を考えようと思います。
仮にもしここが工夫できて、時間短縮ができたら、では次はどうするかということになります。この3本柱をより深くやるのか、それとも幅を取りに行って、3本柱ではなくて4本にする方法で考えるのか、といったところが悩みになります。
データサイエンスでも、今回は重回帰分析まで行けておらず、まだまだやりたいところもあるので、より深掘りしていくという方法もあるかとは思いますが、他にもやらなければいけないことがあるのではないか、とも感じていますので、今後考えていきたいと思っています。

神奈川県情報部会実践事例報告会2024オンライン オンデマンド発表より