R: 基礎英語IIの出席率の算出, tidyverse ver. 4

授業でExcelを使用して10回までの出席率を算出しました。全体の出席率を出すのは簡単ですが、学年別に集計するのは面倒ですが、Rのtidyverseを使えば簡単です。

 

I.何がわかる?

 

学年、学部、出欠のデータです。簡単なスクリプトで次のことがわかります。

 

学年別人数

 

1年:24人

2年:3人

4年:8人

 

出席率

 

全学年:86.9%

1年 :0.975
2 年:0.933
3 年:0.525

 

学年別出席率の推移のグラフ

 

 

 

II.スクリプトと解説

 

1.データ

 

https://pastebin.com/raw/nqTbtEdB

 

2.データの読み込みと変換

 

データを読み込む(よこ長)

 

df0 <- read_csv("https://pastebin.com/raw/nqTbtEdB") 

 

 

3.よこ長データをたて長に変換

 

データはたて長データのほうがggplot2でグラフにしやすいので、授業回数の列(L1:L10)をlecture列にまとめ、出欠をattendanceとして、たて長に変換します。その際、先頭のLを削除します。

 

# ライブラリをインストール
install.packages("tidyverse")
# ライブラリをインポート
library(tidyverse)# よこ長をたて長に変換
df0 <- read_csv("https://pastebin.com/raw/nqTbtEdB")
df0_long <- df0 %>%
pivot_longer(
L1:L10,
names_to = "test", # 列名をtest列にまとめる
names_prefix = "L", # 列名のLを除く
values_to = "attendance") # 出席ををattendance列にまとめる

 

 

4.クラスの出席率

 

# クラスの出席率
df0_long %>%
summarise(attendance = mean(attendance))
 

 

attendance
0.869

 

5.学年別出席率

 

# 学年別の出席率
df0_long %>% # データを
group_by(year) %>% yearで分けて
summarise(attendance = mean(attendance)) # attendanceをyear別に平均する

 

1 0.975
2 0.933
3 0.525

 

1、2年生の出席率が高く、4年生が非常に低いことがわかります。

 

6.学年別出席率の推移のグラフ

 

# 1年出席率の推移
df0_long %>% # データの
filter(year==1) %>% # year列の1を取り出して
group_by(lecture) %>% # lecture列でグループ分けして
summarise(year1 = mean(attendance)) -> df0_long_1 # attendance列を平均する
# 2年出席率の推移
df0_long %>%
filter(year==2) %>%
group_by(lecture) %>%
summarise(year2 = mean(attendance)) -> df0_long_2
# 4年出席率の推移
df0_long4 <- df0_long %>%
filter(year==4) %>%
group_by(lecture) %>%
summarise(year4 = mean(attendance)) -> df0_long_4
# たて長の学年別出席率の推移
left_join(df0_long_1, df0_long_2, by="lecture") %>%
left_join(df0_long_4, by="lecture") %>%
pivot_longer(
year1:year4,
names_to = "yearall", # 列名をyearall列にまとめる
values_to = "attendanceall") -> df1_4_long # 出席をattendanceall列にまとめる
# 授業順のグラフ
level_order <- c('1', '2', '3','4','5','6','7','8','9','10')
ggplot(df1_4_long, aes(x = factor(lecture, level = level_order), y=attendanceall, group=yearall, color=yearall)) +
geom_line()+
geom_point()
 

 

7.全スクリプト

 

# ライブラリをインストール
install.packages("tidyverse")
# ライブラリをインポート
library(tidyverse)
# データをロード
df0 <- read_csv("https://pastebin.com/raw/nqTbtEdB")
table(df0$department)
table(df0$year)
# よこ長をたて長に変換
df0_long <- df0 %>%
  pivot_longer(
    L1:L10,
    names_to = "lecture", # 列名をlecture列にまとめる
    names_prefix = "L", # 列名のLを除く
    values_to = "attendance") # 出席ををattendance列にまとめる
# クラスの出席率
df0_long %>% 
  summarise(attendance = mean(attendance))
# 学年別の出席率
df0_long %>%
  group_by(year) %>%
  summarise(attendance = mean(attendance))
# 1年出席率の推移
df0_long %>% # データの
  filter(year==1) %>% # year列の1を取り出して
  group_by(lecture) %>% # lecture列でグループ分けして
  summarise(year1 = mean(attendance)) -> df0_long_1 # attendance列を平均する
# 2年出席率の推移
df0_long %>%
  filter(year==2) %>% 
  group_by(lecture) %>% 
  summarise(year2 = mean(attendance)) -> df0_long_2
# 4年出席率の推移
df0_long4 <- df0_long %>%
  filter(year==4) %>% 
  group_by(lecture) %>% 
  summarise(year4 = mean(attendance)) -> df0_long_4
# たて長の学年別出席率の推移
left_join(df0_long_1, df0_long_2, by="lecture") %>% 
  left_join(df0_long_4, by="lecture") %>% 
  pivot_longer(
    year1:year4,
    names_to = "yearall", # 列名をyearall列にまとめる
    values_to = "attendanceall") -> df1_4_long # 出席をattendanceall列にまとめる
# 授業順のグラフ
level_order <- c('1', '2', '3','4','5','6','7','8','9','10')
ggplot(df1_4_long, aes(x = factor(lecture, level = level_order), y=attendanceall, group=yearall, color=yearall)) +
  geom_line()+
  geom_point()

 

Please follow and like us:
error

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.