This year, because of COVID-19, discussion classes were held online via Zoom. Every lesson, there are typically five discussion leaders who will lead a discussion about a news topic to small groups. After 12 or 13 minutes, leaders rotate and start a new discussion about the same topic. Meanwhile, discussion leader feedback is administered via a Google form for class participants. At the end of the lesson, all students write their reflection via another Google form. Data from these forms were analyzed to provide insight about the students’ learning experience.
x <- read.csv("leader_feedback.csv")
str(x)
## 'data.frame': 1585 obs. of 15 variables:
## $ X.1 : int 1 2 3 4 5 6 7 8 9 10 ...
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Timestamp : chr "2020-05-14 09:24:45" "2020-05-14 09:24:45" "2020-05-14 09:25:07" "2020-05-14 09:25:12" ...
## $ Score : int 12 11 18 12 6 15 14 20 9 5 ...
## $ Participant : chr "Kana" "Kengo" "Yusuke" "Eriko" ...
## $ Leader : chr "Takamitsu" "Chisako" "Fuyuno" "Chisako" ...
## $ Did.she.read. : chr "Yes" "Yes" "No" "Yes" ...
## $ Did.she.speak.only.English. : chr "No" "Yes" "Yes" "Yes" ...
## $ Did.she.address.you.by.name. : chr "Yes" "No" "Yes" "No" ...
## $ Did.she.encourage.your.participation. : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Did.she.encourage.everyone.s.participation. : chr "Yes" "No" "Yes" "Yes" ...
## $ Did.she.ask.you.questions. : chr "Yes" "Yes" "Yes" "Yes" ...
## $ Did.she.let.you.speak.enough. : chr "Yes" "Yes" "Yes" "No" ...
## $ Was.her.posture..gestures.and.eye.contact.normal. : chr "Yes" "Yes" "No" "Yes" ...
## $ Did.she.explain.vocabulary.when.needed..using.only.English.: chr "Yes" "No" "No" "Yes" ...
x[,1:2] <- NULL
Recode one student’s name.
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.1.0 ✓ dplyr 1.0.5
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
x$Leader <- recode(x$Leader, Elsa = "Erusa")
sample(x$Timestamp, 5)
## [1] "2020-11-26 10:01:41" "2020-06-04 10:03:55" "2020-05-14 10:00:54"
## [4] "2020-10-01 10:11:29" "2020-10-08 10:21:02"
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
x$Timestamp <- ymd_hms(x$Timestamp)
sample(x$Timestamp, 5)
## [1] "2020-06-04 09:29:01 UTC" "2020-10-08 10:04:14 UTC"
## [3] "2020-11-12 10:05:56 UTC" "2020-05-28 09:45:21 UTC"
## [5] "2020-05-21 10:08:51 UTC"
x$Week <- week(x$Timestamp)
sample(x$Week, 5)
## [1] 23 48 46 42 29
x[,3:13] <- lapply(x[,3:13], factor)
str(x)
## 'data.frame': 1585 obs. of 14 variables:
## $ Timestamp : POSIXct, format: "2020-05-14 09:24:45" "2020-05-14 09:24:45" ...
## $ Score : int 12 11 18 12 6 15 14 20 9 5 ...
## $ Participant : Factor w/ 23 levels "Aoba","Ayana",..: 9 10 23 5 19 16 15 3 1 2 ...
## $ Leader : Factor w/ 23 levels "Aoba","Ayana",..: 22 4 7 4 7 4 22 7 22 22 ...
## $ Did.she.read. : Factor w/ 2 levels "No","Yes": 2 2 1 2 2 2 1 1 1 2 ...
## $ Did.she.speak.only.English. : Factor w/ 2 levels "No","Yes": 1 2 2 2 1 2 1 2 1 1 ...
## $ Did.she.address.you.by.name. : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 2 2 2 1 1 ...
## $ Did.she.encourage.your.participation. : Factor w/ 2 levels "No","Yes": 2 2 2 2 1 2 2 2 2 1 ...
## $ Did.she.encourage.everyone.s.participation. : Factor w/ 2 levels "No","Yes": 2 1 2 2 2 2 2 2 1 2 ...
## $ Did.she.ask.you.questions. : Factor w/ 2 levels "No","Yes": 2 2 2 2 1 2 2 2 2 2 ...
## $ Did.she.let.you.speak.enough. : Factor w/ 2 levels "No","Yes": 2 2 2 1 1 2 2 2 1 1 ...
## $ Was.her.posture..gestures.and.eye.contact.normal. : Factor w/ 2 levels "No","Yes": 2 2 1 2 2 1 1 2 2 2 ...
## $ Did.she.explain.vocabulary.when.needed..using.only.English.: Factor w/ 2 levels "No","Yes": 2 1 1 2 2 2 1 2 1 1 ...
## $ Week : num 20 20 20 20 20 20 20 20 20 20 ...
The participants completed a Google Form to provide feedback to discussion leaders after each round of discussions.
What were the survey questions and how much was each question worth?
Did she read? N = 4
Did she speak only English? Y = 4
Did she address you by name? Y = 2
Did she encourage your participation? Y = 2
Did she encourage everyone’s participation? Y = 2
Did she ask you questions? Y = 2
Did she let you speak enough? Y = 2
Was her posture, gestures and eye contact normal? Y = 1
Did she explain vocabulary when needed, using only English? Y = 1
(Maximum Score = 20)
median(x$Score)
## [1] 16
mean(x$Score)
## [1] 15.80252
tapply(x$Score, x$Leader, median) %>% sort
## Takamitsu Kenshiro Ryoma Yusuke Eriko Aoba Ayana Ayano
## 12.0 14.0 14.0 14.0 15.0 16.0 16.0 16.0
## Chisako Erusa Fuyuno Junko Kana Kyoka Mai Miyu
## 16.0 16.0 16.0 16.0 16.0 16.0 16.0 16.0
## Reina Satomi Shiori Suzuka Kengo Mone Serina
## 16.0 16.0 16.0 16.0 17.0 18.0 18.5
tapply(x$Score, x$Leader, mean) %>% sort
## Takamitsu Yusuke Kenshiro Ryoma Eriko Chisako Fuyuno Ayana
## 12.65333 13.79104 14.01351 14.32692 14.42029 14.84932 15.37143 15.53731
## Kyoka Mai Suzuka Kana Shiori Miyu Aoba Ayano
## 15.64286 15.78261 15.79167 15.79412 16.08333 16.48000 16.57143 16.60000
## Erusa Satomi Kengo Junko Serina Reina Mone
## 16.75758 16.95385 16.98529 17.04348 17.14706 17.41429 17.59091
library(ggplot2)
x %>% ggplot(aes(x=Leader, y=Score)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle=90, hjust=1)) +
labs(title="Leaders' Feedback Scores Received")
What scores did the participants typically give?
tapply(x$Score, x$Participant, median) %>% sort
## Reina Mai Aoba Kana Chisako Eriko Erusa Kenshiro
## 12 13 14 14 15 15 16 16
## Kyoka Mone Ryoma Satomi Serina Shiori Takamitsu Ayana
## 16 16 16 16 16 16 16 17
## Kengo Yusuke Fuyuno Miyu Ayano Junko Suzuka
## 18 18 19 19 20 20 20
tapply(x$Score, x$Participant, mean) %>% sort
## Mai Kana Reina Aoba Eriko Chisako Takamitsu Kyoka
## 12.90000 13.01429 13.18310 13.70312 13.94286 14.04762 14.26087 15.32877
## Mone Ryoma Serina Erusa Kenshiro Shiori Satomi Ayana
## 15.54795 15.75000 15.90000 15.90625 16.00000 16.05714 16.28571 16.86364
## Yusuke Kengo Suzuka Junko Fuyuno Miyu Ayano
## 17.23188 17.24638 17.49254 17.76562 17.90141 18.47826 18.90769
x %>% ggplot(aes(x=Participant, y=Score)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle=90, hjust=1)) +
labs(title="Participant Scores Given")
(“No” = 1, "Yes = 2)?
x %>% filter(Participant == "Ryoma") %>%
select(5:13) %>% lapply(as.numeric) %>% sapply(mean)
## Did.she.read.
## 1.972222
## Did.she.speak.only.English.
## 2.000000
## Did.she.address.you.by.name.
## 1.986111
## Did.she.encourage.your.participation.
## 2.000000
## Did.she.encourage.everyone.s.participation.
## 1.972222
## Did.she.ask.you.questions.
## 2.000000
## Did.she.let.you.speak.enough.
## 1.944444
## Was.her.posture..gestures.and.eye.contact.normal.
## 1.833333
## Did.she.explain.vocabulary.when.needed..using.only.English.
## 2.000000
Ryoma typically answers “Yes” to every question.
x %>% ggplot(aes(x=Participant, y=Leader)) +
geom_tile(aes(fill=Score)) +
theme(axis.text.x = element_text(angle=90, hjust=1)) +
scale_fill_gradient(low = "purple", high = "green") +
labs(title = "Heatmap of Scores")
At the end of the lesson, students fill out a Google Form asking about today’s discussions.
Here are the questions:
1) What did you enjoy about today?
2) What did you not enjoy?
3) How much did you talk?
(A lot / Just enough / Not enough)
4) Did you speak Japanese?
(Yes, a lot / Yes, a little / No, I didn’t)
5) Whose talk was interesting and why?
y <- read.csv("lesson_reflection.csv", stringsAsFactors = F)
str(y)
## 'data.frame': 435 obs. of 8 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Timestamp : chr "07/05/2020 10:20:40" "07/05/2020 10:53:11" "14/05/2020 10:22:02" "14/05/2020 10:24:47" ...
## $ What.is.your.name. : chr "Yusuke" "Serina" "Kyoka" "Mai" ...
## $ What.did.you.enjoy.about.today. : chr "Talking in the group." "I enjoyed communicating with my group" "talking" "Yes,I did." ...
## $ What.did.you.not.enjoy.so.much. : chr "Speaking English." "Nothing" "quiet time" "Yes,I did." ...
## $ How.much.did.you.talk.in.English. : chr "Not enough." "Just enough." "Not enough." "Just enough." ...
## $ Did.you.speak.Japanese. : chr "Yes, a lot." "Yes, a little" "Yes, a little" "Yes, a little" ...
## $ Whose.talk.or.what.was.interesting.and.why.: chr "Aoba's talk, because she's major is same on me." "I choose Mone’s talk because she had her own opinion." "Satomi. Because she thinks about people kindly" "Erusa.Because she talked about English learning in elementary school,and it was interesting." ...
y <- y[,-1]
y <- rename(y, Name = What.is.your.name.)
y$Name <- factor(y$Name)
table(y$Name)
##
## Aoba Ayana Ayano Chisako Eriko Erusa Fuyuno Junko
## 18 19 18 16 19 19 19 18
## Kana Kengo Kenshiro Kyoka Mai Miyu Mone Reina
## 18 18 20 22 19 18 20 19
## Ryoma Satomi Serina Shiori Suzuka Takamitsu Yusuke
## 18 19 20 20 21 17 20
library(quanteda)
## Package version: 2.1.2
## Parallel computing: 2 of 4 threads used.
## See https://quanteda.io for tutorials and examples.
##
## Attaching package: 'quanteda'
## The following object is masked from 'package:utils':
##
## View
corpus(y$Whose.talk.or.what.was.interesting.and.why.) %>%
dfm(remove_punct=T,
remove = stopwords("en")) %>% textplot_wordcloud(min_size=1,
max_size=5,
max_words=400,
color = c(
"blue","green","red","orange","purple"
)
)
(Assume first word of answer is student’s name).
whose <- word(y$Whose.talk.or.what.was.interesting.and.why.)
head(whose)
## [1] "Aoba's" "I" "Satomi." "Erusa.Because"
## [5] "Mone," "kengo’s"
whose <- gsub("[.]", "", whose)
whose <- gsub(",","", whose)
whose <- gsub("'s","", whose) %>% factor
whose %>% table %>% sort %>% tail(15)
## .
## Eriko Elsa Kana Kenshiro Yusuke Chisako Satomi Shiori
## 12 13 14 14 14 18 18 18
## Junko Reina Aoba Mone Kengo I Miyu
## 19 19 20 20 24 26 32
Chisako, Satomi, Shiori, Junko, Reina, Aoba, Mone, Kengo and Miyu were interesting.
“I” was interesting because “I” didn’t listen to anyone’s discussion today.
Some students with more than one typical spelling of their name, for example “Elsa” / “Erusa”, may not have been given due credit for their discussions.
Participation is defined as engagement in ungraded activities, which means providing feedback to peers after each discussion, and completing a reflection questionnaire at the end of the lesson.
table(x$Participant, x$Week)
##
## 20 21 22 23 24 27 28 29 30 39 40 41 42 43 46 47 48 49 50
## Aoba 4 0 5 0 2 6 0 6 5 5 0 5 4 4 5 5 0 5 3
## Ayana 4 0 5 5 3 6 6 6 0 0 5 5 4 4 0 5 0 5 3
## Ayano 4 5 0 5 3 0 6 5 0 5 5 5 4 0 5 0 5 5 3
## Chisako 1 5 4 5 3 0 0 6 4 5 6 0 0 4 5 5 5 5 0
## Eriko 3 5 5 0 3 0 6 6 5 5 5 5 4 0 5 5 5 0 3
## Erusa 0 5 3 5 3 6 0 6 5 0 5 5 4 4 0 5 0 5 3
## Fuyuno 0 5 5 5 3 5 0 6 5 5 5 5 4 0 5 5 0 5 3
## Junko 4 0 5 5 3 6 6 0 5 5 0 4 4 4 5 0 5 0 3
## Kana 4 0 5 5 3 6 6 0 5 0 5 5 4 4 0 5 5 5 3
## Kengo 3 6 5 0 3 0 6 6 5 5 5 5 0 4 0 5 3 5 3
## Kenshiro 4 5 5 5 1 7 6 6 0 5 5 5 0 4 5 0 5 5 3
## Kyoka 4 5 6 5 0 0 6 6 5 5 5 0 4 4 5 5 5 0 3
## Mai 3 5 0 5 3 6 6 0 5 5 5 5 4 0 5 5 5 0 3
## Miyu 4 5 5 5 0 0 6 6 5 5 5 0 4 4 0 5 5 5 0
## Mone 4 0 5 5 3 6 6 6 0 5 5 1 4 4 1 5 5 5 3
## Reina 4 5 0 5 4 6 0 6 5 5 5 0 4 4 5 5 0 5 3
## Ryoma 0 5 5 5 3 6 6 6 0 5 5 0 4 4 5 5 5 0 3
## Satomi 4 5 0 5 3 6 6 0 5 0 5 5 4 4 0 5 5 5 3
## Serina 4 6 5 0 3 4 0 6 5 0 5 6 4 4 5 5 5 0 3
## Shiori 4 5 0 5 3 6 6 4 0 5 5 5 0 4 5 0 5 5 3
## Suzuka 3 5 5 0 3 6 6 0 5 5 0 5 4 4 4 0 5 4 3
## Takamitsu 1 5 5 5 3 0 6 6 5 5 0 5 4 4 0 5 5 5 0
## Yusuke 4 0 5 5 3 6 6 0 5 5 0 5 4 4 5 5 0 4 3
Kenshiro submitted the form seven times in week 27. Is that because he forgot to submit the previous week?
x %>% ggplot(aes(x=Week, y=Participant)) +
geom_tile(aes(fill=Score)) +
labs(title = "Participants Feedback Scores Given Per Week")
Students are expected to be missing once per round of five sessions when they are discussion leaders. It can be seen that most students had very good attendance and participation.
table(x$Participant) %>% sort
##
## Chisako Aoba Erusa Junko Ayano Ayana Suzuka Kengo
## 63 64 64 64 65 66 67 69
## Miyu Takamitsu Yusuke Eriko Kana Mai Satomi Serina
## 69 69 69 70 70 70 70 70
## Shiori Fuyuno Reina Ryoma Kyoka Mone Kenshiro
## 70 71 71 72 73 73 76
z <- corpus(y$Whose.talk.or.what.was.interesting.and.why.) %>%
tokens(remove_punct = T) %>% dfm()
y$Token_count <- ntoken(z)
y$Type_count <- ntype(z)
head(y, 5)
## Timestamp Name What.did.you.enjoy.about.today.
## 1 07/05/2020 10:20:40 Yusuke Talking in the group.
## 2 07/05/2020 10:53:11 Serina I enjoyed communicating with my group
## 3 14/05/2020 10:22:02 Kyoka talking
## 4 14/05/2020 10:24:47 Mai Yes,I did.
## 5 14/05/2020 10:25:09 Erusa Speaking English with my friends.
## What.did.you.not.enjoy.so.much. How.much.did.you.talk.in.English.
## 1 Speaking English. Not enough.
## 2 Nothing Just enough.
## 3 quiet time Not enough.
## 4 Yes,I did. Just enough.
## 5 I can hear many opinions. A lot!
## Did.you.speak.Japanese.
## 1 Yes, a lot.
## 2 Yes, a little
## 3 Yes, a little
## 4 Yes, a little
## 5 Yes, a little
## Whose.talk.or.what.was.interesting.and.why.
## 1 Aoba's talk, because she's major is same on me.
## 2 I choose Mone’s talk because she had her own opinion.
## 3 Satomi. Because she thinks about people kindly
## 4 Erusa.Because she talked about English learning in elementary school,and it was interesting.
## 5 Mone, she heard and spoken well.
## Token_count Type_count
## 1 9 9
## 2 10 10
## 3 7 7
## 4 13 13
## 5 6 6
How many tokens and types did the students write for whose talk was interesting, and what were these averages per student?
y %>%
group_by(Name) %>%
summarize(total_tokens = sum(Token_count),
total_types = sum(Type_count),
mean_tokens = mean(Token_count),
mean_types = mean(Type_count))
## # A tibble: 23 x 5
## Name total_tokens total_types mean_tokens mean_types
## <fct> <int> <int> <dbl> <dbl>
## 1 Aoba 166 162 9.22 9
## 2 Ayana 202 194 10.6 10.2
## 3 Ayano 250 239 13.9 13.3
## 4 Chisako 150 142 9.38 8.88
## 5 Eriko 250 235 13.2 12.4
## 6 Erusa 207 198 10.9 10.4
## 7 Fuyuno 187 177 9.84 9.32
## 8 Junko 169 166 9.39 9.22
## 9 Kana 135 133 7.5 7.39
## 10 Kengo 233 223 12.9 12.4
## # … with 13 more rows
Finally, write a simple formula for participation based on the number of times a participant submitted the discussion leader feedback form and number of words that she wrote for whose discussion was interesting.
table(x$Participant) %>% sort
##
## Chisako Aoba Erusa Junko Ayano Ayana Suzuka Kengo
## 63 64 64 64 65 66 67 69
## Miyu Takamitsu Yusuke Eriko Kana Mai Satomi Serina
## 69 69 69 70 70 70 70 70
## Shiori Fuyuno Reina Ryoma Kyoka Mone Kenshiro
## 70 71 71 72 73 73 76
feedback30 <- table(x$Participant)/76*30
feedback30
##
## Aoba Ayana Ayano Chisako Eriko Erusa Fuyuno Junko
## 25.26316 26.05263 25.65789 24.86842 27.63158 25.26316 28.02632 25.26316
## Kana Kengo Kenshiro Kyoka Mai Miyu Mone Reina
## 27.63158 27.23684 30.00000 28.81579 27.63158 27.23684 28.81579 28.02632
## Ryoma Satomi Serina Shiori Suzuka Takamitsu Yusuke
## 28.42105 27.63158 27.63158 27.63158 26.44737 27.23684 27.23684
tapply(y$Token_count, y$Name, mean) %>% sort
## Takamitsu Kana Serina Suzuka Aoba Satomi Chisako Junko
## 6.705882 7.500000 8.850000 8.952381 9.222222 9.263158 9.375000 9.388889
## Fuyuno Ayana Erusa Mone Yusuke Ryoma Mai Kengo
## 9.842105 10.631579 10.894737 11.550000 11.850000 12.111111 12.368421 12.944444
## Eriko Kyoka Ayano Shiori Reina Miyu Kenshiro
## 13.157895 13.272727 13.888889 15.100000 17.421053 17.944444 29.750000
writing10 <- (tapply(y$Token_count, y$Name, mean)/29.75)*10
writing10
## Aoba Ayana Ayano Chisako Eriko Erusa Fuyuno Junko
## 3.099907 3.573640 4.668534 3.151261 4.422822 3.662096 3.308271 3.155929
## Kana Kengo Kenshiro Kyoka Mai Miyu Mone Reina
## 2.521008 4.351074 10.000000 4.461421 4.157452 6.031746 3.882353 5.855816
## Ryoma Satomi Serina Shiori Suzuka Takamitsu Yusuke
## 4.070962 3.113667 2.974790 5.075630 3.009204 2.254078 3.983193
(feedback30 + writing10) %>% sort %>% round
##
## Chisako Aoba Junko Erusa Suzuka Takamitsu Ayana Kana
## 28 28 28 29 29 29 30 30
## Ayano Serina Satomi Yusuke Fuyuno Kengo Mai Eriko
## 30 31 31 31 31 32 32 32
## Ryoma Mone Shiori Miyu Kyoka Reina Kenshiro
## 32 33 33 33 33 34 40
It is very difficult to gain insight about students’ mood or motivation while conducting classes on Zoom, especially if breakout rooms are used. However, by asking pertinent questions, collecting data, and analyzing it appropriately, it is possible to draw inferences that may not have been possible otherwise.
This r script helped me to get to know my students quite well. Some data was shared with the students via the Google Classroom stream, for example, the boxplots of discussion leader scores; Some information was treated confidentially, for example, telling the class that “someone” was giving everyone the same feedback score; and some data remained private, such as the useful heatmap of participant to leader feedback scores, in case it lead to some students falling out with each other.
Comments: