Project Overview

This report collects and analyzes data across all 23 California State University campuses to answer the following business questions:

# Business Question Data Source
1 How is our class’s sentiment toward CSUCI? Class survey (separate)
2 What is enrollment across the CSU system? calstate.edu (scraped)
3 What are the demographics of each CSU? calstate.edu (scraped)
4 How are Cal State schools talked about in public? Reddit API
5 What is the sentiment — Positive, Negative, or Neutral? Reddit + AFINN
6 What are the differences in tone among Cal States? Reddit sentiment comparison
7 What are the title tags of the top 5 enrolled schools? SEO scraper + enrollment
8 What are the title tags of the 5 lowest-enrolled schools? SEO scraper + enrollment

Note: Business Question 1 (class sentiment toward CSUCI) is answered via the team’s Google Form survey and will be analyzed in a separate document.


Campus Reference Table

csu_campuses <- tibble(
  campus = c(
    "Cal Poly Humboldt",
    "Cal Poly Pomona",
    "Cal Poly San Luis Obispo",
    "CSU Bakersfield",
    "CSU Channel Islands",
    "CSU Chico",
    "CSU Dominguez Hills",
    "CSU East Bay",
    "CSU Fresno",
    "CSU Fullerton",
    "CSU Long Beach",
    "CSU Los Angeles",
    "CSU Maritime Academy",
    "CSU Monterey Bay",
    "CSU Northridge",
    "CSU Sacramento",
    "CSU San Bernardino",
    "CSU San Marcos",
    "CSU Stanislaus",
    "San Diego State",
    "San Francisco State",
    "San Jose State",
    "Sonoma State"
  ),
  url = c(
    "https://www.humboldt.edu",
    "https://www.cpp.edu",
    "https://www.calpoly.edu",
    "https://www.csub.edu",
    "https://www.csuci.edu",
    "https://www.csuchico.edu",
    "https://www.csudh.edu",
    "https://www.csueastbay.edu",
    "https://www.fresnostate.edu",
    "https://www.fullerton.edu",
    "https://www.csulb.edu",
    "https://www.calstatela.edu",
    "https://www.csum.edu",
    "https://www.csumb.edu",
    "https://www.csun.edu",
    "https://www.csus.edu",
    "https://www.csusb.edu",
    "https://www.csusm.edu",
    "https://www.csustan.edu",
    "https://www.sdsu.edu",
    "https://www.sfsu.edu",
    "https://www.sjsu.edu",
    "https://www.sonoma.edu"
  ),
  search_term = c(
    "Cal Poly Humboldt",
    "Cal Poly Pomona CPP",
    "Cal Poly SLO",
    "CSU Bakersfield CSUB",
    "CSUCI \"Channel Islands\"",
    "CSU Chico",
    "CSU Dominguez Hills CSUDH",
    "CSU East Bay CSUEB",
    "Fresno State",
    "Cal State Fullerton CSUF",
    "Cal State Long Beach CSULB",
    "Cal State LA CSULA",
    "Cal Maritime CSUM",
    "CSU Monterey Bay CSUMB",
    "CSUN Northridge",
    "Sacramento State CSUS",
    "Cal State San Bernardino CSUSB",
    "Cal State San Marcos CSUSM",
    "CSU Stanislaus",
    "SDSU San Diego State",
    "SFSU San Francisco State",
    "SJSU San Jose State",
    "Sonoma State SSU"
  )
)

kable(csu_campuses |> select(campus, url), caption = "All 23 CSU Campuses")
All 23 CSU Campuses
campus url
Cal Poly Humboldt https://www.humboldt.edu
Cal Poly Pomona https://www.cpp.edu
Cal Poly San Luis Obispo https://www.calpoly.edu
CSU Bakersfield https://www.csub.edu
CSU Channel Islands https://www.csuci.edu
CSU Chico https://www.csuchico.edu
CSU Dominguez Hills https://www.csudh.edu
CSU East Bay https://www.csueastbay.edu
CSU Fresno https://www.fresnostate.edu
CSU Fullerton https://www.fullerton.edu
CSU Long Beach https://www.csulb.edu
CSU Los Angeles https://www.calstatela.edu
CSU Maritime Academy https://www.csum.edu
CSU Monterey Bay https://www.csumb.edu
CSU Northridge https://www.csun.edu
CSU Sacramento https://www.csus.edu
CSU San Bernardino https://www.csusb.edu
CSU San Marcos https://www.csusm.edu
CSU Stanislaus https://www.csustan.edu
San Diego State https://www.sdsu.edu
San Francisco State https://www.sfsu.edu
San Jose State https://www.sjsu.edu
Sonoma State https://www.sonoma.edu

Part 1: SEO Scraping

Each campus homepage is scraped for its title tag, meta description, meta keywords, and H1–H3 headings — the core on-page SEO elements. (Answers BQ 7 & 8 when joined with enrollment data.)

scrape_seo <- function(campus, url) {
  message("Scraping SEO: ", campus)
  Sys.sleep(1.5)

  tryCatch({
    page <- read_html(
      GET(url,
          user_agent("Mozilla/5.0 (educational research project)"),
          timeout(15))
    )

    title     <- page |> html_element("title") |> html_text(trim = TRUE)
    meta_desc <- page |> html_element("meta[name='description']") |> html_attr("content")
    meta_keys <- page |> html_element("meta[name='keywords']")    |> html_attr("content")
    h1s <- page |> html_elements("h1") |> html_text(trim = TRUE) |> str_squish() |> paste(collapse = " | ")
    h2s <- page |> html_elements("h2") |> html_text(trim = TRUE) |> str_squish() |> paste(collapse = " | ")
    h3s <- page |> html_elements("h3") |> html_text(trim = TRUE) |> str_squish() |> paste(collapse = " | ")

    tibble(
      campus          = campus,
      url             = url,
      title           = title     %||% NA_character_,
      meta_desc       = meta_desc %||% NA_character_,
      meta_keys       = meta_keys %||% NA_character_,
      h1s             = h1s,
      h2s             = h2s,
      h3s             = h3s,
      title_length    = nchar(title),
      metadesc_length = nchar(meta_desc),
      has_meta_desc   = !is.na(meta_desc),
      has_keywords    = !is.na(meta_keys),
      scraped_ok      = TRUE
    )
  }, error = function(e) {
    message("  ERROR on ", campus, ": ", e$message)
    tibble(
      campus = campus, url = url,
      title = NA, meta_desc = NA, meta_keys = NA,
      h1s = NA, h2s = NA, h3s = NA,
      title_length = NA, metadesc_length = NA,
      has_meta_desc = FALSE, has_keywords = FALSE,
      scraped_ok = FALSE
    )
  })
}

seo_data <- map2(csu_campuses$campus, csu_campuses$url, scrape_seo) |>
  list_rbind()

write.csv(seo_data, "csu_seo_data.csv", row.names = FALSE)

SEO Results Preview

seo_data |>
  select(campus, title, title_length, metadesc_length, has_meta_desc, scraped_ok) |>
  kable(caption = "SEO Summary — All 23 CSU Campuses")
SEO Summary — All 23 CSU Campuses
campus title title_length metadesc_length has_meta_desc scraped_ok
Cal Poly Humboldt Cal Poly Humboldt | California State Polytechnic University, Humboldt 69 144 TRUE TRUE
Cal Poly Pomona Cal Poly Pomona - #1 Polytechnic University for Diversity and Economic Mobility 79 223 TRUE TRUE
Cal Poly San Luis Obispo Cal Poly | Learn by Doing 25 114 TRUE TRUE
CSU Bakersfield Home | California State University, Bakersfield 47 NA FALSE TRUE
CSU Channel Islands CSU Channel Islands 19 159 TRUE TRUE
CSU Chico Chico State 11 NA FALSE TRUE
CSU Dominguez Hills California State University Dominguez Hills 43 497 TRUE TRUE
CSU East Bay California State University, East Bay | CSUEB 45 154 TRUE TRUE
CSU Fresno Home - Fresno State 19 NA FALSE TRUE
CSU Fullerton Achieve Greatness: California State University, Fullerton 57 143 TRUE TRUE
CSU Long Beach California State University, Long Beach 39 102 TRUE TRUE
CSU Los Angeles Home | Cal State LA 19 NA FALSE TRUE
CSU Maritime Academy Home | Cal Poly Maritime Academy 32 NA FALSE TRUE
CSU Monterey Bay Home | California State University Monterey Bay 47 318 TRUE TRUE
CSU Northridge California State University, Northridge 39 149 TRUE TRUE
CSU Sacramento California State University, Sacramento | Sacramento State 58 163 TRUE TRUE
CSU San Bernardino California State University, San Bernardino | CSUSB 51 176 TRUE TRUE
CSU San Marcos California State University San Marcos in North San Diego County | CSUSM 72 NA FALSE TRUE
CSU Stanislaus Home | California State University Stanislaus 45 181 TRUE TRUE
San Diego State Home | San Diego State University 33 NA FALSE TRUE
San Francisco State San Francisco State University 30 153 TRUE TRUE
San Jose State San José State University 25 NA FALSE TRUE
Sonoma State NA NA NA FALSE FALSE

Part 2: Enrollment & Demographics

Enrollment figures are sourced from the official CSU system facts page (calstate.edu) and entered directly — the site blocks automated scraping. Verify or update numbers at: https://www.calstate.edu/csu-system/about-the-csu/facts-about-the-csu/enrollment

(Answers BQ 2 & 3.)

# Source: CSU Facts About the CSU — Fall 2023 headcount enrollment
# Update figures from calstate.edu if a newer year is available
enrollment_clean <- tibble(
  campus = c(
    "CSU Long Beach",
    "CSU Fullerton",
    "CSU Northridge",
    "San Diego State",
    "San Jose State",
    "CSU Sacramento",
    "Cal Poly San Luis Obispo",
    "Cal Poly Pomona",
    "CSU Los Angeles",
    "San Francisco State",
    "CSU Fresno",
    "CSU San Bernardino",
    "CSU Chico",
    "CSU San Marcos",
    "CSU Dominguez Hills",
    "CSU East Bay",
    "CSU Stanislaus",
    "CSU Bakersfield",
    "CSU Monterey Bay",
    "CSU Channel Islands",
    "Sonoma State",
    "Cal Poly Humboldt",
    "CSU Maritime Academy"
  ),
  total_enrollment = c(
    45064, 40421, 37701, 37014, 35915,
    31536, 22108, 27782, 27311, 25758,
    25215, 20622, 16549, 16862, 16484,
    14710, 11103, 11201,  8196,  7104,
     6912,  6699,   912
  )
) |>
  arrange(desc(total_enrollment)) |>
  mutate(
    rank             = row_number(),
    enrollment_tier  = case_when(
      total_enrollment >= 30000 ~ "Large (30k+)",
      total_enrollment >= 15000 ~ "Medium (15k–30k)",
      TRUE                      ~ "Small (<15k)"
    )
  )

write.csv(enrollment_clean, "csu_enrollment.csv", row.names = FALSE)

Enrollment by Campus (BQ 2)

enrollment_clean |>
  select(rank, campus, total_enrollment, enrollment_tier) |>
  kable(
    caption = "CSU Enrollment — All Campuses, Fall 2023 (Largest to Smallest)",
    format.args = list(big.mark = ",")
  )
CSU Enrollment — All Campuses, Fall 2023 (Largest to Smallest)
rank campus total_enrollment enrollment_tier
1 CSU Long Beach 45,064 Large (30k+)
2 CSU Fullerton 40,421 Large (30k+)
3 CSU Northridge 37,701 Large (30k+)
4 San Diego State 37,014 Large (30k+)
5 San Jose State 35,915 Large (30k+)
6 CSU Sacramento 31,536 Large (30k+)
7 Cal Poly Pomona 27,782 Medium (15k–30k)
8 CSU Los Angeles 27,311 Medium (15k–30k)
9 San Francisco State 25,758 Medium (15k–30k)
10 CSU Fresno 25,215 Medium (15k–30k)
11 Cal Poly San Luis Obispo 22,108 Medium (15k–30k)
12 CSU San Bernardino 20,622 Medium (15k–30k)
13 CSU San Marcos 16,862 Medium (15k–30k)
14 CSU Chico 16,549 Medium (15k–30k)
15 CSU Dominguez Hills 16,484 Medium (15k–30k)
16 CSU East Bay 14,710 Small (<15k)
17 CSU Bakersfield 11,201 Small (<15k)
18 CSU Stanislaus 11,103 Small (<15k)
19 CSU Monterey Bay 8,196 Small (<15k)
20 CSU Channel Islands 7,104 Small (<15k)
21 Sonoma State 6,912 Small (<15k)
22 Cal Poly Humboldt 6,699 Small (<15k)
23 CSU Maritime Academy 912 Small (<15k)

Demographics (BQ 3)

Demographic data (ethnicity, gender, residency) is entered from the CSU Facts page. Update at: https://www.calstate.edu/csu-system/about-the-csu/facts-about-the-csu/Pages/student-profile.aspx

# System-wide demographic breakdown (Fall 2023, % of total enrollment)
csu_demographics <- tibble(
  group      = c(
    "Hispanic/Latino", "White", "Asian", "Unknown/Other",
    "Black/African American", "International", "Two or More Races",
    "American Indian", "Pacific Islander"
  ),
  pct_system = c(45.2, 19.8, 15.1, 7.4, 4.3, 4.1, 3.3, 0.4, 0.4)
)

write.csv(csu_demographics, "csu_demographics.csv", row.names = FALSE)

kable(csu_demographics, caption = "CSU System-Wide Student Demographics — Fall 2023")
CSU System-Wide Student Demographics — Fall 2023
group pct_system
Hispanic/Latino 45.2
White 19.8
Asian 15.1
Unknown/Other 7.4
Black/African American 4.3
International 4.1
Two or More Races 3.3
American Indian 0.4
Pacific Islander 0.4

Part 3: Reddit Sentiment Scraping

Reddit’s public JSON search API collects posts mentioning each campus. Sentiment is scored using the AFINN lexicon. (Answers BQ 4, 5 & 6.)

scrape_reddit <- function(campus, search_term) {
  message("Scraping Reddit: ", campus)
  Sys.sleep(2)

  tryCatch({
    threads <- find_thread_urls(
      keywords  = search_term,
      sort_by   = "relevance",
      period    = "all"
    )

    if (is.null(threads) || nrow(threads) == 0) {
      message("  No threads found for: ", campus)
      return(tibble())
    }

    threads |>
      mutate(
        campus    = campus,
        text_full = paste(coalesce(title, ""), coalesce(text, ""), sep = " ")
      ) |>
      select(any_of(c("campus", "title", "text", "text_full", "score",
                       "comments", "subreddit", "date_utc", "url")))
  }, error = function(e) {
    message("  ERROR for ", campus, ": ", e$message)
    tibble()
  })
}

reddit_raw <- map2(csu_campuses$campus, csu_campuses$search_term, scrape_reddit) |>
  list_rbind()
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
## parsing URLs on page 1...
# Guarantee text_full exists even if all calls failed
if (!"text_full" %in% names(reddit_raw)) reddit_raw$text_full <- character(0)

write.csv(reddit_raw, "csu_reddit_raw.csv", row.names = FALSE)

message(nrow(reddit_raw), " total Reddit posts collected")

Sentiment Scoring

# Using the Bing lexicon — downloads silently, no interactive prompt required
# Bing labels each word as "positive" or "negative"
# Sentiment score = (positive words - negative words) / total sentiment words
bing <- get_sentiments("bing")

if (nrow(reddit_raw) == 0 || !"text_full" %in% names(reddit_raw)) {
  message("reddit_raw is empty — Reddit may be rate-limiting. Sentiment skipped.")
  reddit_sentiment <- tibble(
    campus = character(), post_id = integer(), score = integer(),
    num_comments = integer(), created_dt = as.POSIXct(character()),
    n_positive = integer(), n_negative = integer(),
    sentiment_score = numeric(), word_count = integer()
  )
  campus_sentiment <- tibble(
    campus = csu_campuses$campus,
    n_posts = 0L, avg_sentiment = NA_real_, median_sentiment = NA_real_,
    avg_upvotes = NA_real_, avg_comments = NA_real_,
    sentiment_label = "No data"
  )
} else {

reddit_sentiment <- reddit_raw |>
  mutate(
    post_id  = row_number(),
    score    = as.numeric(coalesce(as.character(score), "0")),
    comments = as.numeric(coalesce(as.character(comments), "0"))
  ) |>
  unnest_tokens(word, text_full) |>
  anti_join(stop_words, by = "word") |>
  inner_join(bing, by = "word") |>
  group_by(campus, post_id, score, comments) |>
  summarise(
    n_positive      = sum(sentiment == "positive"),
    n_negative      = sum(sentiment == "negative"),
    sentiment_score = (n_positive - n_negative) / (n_positive + n_negative),
    word_count      = n(),
    .groups = "drop"
  )

campus_sentiment <- reddit_sentiment |>
  group_by(campus) |>
  summarise(
    n_posts          = n(),
    avg_sentiment    = round(mean(sentiment_score, na.rm = TRUE), 3),
    median_sentiment = round(median(sentiment_score, na.rm = TRUE), 3),
    avg_upvotes      = round(mean(score, na.rm = TRUE), 1),
    avg_comments     = round(mean(comments, na.rm = TRUE), 1),
    .groups = "drop"
  ) |>
  mutate(
    sentiment_label = case_when(
      avg_sentiment >  0.1 ~ "Positive",
      avg_sentiment < -0.1 ~ "Negative",
      TRUE                 ~ "Neutral"
    )
  ) |>
  arrange(desc(avg_sentiment))

write.csv(reddit_sentiment, "csu_reddit_sentiment.csv", row.names = FALSE)
write.csv(campus_sentiment, "csu_campus_sentiment.csv", row.names = FALSE)

} # end else (reddit_raw has data)

Business Questions Answered

BQ 2: Enrollment Across the CSU System

enrollment_clean |>
  mutate(
    rank             = row_number(),
    total_enrollment = formatC(total_enrollment, format = "d", big.mark = ",")
  ) |>
  select(rank, campus, total_enrollment) |>
  kable(caption = "CSU Enrollment — Ranked Largest to Smallest")
CSU Enrollment — Ranked Largest to Smallest
rank campus total_enrollment
1 CSU Long Beach 45,064
2 CSU Fullerton 40,421
3 CSU Northridge 37,701
4 San Diego State 37,014
5 San Jose State 35,915
6 CSU Sacramento 31,536
7 Cal Poly Pomona 27,782
8 CSU Los Angeles 27,311
9 San Francisco State 25,758
10 CSU Fresno 25,215
11 Cal Poly San Luis Obispo 22,108
12 CSU San Bernardino 20,622
13 CSU San Marcos 16,862
14 CSU Chico 16,549
15 CSU Dominguez Hills 16,484
16 CSU East Bay 14,710
17 CSU Bakersfield 11,201
18 CSU Stanislaus 11,103
19 CSU Monterey Bay 8,196
20 CSU Channel Islands 7,104
21 Sonoma State 6,912
22 Cal Poly Humboldt 6,699
23 CSU Maritime Academy 912

BQ 4–5: How Are Cal States Talked About? What is the Sentiment?

campus_sentiment |>
  select(campus, n_posts, avg_sentiment, sentiment_label, avg_upvotes, avg_comments) |>
  kable(caption = "Reddit Public Sentiment by Campus (BQ 4 & 5)")
Reddit Public Sentiment by Campus (BQ 4 & 5)
campus n_posts avg_sentiment sentiment_label avg_upvotes avg_comments
Cal Poly Humboldt 0 NA No data NA NA
Cal Poly Pomona 0 NA No data NA NA
Cal Poly San Luis Obispo 0 NA No data NA NA
CSU Bakersfield 0 NA No data NA NA
CSU Channel Islands 0 NA No data NA NA
CSU Chico 0 NA No data NA NA
CSU Dominguez Hills 0 NA No data NA NA
CSU East Bay 0 NA No data NA NA
CSU Fresno 0 NA No data NA NA
CSU Fullerton 0 NA No data NA NA
CSU Long Beach 0 NA No data NA NA
CSU Los Angeles 0 NA No data NA NA
CSU Maritime Academy 0 NA No data NA NA
CSU Monterey Bay 0 NA No data NA NA
CSU Northridge 0 NA No data NA NA
CSU Sacramento 0 NA No data NA NA
CSU San Bernardino 0 NA No data NA NA
CSU San Marcos 0 NA No data NA NA
CSU Stanislaus 0 NA No data NA NA
San Diego State 0 NA No data NA NA
San Francisco State 0 NA No data NA NA
San Jose State 0 NA No data NA NA
Sonoma State 0 NA No data NA NA

BQ 6: Differences in Tone Among Cal States

campus_sentiment |>
  group_by(sentiment_label) |>
  summarise(
    campuses  = paste(campus, collapse = ", "),
    n         = n(),
    avg_score = round(mean(avg_sentiment), 3),
    .groups   = "drop"
  ) |>
  arrange(desc(avg_score)) |>
  kable(caption = "Tone Groups Across CSU Campuses (BQ 6)")
Tone Groups Across CSU Campuses (BQ 6)
sentiment_label campuses n avg_score
No data Cal Poly Humboldt, Cal Poly Pomona, Cal Poly San Luis Obispo, CSU Bakersfield, CSU Channel Islands, CSU Chico, CSU Dominguez Hills, CSU East Bay, CSU Fresno, CSU Fullerton, CSU Long Beach, CSU Los Angeles, CSU Maritime Academy, CSU Monterey Bay, CSU Northridge, CSU Sacramento, CSU San Bernardino, CSU San Marcos, CSU Stanislaus, San Diego State, San Francisco State, San Jose State, Sonoma State 23 NA

BQ 7: Title Tags of the Top 5 Enrolled Schools

top5 <- enrollment_clean |>
  slice_max(total_enrollment, n = 5) |>
  left_join(seo_data |> select(campus, title, meta_desc), by = "campus")

top5 |>
  mutate(total_enrollment = formatC(total_enrollment, format = "d", big.mark = ",")) |>
  select(campus, total_enrollment, title, meta_desc) |>
  kable(caption = "Title Tags — Top 5 Enrolled CSU Campuses (BQ 7)")
Title Tags — Top 5 Enrolled CSU Campuses (BQ 7)
campus total_enrollment title meta_desc
CSU Long Beach 45,064 California State University, Long Beach CSULB is a large, urban, comprehensive university in the 23-campus California State University system.
CSU Fullerton 40,421 Achieve Greatness: California State University, Fullerton Launch your career at CSUF, a top public Southern California university. 110 affordable degree programs. Large, diverse, supportive CSU campus.
CSU Northridge 37,701 California State University, Northridge CSUN stands out among Southern California universities with its dedication to student success, diversity, and community involvement. Get started now!
San Diego State 37,014 Home | San Diego State University NA
San Jose State 35,915 San José State University NA

BQ 8: Title Tags of the 5 Lowest-Enrolled Schools

bottom5 <- enrollment_clean |>
  slice_min(total_enrollment, n = 5) |>
  left_join(seo_data |> select(campus, title, meta_desc), by = "campus")

bottom5 |>
  mutate(total_enrollment = formatC(total_enrollment, format = "d", big.mark = ",")) |>
  select(campus, total_enrollment, title, meta_desc) |>
  kable(caption = "Title Tags — 5 Lowest-Enrolled CSU Campuses (BQ 8)")
Title Tags — 5 Lowest-Enrolled CSU Campuses (BQ 8)
campus total_enrollment title meta_desc
CSU Maritime Academy 912 Home | Cal Poly Maritime Academy NA
Cal Poly Humboldt 6,699 Cal Poly Humboldt | California State Polytechnic University, Humboldt Explore Cal Poly Humboldt’s innovative, hands-on academic programs amplified by the incredible learning environment of California’s North Coast.
Sonoma State 6,912 NA NA
CSU Channel Islands 7,104 CSU Channel Islands Welcome to California State University Channel Islands (CSUCI) in Ventura County. Explore our diverse academic programs, campus life, and community engagement.
CSU Monterey Bay 8,196 Home | California State University Monterey Bay California State University, Monterey Bay (CSUMB) offers exceptional academic programs, hands-on learning, and a vibrant community in a stunning coastal setting. Discover your future at CSUMB., Cal State Monterey Bay offers an affordable, accessible education guided by mentorship and inspired by our coastal location.

Data Summary

tibble(
  Dataset = c(
    "SEO Data",
    "Enrollment",
    "Demographics (raw)",
    "Reddit Posts (raw)",
    "Reddit Sentiment (post-level)",
    "Campus Sentiment (summary)",
    "Google Trends (time series)",
    "Google Trends (summary)"
  ),
  Rows = c(
    nrow(seo_data),
    nrow(enrollment_clean),
    nrow(csu_demographics),
    nrow(reddit_raw),
    nrow(reddit_sentiment),
    nrow(campus_sentiment),
    nrow(trends_data),
    nrow(trends_summary)
  ),
  File = c(
    "csu_seo_data.csv",
    "csu_enrollment.csv",
    "csu_demographics.csv",
    "csu_reddit_raw.csv",
    "csu_reddit_sentiment.csv",
    "csu_campus_sentiment.csv",
    "csu_trends_timeseries.csv",
    "csu_trends_summary.csv"
  )
) |>
  kable(caption = "All Output Files")
All Output Files
Dataset Rows File
SEO Data 23 csu_seo_data.csv
Enrollment 23 csu_enrollment.csv
Demographics (raw) 9 csu_demographics.csv
Reddit Posts (raw) 0 csu_reddit_raw.csv
Reddit Sentiment (post-level) 0 csu_reddit_sentiment.csv
Campus Sentiment (summary) 23 csu_campus_sentiment.csv
Google Trends (time series) 6026 csu_trends_timeseries.csv
Google Trends (summary) 23 csu_trends_summary.csv