2023年10月3日火曜日

今日の教育ぷちDX

例年,ちょっとした反転授業というか,履修者から提出された課題のフィードバックを次の授業時間の冒頭でそれなりに時間をかけて念入りに解説するようにしている.履修者の満足度は高く,それゆえに学習効果も高くなるであろうことが期待される手法と考え,数年前から導入している方法である.

ところが,実際にこれをやろうとすると,その準備がけっこう大変である.提出物を一括してダウンロードするところまでは,LMSの機能を用いれば簡単にできる.そのファイルに対して,例年は,匿名化し,順序をシャッフルしたうえで一つのファイルにまとめ,誰の提出課題かわからないように示すという作業を,手で行なっていたからである.

手作業でやっていた理由は簡単で,例年の履修者が10数人といった規模だったので,手作業でやってもせいぜい30分くらいの作業で済んでいたから,なんとなく惰性でやっていたにすぎない.

ところが今年は,なぜか履修者数が50名を超えた.1回めの受講状況はその6割といったところで,課題提出者は30数名であった.しかし,30もあると手作業でやるのは,やや,しんどい.

というわけで重い腰を上げて,簡単なスクリプトを書いて処理することにした.

まずはファイルをランダムに並べ直してファイル名を匿名化するコードを考えた.Rubyのshuffleメソッドを使えば簡単に実現できるな?と思って書いたスクリプトが次のものである.LMSからダウンロードした履修者のファイル,そのファイル名は,学籍番号コード文字列の後に履修者が提出したファイルの元の名前が続く,という仕様になっているため,2桁の数字の後に「G」が続くという学籍番号の特徴を利用して,それらのファイルだけを選択してファイル名を変えるようにした.

#!/usr/bin/env ruby


system("rm reportlist.xlsx")

files = IO.readlines("| ls | grep [123][0-9]G")

files.shuffle!

files.each_with_index{|filename,i|

  filename.chomp!

  (body, ext) = filename.split('.')

  system("mv \"#{filename}\" file%02d.#{ext}" % i)

}

続いては,ファイル内に記載された指名と学籍番号の削除である.これも実にいい加減なクイックハックで,提出されるファイルが「こちらがあらかじめ用意したワークシート」であることをいいことに,2行目と3行目に書かれるであろう氏名と学籍番号を,単純に削除するだけのもの.こちらはPythonのpython-docxライブラリを用いた.

#!/usr/bin/env python


import docx

import sys


filename = sys.argv[1]

doc = docx.Document(filename)

doc.paragraphs[1].text = ''

doc.paragraphs[2].text = ''

doc.save(filename)

あとは,binディレクトリに置いておいた先のファイル名変更スクリプト(rename.rb)と,こちらの匿名化スクリプト(removeid.py)を,シェルスクリプトのバッチファイル(batch.sh)で回すだけである.

#!/bin/sh


../bin/rename.rb


for f in file*.docx; do

  /bin/echo -n "processing $f ... "

  ../bin/removeid.py $f

  echo done

done

実に簡単.手間いらず.LMSからダウンロードした提出物を展開して,このバッチファイル一発かますだけ!

今日は少し時間と手間を掛けてしまったが,来週から準備も楽になるなーと思うと,少し楽しい気分になる.

0 件のコメント:

コメントを投稿