Lecture: ログから各回の「課題」の提出者数を算出

Last Updated on

I.何をする?

 

Moodleでログから「課題」の提出者数を算出する。

私の授業では、毎回Excelのノートを「課題」に提出します。ノートは、授業で指定した内容で、Excelの使い方の学習をかねています。

Moodleでは、各週の「課題」それぞれのページに提出者数が表示されますが、毎回の提出者数の一覧を作成するには、それぞれのページを見てコピーしないければなりません。

手間を省いて、ログによりすべての回のノートの提出者数の一覧を算出します。

 

II.「課題」提出者人数の算出

 

1.不十分なやり方

 

Event.contex列の “ノート提出” だけで取り出すと閲覧した数も含まれてしまいますので、Event.name列の “submitted” の両方でフィルターをかけます。その際、指定した文字列を含む文字列を返すgrepl関数を使います。

 

スクリプト

 

# import libraries
library(DataExplorer)
library(tidyverse)
library(stringr)
# load the data
df0 <- read.csv("logs_Wednesday_BasicEnglishI_20200626-2114.csv")
# convert a data frame to a tibble
df0_tibble <- as_tibble(df0)
# show the structure of the data
df0_list = list(df0)
plot_str(df0_list)
# frequencies of each of 「ノート提出」 and "submitted"
df0_tibble_filtered <- df0_tibble %>%
select(Event.context, Event.name) %>%
filter(grepl("ノート提出", Event.context) & grepl("submitted", Event.name))
# create a bar graph
DataExplorer::plot_bar(df0_tibble_filtered$Event.context)
 

 

 

日本語フォントを指定していないために、日本語が抜けてます。ちなみに、集計しやすいように、Moodleの言語設定を英語にしてCSVファイルをダウンロードしましたので、列名は英語です。

列名は英語が無難ですが、値は日本でも問題ありません。ただし、グラフを作成したときに、日本語フォントを指定しないと日本語文字は抜けます。

ログの人数は24人です。これには、私と私のダミー学生の2名が含まれています。上のスクリプトでは、私とダミーの学生の2人はのぞいていますが、それでも提出者数は実際より多いです。

多くなる理由は、2ファイル提出したり、削除して再提出した場合もカウントしているからだと思われます。

2では、これを取り除いて集計します。

 

2.適切なやり方

 

スクリプト

 

# import libraries
library(DataExplorer)
library(tidyverse)
# load the data
df0 <- read.csv("/Users/hirofumishibata/Desktop/logs_Wednesday_BasicEnglishI_20200626-2114.csv")
# convert a data frame to a tibble
df0_tibble <- as_tibble(df0)
# show the structure of the data
df0_list = list(df0)
plot_str(df0_list)
# frequencies of each of 「ノート提出」 and "submitted"
df0_tibble_filtered <- df0_tibble %>%  
  select(User.full.name, Event.context, Event.name) %>% 
  filter(grepl("ノート提出", Event.context) & grepl("submitted", Event.name)) %>% 
  filter(!User.full.name %in% c("shibata u", "shibata2 student")) %>% 
  distinct(.keep_all = TRUE)
# count frequency
count(df0_tibble_filtered, Event.context)
# create a bar graph
DataExplorer::plot_bar(df0_tibble_filtered$Event.context)
# the number of the students who have never submitted
df0_tibble_filtered$User.full.name %>% distinct(.keep_all = TRUE)
22-count(distinct(df0_tibble_filtered[,1]))

 

ポイント

 

2度提出した場合、User.full.nameとEvent.contextとEvent.nameは同一の値になっていますので、distinct()を実行して重複行を除きます。

 

各回のノート提出人数

 

> # count frequency
> count(df0_tibble_filtered, Event.context)
# A tibble: 6 x 2
Event.context n
1 Assignment: ノート提出1(10点) 19
2 Assignment: ノート提出2(10点) 20
3 Assignment: ノート提出3(10点) 18
4 Assignment: ノート提出4(10点) 17
5 Assignment: ノート提出5(10点) 14
6 Assignment: ノート提出6(10点) 13
 

 

授業は毎週あり、ログ取得時点はノート提出6(水曜日)の週の土曜日です。週を遅れて提出する学生が半分ほどいることがわかります。

 

ノート提出人数の棒グラフ

 

 

library(DataExplorer)を使って作成したグラフで、人数の降順になっています。回数順に直せるかどうかは、いまのところわかりません。

 

一度も提出したことのない学生が何人いるか?

 

上のデータの次の氏名列(User.full.name)にdistinct()関数を実行して、重複を除き、その行数を算出し、登録者数22人から引きます。

次のように2名の学生が一度も課題を提出していないことがわかります。ちなみに、3行目の”1″はデータの行数です。

 

> 22-count(distinct(df0_tibble_filtered[,1]))
n
1 2
 

 

Please follow and like us:

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.