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"))
res
plot_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.