Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5451e7f
changes, typically summarize -> reframe and grabbing stevetheump from…
vjcitn Jul 30, 2026
8dc0fab
saved the stevetheump data
vjcitn Jul 30, 2026
5080744
URL variable substitutions in all slides, quarto config update, clean…
vjcitn Jul 30, 2026
6551b7e
Full site render for GitHub Pages deployment
vjcitn Jul 30, 2026
d32421f
Fix oversized and duplicate sidebar logo
vjcitn Jul 30, 2026
f407e2c
Add site_libs to git so GitHub Pages can serve CSS/JS layout files
vjcitn Jul 30, 2026
6ed4965
Add precheck Makefile target to verify R package availability
vjcitn Jul 30, 2026
b8eada9
Split precheck into build-critical vs student-exercise packages
vjcitn Jul 30, 2026
395c733
Document package provenance and add check-cran target
vjcitn Jul 30, 2026
bbce535
Update lecture and problem set schedule from 2025 to 2026
vjcitn Aug 13, 2026
01a1ce8
some changes, specifically to factor out instructor and TF names,
vjcitn Aug 14, 2026
7986446
updating newslides branch index.html to check github pages management
vjcitn Aug 22, 2026
19c608b
continuing revisions
vjcitn Aug 26, 2026
c29c93b
preparing merge to main
vjcitn Aug 26, 2026
d41aa9a
dealt with stevetheump Payrolls access via my github, improving slack…
vjcitn Aug 26, 2026
ea633f9
link to canvas tested, to slack also
vjcitn Aug 26, 2026
8fc26c9
this png keeps getting regenerated
vjcitn Aug 27, 2026
458e2ac
various updates on main branch now, including 'overview' qmd
vjcitn Aug 27, 2026
e7333e2
removing irrelevant info from final project draft page
vjcitn Aug 27, 2026
2c3f5ff
improve TF times
vjcitn Aug 28, 2026
bf65a5f
saving update to overview
vjcitn Aug 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
.Rhistory
.RData
.Ruserdata
downloading-course-materials.qmd
downloading-course-materials.qmd
notes.txt
/.quarto/
.DS_Store
docs/site_libs/
lab-notes
census-key.R
*_cache
election-comp.R
canvas-to-my-harvard.R
canvas-to-my-harvard.R
**/*.quarto_ipynb
47 changes: 47 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
.PHONY: render preview clean precheck check-cran check-legacy check-urls check-years

# Verify all R packages used in course materials are installed
precheck:
@Rscript check_packages.R

# Verify CRAN packages are still listed on CRAN (catches archiving between course iterations)
# Requires internet access. GitHub-sourced packages (ThemePark, excessmort) are excluded.
check-cran:
@Rscript -e "\
source('check_packages.R', echo=FALSE); \
cat('Checking CRAN availability...\n'); \
avail <- rownames(available.packages(repos='https://cloud.r-project.org')); \
gone <- setdiff(cran_build_pkgs, avail); \
also <- setdiff(c('gganimate','gsheet'), avail); \
all_gone <- c(gone, also); \
if (length(all_gone) == 0) { \
cat('OK: all CRAN packages are still listed on CRAN.\n') \
} else { \
cat('WARNING: these packages no longer appear on CRAN:\n'); \
for (p in all_gone) cat(' ', p, '\n'); \
quit(status=1) \
}"

render:
quarto render

preview:
quarto preview

clean:
rm -rf docs/

# Find any remaining datasciencelabs.github.io references
check-legacy:
@echo "=== datasciencelabs.github.io references ==="
@grep -rn "datasciencelabs.github.io" --include="*.qmd" --include="*.yml" . | grep -v "^\./docs/" || echo "None found."

# Frequency-sorted list of all external URLs (for audits)
check-urls:
@echo "=== External absolute URLs ==="
@grep -rohE "https?://[^)\"'> ]+" --include="*.qmd" . | grep -v "^\./docs/" | sort | uniq -c | sort -rn

# Find hardcoded year references to update at annual course refresh
check-years:
@echo "=== Year references (may need updating) ==="
@grep -rn "2025\|2024" --include="*.qmd" . | grep -v "^\./docs/" | grep -v "rafalab\|github\.com\|census\.gov\|cdc\.gov"
10 changes: 5 additions & 5 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ project:
output-dir: docs

website:
title: "BST 260: Introduction to Data Science"
site-url: "https://datasciencelabs.github.io/2025/"
repo-url: "https://github.com/datasciencelabs/2025"
title: "DRAFT FOR 2026 fall of BST 260: Introduction to Data Science"
site-url: "https://vjcitn.github.io/2026vjc/"
repo-url: "https://github.com/vjcitn/2026vjc/"
repo-branch: main
repo-actions: [source]
sidebar:
Expand All @@ -15,7 +15,7 @@ website:
align: center
tools:
- icon: github
href: "https://github.com/datasciencelabs/2025"
href: "https://github.com/vjcitn/2026vjc"
text: GitHub
style: docked
contents:
Expand All @@ -38,4 +38,4 @@ format:
css: style.css
toc: true

editor: source
editor: source
9 changes: 9 additions & 0 deletions _variables.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Course infrastructure
site_url: "https://vjcitn.github.io/2026vjc/"
canvas_url: "https://canvas.harvard.edu/courses/158943"
slack_url: "https://bst-260-f25-7j2.slack.com/"
course_github: "https://github.com/vjcitn/2026vjc/"

# Textbook base URLs
dsbook1: "http://rafalab.dfci.harvard.edu/dsbook-part-1/"
dsbook2: "http://rafalab.dfci.harvard.edu/dsbook-part-2/"
91 changes: 91 additions & 0 deletions check_packages.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
## check_packages.R
##
## Verifies R packages used in course materials are installed.
## Run via: make precheck
##
## PACKAGE PROVENANCE
## ------------------
## The vast majority of packages below are from CRAN and can be installed with
## install.packages(). Two packages come from GitHub and carry a sustainability
## risk: if the author's repository is removed or renamed, the package becomes
## unavailable and course materials that reference it will need to be updated.
##
## GitHub dependencies (non-CRAN):
## ThemePark -- MatthewBJane/ThemePark (BUILD-CRITICAL: used in 08-ggplot2 slides)
## remotes::install_github("MatthewBJane/ThemePark")
## excessmort -- rafalab/excessmort (STUDENT-ONLY: eval:false in pset-08)
## remotes::install_github("rafalab/excessmort")
##
## All other packages are from CRAN. Use `make check-cran` to verify they are
## still listed on CRAN (catches archiving/removal between course iterations).
##
## TWO TIERS
## ---------
## build_pkgs packages executed during `quarto render`; missing = broken build
## student_pkgs packages in eval:false exercise templates; students need them,
## the site renders without them

## --- CRAN packages (build-critical) -----------------------------------------
cran_build_pkgs <- c(
"broom", "caret", "data.table", "devtools", "doParallel",
"dplyr", "dslabs", "emmeans", "forcats", "geomtextpath",
"ggplot2", "ggrepel", "ggridges", "ggthemes", "gridExtra",
"gtools", "HistData", "httr2", "janitor", "jsonlite",
"kableExtra", "knitr", "Lahman", "lattice", "lpSolve",
"lubridate", "maps", "MASS", "matrixStats", "NHANES",
"purrr", "randomForest", "RColorBrewer", "readr", "readxl",
"remotes", "reshape2", "rpart", "rvest", "scales",
"shiny", "tidyr", "tidyverse", "VennDiagram"
)

## --- GitHub packages (build-critical) ----------------------------------------
github_build_pkgs <- c(
"ThemePark" # MatthewBJane/ThemePark -- risk: author-hosted, not on CRAN
)

## --- Packages only needed by students (eval:false in QMD sources) -------------
student_pkgs <- c(
"gganimate", # CRAN -- dataviz slide (eval:false demo)
"gsheet", # CRAN -- pset-07 (eval:false)
"excessmort" # GitHub: rafalab/excessmort -- pset-08 (eval:false)
)

build_pkgs <- c(cran_build_pkgs, github_build_pkgs)

## --- Check function ----------------------------------------------------------
missing_pkgs <- function(pkgs) {
pkgs[!vapply(pkgs, requireNamespace, logical(1), quietly = TRUE)]
}

missing_build <- missing_pkgs(build_pkgs)
missing_student <- missing_pkgs(student_pkgs)

## --- Report ------------------------------------------------------------------
if (length(missing_student) > 0) {
cat("NOTE: student-exercise packages not installed (site will still render):\n")
for (pkg in missing_student) cat(" ", pkg, "\n")
cat("\n")
}

if (length(missing_build) == 0) {
cat("OK: all", length(build_pkgs), "build-critical packages are available.\n")
cat(" (", length(cran_build_pkgs), "from CRAN,",
length(github_build_pkgs), "from GitHub:", paste(github_build_pkgs, collapse = ", "), ")\n")
} else {
cat("ERROR: build-critical packages missing (", length(missing_build),
") -- render will fail:\n", sep = "")
for (pkg in missing_build) cat(" ", pkg, "\n")
cat("\nInstall CRAN packages with:\n")
cran_missing <- intersect(missing_build, cran_build_pkgs)
if (length(cran_missing))
cat(' install.packages(c(', paste0('"', cran_missing, '"', collapse = ", "), '))\n')
gh_missing <- intersect(missing_build, github_build_pkgs)
if (length(gh_missing)) {
cat("Install GitHub packages with:\n")
for (pkg in gh_missing) {
src <- switch(pkg, ThemePark = "MatthewBJane/ThemePark")
cat(' remotes::install_github("', src, '")\n', sep = "")
}
}
quit(status = 1)
}
58 changes: 0 additions & 58 deletions docs/BST260Projects.qmd

This file was deleted.

Loading