Excelで指定した行ごとに数値を1増やす

たとえば,5行ごとに1増やすというような場合の話。

人力検索はてなのこちらのページに同じような質問と答えがあったので,そちらを参考にして解決しました。

https://q.hatena.ne.jp/1345074944

=INT( ( ROW() - 開始行 ) / x行毎 ) * yずつ増やす + 最初の数値

ということなので,

=INT((ROW() - 1) / 5 ) * 1 + 0
  A
1 1
2 1
3 1
4 1
5 1
6 2
10 2
11 3

Uchihara, T., Webb, S., & Yanagisawa, A. (2019)

Uchihara, T., Webb, S., & Yanagisawa, A. (2019). The Effects of Repetition on Incidental Vocabulary Learning: A Meta-Analysis of Correlational Studies. Language Learning, 69(3), 559–599. https://doi.org/10.1111/lang.12343

このメタ分析の目的は、遭遇回数と語彙学習との間の相関係数を報告した主要研究をメタ分析することで、反復と第二言語(L2)の付随的語彙学習との間の複雑な関係を明らかにすることである。26の研究(N = 1,918)から45の効果量を合成して定量的に分析し、頻度と学習の関係の平均効果量を算出し、この研究で注目した10の変数がこの関係をどの程媒介するかを調べた。その結果、反復学習には中程度の効果(r =.34)があることが示された。その後の媒介分析の結果、反復効果の大きさのばらつきは、学習者変数(年齢、語彙知識)、処遇変数(間隔をおいた学習、視覚的サポート、エンゲージメント、遭遇回数の範囲)、方法論の違い(非単語使用、理解度テストの予告、語彙テストの形式)によって説明されることが明らかになった。これらの結果をもとに、今後のL2付随語彙学習研究の方向性を示唆する。

Webcam Setting

WebカメラやPC内蔵のカメラなどの設定を行えるソフト。

研究室のPCは窓に向いているので,どうしても背景が明るく,自分の顔が逆行気味になるので,暗くなってしまう。それを解消するために導入。

  1. こちらからダウンロードをして,(デスクトップなど)適当なところに解凍
  2. WebCamSetting.exeをダブルクリック
  3. PCにカメラとして認識されているカメラの一覧が出てくるので,そのCamName以下のカメラ名をダブルクリック
  4. 設定プロパティが出るので,調整(Zoomなどで画面を見ながら調整ができる)

Soxで2回リピートの音源を作る

英語単語を読み上げている音声ファイルを作り,それを1単語ずつに切り分ける方法は,以前の記事で取り上げた。このファイルは1回の読み上げなので,2回の読み上げをしたい。以下の手順について忘備録として書いておく。

  1. Soxの準備
  2. 2回リピートのsoxコマンド

Soxの準備

Soxの準備については,こちらのページで詳細を説明してくれているので,参照のこと。

WIndows10への導入の概要としては以下の通り

  • Soxのダウンロード(こちらが配布サイト。中ほどのDownloadからSourceforge’s File Release System.に進み,ダウンロード(今回は,Sox/14.4.2/sox-14.4.2-win32.exe)
  • インストール。exeファイルをダブルクリックで自動的にインストール。デフォルトでは,C:¥Program Files (x86)¥sox-14-4-2に入る。
  • このままだと,mp3は使えないので,app.box.comからlibmad-0.dll_and_libmp3lame-0.dll.7zipをダウンロードして,中身をsoxのファイルに入れておく。
  • Pathを通す(上記の説明サイトを参照)か,soxを入れたフォルダで作業する。

2回リピートのコマンド

Soxのコマンドについては,こちらのサイトを参照。

今回は,以下のコマンドで良い。

sox 入力ファイル(対象としたいファイル) 出力ファイル(書きだしたいファイル名)repeat 1

*一瞬ハマったのは,リピートを2回させたいので,最後を2にしたら,元の音声+リピート2回で3回読み上げられた。

ファイルが大量にあるので,コマンドプロンプトでforで処理。出力ファイルは,同じフォルダにtwiceというフォルダを作り,そこに入れる。

for %f in (*.mp3) do (sox %f ./twice/%f repeat 1)

Audacityで大量の音声ファイルの切り分け

Globalvoice Englishで100単語を含む音声ファイル(.wav)を1つ作成し,それをAudacityで100の音声ファイル(.mp3)にしたときのAudacityの設定の話。

  1. 「編集」-「設定」ー「取り込み/書き出し」にある「メタデータエディタを書きだしの前に表示(h)」の前のチェックを外す。(これをしないと,のちにメタデータエディタで100連打することになる)
  2. Audacityへ音声ファイルを置く(ドラッグアンドドロップで良い)
  3. 「解析」-「Silence Finder」で出てきた画面でとりあえず,OK
  4. 「ファイル」-「複数ファイルの書きだし」
  5. 「書きだし場所」で任意のフォルダを選ぶ
  6. 「ラベル」の下にある,「最初のラベル以前のオーディオデータを含む」の前のチェックを入れる。(これをしないと,1つ目の単語が飛ばさせる)
  7. 「ファイルの命名」で「ラベル/トラック名の前の番号付加」を選び「書きだし」

これで100個の音声ファイルができる。あとは,バッチファイルなんかで,ファイル名を一括変更すればよい。

Microsoft Streamで動画の限定公開

大学の公式LMSであるBb9が大量の動画アップロードとその視聴のために授業日になると非常に重くなったり、動画が見られないと言うことがある(2020年4月21日現在)。そこで、広島大学が契約しているMicrosoftから、Streamと言う動画配信サービスを使って必要な動画を配信する。しかし、デフォルトのままで使うと、全公開か、会社(=広大)の中での公開となってしまい、ちょっ恥ずかしい。そこで、Microsoft Teamsでチームを作って、そこに属する人々だけが見られるようにする。

手順としては、以下の通り。

  1. Microsoft Teamsで授業チームを作る
  2. 学生を貼り付ける(これCSVとかでできないかな。今は1人ずつ入力)
  3. 1日くらい待つ
  4. Streamのマイ・コンテンツからグループを選び、作成した授業グループ名があるのを確認する
  5. Steamに動画を上げる
  6. マイ・ビデオの画面から、授業グループに見せたい動画の横にある「チャンネル/グループに追加」を選ぶ
  7. グループの検索から、授業グループ名を検索し、表示にチェックをいれる。

4月中旬くらいまでの新型コロナ対応の話

どんなことをしたかを記録するために、書いておこう。

新型コロナ感染症が広がりを見せていた2月初旬頃から色々と事態が動き始めたが、当初はそれほど心配しなくても良い雰囲気があった。所属するセンターで毎年行われている集会を中止としたことを、学内のとある会議でのべたところ、「やりすぎではないか」とい声が聞こえた聞こえたほどである。しかし、2月中旬から下旬に差し掛かると、大型イベントが自粛され、学内でも予定しいてイベントはいずれも中止となった。それでも、4月の授業は大丈夫だろうと言う雰囲気であった。

3月下旬くらいになると、これは授業を通常ではできないのではないかと言う雰囲気となり、特に語学は実験系の授業と並んでどうすべきかを考えることとなった。特に、前期(第1タームと第2ターム)にある英語のスピーキングはどうしようかと頭を悩ませた。まだ、3密と言う言葉が出ていなかったので、

  • 教室は喚起する
  • 座席の間隔を空ける
  • 会話等の練習(ペアワークやグループワーク)はしない

と言う方針で授業を行う予定であった。ただし、希望者にはオンラインでの授業も可能と言うこととなった。

しかし、3月も最後になって、語学としての対応を確認されたところで、オンラインを基本として欲しい旨を述べた。これは、当時の広島での状況を考えると大袈裟とも取られる可能性もあったが、学内での感染リスクをできるだけ考えてのものであった。英語と初修外国語は、1年次生は全員が、2年次生も多くが履修をする。1年次生は広島県外からも多くやってくるし、2年次生以上で語学をさらに取る学生は、春休みに海外留学に行く学生も多い。語学系が対面式を止めることで、1年次生をキャンパスになるべく来ないで済むようにもしたかった。また、この段では、オンライン授業に関する質問と対面式でどのように授業を転換すべきかについての質問が多く寄せられ、特に対面式を希望している教員が多く、授業の中でペアワークやグループワークをどうにかしてやりたいと言う気持ちがひしひしと伝わってきた。これは危ない傾向だと判断した。

4月3日時点では、英語と初修外国語の判断で、4月8日から15日は一斉休講とした。しかし、さらなる議論を重ねて、4月8日から5月1日まで、つまり連休前までは、一斉休講とした。その間で、できるだけ公式Learning Management System(LMS)であるBb9の操作方法を英語や初修外国語担当者に覚えてもらい、4月15日から、できる教員からオンデマンド式での補講をしつつ、5月7日からの対面式授業までどうにかたどり着く予定であった。そうこうしているうちに、大学の方針も、第1タームの開始を4月8日から一週間延ばし、15日とする決定をした。その決定の翌日には、4月15日から5月1日まではオンライン授業とする決定へと変わった。

これらの決定を受けて、Bb9セミナーの開催を計画し、客員教員(非常勤教員)に対して、交通費や研修費等が出せるように事務との折衝、セミナーの案内などを行い、4月9日(東広島は午前と午後、東千田では午後)、4月10日(東広島で午後)の計4回のBb9セミナーを行った。また、4月14日には東千田においてフォローアップセミナーを開催した。専任教員の参加もあったため、かなり多くの人数が参加し、会場の密集を避けるために苦労はしたが、それなりに基本的なところは説明ができたのではないかと思う。

英語の教員については、4月15日以降のなるべく早い時期にBb9上で学生への指示を徹底するように依頼をした。客員教員を含め、ほとんどの教員が何かしかの指示を出してくれたようで、思ったほどの混乱はなかったのは幸いである。特に、所属するセンターの教員だけが担当するティーム・ティーチングの授業では、同じ名前の授業に担当教員が2名あるので、1年次生は混乱したと思うが、担当教員がチームとなってBb9を作り込んでくれたおかげで、最小限の混乱で済んだことと思う。

現在(4月21日)でちょうど1週目が終わり、2週目、つまり、本格的に授業が始まるところである。当初、英語では、全員がオンデマンド式で始める予定であった。それは、ライブ型のオンライン授業では、学生のインターネット環境がわからない限り、アクセスできない学生が増えたり、データ通信制限に引っかかる学生がいる可能性があるからである。特に、キャンパスに学生を来させない観点からは、できるだけオンデマンド型が望ましいと思われる。ただし、学生側のインターネット環境が担保されている場合に限り、ライブ型もありうるため、あくまでもオンデマンド型が望ましいと言う要望としている。この点を調査しつつ、オンデマンド型、ライブ型、場合によっては、課題を郵送する方式も考えなければならない。

5月の連休明けから対面式ができることを望みに授業を行っている教員もいる。しかし、現状を考えると、オンライン授業を続けるしかないと考えている。大学の生協の教科書販売では、教科書の宅配サービスを行っているが、毎日100人以上の学生に郵送しているそうである。学生はキャンパスにはいない。キャンパスが安心できる場所でないなら、そこで授業をすることはできない。であれば、オンライン授業しか残されていない。

現在、Microsoft Teamsを用いた授業のセミナーを企画中である。

Excelで複数行のテキストを1つのセルに集約

何がしたいかというと,バラバラのセルに書かれている自由記述アンケートの結果を1つのセルにまとめたい。具体的には,以下のようなアンケート結果があって,

表1:アンケート結果

  A B C
1 Class_ID Instructor_Name comments
2 1 A 良いです。
3 1 A とても良いです。
4 2 B まぁまぁ
5 2 B ダメじゃん
20 10 J 良い!

別のシートに表2のように整理したい。

  A B C
1 Class_ID Instructor_name Comments
2 1 A

良いです。

とても良いです。

3 2 B

まぁまぁ。

ダメじゃん

10 10 J 良い!

表2のC1で,以下の関数を使う。

=TEXTJOIN(CHAR(10),TRUE,IF(‘表1′!A:A=A2,’表1’!C:C,””))

TEXTJOIN(区切り文字,TRUE(空のセルは無視), if(表1のA:Aに,A2にあるClass_IDがあれば,表1のC:Cから書いてあることを取ってきて,区切り文字で分けつつ,結合する), Class_IDなければ,なにもしない)

CHAR(10)は改行を区切り文字とする関数

ggplot2の備忘録

毎回,グラフを作るときに忘れてしまうので,メモとして書き残しておこう。

まずは,サンプルデータで,基本的な折れ線グラフを書く。

library(ggplot2)
data.frame(day = 1:10, access =c(1,2,4,6,8,10,12,14,16,18))
ggplot(dat,aes(x=day, y=access))+geom_line()

見た目の変更1

ggplot(dat,aes(x=day, y=access))+geom_line()+ylim(0,30)+xlim(0,10)+labs(x="日付", y="アクセス数", title="アクセス記録分析")+theme_bw()

見た目の変更2

ggplot(dat, aes(x=day, y=access)) + geom_line()+ylim(0,30)+xlim(0,10)+labs(x="日付", y="アクセス数", title="アクセス記録分析")+theme_bw()+theme(panel.grid.major = element_line(colour = "#AAAAAA"), text=element_text(size=12, family="mincho"), axis.text.x = element_text(size=12),axis.text.y = element_text(size=12))

ポイント

theme(panel.grid.major = element_line(colour = “#AAAAAA”), text=element_text(size=12, family=”mincho”), axis.text.x = element_text(size=12),axis.text.y = element_text(size=12))

theme(panel.grid.major = element_line(colour = "#AAAAAA"), #補助線の目盛りのある方(major)の色を少し濃い目のグレーにする
text=element_text(size=12, family="mincho"), #図に中の文字フォントのサイズとフォントを変更
axis.text.x = element_text(size=12),#x軸の目盛りの数字を大きく
axis.text.y = element_text(size=12))#y軸の目盛りの数字を大きく

リッカートスケールで得たアンケート・データの視覚化:likert Package + HH package (その3)

以前の「リッカートスケールで得たアンケート・データの視覚化:likert Package + HH package (その2)」への追記です。

回答の中に0%があると,グラフにも0%と出てしまうので,それを消したいと思っていたころ,displaying percentage per category in likert stacked proportion barplots に方法があったので,そちらを用いることにした。myPanelFuncの後半部分の変更。

myPanelFunc <- function(...){
  panel.likert(...)
  vals <- list(...)
  DF <- data.frame(x=vals$x, y=vals$y, groups=vals$groups)

  ### some convoluted calculations here...
  grps <- as.character(DF$groups)
  for(i in 1:length(origNames)){
    grps <- sub(paste0('^',origNames[i]),i,grps)
  }

  DF <- DF[order(DF$y,grps),]

  DF$correctX <- ave(DF$x,DF$y,FUN=function(x){
    x[x < 0] <- rev(cumsum(rev(x[x < 0]))) - x[x < 0]/2
    x[x > 0] <- cumsum(x[x > 0]) - x[x > 0]/2
    return(x)
  })

  subs <- sub(' Positive$','',DF$groups)
  collapse <- subs[-1] == subs[-length(subs)] & DF$y[-1] == DF$y[-length(DF$y)]
  DF$abs <- abs(DF$x)
  DF$abs[c(collapse,FALSE)] <- DF$abs[c(collapse,FALSE)] + DF$abs[c(FALSE,collapse)]
  DF$correctX[c(collapse,FALSE)] <- 0
  DF <- DF[c(TRUE,!collapse),]

  DF$perc <- round(ave(DF$abs,DF$y,FUN=function(x){x/sum(x) * 100}), 0)


  ## Here goes 6 lines that have been changes - AK
  # here we modify the column with labels a bit:
  DF$perc <- paste0(DF$perc,'%')
  # change all "0%" to blanks
  DF$perc[DF$perc == "0%"] <- ""
  # the argument label is a bit modified too
  panel.text(x=DF$correctX, y=DF$y, label=DF$perc, cex=0.7)
}
1 3 4 5 6 7 12