第10回全国高等学校情報教育研究会全国大会(東京大会)

ドリトル言語でのデータ処理機能の対応

大阪電気通信大学 兼宗進先生

今回の発表では、ドリトルのデータ処理機能についてお話ししたいと思います。前半は、次期学習指導要領の策定に関わらせていただく中で、現在の「情報の科学」のデータ活用に相当するものについてお話しします。後半は、次期学習指導要領の「情報II」にデータサイエンスが入るにあたってツールが必要ですが、ドリトル言語でできることは何かということをご紹介します。

 

次期学習指導要領の教科「情報」では、データ活用の内容があちこちに登場

まず下図が新課程のデータ活用についてまとめたものです。小・中・高のいろいろな場面でデータ活用を扱うようになり、数学でも統計が重視されるようになります。高校の共通教科「情報」でも統計的なデータ処理を学ぶようになるとされています。この表は、「情報 I」「情報 II」の4つの柱となる項目のうち、後半の2つを比較したものです。

情報Iには「(3)コンピュータとプログラミング」と「(4)情報通信ネットワークとデータの利用」という項目がありますが、この(4)で、「データの利用」というデータベースに関わる部分があります。

 

情報IIは選択履修で、ここに「(3)情報とデータサイエンス」が入ってきています。「(4)情報システムとプログラミング」では、情報システムをプログミングで作るということがイメージされていると思います。

 

情報IIのデータサイエンスで統計処理やデータ処理を扱うにあたり、それだけを独立して学ぶよりは、やはり情報Iと併せた方が良いのではないかと考えました。

 

理由としては、情報Iの中にはプログラミングやデータベースのデータ操作がありますし、アルゴリズムやシミュレーションにはExcel のような表計算ソフトを使ってデータをグラフ化するという操作が含まれます。そして、探索(サーチ)や整列(ソート)のような典型的なアルゴリズムは、まさにデータの集まりを扱っているという印象を持ったからです。

 

プログラミングでデータを扱う際の「落とし穴」はどこか

また、情報システムが実際どのように使われるかを考えると、サーバーに集まった多種多様な膨大なデータをつないで新たなサービスや解決策を生み出すということが、今後ますます重要になってきます。そのようなわけで、情報Iのプログラミングでデータの集まりを扱ってみてはどうかと考えました。その際、私も大学でC言語を教える工夫をしていますので、高校生が学習する際に難しい部分がどこかを考えてみました。

 

一つはこれです。

 

プログラムの学習では、「何が学習の本質で、何が本質ではないか」を区別することが大切です。本質でないことには、プログラムを記述する上での、使用する言語に特有の記述などが含まれます。

 

個人的には、常識的に使われている「配列」というデータ構造が、難しさを感じさせる諸悪の根源のひとつではないかと感じています。配列によってデータをまとめて扱うことは良いことですが、「1個目のデータは0」「2個目のデータは1」「3個目のデータは2」のように、値に番号を付けないとアクセスができないという難解さがあります。

 

C言語などのプログラムで「配列a」に入っている値を表示しようとすると、スライドの左側のように書くと思います。反復にfor文を使用し、iは最初は0から始まり、1ずつ増えていく。さらにaのi番目の要素へのアクセスも理解する必要があります。これらはとても難解で、多くの生徒が混乱してしまうと思います。

 

ソフトウェア開発の世界でも、昔は確かにこのやり方が使われていましたが、今はネットの開発などでプログラマーに使用されているのは、おそらく上図の右側に書いてある方法でしょう。

 

具体的には、「foreachを使い、aという配列から1個ずつ値を取り出してdという変数に入れる」ループを書きます。取り出した値はdという普通の変数に入っていますので、それをprintで表示することは簡単です。

 

このように、反復についても「for文を使い、iの値を0から少しずつ変化させて…」という難しいことを書く必要がなく、データの表示についても「a[i]のように配列のインデックスを生徒に意識させる」必要がないように、プログラムを書くことはできるわけです。

 

教えたいことは「アルゴリズム」であって、「for文」や「配列のインデックス」ではありません。この例のように本来の手続きを簡単に書けるようにしてあげることで初めて、生徒が「(Cの文法ではなく)プログラムを学ぶ」ことや「プログラムを使ってアルゴリズムを自分で書く」ことの学習が可能になるのではないかと思います。

 

同様に、配列aにたくさんデータが入っていて、値が3以下のものだけを配列にコピーしたいというような場合を考えると、いわゆる「探索」や「選択」の操作になります。

 

プログラムで書くと左のようになりますが、これを情報IやIIの中で高校生に教えるのは難しいと思います。そこで、先程と同様にaからデータを1個ずつ取り出して比較し、もし条件に当てはまっていれば配列bにそのデータを加える、という形で読みやすくしたのが、図の右側になります。

 

ですから、ぜひ右側のような手法で書ける言語を教科書でも採用すべきと考えています。もちろん既存言語やJavaScriptなどでも構いませんが、このような配列を拡張したライブラリを教育用に提供することは可能ですので、その提供の仕方を工夫していく必要があるわけです。

 

プログラムが書けても意味のない数字の操作では面白くない!

さらに、配列に値が入っている時に、「〇〇以上のものを取り出す」という時には、先ほどのようにプログラムを書くことができます。

しかし、取り出したい値が生徒の成績である場合、例えば80点以上の人を抽出するのであれば、その人の生徒番号や氏名も知りたいと考えるのが普通です。しかし、1次元配列だとそれが不可能ですから、実用性という点ではあまり役には立ちません。

 

では、2次元配列ではどうでしょうか。2次元配列の場合、整数型の配列だとすると、2次元にした時にも全部の値が整数でなければならないという制約があります。これを無理にやろうとすると、構造体の配列などの難しい話になってしまうので、ぜひExcelなどの表計算ソフトのような形のデータフレームを扱えるようにしたいところです。

 

情報I、情報IIの授業を行うにあたっては、「最初からインストールされているソフト以外のものも用意してください」という要求も声を大にして伝えていく必要があります。そうでないと、最初からコンピュータに入っている表計算ソフトやブラウザを使うだけでは、このようなデータは扱えないのではないかと思います。

 

次に、プログラムの中で選択や結合などのデータベース的な操作を行うことも有用です。先ほどの表計算のデータであれば、テーブルのaとテーブルのcを結合し、新しいテーブルを作る、といったものです。そういったことを可能にして、面白い授業ができるようにしていきたいと思います。

 

データサイエンスの素材にも一長一短がある

次に、情報IIのデータサイエンスを見てみましょう。

 

今もデータサイエンスやビッグデータという言葉が日常的に飛び交っていて、注目を浴びています。そこで、何らか意味のある学習につなげていきたいと考えています。

 

私の共同研究者の白井先生が、データサイエンスの素材としてよく使われるものの長所・短所をまとめてくださいました。順に見ていきます。

 

Excelのような表計算ソフトは、思い通りに操作ができる点で、個人で利用する分には有効なツールだと思います。しかし、大学で教えた経験では、初めのうちは大丈夫でも、「メニューをクリックするとプルダウンが出てくるからここをクリックして…」と説明しても、理解が遅れる学生に対応するのは難しい印象があります。かといって操作をすべて図示すると量が多くなってしまい現実的ではありません。

 

他には、大学の研究室や統計分析の専門家が使うツールとしてRが有名ですし、医学系の先生方はSPSSを使うことが多いかなと思います。ただし、これらも高価だったり難易度が高かったりするなどの課題があります。

 


ドリトルではデータサイエンスをどのように扱うか

さて、そこで、私が電気通信大学の久野靖先生と共同で開発しているドリトルという言語をご紹介します。自分で作ったものですから、好きなように改造することができるため、今回どのように改造したかをお話します。

 

ドリトルのホームページはこちら

 

初めにドリトルの簡単なご紹介をします。ホームページからダウンロードでき、Windows版、Mac版、ラズベリーパイ(Raspberry Pi)で動くものなどがあります。また、お試し開発版というのもあり、ブラウザ上ですぐに扱えます。ただし、ユーザー登録がないかわりに、データの保存はできません。自分で最後に作ったものをコピーしてご自分のメモ帳などに保存する形になります。

 

また授業で使う際には、私たちにメールでご連絡いただければ、授業番号を発行します。BitArrowというシステム上で高校生が授業でプログラムを実行すると、それがサーバーに登録され、先生方が一覧したり、評価をしたりできるシステムになっています。

 

また、パソコンで作ってパソコンのブラウザで実行する以外に、スマートフォンで実行する機能もあります。さらに、様々なセンサーを扱うことができるので、スマートフォンの傾きでゲームコントローラーのプログラムを作るといったプログラムを作成できます。

 

このドリトルで、プログラムの中でデータ処理をするための試作を行いました。考え方としては、ドリトルの場合には、ファイルから読み込んだ表形式のデータに対して、例えば文字の一部を置き換え、その結果に対してほかの文字を連携するといった感じで、処理を次々とつなげて書いていけるようにしました。

 

それは、実はデータ処理、つまりある処理をしたその結果を、次の処理に回すという流れを作るのにとても整合性が良いのです。

 

データ操作が簡単な命令で可能に

例えば、表計算のソフトから出したデータファイルがあれば、そこからテーブルオブジェクトという表形式のものをメモリー中に作ります。ここでは「成績」という名前を付けています。

 

その「成績」に対して、「成績の表をクラスをキーにして小さい順に並べ替えなさい」という命令を送ります。さらに、今度は「クラスと国語の成績に関して箱ひげグラフを引きなさい」という指示を出すと、そのテーブルオブジェクトが自分自身を並べ替えて画面表示し、グラフを表示します。これらは、さほど難しいものではないだろうと考えています。

 

データベースを入れたものはこちらです。コンビニの商品一覧のテーブルがあり、こちらにはいつ売れたといった情報は入っていません。一方、売上のテーブルはまた別にあって、その二つを一緒にすると、どの商品がいつ誰に売れたという意味のあるデータに変化します。こういった処理を、データベースの学習と、データ処理の学習としてつなげてできるのではないかと考えています。

 

個人的には、先生側から得た架空の売上データだけでなく、できれば自分たちで計測したり、作り出した測定データを使用してデータ処理を学んでみてほしいです。例えば、以前ある高校では、教室に温度計を置いて、自分たちが帰宅した後の教室の温度はどのように変化するのかといったデータを取って分析に使うという授業を行っていました。

 

このように、いろいろな生のデータを使うというのはとてもスリリングで楽しいと感じています。こういった形で使えるようなデータ分析機能を現在も開発していますが、まだ統計関数が足りないと感じています。先生方が授業で使うにあたってご要望があれば、ぜひ伺いたいと思います。

 

カメから脱け出してデータサイエンスの新たな扉を開く

今後の課題ですが、データを読み込んで操作するだけでなく、一部手直しをしたいと思う時に、画面上で表計算のような画面を出して即座にデータ操作ができるようにしたり、インストール版だけでなくブラウザで動くものにしたり、データを扱う際に当然かもしれませんが、CSVファイルに対応してExcel等の表計算ソフトにも出力できるようにしたいと考えています。やはり、グラフが表示されると嬉しいですよね。


これまではドリトルをずっと「タートルグラフィックスの言語」としてご紹介してきましたが、今後はカメやネコから抜け出して、新たな一歩を踏み出すことができたらと思っています。

 

質疑応答

Q1(高校教員):ドリトルとサクセスとの関係はどうなるでしょうか。

 

兼宗先生:今回ご紹介したものとは別に、サクセスというデータベース学習ツールを公開しています。ドリトルにもデータ処理の機能を入れますが、データベースを学ぶには操作の結果を表で確認できるサクセスは便利だと思います。

 

Q2(高校教員):先ほど先生がお話しされたデータ処理機能はどこで公開されているのでしょうか。

 

兼宗先生:ドリトルのサイトからドリトルをダウンロードすることができます。今後リリースするバージョンで「データ処理ライブラリ」を提供する予定になっています(→2017年12月23日公開しました)。

 

ドリトルのダウンロードはこちらから 

 

 

Q3(高校教員):前半のお話で、「配列を扱わない」という辺りは非常に興味深かったです。こうなったら、いっそデータベースでSQLが入ったプログラムを標準にしてしまえば早いのではないかなと思いました。

 

兼宗先生:実は開発にあたっていろいろな試行錯誤をしています。高校生にSQLを手軽にブラウザ上で書いてもらうツールを作って実践してみたりしましたが、SQLは独自の言語なので、他の言語との整合性が今一つというところがありました。

 

Q4(高校教員):自分は商業科から来ているで、長年ずっと思っているのですが、教材の実習用のデータが、現実味の少ないものであったり、扱えるデータ数が少なかったりします。データをどうやって扱うかということを、学ぶ時に使えるちょっとしたデータの素材がどこにあるか、ということが示されている方がよいのではないかと思います。

 

兼宗先生:まさにその通りだと思います。政府が統計サイトで各種統計情報を公開しています。ただ、それが授業の素材として扱えるようなきれいな形のデータになっていないのは問題のように思います。

ライセンス的に二次利用してよいのであれば、普通のデータベースで使えるようにテキストファイルに整形して、皆で共有するということができればよいと思います。

 

もう一つは、データをネットから直接取り込んで使える仕組みは有用と思っています。あとは、SQLの授業をした時に、自分で好きなコンビニの商品を入力する実習をしたところ、その生徒の集中力が各段に違いました。ですから、今先生が言われたように、データは本当に大事という実感があります。

 

司会:補足にはなりますが、サクセスの方にはサンプルデータベースが付いていまして、生徒に実習させると「おー」っていうぐらい、データ数や内容が充実しています。こちらもお試しになるとよいと思います。