Loading, setting up

library(tidyverse)

d <- read_csv("data/fall-2020-analyzing-data-in-science-survey.csv")

Prepping and exploring grade bands

d %>% 
  mutate(n_grades = str_count(grade_level_taught, ",")) %>% 
  count(n_grades)
## # A tibble: 13 × 2
##    n_grades     n
##       <int> <int>
##  1        0    52
##  2        1    39
##  3        2    76
##  4        3   124
##  5        4     6
##  6        5    11
##  7        6    10
##  8        7     2
##  9        8     1
## 10       10     1
## 11       11     1
## 12       12     5
## 13       NA     2
d_grades <- d %>% 
  select(response_id, grade_level_taught) %>% 
  mutate(grade_level_taught = str_replace(grade_level_taught, ":", "")) %>% 
  separate(col = grade_level_taught, into = c(str_c("grade", letters[1:13])), sep = ",") %>% 
  gather(key, val, -response_id) %>% 
  arrange(response_id) %>% 
  mutate(val = as.integer(val)) %>% 
  mutate(elem = if_else(val <= 5, 1, 0)) %>% 
  mutate(second = if_else(val >= 6, 1, 0)) %>% 
  mutate(middle = if_else(val >= 6 & val <= 8, 1, 0)) %>% 
  mutate(high = if_else(val >= 9, 1, 0)) %>% 
  select(response_id, elem, second, middle, high) %>%
  group_by(response_id) %>% 
  summarize(elem = if_else(any(elem == 1), 1, 0),
            second = if_else(any(second == 1), 1, 0),
            middle = if_else(any(middle == 1), 1, 0),
            high = if_else(any(high == 1), 1, 0)) %>% 
  mutate_if(is.double, replace_na, 0)

d_grades %>% 
  count(elem, middle, high) %>% 
  knitr::kable()
elem middle high n
0 0 0 8
0 0 1 194
0 1 0 68
0 1 1 28
1 0 0 14
1 1 0 8
1 1 1 10
# 194 only teach high
# 68 only teach middle
# 14 only teach elem

# 28 teach middle and high
# 8 teach elem and middle
# 10 teach all

# 8 teach none (remove?)
d <- d %>% 
  left_join(d_grades)

reasons for not using a tool

overall

overall_q97 <- d %>% 
  select(response_id, elem, middle, high, q97) %>% 
  mutate(q97 = str_replace(q97, ", ", "; ")) %>%
  mutate(q97 = str_replace(q97, "etc\\.\\)", "")) %>%
  separate(col = q97, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3))

# p %>% 
#   ggplot(aes(x = reorder(val, percent), y = percent)) +
#   geom_col() +
#   coord_flip() +
#   xlab(NULL)

cost - elem

elem <- d %>% 
  select(response_id, elem, middle, high, q97) %>% 
  mutate(q97 = str_replace(q97, ", ", "; ")) %>%
  mutate(q97 = str_replace(q97, "etc\\.\\)", "")) %>%
  separate(col = q97, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(elem == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, elem = percent)

cost - midd

midd <- d %>% 
  select(response_id, elem, middle, high, q97) %>% 
  mutate(q97 = str_replace(q97, ", ", "; ")) %>%
  mutate(q97 = str_replace(q97, "etc\\.\\)", "")) %>%
  separate(col = q97, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(middle == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, midd = percent)

cost - high

high <- d %>% 
  select(response_id, elem, middle, high, q97) %>% 
  mutate(q97 = str_replace(q97, ", ", "; ")) %>%
  mutate(q97 = str_replace(q97, "etc\\.\\)", "")) %>%
  separate(col = q97, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(high == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, high = percent)

final table

to_plot <- overall_q97 %>% 
  left_join(elem) %>% 
  left_join(midd) %>% 
  left_join(high) %>% 
  select(Barrier = val, n, overall = percent, elem, midd, high) %>% 
  mutate_all(replace_na, 0)

to_plot %>% 
  filter(!str_detect(Barrier, "Other")) %>%
  knitr::kable()
Barrier n overall elem midd high
Cost 282 0.314 0.362 0.318 0.313
Time to develop new lessons that I previously did using pencil-and-paper 172 0.192 0.112 0.167 0.201
Difficulty of learning a new tool 153 0.171 0.175 0.167 0.173
Student information security 103 0.115 0.175 0.148 0.102
Availability of computers (tablets; laptops 94 0.105 0.088 0.084 0.112
Student discomfort with computers 37 0.041 0.000 0.035 0.047
My own discomfort with computers 25 0.028 0.013 0.032 0.024

Tools used

overall

overall_q78 <- d %>% 
  select(response_id, elem, middle, high, q78) %>% 
  mutate(q78 = str_replace(q78, ", ", "; ")) %>%
  mutate(q78 = str_replace(q78, "etc\\.\\)", "")) %>%
  separate(col = q78, into = c(str_c("grade", letters[1:12])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3))

tools - elem

elem <- d %>% 
  select(response_id, elem, middle, high, q78) %>% 
  mutate(q78 = str_replace(q78, ", ", "; ")) %>%
  mutate(q78 = str_replace(q78, "etc\\.\\)", "")) %>%
  separate(col = q78, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(elem == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, elem = percent)

tools - midd

midd <- d %>% 
  select(response_id, elem, middle, high, q78) %>% 
  mutate(q78 = str_replace(q78, ", ", "; ")) %>%
  mutate(q78 = str_replace(q78, "etc\\.\\)", "")) %>%
  separate(col = q78, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(middle == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, midd = percent)

tools - high

high <- d %>% 
  select(response_id, elem, middle, high, q78) %>% 
  mutate(q78 = str_replace(q78, ", ", "; ")) %>%
  mutate(q78 = str_replace(q78, "etc\\.\\)", "")) %>%
  separate(col = q78, into = c(str_c("grade", letters[1:9])), sep = ",") %>% 
  gather(key, val, -response_id, -elem, -middle, -high) %>% 
  filter(val!=" ") %>% 
  filter(!is.na(val)) %>% 
  filter(high == 1) %>% # selecting elem
  janitor::tabyl(val) %>% 
  arrange(desc(n)) %>% 
  mutate(percent = round(percent, 3)) %>% 
  mutate(rank_order = dplyr::row_number()) %>% 
  select(val, high = percent)

final table

to_plot <- overall_q78 %>% 
  left_join(elem) %>% 
  left_join(midd) %>% 
  left_join(high) %>% 
  select(Technology = val, n, overall = percent, elem, midd, high) %>% 
  mutate_all(replace_na, 0)

to_plot %>% 
  filter(!str_detect(Technology, "Other")) %>%
  knitr::kable()
Technology n overall elem midd high
Google Sheets 273 0.234 0.241 0.241 0.223
Calculator (not for graphing) 238 0.204 0.222 0.222 0.195
Data Nuggets 195 0.167 0.139 0.157 0.175
Microsoft Excel 141 0.121 0.102 0.095 0.130
Graphing Calculator 95 0.082 0.056 0.054 0.100
Desmos 52 0.045 0.074 0.068 0.040
DataClassroom 41 0.035 0.019 0.033 0.039
Infogram (or similar online tool for creating an infographic) 37 0.032 0.056 0.046 0.027
Common Online Data Analysis Platform (CODAP) 14 0.012 0.009 0.014 0.012
TUVA 11 0.009 0.009 0.019 0.007
R 6 0.005 0.009 0.003 0.004

next steps

  • create code to process qual data (should be relatively straightforward, but good to establish this)
  • access code on computer that is presently being repaired so we can examine grade-level differences in these variables
  • qual coding features desired in tech tools