Note: This README.md is automatically generated from README.Rmd. After making changes to README.Rmd, run
devtools::build_readme()to update the README.md.
engager analyzes participation in Zoom WebVTT
transcripts and produces privacy-supporting metrics, summaries, plots,
and export files for instructor review.
help(package = "engager")browseVignettes(package = "engager")devtools::install_github("revgizmo/engager")library(engager)
transcript_file <- system.file(
"extdata/test_transcripts/intro_statistics_week1.vtt",
package = "engager"
)
results <- basic_transcript_analysis(
transcript_file,
output_dir = tempfile("engager-basic-")
)
head(results$analysis)
print(results$plots)library(engager)
transcript_file <- system.file(
"extdata/test_transcripts/intro_statistics_week1.vtt",
package = "engager"
)
# Load and process once
transcript <- load_zoom_transcript(transcript_file)
processed <- process_zoom_transcript(transcript_df = transcript)
# Summarize the processed data
metrics <- summarize_transcript_metrics(
transcript_df = processed,
names_exclude = c("dead_air")
)
# Plot and export with privacy-supporting defaults
plot <- plot_users(metrics, metric = "n", facet_by = "none", mask_by = "name")
print(plot)
invisible(write_metrics(
metrics,
what = "engagement",
path = tempfile(fileext = ".csv")
))For detailed workflows and examples, see the package vignettes:
vignette("getting-started", package = "engager")vignette("plotting", package = "engager")vignette("essential-functions", package = "engager")vignette("privacy-ethics-review", package = "engager")The engager package provides tools for:
Note: The package specifically processes
.transcript.vtt files (the canonical Zoom transcript
files). Other Zoom file types like .cc.vtt (closed
captions) and .newChat.txt (chat logs) are not currently
supported but may be added in future versions.
load_zoom_transcript() - Load raw Zoom transcript files
(.transcript.vtt)process_zoom_transcript() - Process and consolidate
transcript datasummarize_transcript_metrics() - Calculate engagement
metricssummarize_transcript_files() - Batch process multiple
transcriptsload_roster() - Load student enrollment datadetect_unmatched_names() - Identify transcript names
that need reviewmatch_names_workflow() - Apply the supported exact
name-matching workflowUse match_names_workflow() for exact hash-based
matching:
library(engager)
roster <- tibble::tibble(
preferred_name = c("Alice Smith", "Bob Jones"),
student_id = c("S1", "S2"),
aliases = c("A Smith; Alice S", NA_character_)
)
transcripts <- tibble::tibble(
speaker = c("alice smith", "carol"),
timestamp = as.POSIXct(c("2025-01-01 10:00:00", "2025-01-01 10:01:00"), tz = "UTC")
)
res <- match_names_workflow(transcripts, roster, options = list(match_strategy = "exact"))
resplot_users() - Unified plotting with privacy-aware
optionssummarize_transcript_files() - Generate metrics for
multiple transcript filesMost functions are quiet by default to keep examples/tests clean. You can enable optional diagnostics:
# Enable package-wide diagnostics
options(engager.verbose = TRUE)
# Run an exported workflow with diagnostics enabled
summarize_transcript_metrics(transcript_file_path = transcript_file)
# Turn diagnostics back off
options(engager.verbose = FALSE)Version 0.1.0 provides per-session metrics, summaries, and plot objects. It does not generate a polished course-level engagement report or support longitudinal individual-student reporting.
This package uses privacy-supporting defaults. On load, it sets the
session option engager.privacy_level to "mask"
(unless you set it yourself). Supported summaries, plots, and writers
use this option to mask recognized structured identifier columns with
labels such as Student 01. Masking does not redact names or
other identifiers embedded in free transcript text, and it is not a
legal or institutional compliance determination.
To change the option temporarily for an authorized workflow, save and restore its prior value:
library(engager)
old_privacy_level <- getOption("engager.privacy_level", "mask")
options(engager.privacy_level = "none")
# ... analysis that may include identifiable outputs ...
options(engager.privacy_level = old_privacy_level)Common structured fields considered for masking include
preferred_name, name, first_last,
name_raw, student_id, and email.
Inspect all outputs before storing or sharing them.
See
vignette("privacy-ethics-review", package = "engager") for
privacy, ethics, and institutional review considerations.
We welcome contributions. Start with the issue tracker.
This package is licensed under the MIT License. See the CRAN license stub in LICENSE; the standard MIT terms accompany the distributed package.