前提を疑う

学習指導要領改訂審議や教育情報化を推進する動きは,現在や今後の分析や社会的要請等を吟味して組み立てられます。

2030年に向けて「第4次産業革命」や「人工知能」の発展が加速していく世の中で生きる力を育成するとはどういうことなのか。「資質・能力」や「主体的・対話的で深い学び」が求められていると説かれたりします。

それらを実現するためにも,これからは「社会に開かれた教育課程」「カリキュラム・マネジメント」の考え方のもとで学校運営していかなければならないことも主張されています。

「情報活用能力」は「言語能力」とともに教科等を越えた全ての学習の基盤として育む資質・能力として挙げられています。必要なICT環境等の話は「「2020年代に向けた教育の情報化に関する懇談会」最終まとめ」が方向性を示しているとされています。

最終まとめではICT環境について,パソコン教室の整備から普通教室への端末整備という方向性のもと,「教員自身が授業内容や子供の姿に応じて自在にICTを活用しながら授業設計が行なえるようにする」ことが重要とされています。

その他にもさまざまな文書が登場したのが2016年でした。そうした文書に関する情報は様々なところで発信されています。それについては,このブログでもまたゆっくりと参照できればと思います。

そうした様々な文書に直接関係するわけではないのですが,昨年話題になった本を手にする機会があったので読んでみています。

ジェフリー・フェファー『悪いヤツほど出世する』(日本経済新聞社)
https://www.amazon.co.jp/dp/453232081X

もともとはリーダーシップ・ビジネススクール(リーダー教育産業)に対する懐疑から出発して,こうした教育産業が流布するリーダー像の「ウソ」を指摘する本です。「ウソ」を暴くというのは書籍の帯的な文句で,むしろリーダー神話(リーダーに必要とされる「謙虚さ」「自分らしさ」「誠実」「信頼」「思いやり」)に対する言葉面通りではない現実的な理解を事例や研究成果を踏まえて示していく内容になっています。つまり前提を疑ってみることがこの本の面白味です。

本を読みながら,上に掲げた様々なキーワードについても同様に前提を疑って考えたり,現実的な理解で考えた場合にどうなるのか,いろいろ考えを巡らしていました。

文部科学省が出してきた文書は,今回は特に,とても頭の回転が速い人たちが作成したものになっていて,整合性を崩さないよう言葉を上手に選んで継ぎ足してながら,ある意味で「全部盛り」なのです。

それを踏まえて,甘味な解説がたくさん書かれることになるのですが,そうした理想を現実的に適用していく場合には,理想と反したことを展開しなければならない場合があるというジレンマについては,途端に根性論的な話へと堕ちてしまいがちです。

そうした構図自体が悪で,変えなければならないと主張したいわけではありませんが,そうした現実がある中で,どうしたらよりマシになるのかを考えていくことが大事なのだろうなと思う次第です。

本自体は,会社経営分野の話なので,関心がないと面白くないのかも知れません。図書館か書店でパラパラと読んでみるくらいでいいのかも知れません。

初めてのプログラミング言語

実家の部屋を整理していましたら、『はじめて読む8086』(1987)と『はじめて読むMASM』(1988)が出てきました。マシン語(機械語)とそれに対応したアセンブリ言語の解説書です。基本図書といってもよい書籍です。

私自身も最初はBASICを雑誌や学習マンガで学んだ一人ですが、初めて開発したパブリックドメインソフト(PDS)はアセンブリ言語で作りました。MS-DOSに標準添付されていたのがMASMというアセンブラしかなかったからです。当時はシステムコールに興味があって、いろいろ技術書を買い込んでいたことを思い出します。

その後、比較的安価なTURBO-Cを手に入れて、C言語の世界へと入っていくことになります。それもPDS開発のためでした。

というわけで、私のプログラミングスキルは独学の好き勝手学習で身につけたものです。そのため、ちゃんとしたソフトウェア工学を学んだ人のようにプログラミング教育などを語ることはできません。

けれども、素人プログラマーなりにプログラミング教育についてはいろいろ考えていきたいと思います。

紅白歌合戦2016

明けましておめでとうございます。徳島文理大学の林向達です。今年は研究室ブログをもう少し緩く使って更新機会を増やそうと思います。というわけで、今回は昨年末の紅白歌合戦について。

この年末年始も帰省して、実家で過ごしていますが、大晦日の夜は特別なことがない限りテレビをつけています。そして、あれこれ迷いつつも、やはりNHK紅白歌合戦を映してます。

今回の紅白については、たとえば産経新聞がこんな記事を書いています。

「【紅白回顧】「謎の演出」「?」の連続だった第67回NHK紅白歌合戦 これでいいのか、国民的番組」(産経ニュース)

最後の勝敗結果も意外だったということや、随時行なっていたネット投票は意味が無かったのではないかということに批判的な声もあるようです。

私個人の感想は、今回の紅白には実験的な演出が散りばめられていて制作者の皆さん頑張ったな、というものです。もちろん不発ネタもたくさんあったと思います。

たぶんですが、今回の番組構成や内容は、狙って実験的だったというよりは、様々な条件上、そうせざるを得なかった結果なのだと思います。

紅白全体の構成については、あのグループが出演するのかしないのかがギリギリまで読めないことを想定して、かなり柔軟に変更できるようにしなければなりません。

それでいて、詰め込まなければならない要素には、それぞれ独自の調子や雰囲気を持ったものが多く(タモリ、マツコ、シン・ゴジラ、PPAP、恋ダンス等)、これらを活かしながら束ねるのはなかなか難しい話だったと思います。

願わくは全体を通して見て欲しいという制作者側の思いを下敷きに番組を具現化した時、一つのネタやってハイ次っ!ではなく、おそらく今回のように、いろいろな要素を同時並行させて進行する道を選んだのだと思います。

視聴者によるネット投票を毎回の合戦ごとに行なう方式にしたのも、リアルタイムに楽しんでもらおうという意図からだったと思います。

ただ、苦肉ながらも取り組んだこうした試みは、かなり綱渡り的なところも多かったと思います。

同時進行しているネタを細切れにして見せていくためには、お互いの絡み合いをうまく制御しないといけません。何事もなかったかのように振る舞うことでシチュエーション的な笑いを誘ったりすることもあれば、伏線を張るためにわざとらしい演技も必要とされました。リハーサルを繰り返されたのだろうとはいえ、極めてデリケートな積み木だったと思います。シュールだったという評価はそういう演出から来ているのだと思います。

ネット投票が最終得点に加えられなかったのは、不特定多数からの投票で懸念される一部の暴走投票を恐れたからではないかと思います。不正な方法を使って勝敗を左右されてないための選択だったのでしょうし、おそらく、制作者側としては、ネット投票の傾向と会場審査員やゲスト審査員の投票傾向は似ているはずなので、それほど問題ないだろうと思っていたのではないかと推察します。

けれども、現実にはネット投票の進捗とは裏腹な最終結果が出てしまい、制作者側も「やってしまった」と焦ったのだろうと思います。きっと、番組進行中に白組優勢の途中集計結果を見てしまえたことで、ゲスト審査員がバランスを取ろうと紅組に入れた投票が、最終結果に反映されたというのが真相じゃないかと思います。ネット投票や会場審査員の得票との重み関係(ボールの数等)をもっとよく説明しておくべきだったのでしょう。

思うに、今回の紅白歌合戦は、全体を成立させるために頑張って制作されたものの、それがゆえに番組がいったん始まってしまうと、途中乗車するのが難しくなったのだと思います。

こんなことを書いた私自身も、番組を見始めたのは開始後30分ぐらい経過して、iPadで昨年インストール済みの紅白アプリを起動してから、「あ、始まってるのか」と気づいて、なんとなくチャンネルを合わせてからです。つまり、投票システムの説明も、ふるさと審査員の件等も分からないまま途中から視聴を始めました。

やはり最初は訳がわからなかったし、差し挟まれる小ネタの扱い方が雑にも見えたし、「?」なところはありました。今回はどんな演出で番組制作しているんだろうという見方をしなければ、楽しむには至らなかったかもしれません。

長く続いている番組をさらに続けることの難しさを改めて感じましたが、昨年末はいろいろな条件を抱え、実験的であったとしても、その挑戦の成果としてはまずまずだったのではないか。むしろ、番組としてちゃんとやり遂げられたことを考えれば、製作者や関係者の努力は素晴らしかったと思います。

謹賀新年2017

あけましておめでとうございます。

本年もりん研究室をよろしくお願いいたします。

 徳島文理大学
林向達

RでPISA2015

 PISA2015の「ICT活用調査」の分析記事が話題になっています。

  OECDのWebサイトには,各種報告書とともにデータファイルも統計ソフトファイルとして公開されていて,ダウンロードすれば自分で集計処理をすることが可能です。(集計概要は「Compendia」としてExcelファイルにまとめられています。)

 普通に詳細を検討するなら,概要ファイルをExcelで処理した方が楽だと思いますが,せっかくなので,Rという統計環境に挑戦することにしました。

 (追記20170114:「RでPISA2015〈その2〉」もご覧下さい)

 Rは,統計分析のためのプログラミング言語です。市販の統計ソフトが裏側で処理していることを利用者自身がプログラミングすることで,希望に応じた統計分析処理を行なわせることができるというわけです。その代わり,ボタン1つで処理させるような手軽さはないというのが敷居の高いところです。

 しかし,R言語とそのための環境を構成するソフトウェアは,オープンソフトウェアとして無償で公開されて,世界中の専門家が仕事で利活用している優れものです。研究を生業としているものとしては,一度はちゃんと触れておきたいソフトウェアです。

 取っ付き難さはあれど,導入手続は簡単です。

 1. Rをダウンロードする。 (たとえばこちらから https://cran.ism.ac.jp )

 2. RStudioをダウンロードする。 https://www.rstudio.com/products/RStudio/ 

 3. RとRStudioをインストールする。

 4. RStudioを起動する。

 これで,準備が出来ました。あとは,データファイルを読み込むなどして,統計処理を命令していきます。

 ちなみにRとRStudioですが,Rが言語命令を処理する本体ソフトウェアで,RStudioは操作のしやすい窓口(インターフェイス)を提供する統合環境ソフトです。

RStudio

 左上がプログラムを編集する場所,左下「コンソール」が実際に命令をする場所,右上にいろんなデータの一覧,右下がファイル一覧ですが,タブで切り替えるといろんな情報を表示できます。

 参考情報として三重大学の奥村先生による「PISA 2015データを読む(未完)」というWebページが貴重な入り口を示してくださっていますので,これをまず試してみましょう。

 初めてだと「取得から読み込みまで」の部分で音を上げそうですが,Rは標準で備わっている機能を命令で呼び出す以外にも,パッケージというものを足していくことで機能拡張させることが可能なので,PISAのデータファイルが他のソフト向けのものでも,該当するパッケージさえあれば読み込む機能を追加できます。そうやって読み込んでみるとPISAデータは結構メモリ食うねって話が書いてあります。

 しかし,ここではRStudioという統合環境ソフトを使うことにしたので,この辺をかなり楽にクリアできてしまいます。

 macOSであれば,PISAからダウンロードした圧縮ファイル(たとえば PUF_SPSS_COMBINED_CMB_STU_QQQ.zip)を展開して出来上がったファイル(Cy6_ms_cmb_stu_qqq.sav)を自分のホームディレクトリに移動させれば,RStudioのファイル一覧画面で確認することができます。これをダブルクリックなどして開こうと(インポートしようと)すると,必要なパッケージをダウンロードするか?と(英語で…)聞いてきますので,その指示に従って操作すれば読み込みに関しては完了してしまいます。

 上の画面写真の赤い矢印あたりにある「Pacakges」というタブで切り替えると,現在手元にあるパッケージ一覧と利用するかどうかのチェックマークが並んでいて確認できます。この一覧にないパッケージは「install」ボタンで探しに行ってダウンロードします。

 「PISA 2015データを読む(未完)」では,「data」という変数(オブジェクト)に読み込んだデータが格納されたのですが,RStudioを使って上記の方法をとると「Cy6_ms_cmb_stu_qqq」という名前になるんじゃないかなと思います。続く「回答の分析」の解説と命令はその部分を置き換えて,コンソール内で操作すればWebページ通りになると思います。

 さて,問題はここから先です。

 他の質問に対する回答集計や選択肢の異なる場合の処理など,どうやったらいろいろ見ることができるのでしょうか。できればExcelのようにグラフ作成したらパッと視覚的に確認できると嬉しい。

 しかし,Rに挑戦する場合には,パッと出るのを「自分でプログラミング」しなければなりませんから,R言語を使って試行錯誤することとなります。

  奥村先生のWebページが「(未完)」なのは,経験のある方でもそれなりに時間をかける仕事になるからで,さまざまな質問形式のPISAデータをRで読むとなると煩雑さはやむを得ないところです。

 というわけで,私も完成とまではいきませんが,少しチャレンジした成果を以下に載せておきたいと思います。R言語は初めてですので,各所のお知恵を拝借して組んでみた,とりあえず動いたというレベルです。Rプログラミングの参考にはなりませんが,とりあえずPISAデータをいじってみたいという皆さんの参考になればと思います。プログラムを編集する場所(左上)に貼り付けて実行してみてください。

 なお,このプログラムは学校質問紙「SC017Q07NA」という質問のグラフを描くものです。質問番号やファイルを変えて改良してください。

# For PISA2015 rev2
# K.RIN

library(haven)
library(ggplot2)
library(plyr)
library(tidyverse)

#student_raw <- read_sav("~/Cy6_ms_cmb_stu_qqq.sav")
school_raw <- read_sav("~/Cy6_ms_cmb_sch_qqq.sav")

#質問文(手動で質問文をコピペ)
q_title <- "Is your school’s capacity to provide instruction hindered by any of the following issues?\n[SC017Q07NA] A lack of physical infrastructure\n (e.g.building, grounds, heating/cooling, lighting and acoustic systems)"
#回答選択肢(手動で設定のこと)
ans_limits <- c("1","2","3","4")
ans_labels <- c("まったく\nあてはまらない","どちらかといえば\nあてはまらない","どちらかといえば\nあてはまる","とてもよく\nあてはまる")
#ラベル
y_label <- "パーセント %"
x_label <- "国"
legend_label <- "回答"

#回答データ抽出(国別クロス集計)
tmp <- subset(school_raw, school_raw$SC017Q07NA != "NaN")
country_ans_table <- table(tmp$CNT,tmp$SC017Q07NA)
ftable(country_ans_table)

#縦長dfへ変換
country_ans_long <- tbl_df(country_ans_table)
#横長df版クロス表
country_ans_wide <- spread(country_ans_long, Var2, n)
#国別idづけ(いまのところ利用せず…)
country_ans_wide <- country_ans_wide %>% rownames_to_column('id')
#idを文字から数値へモード変換
mode(country_ans_wide$id) <- "integer"
#国別id付き縦長df
country_ans_long <- gather(country_ans_wide, answer,count,-id,-Var1)

#並べ替え(表示の関係で逆順に)
country_ans_long <- arrange(country_ans_long, desc(Var1), desc(answer))

#列名変更
colnames(country_ans_long) <- c("id", "CNT", "answer", "count")
#パーセント計算(グラフ描写用)
country_ict <- ddply(country_ans_long, "CNT", transform, percent = count / sum(count) * 100, 0.1)
#小数点以下1桁処理(ラベル表示用,合計が100%にならないことあり)
country_ict <- ddply(country_ict, "CNT", transform, percent_rounded = round_any(count / sum(count) * 100, 0.1))
#ラベル位置計算
country_ict <- ddply(country_ict, "CNT", transform, percent_label_y = cumsum(percent)-0.5*percent)
country_ict <- arrange(country_ict, desc(CNT), desc(answer))

#フォントファミリー設定
quartzFonts(HiraKaku = quartzFont(rep("HiraginoSans-W3", 4)))
par(family = "HiraKaku")

#グラフ描画
graph <- ggplot(country_ict, aes(x = CNT, y = percent, fill = factor(answer))) + geom_bar(stat = "identity", position='stack') + scale_color_manual(values = rainbow(7)) + theme_bw() + geom_text(aes(y = percent_label_y, label = percent_rounded), color = "white", size = 3) + scale_y_reverse(breaks = c(100.0,75.0,50.0,25.0,0.0), labels = c("0%","25%","50%","75%","100%")) + coord_flip(expand = FALSE) +
ggtitle(q_title) + scale_fill_discrete(limits = ans_limits, labels = ans_labels) + ylab(y_label) + xlab(x_label) + labs(fill = legend_label) + theme(legend.title = element_text(family = "HiraKaku", size = 10),plot.title = element_text(family = "HiraKaku", size = 10), legend.text = element_text(family = "HiraKaku", size = 7), axis.title = element_text(family = "HiraKaku", size = 9), axis.title.y = element_text(angle = 0, vjust = 0.5))

print(graph)

参考資料

PISA 2015データを読む(未完)」(奥村晴彦)
Rクックブック』(オライリー)
Rグラフィックスクックブック』(オライリー)
ggplot2 — きれいなグラフを簡単に合理的に」「tidyr — シンプルなデータ変形ツール」(Heavy Watal)
ggplot2 documentation」(Hadley Wickham)
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」」(tera monagi)