Task-basedなレッスンにおける教員が与えるインプット

以前,タスク教材集が出ましたという記事を書きました。これに関連する話です。

この本では,タスクそのものをタイプ別に掲載してあります。一応そのままでも授業に使えるように,デフォルトの「レシピ」的なものは書いてあります。ただし,これを使って例えば大学の90分の授業を「真面目に」成立させようと思うと,タスクの前の活動(pre-task)とあとの活動(post-task),タスクの繰り返し(task repetition)等も考えないといけないのでひと手間かかります。今年は自分が担当する授業のうちの1つでこの本に掲載されているタスクでシラバスを作ってやろうと思っています。というわけで,掲載されているタスクをレッスンプラン的なものに落とし込むようなことをやっています。

そこで,私としては最も重要視したいと思っているのが「まずはインプットから」という大原則。学習者同士のやりとりがメインだとしたら,その前にインプットをたくさん与えたいわけです(もちろんメインがinput-taskでもその前にinputがほしい)。その際に重要になるのが,教師自身がinput providerになれるかどうかということだなと感じています。教員が教室内で話す(または書く)英語が,挨拶,”Open your textbook…”みたいな指示英語,repeat after meのモデルというだけではなく,いわゆるインプットの素材として,学習者が聞いたり読んだりする意味のあるものであることが非常に重要ではないかと思っています。そして,既製の音源ではなく教師がやれば,活動の幅がぐっと広がる上に,学習者のレベルに合わせてインプットを調整することもできるわけです。授業をやっていく上でこのことの利点を活かさない手はありません。学習者に描写させるのであれば,教師自身がまず描写してみせる,というように。これって言ってることは簡単なんですが,実際にはそれなりにchallengingであり,教員のスキル(英語そのもののスキルと指導のスキル)が要求されます。そこに自信がないのであれば,自分が達成する自信がないと思うような課題を学習者に与える教員てどうなの?ってなりますよね。そこはプライドを持って教員もトライしたいところです。ただ,そういう意味でいうと,task-basedなレッスンをやるのは敷居が高いと敬遠されてしまうのも理解できるかもしれないと思ったりしてしまいました。

英語の先生になると信じて疑わなかった学部生の自分に要求できるかというと,正直難しいなと思ってしまったことも事実です。学部3年で教育実習に行ったとき,英語で授業することに非常に苦労をして自分の英語力に絶望し(もともと英語が得意だと思っていたからこそ英語教員を目指そうと思ったのに),このままじゃ自分に自信がないからと教員採用試験を受けずに学部を卒業してから北米の大学院に行って英語教授法の修士号を取り,中学校で臨時任用教員として10ヶ月勤務し,そこからさらに博士課程に進学し,非常勤講師として専門学校や大学で英語を教えました。今の職場に来て今年で4年目です。それでも,まだまだ学習者にとってベストなインプットを与えられるような授業ができているかと問われると,まだまだ改善すべき点は多いなと毎週感じます。

実際に授業をやってみたリフレクションなんかの記事も今年度は更新していけたらいいなと思います。

なにをゆう たむらゆう。

おしまい。

J-SLA2020で共同発表します

Photo by Anna Tarazevich on Pexels.com

3月27-28日にオンライン開催される第20回 日本第二言語習得学会 国際年次大会(J-SLA2020)設立20周年記念大会で,共同研究の発表があります。

2020年度の終わりに,2020年度の初めての研究発表ということになりました。プログラム等の詳細は下記の大会のウェブページから閲覧できます。

第20回 日本第二言語習得学会 国際年次大会(J-SLA2020)設立20周年記念大会

発表の形式としては,発表自体はビデオ視聴で,質疑応答はzoomでリアルタイム実施ということになっています。参加するためには年会費の支払いが必要ですので,発表聞いてみようかなという方は会員登録をして頂く必要があります(参加費の徴収はありません)。

J-SLAはクレジットカードでの年会費納入もできます。詳しくは下記のページを御覧ください。2021年3月25日までに年会費を払わないと参加ができないようですので,ご注意ください。

入会・変更・問合わせ

私たちの発表は,27日の一番最終枠(17:10–17:45)で,17:10–17:30がビデオ視聴時間,7:30–17:45が質疑応答の時間となっています。

発表に関する情報は以下のとおりです。名古屋大学の後輩の寺井くんが第一著者の発表です。寺井くんは,彼がB4のときに,私個人あてに名大に進学を考えていると連絡してきたんですよね。それで,入学前に研究計画書を見たり,名古屋に彼が来て当時名大にいた他の院生と一緒に飲みに行ったりしたことがありました。残念ながら,私が関大に就職すると同時に名大の修士課程に入学したので,直接大学院で一緒だったわけではありません。ただ,それ以降も今回の発表メンバーの3人で毎週Skypeでゼミのようなことをやっていて,論文を読んだり,研究のアイデアを練ったりしていました。その中で出てきた研究のアイデアから生まれたのが今回の研究です。

正直言って寺井くんはまだまだ未熟なD生で,今回の研究発表に関してもアブストラクトも何回も修正のやりとりをしましたし,投影資料,発表のビデオについても何時間もかけて3人でやりとりしました。でも,彼は今後の名大を背負っていってほしい人材です(し実際に2022年度には彼が実質一番上になるはず)。学会発表や論文発表もいくつかしていると思いますが,J-SLAみたいな怖い人も結構来る学会での発表はないんじゃないかと思います。そういった意味でもここでしっかり発表をやりきってほしいなと(親心&プレッシャーをかける)。たくさんの方の参加をお待ちしています。よろしくお願いします。

タイトル

Learnability of L2 Collocation and L1 Activation in L2 Collocational Processing

発表者

Masato Terai (Nagoya University), Junya Fukuta (Chuo University), & Yu Tamura (Kansai University)

要旨

In the literature on L2 collocational processing, the influence of L1 activation has been subject to considerable discussion. Using an acceptability judgment task, this study assesses the effect of L1 activation in three different types of collocations: (a) English-only collocations that cannot be directly translated into Japanese (e.g., flat rate-??平らな割合), (b) congruent collocations (e.g., cold tea-冷たいお茶), (c) Japanized collocations (e.g., ??yellow voice-黄色い声援). The results indicated that L1 activation was evident regardless of both the proficiency level and the collocation types. The learners were more likely to accept collocations that they thought were easily translated into Japanese even for English-only collocations. Moreover, even highly-proficient Japanese learners of English did not properly reject the Japanized collocations, suggesting that those items are difficult to acquire without negative evidence that is not available in natural input.

自分の生い立ち

NHKテキストから出てるブルデューのディスタンクシオンの解説を読んだ。100分de名著シリーズ。こういう社会学の話を読むと,やっぱり自分という存在がどう作られたのかを振り返ることになる。

自分が若い時はそういう社会学的視点というか,メタ的な視点がないので,自分が育った環境についてあまり考えたことがなかったし,自分が環境の影響を受けているという視点を持ってなかった。でも,自分のハビトゥスはこうやって作られていったのだなと思う要因はたくさんある。

正直,小さい時は自分の家系のこともよくわからなかった。母方は祖母も祖父も学校の先生で,祖母が家庭科,祖父は社会科の先生だったと思う。祖父が先生だったのはよく知っていて,それは家に写真が飾られてあったりしたからだ。また,母の姉にあたる叔母も音楽の先生だった。はなれにピアノが置いてあったし,それはいつしか客間に置かれるようになって,それでたまに練習していた従妹は幼稚園の先生になった。

叔母の子どもである従兄姉とは歳が8つ?とかは離れていたけど昔からよく一緒に遊んだり旅行に行ったりしていた思い出もある。2人とも勉強がよくできて,埼玉県の進学校を出ていて,従兄の方は都内の国公立大学に進学して修士課程まで出ていたんじゃなかったかなと思う。理系だったので,大学に進学することが決まった時に入学に際してどんなパソコンを買ったらいいか相談に乗ってもらったのを今でも覚えている。

とまあ自分が教職を志すというか,少なくとも勉学に取り組む事に何らかの価値を置いて生きてきたのは,自分の選択ではなく,母方の親戚の影響が大きいのかもしれない。

最近までそうやって思っていたのだが,実は父方の,というか,父の影響も大きいということに最近になって気づいた。父方は商売人の家系で(といっても祖母の父だか祖父だかが東京に出てきて始めたくらいでそれより前のことはよく知らない),祖父母が始めたお店を父が継いで,街の小さな食堂をやっていた。お新香とお味噌汁とご飯に焼き魚とか,あるいはフライ,生姜焼きとか何かのメインのおかずが,キャベ千とからしの効いたマカロニサラダの載った皿に載って出てくるような。短冊に書かれたメニューがずらっと壁に貼ってあって,ホッピーのポスターやビールのポスターが貼ってあるような。ガラスケースの冷蔵庫には瓶のコーラやオレンジジュースが入っていて,たまに遊びに行ったら飲んでいた。厨房の裏には地下への急な階段があって,そこを下るとホシザキの冷凍庫があったと思う。

昼は定食屋で,夜は飲み屋のようにもなっていたので,父の帰りはいつも23時くらいだったと思う。自分が起きてる時に帰ってきたら,今日は暇だったのかなと心配したような気がする。昼の営業が終わってから夜の営業が始まるまでは父は家に帰ってきていて,多摩川にウォーキングしに行ったり,家で自重トレーニングをしたり,ダイニングテーブルで本や新聞を読んでたりしていたと思う。

そういう父の姿を見ていると,自宅でヨガをしたり筋トレしたり,神崎川沿いに走りに行く今の自分とダブる。でもそれだけではない。父は飲食店を営んでいたが,だからといって決して勉強することの価値を低くみるようなことはなかった。むしろ,そのことの価値を家族の中で最も高く見積もっていたのではないかと今になっては思う。驚くべきなのは,それでも私が父親に勉強をしろと言われた記憶がないからだ。

新聞を読めとは言われたことはあるような気がするし,新聞の切り抜きが自分の勉強机の上に定期的に置いてあったり,なんなら新聞の切り抜きをノートに貼り付けたものを渡されたこともあったかもしれない。でも,勉強しろとか,いい学校に行けとか,学歴が大事だなんて言われたことがなかったと思う。むしろそういうことを言うのは母親のイメージで,父親はあまり口うるさいタイプではなかった。そうやってバランスを取っていたのかもしれない。

でも背中を見せるではないけれど,行動としてそれを示してくれていたようにも思う。思い返してみれば,小学校の低学年の頃から,よく図書館に行っていた記憶もある。手提げ袋をもって,姉と一緒に図書館に行っていた。家でダラダラしていると,図書館にでも行ってきたらと母親に言われたような記憶もある。姉は昔から読書が好きで,私がまだ読むのが難しいような本を読んでは面白いと言っていて自分も負けじと挑戦するのだが難しくて内容がわからなかったみたいなこともあった気がする。

小学校の高学年の時だったか,姉の部屋にあった『おいしいコーヒーのいれ方』シリーズの小説を興味本位で読んだら,刺激が強すぎて頭が沸騰して眠れなくなったような記憶もある。そのまま自分の部屋の机の上に置いておいたら何も言わずに姉が没収していたと思う。

中学校と高校はとにかくバスケに明け暮れていて,自分から進んで本を読むなんてことはまったくといっていいほどしていなかったように思う。でも,それはとにかく自分の最優先がバスケがうまくなることだったからひたすら部活に精を出していたから本なんぞ読んでる暇がないというだけで,本なんか読んだってしょうがないということではなかったと思う。

話を戻そう。父は私が大学生の頃だったか,いきなりタイ語を勉強し始めた。もともと若い時にアメリカに語学留学した経験があって,多少は英語ができるのだが,それにしたって新しい言語,それも書記体系の全く異なるタイ語の勉強をするなんて。へー趣味ができてよかったねなんて思っていたが,そこから地道に勉強を重ね,現地の長期滞在も何度もするうちに「タイの看板はほぼ全部読めるようになった」と豪語するまでになった。すごすぎる。

私がアメリカに留学していた頃は東南アジアのバックパック旅行にハマっていて,アメリカで住んでたアパートに綺麗な写真と汚い字の絵葉書が定期的に届いていた。「今は〇〇にいて,□□から△△を経由して今度は◇◇に行きます」とか聞いたこともない地名が列挙されていて,Googleマップでいちいち調べていたような気がする。当時にもTwitterで,父が冒険家のような人生を生きてることを呟いていた気がする。

還暦を超えた今では体力的にしんどくなったことと,祖母の面倒を見ないといけないということで海外にはしばらく行ってないと思うが,それでもあくなき探究心というか,自分が知らない世界を見たい,もっといろんなことを知りたいという欲が滲み出ている人生を送っているように感じられるのは息子としても嬉しい。自分が育ってきた間,きっといろんなことを我慢して仕事して自分の好きなこともなかなかできなかったであろうから,こうして私も,そして姉も一人前のおとなとして生きている今は(自分の母親の心配をしないといけないというのはあるだろうけど)それでも自分の好きなような生きていって欲しいなと思う。

そういう父親の生き様みたいなものが,私の人生に与えた影響は無限大だろうし,母親とその親戚も含めて,私のハビトゥスをそこに感じずにはいられない。

教職を志したことについては,もちろん自分が受けた学校教育の影響もあるのは間違いない。小学校の高学年で自分のクラスの担任になった先生のインパクトはすごかった。なんでもできる,なんでも知ってる。話も面白いし,本当に好きな先生だった。こんな人になりたい,学校の先生になりたいと思ったのはそこからだと思う。現に,数年前に小学校の同窓会で集まった時,自分の思っていた以上に先生をやってる人が多くて驚いた。一般的にどれくらいなのかとかわからないし,地域的なものとかいろんな要因はあるだろうけれど,やっぱりあの先生(ともうひとクラスの先生もいい先生だったし人気だった)の影響はあったんじゃないだろうか。

中学校では,中三の時にお世話になった先生達のことをよく覚えている。私の通っていた中学校は,当時は市内ではまあ割と有名な荒れた学校だったので,いわゆる不良な生徒も多かったし,「ヤバい」奴も結構いた。中三になった時,学年団の先生が主任以外全員入れ替わるという前代未聞の配置換えで,他校から指導力のある先生が何人も来た。私は学級委員長をしていて,そのやんちゃな学年をまとめる役割を仰せつかっていたのだけれど,不良ともまあまあ仲が良かったので,立場上難しいこともあった。トイレでタバコを吸うことを注意しないといけないけれど,なかなか難しいだったりとか。

ある日,何かの時に教室に置いてあった自分のカバンがなくなり,担任の先生と探したらトイレの小便器の中に置いてあったというようなこともあった。あれ地味に結構きつかったな。でも,なんて言われたかは覚えてないけどその先生のことは信頼していて,味方でいてくれているのがわかったから乗り越えられたんだと思う。サバサバしてる人だったけど,めちゃくちゃ感謝してるからその先生の影響もある。

修学旅行の時も,持ってきてはいけない携帯持ってきてる奴がいるとか,自由行動で酒飲んでる奴がいるとかいうのがあって,そういうのも正義感で先生に報告してたらハブられるみたいな感じになった。まあ当然と言えば当然なんだが,友達として仲良くすることと,誰かがルールを破ることに対する責任感みたいなのが自分の中でぐっちゃぐちゃになって,夜に先生たちの部屋に呼び出されてもう辛いですって先生たちの前で号泣したの今でも覚えてる。主任の先生は英語科の先生で,その人が唯一一年生の時から見てくれてる先生だった。いわゆるオーラルイントロダクションをしてPPP型の授業をするいい先生で,新聞の見出しを解説するコーナーだったり,映画を見せてフレーズを解説するコーナーとかがあって授業も工夫されてる方だった。「一人で抱え込まなくていいんだぞ」ってその先生に言われてさらに涙が止まらなくなった。

中学を卒業して,高校に行って,3年の時だったかに中学校の進路イベントみたいなのに先輩として呼ばれて話すことになって久しぶりにお世話になった先生達に会ったのも嬉しかった。中3の時の担任の先生と,あともう一人キャラがめちゃくちゃ濃かった女性の体育の先生。修学旅行の実行委員会とかでお世話になった気がする。「次に田村に会う時は教採の面接練習かな?」みたいなこと言われた気がするんだけど,結局大学4年の時には教採は受けず,アメリカから帰ってきて受けた教採では面接練習もしてもらわずに2次で撃沈しちゃいました。もし練習してもらえてたら教採に受かって,今とは全く違う人生を歩んでいたかもしれない。

中学校の時のその修学旅行の実行委員会で,今でも覚えてる学びがあって,そういう先生や学校で過ごせて幸せだったなと今だから思うできごとがあった。ある時,修学旅行先の京都でのルール作りみたいなことをしていたときのこと。修学旅行中の班別自由行動では,昼食時をのぞいて,いわゆる食べ歩きみたいなことは禁止というのが基本線でした。お菓子を持っていくことも確かできなかったんじゃないかなと思う。そこで私は,京都でしか食べられないものもあるはずだし,そういうものを味わうことだって修学旅行の趣旨に反していないはずだから,節度を守っていれば昼食時以外にも例えば抹茶ソフトクリームとか食べたっていいんじゃないですかと言った。聞く人が聞いたら「昔からそういう性格なんだね」とか言われそうな発言だなと今は思う。そこで,その私の担任だった先生と,前述の女性の体育の先生に言われたのが,「自由には責任が伴うんだよ」ということだった。これを教わったことはその後の私の人生にものすごい影響を与えたと思うし,学校の生徒指導のほとんどの問題(は言い過ぎかもしれないが)ってこの一言に集約されるんじゃないかなと今は思う。当時の私にもビビッと響いて,何でもかんでもあれがいいこれがいいあーしたいこーしたいじゃだめで,自由を求めることはその結果生じたことに自分が責任を負うことなんだと学んだわけだ。まあ結果として,今考えたらこのことを重く受け止めすぎたからこそ,自由度をあげたことに対して生じた問題の責任を強く感じすぎて号泣するハメになったんだろうと思うのだが。

推敲せずに飲みながらiPhoneでダラダラ書き殴ったらまあまあな長さになったので,とりあえずここでやめて人知れず夜中に公開します。あとで読み直して消すかもしれないし,続きを加筆するかもしれないですけど。

なにをゆう たむらゆう。

おしまい。


2021.02.12 追記

途中から文体が「です・ます」になっていたり,主語に僕と私が混ざっていたり,「、」と「,」が混ざっていたりしたので直しました。

就活で「AIに代替されるぞ」って言われてぐうの音も出なくなってしまう外国語学部の学生さんへ

Photo by Markus Winkler on Pexels.com

はじめに

最初に断っておくと,私はまだ現在の勤務先である関西大学の外国語学部に着任して3年目で,なおかつ3, 4年次生の授業を担当したことがありません。よって,この記事で書くことは見聞きした話と想像だけで書いています(自分が直接就活している学生に聞いたわけでもなく,就活している学生の指導(授業担当)はしていません)。一応念頭に置いているのは自分の所属先の学生ですが,どんな外国語学部の学生さんにももしかすると参考になるかもしれません。いや,ならないかもしれません。

もう一つ断っておくと,私自身はいわゆる一般的な意味での企業への就職を目指した就職活動を経験したことがありません。採用の面接の経験というのは,教員採用試験時の面接と,現在の勤務先の採用面接のみです。よって,タイトルの「AIに代替されるぞ」も聞いただけの話(後述)です。

背景

先日(といっても結構前),弊学のキャリアセンターの方から,近年の就職状況の話みたいなのとともに,うちの学部生の就活に関する「ホンネ」というような話も聞きました。その中で,「語学をアピールしようとしても,『そんなのAIに代替されてしまう』と言われてしまう」(大意)みたいなのがありました。

これに対してのアプローチは私の中ではとりあえず2つあって,1つは語学×somethingのsomethingを就活の前までに身につけようというものです。やっぱり語学とあとなにか一つ自分の強みがあれば,そしてその掛け合わせを持っている人があまりいないのであれば,それは自分の強みになるし,需要もあると思います。ただ,今回はそちらの話はあまりしません。むしろ,「AIって言葉にビビらないように知識を持っておこう」という話です。

今回の記事では,外国語学部の学生とか,自分の語学力をアピールポイントにして就活をしようと考えている学生さんを念頭に書くので,AI(人工知能)というのも,画像認識とかよりも言語理解が関わるようなところにだけフォーカスします。

川添愛さんの本を読め

とりあえず,難しい専門書とかをいきなり読む必要はないかなと。まずはこの本を読んでおけば,AIのこととか,言語を理解することとはどういうことなのかというのが理解できると思います。同時に,いま現段階でのAIの限界点もわかってくると思うので,そうなれば「AIに代替されるぞ」なんて言われても,少しは反論(就活で反論していいのかは知らない)もできるかと思うのです。見た目が結構難しそうなのですが,かなり易しく書かれているので就活に臨む段階の学部生の知識レベルであれば問題なくついていけると思います。むしろ,後半部分の言語に関わる部分で理解が難しいと感じるならば,メタ言語的知識というか,言語学的な知識をつけることが必要かもしれません。

うちの学部に限って言えば,カリキュラム上1年生で語学のスキル系の授業を履修し,2年次に留学し,という感じで,どちらかというと「言語を使う」方を重視する傾向にありますが,言語に関する知識を持っているというのは,AIがこれからもっと精度があがっても重要となる知識だと思います(今のカリキュラムはそれはそれでいいところもあるし,現状2年になったときに留学に耐えられる英語力を身に着けさせようと思ったらやむを得ないところもあるので否定はしませんけども)。

あとは,以下の本(物語)も面白いです。

これを読むと,機械への命令(入力する言葉)がいかに重要か,そして機械は世の中の誰でもが使いこなせるものでもない(もちろん訓練すればできるようになるわけですけど)ということが理解できると思います。できれば,物語を読む中で王子の命令がうまくいかないのはなぜか,自分なりの答えを考えてから先に読み進めていってもらいたいなと思います。そういう思考訓練をすると,自分の言語の知識も再構築されるのではないでしょうか。そして,その知識は「AIに(簡単には)代替されないだろう」ということもわかると思います。

別に,私はAIについて楽観論というか,別に大したことないという意見を持っているわけではなくて,言語の理解ってめちゃくちゃ難しくて,まだまだ明らかにされていないことだらけなのだということを言っています。

そもそも,人間の言語に関わる謎って,めちゃくちゃいっぱいあるんですよ。もちろん,それが全部明らかにならないと人工知能がうまくいかないわけではないのですけど。でも今のディープラーニングの技術でいくのであれば,中身は人間にも理解できない仕組みで動くわけですから,エラーが起こったときの原因を突き止めたりできません。これは色んなところでも指摘されていることですね(上述の『ヒトの言葉・機械の言葉』の72-75ページとか)。

入力と出力の関係がわかってないということはつまり,出力がうまくいっているのかを人が判断しないといけない場面はどれだけディープラーニングを使った翻訳ソフトが発展してもなくならないということではないでしょうか。その判断ができるのは,言語の知識を持っている人に限られるわけで,その知識がある,と言えるのであれば,就活で脅されても対応できるのではないでしょうか。

おまけ

で,もう少しビジネス方面にも目を配っておこうとしたら,次の新書も読んだらどうでしょうか。

こちらの本はもっと人工知能の実装の部分の話も多いですが,基本的な理解の部分では『ヒトの言葉・機械の言葉』の第一章と重なる部分もあります。こういう話でもっと知識を得たいと思ったら,参考文献欄に載ってる本を読んでみたらいいのではないでしょうか。

おわりに

別にここで紹介した本を読んだら万事解決ってわけではないんですけど,AIって言われたら全知全能の神みたいな存在だと思ってしまってる人って採用側の人にもいたっておかしくないと思うのです。そのときに,怯まず冷静に会話できるくらいの知識はもっていてほしいなというのが私の願いですね。知識だけ知ってたって現場じゃ役に立たないぞとか言われるのかもしれないんですが,人工知能のことをよくわかってもいないのにAIのことを語る人のほうがよっぽど役に立たないんじゃないのかなとか思いますけどね。

この記事で言いたかったのは,新書レベルでも本を読んで知識を持っておくことは(それがある程度自分の専門である「言語」という部分にも関わるのであるからなおさら)大事ですよということが1つです。もう一つは,「言語のプロフェッショナル」という謳い文句を体現しようと思ったら,言語そのものについての知識(言語学的知識)も大事ですよということです。うちの学部でも言語学系の科目は開講されてますし,曜限があわないとかだったら文学部の授業に出させてもらうとかもありだと思いますよ。私も学部のときに,ゼミで扱ってた統語論の授業に興味を持って,違う学部の言語学の授業に出させてもらったことがありました。そこまで熱意をもってやるのは難しいなぁという方は,『ヒトの言葉・機械の言葉』だけでも読んでみてほしいなと思います。

なにをゆう たむらゆう。

おしまい。

活動の足し算と引き算

Photo by Pixabay on Pexels.com

はじめに

大学で使用されることを想定とした教科書を作るっていうのを考えたとき,必要最小限の核となる部分だけを提供して,あとは自由にやってくださいねっていうスタンス,つまり教師に足し算な考え方を要求する場合と,逆に盛り盛りにアクティビティを盛り込んで適宜飛ばしてくださいっていう引き算的な思考を要求する場合(注),どちらがいいんだろうなっていう話です。

足し算のメリット・デメリット

メインだけ決まっていてあとは自分で,という場合,当然ながら教師が考えることは多くなりますよね。事前にどういう活動をやるか,あるいは事後にどういう活動をやるか,みたいなことも含めて。これって自分の中にある程度こういう授業をやりたいみたいな軸があって,それに合わせて教科書を選ぶような人だったら授業をやりやすいでしょうね。今日のメインは唐揚げです!ってだけ言われたら,揚げ物に合わせてなんかさっぱり目の副菜作ろうかなとか,むしろ唐揚げをアレンジして酢鶏的なもの作ろうかなとか,そういうの考えるの好きな人だったり,自分が食べたいものがはっきりしている人だったらその考える過程も楽しめるでしょう。自由にできるというのはメリットです。一方で,考えたいけど考える時間はない,準備する時間もない,とにかくすぐにご飯を食べたい(食べさせたい)という人にとっては,献立が全部きっちり書いてあったり,あるいはもうすぐに食べられるようなお惣菜がある方が便利なわけですよね。つまり,同じことを別の角度から見たらデメリットにもなります。

「授業を考えることを放棄するなんて知らん!メニューくらい自分で考えろ!」と思う気持ちは一定程度理解する一方で,何校も非常勤掛け持ちしている先生だったり週に10-12コマとか教えている先生に支えられて成り立っている自分の勤務先の英語教育のことを考えたらそこまで突き放す気にもなれません(おそらく色んな所でも似たような状況なのではないでしょうか)。

引き算のメリット・デメリット

いろんな大学用教科書見てきていますけど,その多く,というかほぼすべてはどちらかというとこちらのスタンスなのではないかと思うことが多いです。こんな盛り盛りでいろんな活動が載っててこのユニット数あったら,どう頑張っても時間足りなくないですか?みたいな。私はどちらかというと自由度が高めであるほうが嬉しいタイプです。ところが,「どの教科書を選んでもとにかくてんこ盛り,なおかつ活動自体は別に面白くもなくてドリル的なものが多めでつまらなそう。」って思うことが多いです。そうなると,いわゆる素材というかテーマというか,扱っている内容が面白いものを選択することが多いです。それが面白ければ,あとはこっちでそれをもっと面白くするようなタスクに落とし込んで授業を考えればいいからです。そういう視点でみたら,わざわざ引き算するのめんどくさいからもう素材だけくださいってなります(教科書を使う縛りがなかったら使わないと思います)。

ただし,上述したように足りなくて足すよりは何も考えなくても教科書に載っている活動をやれば授業として成立するほうが嬉しいと思う方もたくさんいらっしゃるのでしょう。だからこそそういう教科書が売られていて,そういうのが売られているということはそれが売れるから,ということだと思いますし。あれもこれもついてきますみたいなのどんどん増えてきている気もしますもんね。オンラインで学習させられるとか,テストがついているとか。

おわりに

確かにありがたいのはありがたいと思うし,自分が作る教材だったりタスクだったりテストだったりがそんなに優れているのかと問われたらそこまで自信を持ってはいと答えられるわけではないのですが,一応英語教師としても飯食ってるわけですから,自分で授業を考えることだけはやめたくないなと個人的には思います。それを自分以外の人にどれだけ求めていいのか,というのが悩ましいと思っているところです。自由度が高すぎることを不親切だと思う人も絶対いると思うので。

でも,本当のところ,(一般的な意味での)ミニマリスト的教科書と活動が豊富に掲載されている教科書どちらがいいんでしょうね。というわけでアンケート置いてみました(初の試み)。Twitterでやったほうが回答集まりそうですけどねw

なにをゆう たむらゆう。

おしまい。


注:いや飛ばしてほしいと思ってないです。全部やってもらいたいと思っていますということで教科書作られているかもしれないですけどね。

【R】JSON形式で刺激リスト作成

はじめに

この記事では,よくある刺激のリストをJSON形式で保持するということをRを使ってやってみます。ただのデータフレームをJSON形式に変換するのはそれほど難しいことではありません。むしろ,Rを使わなくてもウェブ上で変換してくれるサービスがあります。
https://tableconvert.com/

こういうのを使うと,下記のようなテーブル形式のデータをcsvで持っていたとしたら,それをJSON形式に変換するのは一瞬です。

id name age gender
1 Roberta 39 M
2 Oliver 25 M
3 Shayna 18 F
4 Fechin 18 M
#JSON形式
[
    {"id":1,"name":"Roberta","age":39,"gender":"M"},
    {"id":2,"name":"Oliver","age":25,"gender":"M"},
    {"id":3,"name":"Shayna","age":18,"gender":"F"},
    {"id":4,"name":"Fechin","age":18,"gender":"M"}
]

問題の所在

じゃあ別にそのウェブサービスでいいじゃんということになるんですが,問題は少しこれより複雑です。というのも,私は今 jsPsychを使って実験ができるようにと勉強しています。jsPsychではJSON形式で刺激を読み込むのですが,その際に,データに階層性が必要になってくるようです。別に,反応の取得だけを目的とするなら必要ないのですが,のちのデータ分析を楽にすることを考えると,これは実験の前の段階でやっておきたいです1jsPsychのページでは以下のように例が示されています。

var test_stimuli = [
  { stimulus: "img/blue.png", data: {test_part: 'test', correct_response: 'f'}},
  { stimulus: "img/orange.png", data: {test_part: 'test', correct_response: 'j'}}
];

この例では,刺激として画像を提示するので,“stimulus”として画像ファイルが指定されています。そして,その後ろにdataという変数があって,要するに,実際に表示される刺激と,その刺激に付随する情報(正誤,刺激の種類等)が分かれていて,付随する情報は一つ階層が下のレベルに入っているということです。リストの中にリストがあるということですね。こうなると,ただのデータフレームからの変換というわけにはいかないので,先ほど紹介したようなウェブブラウザで変換というわけにもいきません。というわけで,Rを使って,できるだけ簡単にデータフレームから階層性のあるリストをゲットしましょう。というのが今回の目標です。実は,リスト->データフレームという話は,rlistパッケージ周りでやってる方が結構いらっしゃるようです(Googleで「rlist データフレーム 」と検索してみてください)。ところが,今回のようにデータフレーム->リストはあまり例が見つかりませんでした。ということでやってみましょう。結論から先にいうと,めちゃくちゃ単純でした。

1. データの準備

まずは,わかりやすい刺激リストの例として自分が最近実験で使った刺激リストを読み込みます。

dat<-read.csv("stimuli.csv")
head(dat)

一応,各列に何が入っているかを簡単にまとめると,以下のようになります。

  1. itemID: 刺激のID(かぶりがありますが,nonwordは分析から最初に外すのでとりあえずOK。ほんとは連番のがいいですけど)
  2. type: 刺激の種類
  3. word: ターゲットとなる英単語
  4. kana: 対応するカタカナ語
  5. pic: 提示する画像
  6. lang: 提示する言語
  7. prime: プライミング条件
  8. answer: 正答
  9. form: フォーム
  10. freq_J: カタカナ語の頻度
  11. freq_E: 英単語の頻度

この実験では,まずはじめに画像を提示して,参加者はその画像を見ます。画像を理解したら次に注視点が表示されます。その後に提示された文字列が実在語かどうかを判断する語彙性判断課題です。プライミングの条件がshare, spec, baseと3条件あります。さて,プログラム上では,

  1. 画像(pic)を提示
  2. 語(word)を提示

ということで,上で紹介した例と異なって,提示する刺激が2種類あります(ここでは,提示刺激は英単語のみとして進めます。カタカナ語の場合は英単語の部分をカタカナ語の列に置き換えれば良いと考えます)。つまり,

{ pic: "img/2_C_sh.jpg", word: "interview", data: {itemID: '2', kana: 'インタビュー', lang: 'eng', prime: 'share',answer: 'TRUE',form: 'A',freq_J: '29.5098', freq_E: '17.5744'}}

というのを読み込んだデータフレームのすべての行において作ることができれば成功となります。

2. パッケージの準備

とりあえず,これ入れとけばいいかなということでtidyverseパッケージと,最後にJSON形式に変換する際に使うjsonliteパッケージ。

install.packages("tidyverse")
install.packages("jsonlite")
library(tidyverse)
library(jsonlite)

3. データハンドリング

tibbleという比較的新しいデータ形式を使います。tidyrとかdplyrとか使うようになって,数年前からこのtibble形式がよく出てきてたんですが,私もいまいちよくわかってませんでした。というか,データフレームを扱うことがほとんどなので,データフレーム形式しか受け付けない関数にtibbleで出力された結果をうっかり渡してエラー吐くみたいなことが頻発したのでいちいちas.data.frame()でデータフレーム型に強制的に直すみたいなことをしてました。

ところが,今回みたいな階層性のある形については,tibble型が便利なようですね。tibbleでは,リスト型の列を持つことができるので,“data”の列に刺激の情報をまとめたリストを入れていけばいいということになります。そう考えて,次のようにやってみました。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list(dat[,c(1,2,4,6,7,8,9,10,11)])
)->dat2

ところが,これで中身を見てみると…

head(dat2)
## # A tibble: 6 x 3
##   pic         word        data             
##   <fct>       <fct>       <list>           
## 1 2_C_sh.jpg  interview   <df[,9] [48 × 9]>
## 2 3_C_sp.jpg  court       <df[,9] [48 × 9]>
## 3 6_C_sh.jpg  alien       <df[,9] [48 × 9]>
## 4 7_C_sp.jpg  appointment <df[,9] [48 × 9]>
## 5 10_C_sh.jpg stamp       <df[,9] [48 × 9]>
## 6 14_C_sh.jpg channel     <df[,9] [48 × 9]>
head(dat2$data,3)
## [[1]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA
## 
## [[2]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA
## 
## [[3]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA

このように,各行にすべての情報が入ってしまいます。よって,行ごとに入れることを考えないといけません。これを一発できれいにできたらかっこいいんですが,思いつかなかったので,とりあえずfor関数でi行目を取り出してtibbleに入れる,を繰り返すことにしました。まずは,dataのところがリスト型になるようにtibbleを作ります。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list()
)->dat3
head(dat3)

しかしここでもまた失敗。dataの列の長さがあってないと怒られてしまいます。これを解決するためにlistの中に空のリストを入れます(正直ここで入れる要素はなんでもOK)。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list(list())
)->dat3
dat3
## # A tibble: 48 x 3
##    pic         word        data      
##    <fct>       <fct>       <list>    
##  1 2_C_sh.jpg  interview   <list [0]>
##  2 3_C_sp.jpg  court       <list [0]>
##  3 6_C_sh.jpg  alien       <list [0]>
##  4 7_C_sp.jpg  appointment <list [0]>
##  5 10_C_sh.jpg stamp       <list [0]>
##  6 14_C_sh.jpg channel     <list [0]>
##  7 15_C_sp.jpg crawl       <list [0]>
##  8 18_C_sh.jpg sense       <list [0]>
##  9 19_C_sp.jpg bench       <list [0]>
## 10 22_C_sh.jpg promotion   <list [0]>
## # … with 38 more rows

できあがった dat3 という変数の“data”列に,pic( dat の5列目)とword( dat の3列目)を除いたものを1行目から順にとってきてlistにして,それを dat3 の“data”列に順番にいれていきます。

for (i in 1:length(dat3$pic)){
  dat3[i,3][[1]]<-list(dat[i,c(1,2,4,6,7,8,9,10,11)])
}
head(dat3)
## # A tibble: 6 x 3
##   pic         word        data            
##   <fct>       <fct>       <list>          
## 1 2_C_sh.jpg  interview   <df[,9] [1 × 9]>
## 2 3_C_sp.jpg  court       <df[,9] [1 × 9]>
## 3 6_C_sh.jpg  alien       <df[,9] [1 × 9]>
## 4 7_C_sp.jpg  appointment <df[,9] [1 × 9]>
## 5 10_C_sh.jpg stamp       <df[,9] [1 × 9]>
## 6 14_C_sh.jpg channel     <df[,9] [1 × 9]>

こうすると,できあがったtibbleのdata列には1行目から順に,interview, court,…の刺激の情報が入ることになります。確認のために見てみましょう。

dat3$data[[1]];dat3$data[[2]]
##   itemID   type         kana lang prime answer form  freq_J  freq_E
## 1      2 target インタビュー  eng share   TRUE    A 29.5098 17.5744
##   itemID   type   kana lang prime answer form   freq_J  freq_E
## 2      3 target コート  eng  spec   TRUE    A 100.7255 21.4056

ちゃんと入ってますね。最後に,このtibbleをJSON形式に変換すれば完成です。

toJSON(dat3)
## [{"pic":"2_C_sh.jpg","word":"interview","data":[{"itemID":2,"type":"target","kana":"インタビュー","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":29.5098,"freq_E":17.5744}]},{"pic":"3_C_sp.jpg","word":"court","data":[{"itemID":3,"type":"target","kana":"コート","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":100.7255,"freq_E":21.4056}]},{"pic":"6_C_sh.jpg","word":"alien","data":[{"itemID":6,"type":"target","kana":"エイリアン","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":17.4314,"freq_E":0.5272}]},{"pic":"7_C_sp.jpg","word":"appointment","data":[{"itemID":7,"type":"target","kana":"アポイントメント","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":30.5686,"freq_E":0.5272}]},{"pic":"10_C_sh.jpg","word":"stamp","data":[{"itemID":10,"type":"target","kana":"スタンプ","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":5.9216,"freq_E":3.3743}]},{"pic":"14_C_sh.jpg","word":"channel","data":[{"itemID":14,"type":"target","kana":"チャンネル","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":24.4118,"freq_E":20.8784}]},{"pic":"15_C_sp.jpg","word":"crawl","data":[{"itemID":15,"type":"target","kana":"クロール","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":12.0392,"freq_E":0.3163}]},{"pic":"18_C_sh.jpg","word":"sense","data":[{"itemID":18,"type":"target","kana":"センス","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":131.8039,"freq_E":11.7045}]},{"pic":"19_C_sp.jpg","word":"bench","data":[{"itemID":19,"type":"target","kana":"ベンチ","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":9.6667,"freq_E":13.9541}]},{"pic":"22_C_sh.jpg","word":"promotion","data":[{"itemID":22,"type":"target","kana":"プロモーション","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":10.9216,"freq_E":2.4253}]},{"pic":"23_C_sp.jpg","word":"tuna","data":[{"itemID":23,"type":"target","kana":"ツナ","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":8,"freq_E":5.202}]},{"pic":"1_C_b.jpg","word":"iron","data":[{"itemID":1,"type":"target","kana":"アイロン","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":17.9412,"freq_E":3.6555}]},{"pic":"4_C_b.jpg","word":"ground","data":[{"itemID":4,"type":"target","kana":"グラウンド","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":72.4706,"freq_E":9.2793}]},{"pic":"5_C_b.jpg","word":"address","data":[{"itemID":5,"type":"target","kana":"アドレス","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":52.2745,"freq_E":31.5284}]},{"pic":"8_C_b.jpg","word":"pressure","data":[{"itemID":8,"type":"target","kana":"プレッシャー","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":53.1176,"freq_E":5.7292}]},{"pic":"9_C_b.jpg","word":"propose","data":[{"itemID":9,"type":"target","kana":"プロポーズ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":13,"freq_E":2.2847}]},{"pic":"12_C_b.jpg","word":"volume","data":[{"itemID":12,"type":"target","kana":"ボリューム","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":6.9412,"freq_E":14.9382}]},{"pic":"13_C_b.jpg","word":"base","data":[{"itemID":13,"type":"target","kana":"ベース","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":35.3725,"freq_E":40.7726}]},{"pic":"16_C_b.jpg","word":"express","data":[{"itemID":16,"type":"target","kana":"エクスプレス","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":17.9216,"freq_E":2.5307}]},{"pic":"17_C_b.jpg","word":"stove","data":[{"itemID":17,"type":"target","kana":"ストーブ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":7.5882,"freq_E":3.5852}]},{"pic":"20_C_b.jpg","word":"recall","data":[{"itemID":20,"type":"target","kana":"リコール","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":19.6667,"freq_E":0.703}]},{"pic":"21_C_b.jpg","word":"letter","data":[{"itemID":21,"type":"target","kana":"レター","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":82.6078,"freq_E":3.55}]},{"pic":"24_C_b.jpg","word":"guts","data":[{"itemID":24,"type":"target","kana":"ガッツ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":23.7451,"freq_E":3.6906}]},{"pic":"25_C_b.jpg","word":"bike","data":[{"itemID":25,"type":"target","kana":"バイク","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":25.8824,"freq_E":13.8135}]},{"pic":"17_n.jpg","word":"dootlegging","data":[{"itemID":17,"type":"nonword","kana":"ドートレギング","lang":"eng","answer":false}]},{"pic":"18_n.jpg","word":"fistilled","data":[{"itemID":18,"type":"nonword","kana":"フィスティレド","lang":"eng","answer":false}]},{"pic":"19_n.jpg","word":"stonehende","data":[{"itemID":19,"type":"nonword","kana":"ストネヘンデ","lang":"eng","answer":false}]},{"pic":"20_n.jpg","word":"polidifies","data":[{"itemID":20,"type":"nonword","kana":"ポリディフィエス","lang":"eng","answer":false}]},{"pic":"21_n.jpg","word":"mestroyers","data":[{"itemID":21,"type":"nonword","kana":"メストレイヤーズ","lang":"eng","answer":false}]},{"pic":"22_n.jpg","word":"donsoon","data":[{"itemID":22,"type":"nonword","kana":"ドンスーン","lang":"eng","answer":false}]},{"pic":"23_n.jpg","word":"splum","data":[{"itemID":23,"type":"nonword","kana":"スプラム","lang":"eng","answer":false}]},{"pic":"24_n.jpg","word":"tisobedient","data":[{"itemID":24,"type":"nonword","kana":"ティソベディエント","lang":"eng","answer":false}]},{"pic":"25_n.jpg","word":"muin","data":[{"itemID":25,"type":"nonword","kana":"ムイン","lang":"eng","answer":false}]},{"pic":"26_n.jpg","word":"dothorme","data":[{"itemID":26,"type":"nonword","kana":"ドソーム","lang":"eng","answer":false}]},{"pic":"27_n.jpg","word":"hade","data":[{"itemID":27,"type":"nonword","kana":"ヘイド","lang":"eng","answer":false}]},{"pic":"28_n.jpg","word":"ontener","data":[{"itemID":28,"type":"nonword","kana":"オンテナー","lang":"eng","answer":false}]},{"pic":"29_n.jpg","word":"tansack","data":[{"itemID":29,"type":"nonword","kana":"タンサック","lang":"eng","answer":false}]},{"pic":"30_n.jpg","word":"frool","data":[{"itemID":30,"type":"nonword","kana":"フロール","lang":"eng","answer":false}]},{"pic":"31_n.jpg","word":"antihistamone","data":[{"itemID":31,"type":"nonword","kana":"アンチヒスタモーネ","lang":"eng","answer":false}]},{"pic":"32_n.jpg","word":"parracks","data":[{"itemID":32,"type":"nonword","kana":"パラックス","lang":"eng","answer":false}]},{"pic":"33_n.jpg","word":"hypnojist","data":[{"itemID":33,"type":"nonword","kana":"ハイプノジスト","lang":"eng","answer":false}]},{"pic":"34_n.jpg","word":"croilage","data":[{"itemID":34,"type":"nonword","kana":"クロリエイジ","lang":"eng","answer":false}]},{"pic":"35_n.jpg","word":"collapsos","data":[{"itemID":35,"type":"nonword","kana":"コラプソス","lang":"eng","answer":false}]},{"pic":"36_n.jpg","word":"bikina","data":[{"itemID":36,"type":"nonword","kana":"ビキナ","lang":"eng","answer":false}]},{"pic":"37_n.jpg","word":"stimelation","data":[{"itemID":37,"type":"nonword","kana":"スティメレーション","lang":"eng","answer":false}]},{"pic":"38_n.jpg","word":"skimmud","data":[{"itemID":38,"type":"nonword","kana":"スキマッド","lang":"eng","answer":false}]},{"pic":"39_n.jpg","word":"diroctness","data":[{"itemID":39,"type":"nonword","kana":"ディロクトネス","lang":"eng","answer":false}]},{"pic":"40_n.jpg","word":"kegfug","data":[{"itemID":40,"type":"nonword","kana":"ケグファグ","lang":"eng","answer":false}]}]

テキストファイルとして保存する場合は,以下のようにします。

toJSON(dat3) %>%
write(.,file = "json.txt")

おわりに

この記事では,データフレーム形式のものを階層性をもった形でJSON形式に変換するということをやってみました。tibbleという形式ができたことで,データフレームの中にリスト型変数を持つということができます。これができれば,あとは toJSON関数 で一発で変換ができました。もしかしたらもっとエレガントな方法もあるかもしれませんが,とりあえず現状の課題は解決できました。

なにをゆう たむらゆう。

おしまい。


  1. 注: 私はこれまで,大学院で習ったHot Soup Processorというゲームを作る目的で使われることが多いプログラミング言語を使って実験プログラムを作っていました。その際にも,特にRでのデータハンドリングに習熟するようになってからは,刺激を読み込む際に,その刺激の情報も一緒に読み込んで,実験結果の出力時にロング型で表示されるようにしていました。

2020年の振り返り

毎年恒例の振り返り記事です。28日に仕事納めの予定が今日まで出勤して実験やったので,ブログも今日のうちに書いてしまおうということで30日に更新です。これまでの振り返り記事も興味がお有りの方はどうぞ。

過去の振り返り記事

ブログのこと

この記事を書いている2020年12月30日時点でのこのブログのpage viewは121,733です。ついに累計10万アクセス超えました(祝100,000PV)。2019年は年間20,000アクセス切っていましたが,今年は25,000アクセスを超えてこのブログを始めてからの最多アクセスを記録しました。ありがたいことです。

今年も昨年と同様に,平均すると月2本のペースでブログを更新しました。ただ,今年の前半あたりに投稿が集中していたので,毎月2本書いていたわけではありません。主に,新型コロナウィルスの影響で春学期がすべて遠隔授業となったことで,それに関する記事をたくさん書いたことでそうなりました。私はSlackを授業で使ったので,主にそれ関係の記事を多く書きました。

閲覧が多かった記事の上位も,R関連の記事だけではなく下記のような記事も入ってました。

42.5インチディスプレイの記事も今年に入って急にアクセスが増えたので,今年ディスプレイを新調した方が多かったのかもしれませんね。個人的には,もうあの大きさより小さい画面で仕事できないですね。

仕事のこと

3年目は2年目よりももっと仕事をうまく回せるようになるというか,学内の業務だったり授業準備の負担も減って研究に割ける時間が増えるだろうと思っていました。ところが,前述のように遠隔授業の実施に伴ってすべてが一変したので,昨年度の継続を活かすことはほとんどできなかったと言っていいかもしれません。自分のことだけでも手一杯でしたが他の先生達のヘルプもしなければいけない立場でしたので,毎日掲示板をチェックして,メールの問い合わせに返信して…みたいなことも春学期はやっていました。自分の授業に関しても,同じ教科書を使っていたとしても遠隔ではできることがまったく異なるので,すべて新しく準備することになってしまいました(多くの先生がそうだったでしょう)。

対面授業に戻った秋学期も,これまでの対面授業のようにはできない部分が多く,この状況下でできる対面授業というのを考えなくてはいけなくなりました。加えて,担当している授業がすべて異なるので(担当数=タイプ数),それもあって授業の負担感は2年目の昨年度よりもやや高かったなと思っています。

ただし,今年度は時間割のことにメインで関わっていないので,秋学期にその仕事で時間を奪われるということはなくなりましたし(たまに心苦しい気持ちになりつつ見守っています),学部のライティングの授業も持っていないので,3年目にして初めて研究室で徹夜した日数がゼロになりました(これまでも年間数日というレベルでしたけど)。

研究の面では,今年は学会がなくなったりオンラインになったりしたこともあって,停滞した感じがあります。昨年度,SLRFに行ってるときに申請書を書いていた科研費(若手研究)が採用されて,関大に着任してからようやく科研費を初めて獲得しました。それで意気込んでいたところでしたが,2020年度は研究をほとんど進められず。ウェブ実験をできるようになっておいたほうが今後データ収集がしやすくなるだろうと思って,jsPsychを勉強し始めました。

ガンバ大阪のこと

今年もガンバ大阪の年間チケットを購入していましたが,新型コロナウィルスの影響でJリーグも中断し,再開後は座席の間隔をあけたり入場人数が制限されていたので,年間チケットは払い戻しになりました。それでもホーム戦は最終節の清水エスパルス戦以外は行きました。この話題については別に記事を書いたのでそちらをお読みください。

2020シーズンに観戦したG大阪の試合

運動習慣

今年に起こった最大の変化といえば,Apple Watchを買って肉体改造に取り組んだことかなと思います。Apple Watchを買う前から,Nike Training ClubNike Run Clubで筋トレだったりランニングだったりはたまにしていましたが,Apple Watch Series3が安価で手に入るようになり,4月初旬にそれを購入してからはとにかくApple Watchのアクティビティリングを完成させることと,毎月の「チャレンジ」を達成することが生きる目的みたいになりました。特に,春学期はほとんど在宅ワークで体を動かす機会が激減したこともあって,意識的に体を動かす機会を作り出さないといけないと強く感じていました。やっぱり一日中家にこもっているのってメンタル的にもよろしくないんですよね。体を動かすことでリフレッシュするようになって,それが習慣になったので対面授業になって平日は毎日職場に来ないといけないようになっても自転車に乗る,走る,筋トレする,ヨガ,のうちのどれか2つ以上は必ずするようになりました。

だいぶ流行に乗り遅れてリングフィットアドベンチャーを買ってからは,家での運動も気軽にできるようになりました。雨の日に走りに行ったことも夏の時期は何回かありましたが,冬の雨の日のランニングはハードルが高くてなかなか行けません。そういうときに,ゲーム感覚で身体を動かして,しかもそれなりに負荷の高いことができるのはいいですね(最近リングフィットはあまりやれてませんけど)。

あとは,自転車も寒いから冬は無理だと以前は思っていましたが,意外と乗れています。漕ぎ出したらあったまるぞということと,家を出る前にウォームアップすればよいという2つを自分が学習したことが大きいと思っています。自転車だと電車通勤の半分くらいの時間で行けるので,いつもより遅い時間に家を出ても間に合います。そうしてできた時間でヨガをやるようになりました。まず10分弱のヨガ(私はいつもNTCのSimple Morning Energy Flowをやってます)をやって身体をあたためてからいくと,自転車を漕ぎ出してすぐに身体が温かくなるのでそこまで辛さを感じていません。もちろん,まだそこまで寒くないというのもあるでしょうけれど。あとは,筋肉がついて基礎代謝があがったので寒さに強くなったというのもあるかもしれません。

健康維持という目的に加えて,こういう社会情勢の中で,なにか1つでもいいから継続してやっていることで,自分の精神的な支えとしているということもあります。自己肯定感を保つために意識してやっているといいますか。続けていることが自信になってくるというのは大いにありました。運動ってなかなか継続してやるのが難しかったのですが,2020年はそれを継続してできるようになったのが自分の中で成長したと感じる部分です。

2021年度も対面授業が継続になるので,特に春学期中にどうやって運動を継続していけるのかは正直まだ全然わかりませんが,2021年度も継続していければと思います。

おわりに

最後になりましたが,みなさん,今年1年お世話になりました。来年もよろしくお願いいたします。

なにをゆう たむらゆう

おしまい。

2020シーズンに観戦したG大阪の試合

2020シーズンに観戦したG大阪の試合をまとめる完全自分用のメモ記事です。昨年度の記事↓

2019シーズンに観戦したG大阪の試合

リーグ戦

  1. 7/18 vs大分 (Home) ○2-1
  2. 7/22 vs広島 (Home) ○1-0
  3. 8/1 vs川崎F (Home) ●0-1
  4. 8/19 vs浦和 (Home) ●1-3
  5. 8/29 vsFC東京 (Home) ●1-3
  6. 9/13 vs湘南 (Home) ●0-1
  7. 9/23 vs名古屋 (Home) ○2-1
  8. 10/3 vs鹿島 (Home) ○2-0
  9. 10/14 vs横浜FM (Home) △1-1
  10. 10/24 vs柏 (Home) ○2-1
  11. 10/31 vs札幌 (Home) ○2-1
  12. 11/11 vs神戸 (Home) ○1-0
  13. 11/14 vs仙台 (Home) ●0-4
  14. 11/29 vs鳥栖 (Home) △1-1

今年はアウェイは一度も行きませんでした。Jリーグ再開後はそもそもアウェイ観戦不可能でしたが,アウェイ席が設けられるようになってからも行きませんでした。よって観に行った試合はすべてホーム戦でしたが,ホーム戦は最終節の清水戦以外有観客試合はすべて観に行ったことになります。来年度もガンバ大阪の年間チケットは販売されないことが決まっているので,2020シーズン同様に毎回チケットを買って観戦することになりそうです。

スタジアムは人が集まる場所ですが,観客が入れるようになってしばらくは2席ずつ間隔が空いていたのでかなりスペースに余裕があり,むしろ大学の授業の方がよほど密な空間だよなと思っていました。スタジアムは外ですしね。今は1席ずつ空いていますが,それでもこれまで前後左右に人がいたことを思えばそこまで密ではないですね。声を出しての応援もまだできませんし。

カップ戦

上記14試合以外にも,YBCルヴァンカップのグループステージ柏戦と,つい先日行われた天皇杯準決勝徳島戦も行きました。柏戦はリーグ戦開幕前で,2019シーズンのホーム開幕戦でした。この試合は妻と一緒に見に行きましたが,得点王になったオルンガ選手に決められて0-1の敗戦でした。結局今年のルヴァンカップはグループステージ敗退となってしまいました。

一方で,今年は優勝チームと2位チームに天皇杯の出場権が与えられるというレギュレーションとなりました。リーグ戦を2位で終えたガンバ大阪は準決勝から出場し,J2の1位で準々決勝を勝ち上がった徳島ヴォルティスと対戦しました。

徳島にボールを握られる展開でしたが,決定機をしっかり決めきって2-0の勝利でした。敵チームながら徳島はビルドアップがとてもうまかったですね。いいチームでした。

福田湧矢選手はホームで初ゴール。彼は今後ガンバの中心になってもらいたい選手です。

天皇杯決勝に勝ち進み,元日に川崎フロンターレと戦うことになりました。今年の川﨑は本当に強くて,ガンバも0-5で敗戦して目の前で優勝を見させられることになりました。簡単ではないですが,そのリベンジとしてなんとか天皇杯優勝をして今シーズンをしめくくってほしいなと思います。

印象に残っていること

2020シーズンは声を出しての応援ができなかったことや,スタジアムが満員でなかったこともあって,2019シーズンのように心に焼き付いたシーンというか劇的…!みたいな試合ってあまりなかったのですが,10/24の柏戦のアデミウソン選手の決勝ゴールは興奮しましたね。残念ながら,この試合の次の日に酒気帯び運転と事故を起こしてしまい,つい先日契約解除となってしまいましたが…。

また,今年も若手の成長が著しく,大卒ルーキーの山本悠樹選手は特にこの1年で飛躍的に伸びたなと感じます。開幕前から注目されていましたが,序盤戦は途中交代で出場してもなかなかいいパフォーマンスを見せていませんでした。ところが,先発に抜擢されたアウェイ仙台戦で初スタメン初ゴールを記録し,この試合以降ガンバ大阪に欠かせない選手になりました。

山本悠樹選手のゴールシーンは1分10秒あたりから

今シーズンスタメンに定着したのは山本選手くらいですが(高尾選手,福田選手は2019シーズンもスタメンで出てたので),シーズン後半からはレギュラークラスの選手(井手口選手,宇佐美選手,小野瀬選手)の故障もあって,奥野選手,唐山選手,川﨑選手,塚元選手なんかもベンチ入りしたりスタメンを飾る試合もありました。あとは,飛び級でU23チームで試合に出ていた中村仁朗選手も最終節で途中出場していいプレーしてましたね。彼は2003年生まれの17歳ですが,J1でも活躍できる逸材なんじゃないかと思いました。来シーズンが楽しみですね。

関西大学に勤務している私としては,関大卒のサイドバックである黒川選手の活躍を期待していましたが,残念ながら今シーズンはほとんどトップチームに絡めませんでした。特別指定選手として2019シーズンのルヴァンカップグループステージの試合に出場していたのを見たときにめちゃくちゃうまいなと思ったのですが…。2021シーズンの奮起を期待したいです。

というわけで,今日はガンバ大阪のお話でした。

なにをゆう たむらゆう。

おしまい。

内容の負荷が高いときのタスクの作り方

Photo by Christina Morillo on Pexels.com

はじめに

英語(語学)の授業において,タスクを作るときの基本的な考え方として,最近自分の中でしっくりきたことについて書きます。簡単に言うと,タスクの内容的な負荷が高いときは,タスク自体がもたらす負荷を軽減させることによって学習者が取り組みやすいようにするということです。

内容の負荷

内容の負荷とは,ここでは内容の難しさのような意味で使っています。私がもってる授業のうちの1つのクラスで使っている教科書では,数回に一回ほどの割合で,社会的な問題(環境問題等)をテーマとして扱うものが出てきます。こういうテーマは,学生が普段どれだけこういう問題について考えているかということによってかなり左右されるので,例えば旅行とか食事とか,そういう学生にとってより身近だと考えられるテーマよりは英語を使ってやりとりする負荷があがります。こういう内容的に難しい話題を扱おうとするとき,タスク自体がもたらす負荷も高いものだと失敗する確率があがります。

タスクの負荷

では,タスクの負荷とはなんでしょうか。これも本当にいろいろな要因があって,一概にタスクの負荷を決めることはできないのですが,それでもbeginnerレベルでも取り組みやすいタスクとそうでないタスクはあります。例えば,意見を交換して合意形成を求めるような意思決定タスクは決める内容が簡単であったとしても難しいです。自分で意見を考えないといけないうえに,相手を説得するような論理的思考が求められるからです。一方で,情報のギャップがあってその情報のギャップを埋めるようなタスクは,事前にその情報が与えられていて,相手に情報を伝え,そして相手から情報を得ることさえできればいいので負荷は低いということになります。

内容の負荷×タスクの負荷

内容の負荷が高く,なおかつタスクの負荷も高ければ非常に難しいタスクになり(e.g., 少子高齢化問題への解決策を4人グループの中でそれぞれが提案し,最も良い案を1つ選ぶ),内容の負荷が低く,なおかつタスクの負荷が低ければ易しいタスクになります(e.g., すでに与えられた予定を見て,自分のパートナーの相手と遊びに行ける日時を探し出す)。

このことを念頭においておけば,すでに内容が与えられている状態でタスクを構想する際に役に立ちます。つまり,今回の教科書の内容は社会的な問題(内容の負荷が高い)ということであれば,タスクの負荷が低くなるようなタスクを構成すればよいということです。

もちろん,内容の負荷が高いからこそインプットタスクを充実させて,内容的・言語的な負荷が下がるように工夫したり,タスクの条件面で準備時間を増やす等をすることでもきます。そういう方法もありますが,タスク自体の工夫もできますよねというのが今回の記事の趣旨です。

例えば,環境問題をテーマにしたタスクを作ろうとするのであれば,意思決定タスクにするのではなく情報交換型タスク(e.g., 2人または4人等のグループ内で情報を共有し,どの国でどの問題が深刻なのかの表を完成させるとか)を作ることを考えるということです。ちなみに,情報交換は分割数が多くなれば難しくなります。1つの情報を2人で分割してやるより4人がバラバラの情報を持っている方が難しいということです。

おわりに

これまでに私自身がタスクを考えるときは,基本的にまず教科書の内容と相性の良いタスクのタイプを選んでタスクを構想していました。ただ,内容と相性がいいからと言って内容が難しい意思決定タスクを作ると,やっぱり自分の中での手応えがあまり良くないことが多くありました。そういうことを考えていたときに,思い切ってタスクの負荷を下げてみればいいのでは?と思って,普段よりもかなりタスクのゴール達成が容易になるようにタスクを作ったら,意外とむしろそれが程よい難易度で,学生も達成感を味わっているように見えました。

この記事ではタスクのタイプの詳細についてあまり詳しく説明することはしませんでしたが,それも今度出る教材集にタスクタイプごとに豊富な例がありますのでそちらをぜひ御覧ください。

コミュニケーション・タスクのアイデアとマテリアル 教室と世界をつなぐ英語授業のために

なにをゆう たむらゆう。

おしまい。

【R】カタカナの非語を自動生成する

はじめに

実験に使うために作ったのですが,結局ボツになったので,どうやってカタカナの非語を作成しようとしたのかの方法をブログの記事に書くことで成仏させたいと思います。考え方は簡単で,カタカナ語の含まれる変数と,任意の数字が入った変数を作って,後者の変数から任意に1つの数字を選び出し,その数だけカタカナ語のリストから任意に取ってきてくっつける,という感じです。よって,生成される文字列は日本語らしさとかはまったく無視されたものになります(まれに日本語っぽいものや完全に日本語のものもできますランダムなので)。

カタカナのリストを用意

まずはカタカナのリストを作ります。アルファベットとかは簡単なんですが,カタカナのリストがRのデフォルトにはない(たぶん)ので,自分で用意します。ただ,50音の表だと扱いづらいので,カタカナを縦にガーッと並んだものをコピーできたら便利だなと思っていたら,そんなサイトがありました。

http://desilysis.seesaa.net/article/423176853.html

ここにあるものをコピーして,kanaという変数に入れます。ちなみに,この記事で使う「リスト」は一般的な意味で,Rにおける「リスト型」という意味のリストではありませんのでご注意ください。

kana <-read.table("clipboard") #Windows
kana <-read.table(pipe("pbpaste")) #Mac
print(kana)


すると,こんな感じでカタカナが入った変数が手に入ります。read.tableで読み込んでるのでデータフレームになります。濁音と半濁音が抜いてあります。入れてもいいのですが,入れるとそれっぽいカタカナ語が生成されづらくなるというのが理由です。

##    V1
## 1  ア
## 2  イ
## 3  ウ
## 4  エ
## 5  オ
## 6  カ
## 7  キ
## 8  ク
## 9  ケ
## 10 コ
## 11 サ
## 12 シ
## 13 ス
## 14 セ
## 15 ソ
## 16 タ
## 17 チ
## 18 ツ
## 19 テ
## 20 ト
## 21 ナ
## 22 ニ
## 23 ヌ
## 24 ネ
## 25 ノ
## 26 ハ
## 27 ヒ
## 28 フ
## 29 ヘ
## 30 ホ
## 31 マ
## 32 ミ
## 33 ム
## 34 メ
## 35 モ
## 36 ヤ
## 37 ユ
## 38 ヨ
## 39 ラ
## 40 リ
## 41 ル
## 42 レ
## 43 ロ
## 44 ワ
## 45 ヲ
## 46 ン

任意の数字のリストを作る

次に,任意の数字のリストを作ります。もしも,4文字の非語だけで良いというような場合はこの作業はスキップしてもらってOKです。ここでは,3文字から8文字の非語を作ることにします。

kazu <-c(3:8)
print(kazu)
## [1] 3 4 5 6 7 8

これで2つの道具が揃ったので,あとはこの2つを組み合わせるだけです。

カタカナをランダムに組み合わせる

非語をいれるハコを用意

まず,できあがった非語を入れるためのハコを用意します。ここでは,100個作ることにしましょう。 nonword という列に,0を100個いれてます。

dat<- data.frame(nonword=rep(0,100))
print(dat)
##     nonword
## 1         0
## 2         0
## 3         0
## 4         0
## 5         0
## 6         0
## 7         0
## 8         0
## 9         0
## 10        0
## 11        0
## 12        0
## 13        0
## 14        0
## 15        0
## 16        0
## 17        0
## 18        0
## 19        0
## 20        0
## 21        0
## 22        0
## 23        0
## 24        0
## 25        0
## 26        0
## 27        0
## 28        0
## 29        0
## 30        0
## 31        0
## 32        0
## 33        0
## 34        0
## 35        0
## 36        0
## 37        0
## 38        0
## 39        0
## 40        0
## 41        0
## 42        0
## 43        0
## 44        0
## 45        0
## 46        0
## 47        0
## 48        0
## 49        0
## 50        0
## 51        0
## 52        0
## 53        0
## 54        0
## 55        0
## 56        0
## 57        0
## 58        0
## 59        0
## 60        0
## 61        0
## 62        0
## 63        0
## 64        0
## 65        0
## 66        0
## 67        0
## 68        0
## 69        0
## 70        0
## 71        0
## 72        0
## 73        0
## 74        0
## 75        0
## 76        0
## 77        0
## 78        0
## 79        0
## 80        0
## 81        0
## 82        0
## 83        0
## 84        0
## 85        0
## 86        0
## 87        0
## 88        0
## 89        0
## 90        0
## 91        0
## 92        0
## 93        0
## 94        0
## 95        0
## 96        0
## 97        0
## 98        0
## 99        0
## 100       0

forで繰り返す

では,for文を使って,1行目から100行目まで順番に非語をぶちこんでいきます。sample関数は,次のような引数をとります。

sample(x,size,replace=FALSE,prob=NULL)

  • x ->無作為抽出元のベクトル
  • size ->無作為抽出で何個とってくるか
  • replace ->重複ありでとってくるか(同じものが2回でてもいいかどうか)
  • prob ->xの要素が抽出される確率

ここではprobは特にこだわらなくてOKですね。重複はなしでいってみましょう。xはkanaでsizeは3~8がランダムに出てほしいので,ここにもsample関数を使いましょう。つまり,kazuという変数から任意に1つ選んで,その数字の長さの非語を作ろうということです。3がでたなら3文字,7が出たなら7文字ということです。ここを固定した数字にすれば,その文字数の非語のみができます。ということで,以下のような感じで走らせます。

for (i in 1:100){
    dat[i,]<-   paste(as.character(sample(kana[,1],sample(kazu,1))),sep="",collapse="")
    }


kanaというデータフレームの1列目から,kazu(3~8)から選ばれた任意の数字の数だけ要素を無作為に選んできて,paste関数で合体させるということですね。一応,paste関数の中でas.character関数を使って文字列の扱いを指定してますが,なくてもたぶん動くかなと思います。

##              nonword
## 1           サカフヌ
## 2     トセヲクロヨサ
## 3   ケトカヲヤイアタ
## 4   ツヒオセコミルハ
## 5             キセア
## 6     クタロヲマヒモ
## 7       ワニレシヘン
## 8         イキニオレ
## 9           ヤイケマ
## 10    ヌラテホメムネ
## 11  ハヨスヌセリエム
## 12            カリク
## 13            フロヲ
## 14      ルテロヘサタ
## 15      テユヨマクト
## 16        ヲホロケニ
## 17          リミユソ
## 18  ホシヲリカテレミ
## 19          モメスル
## 20        ホキヤコカ
## 21    ネコオモトユレ
## 22          ワラソヲ
## 23            ニユナ
## 24        タフテモス
## 25          キノラケ
## 26            ルヨモ
## 27      トンルフヌロ
## 28        エロスヨフ
## 29  レテキアタホロハ
## 30      キリナコロヘ
## 31          アキタル
## 32        キニユミイ
## 33        トムテルネ
## 34      ホンタヨヌイ
## 35          セエシト
## 36        キテチハソ
## 37        ヌソハチエ
## 38            ヨヒマ
## 39          ハモクシ
## 40    カオトヌリフキ
## 41      ホヨオトカリ
## 42          ヤヌホト
## 43      メクユイソテ
## 44  カフトルムリレマ
## 45        ヤチツテシ
## 46            シヌメ
## 47  ムアコチワノウネ
## 48  ヲリノイヒフウミ
## 49      サムヤトシラ
## 50            ユミケ
## 51        レカフヤン
## 52      ミノリヤタホ
## 53            ツケイ
## 54  ニロネウモトソナ
## 55        レセシノラ
## 56          コヌメニ
## 57          ツユニン
## 58            クトス
## 59          スツヌリ
## 60    メユマヲウチロ
## 61            ネヨタ
## 62      ヤハケミソセ
## 63            リチキ
## 64            ハネマ
## 65          ツノウタ
## 66        ヌツセアラ
## 67          ヘサキウ
## 68      タセルユヲチ
## 69      カンシナテヨ
## 70      ラロモオヲノ
## 71  ホムニヨイリンク
## 72      トロイアネツ
## 73    ケモレクメトア
## 74            ミカセ
## 75          スホアセ
## 76  ラルマノヤキユテ
## 77      ニチノマヤイ
## 78            ワリサ
## 79      ヤラヲスソム
## 80      タトクンシア
## 81      ニフシユトヒ
## 82      トメマケヤオ
## 83        オリクツル
## 84  ラリオホメヘモシ
## 85            オヌエ
## 86        トサヌンス
## 87            ワオウ
## 88        ヒラキメノ
## 89    サエアカラハメ
## 90      ネフミナモワ
## 91            サヤフ
## 92        クヤヨイナ
## 93  コキソユクホマノ
## 94            メムヌ
## 95      オヲユカスン
## 96          ケヌニタ
## 97    ユキラチヨネテ
## 98          ヒレニエ
## 99    メワセモオネク
## 100     ヤタセンノウ


サカフヌとかテユヨマクトとかわけわからないのがたくさんできてますね。もしも,4文字の非語だけで良いということであれば,

for (i in 1:100){
    dat2[i,]<-  paste(as.character(sample(kana[,1],4)),sep="",collapse="")
}


のように, sample(kazu,1) の部分を任意の数字に入れ替えてあげることになります。そうすれば,4文字だけの非語リストが手に入ります。

dat2<- data.frame(nonword=rep(0,100))
for (i in 1:100){
    dat2[i,]<-  paste(as.character(sample(kana[,1],4)),sep="",collapse="")
}
print(dat2)
##      nonword
## 1   スメヘウ
## 2   セイオヒ
## 3   ホラリヤ
## 4   ニチメセ
## 5   ヌナメコ
## 6   ヌサトヤ
## 7   レチシイ
## 8   コフハチ
## 9   ヨヘユハ
## 10  マンツメ
## 11  ヒホソム
## 12  スヲテユ
## 13  スヒチレ
## 14  ルヒホヘ
## 15  テシフユ
## 16  ロテカウ
## 17  トノルニ
## 18  ヨホオハ
## 19  ヨキミチ
## 20  ワナヘノ
## 21  ヌヨナマ
## 22  クタンイ
## 23  ハムンシ
## 24  ネロレナ
## 25  アムネノ
## 26  ハフソト
## 27  ヨスクヌ
## 28  サスキホ
## 29  ヨワツノ
## 30  イトセム
## 31  オセンエ
## 32  ホミレル
## 33  リラハフ
## 34  ツラソカ
## 35  テチサシ
## 36  ツヲヌヒ
## 37  ヲタカム
## 38  ハアワレ
## 39  オクネケ
## 40  ミムルヤ
## 41  ヘテロホ
## 42  アサヤケ
## 43  チヤラウ
## 44  クハサケ
## 45  ンテリム
## 46  メネサム
## 47  マシトリ
## 48  クヌワマ
## 49  ナヤリロ
## 50  ナヤウン
## 51  タンナレ
## 52  メヘオテ
## 53  ソキヨニ
## 54  ソユヘタ
## 55  ルサスノ
## 56  ネウフセ
## 57  ムメシヒ
## 58  ネシムセ
## 59  ケヘシノ
## 60  ヒケルメ
## 61  メンタモ
## 62  エケチコ
## 63  ニチシヤ
## 64  テルメキ
## 65  モツロイ
## 66  エレサセ
## 67  ンスイハ
## 68  アモチセ
## 69  ノヤミネ
## 70  ヨストカ
## 71  ニヒラン
## 72  リノシナ
## 73  ハタヘス
## 74  メオヘセ
## 75  エヘミロ
## 76  トソテマ
## 77  ネイトフ
## 78  スイツヲ
## 79  カセレム
## 80  ツウコユ
## 81  ヤムニネ
## 82  サメネン
## 83  シテフケ
## 84  セロヲヌ
## 85  マシスエ
## 86  オンヤナ
## 87  トルキエ
## 88  ソヘトヌ
## 89  ヒカクニ
## 90  クケコツ
## 91  ヌリルホ
## 92  トサセリ
## 93  コロツム
## 94  ホリトク
## 95  モヲネヘ
## 96  ケシヨフ
## 97  テレメヘ
## 98  ナハヲモ
## 99  オレトル
## 100 レノケマ

おわりに

この記事では,Rを使ってカタカナの非語をランダムに生成するということをやってみました。いつか誰かの役に立ちますように。

なにをゆう たむらゆう。

おしまい。

余談

実は,以前RmarkdownからWordpressに直接流し込む方法という記事を書いていて,その方法を使ってRmarkdownで書いたものをブログ記事にしようとしました。ところが,knit2wp関数がうまくいってないのかエラーが出てしまって,結局うまく行きませんでした。これのために時間溶かすのもなんだかなと思ったので,HTMLで書き出して,それをテキストエディタで開いたものをコピペしてこの記事をつくりました(トホホ