Working with the Office of Student Activities (OSA) at St. Olaf, I get to see an up close and personal view of many aspects of student life, from St. Olaf sponsored transportation usage to on-campus event data to student survey data about their feelings of connectedness and belonging on campus. Over the past decade or so there has been an apparent decline (as observed anecdotally by the OSA staff) in student event attendance, likely due to the growth of technology and social media, and exacerbated even further due to residual effects of the isolation caused by the COVID-19 pandemic. Given this information, I will explore some data provided by the OSA to attempt to diagnose the problem and then provide actionable insights that can be used to improve student life on campus.
Firstly, I will join a St. Olaf on-campus event attendance dataset with a St. Olaf student belonging survey dataset by each student to observe the connection between number of events a student attends and their own reported feelings of belonging on campus. This is important to do first to demonstrate the significance and quantifiable impact of these events. If there is a strong link found, this will underscore the benefit and value of the tremendous time and effort it takes to put these events on. It will also raise the question of how we can improve event attendance through data in hopes that if we can optimize attendance, we will also likely be improving student satisfaction along the way.
Then, I will use the event attendance dataset again to explore whether this hypothesized reduction in event attendance exists at all, and if so to what extent.
Lastly, I will break down the event attendance dataset to look at what kinds of properties of an event seem to lead to greater attendance, and then be able to report that information back to the OSA so that they can use this data to drive real decision making when planning events, so that these events can be as positively impactful to students as possible.
It is important to also recognize before using any of this data that this data is real data provided by the college, and it contains sensitive data about real students. For this reason, I have made sure to do this analysis ethically and responsibly by getting explicit permission from all OSA staff in charge of managing the data prior to incorporating it into the project and by redacting any personally identifiable information. Since I am using student emails to join the event attendance and survey datasets, I will be doing this externally so that I can remove emails and other sensitive information before the data gets uploaded. Now that all the data is in one place and is joined, I have replaced student emails with anonymized IDs so we can still distinguish between unique students while maintaining their privacy.
Data Sources:
Event Attendance Data:
- Each row represents a specific person's attendance of a specific campus event
- Data was collected through Ole Card scans at event entrances
- Collected from September 2016 to May 2024
- Over 128,000 rows
- Contains name of student, student email, name of event, date of event, and hosting organization
Student Belonging Data:
- Each row represents a student survey response
- Data collected during February 2023
- Over 400 rows of data, representing just over half of the class of 2026, who were halfway through their freshmen year at the time of the survey (no other class years were included)
- A belonging quotient (ranging from 0 to 20) was created by summing the likert scale responses from strongly disagree to strongly agree (0 to 4 respectively) from 5 belonging statements:
1. I believe that I will be successful at St. Olaf.
2. I feel like I can be myself at St. Olaf.
3. I feel like I am an Ole.
4. I feel connected to the St. Olaf college community.
5. I feel like I am a valued member of the St. Olaf community.
library(tidyverse) #Loads in useful libraries, reads in the data
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(ggthemes)
library(viridis)
## Loading required package: viridisLite
library(dplyr)
event_attendees <- read_csv("event_attendees.csv")
## Rows: 128536 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): Fake_ID, Event, Start, Organization
## dbl (1): Belonging_Quotient
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
event_attendees
## # A tibble: 128,536 × 5
## Fake_ID Event Start Organization Belonging_Quotient
## <chr> <chr> <chr> <chr> <dbl>
## 1 CZICX93339 A Way Forward 03/3… Taylor Cent… NA
## 2 YZXCW10999 Stomazing Race 05/1… After Dark … NA
## 3 YZXCW10999 Being Black in America Panel 02/1… Taylor Cent… NA
## 4 VYJJO65571 Biology Webinar: Racial Dis… 09/2… Wellness Ce… NA
## 5 VJTSP50480 Ole Experience Workshop: Na… 08/1… Orientation… NA
## 6 VJTSP50480 Ole Experience Workshop: Na… 08/1… Orientation… NA
## 7 RKCLT93661 Grooveyard Pause Dance! 10/2… After Dark … NA
## 8 NCKBE5780 Jingle Ball Rock: A Semifor… 12/0… After Dark … NA
## 9 NCKBE5780 Snow Globe Dance 12/0… After Dark … NA
## 10 NCKBE5780 Stoball 12/0… After Dark … NA
## # ℹ 128,526 more rows
The first step to comparing belonging quotient to the number of events attended is to group the dataset by student, and also make sure that only the events attended prior to the survey (february 2023) are included. To do this, we need to first format the dates and times into date and time variables. Since we only have belonging data for a proportion of the class of 2026, we will also want to filter out any students for which we do not have data.
event_attendees <- #Reformats the string of event start date/times into separate date and time variables
event_attendees |>
mutate(Datetime = mdy_hm(Start),
Date = date(Datetime),
Hour = hour(Datetime)) |>
select(-Datetime, -Start)
student_belonging <- #Filters out data before the survey and people who were not included in the survey, and then groups by student, keeping only their belonging quotient and total events attended
event_attendees |>
filter(Date < "2023-02-01",
!is.na(Belonging_Quotient)) |>
group_by(Fake_ID) |>
summarize(Belonging_Quotient = mean(Belonging_Quotient),
Events_Attended = n())
head(student_belonging)
## # A tibble: 6 × 3
## Fake_ID Belonging_Quotient Events_Attended
## <chr> <dbl> <int>
## 1 ACBST15606 14 1
## 2 AEFZQ29254 16 11
## 3 AGCLM12842 9 1
## 4 AHDYE61312 17 1
## 5 APAPH10599 19 5
## 6 APBRQ54493 17 1
Now that the dataset contains the data that we need to compare students’ reported sense of belonging with the number of events they had attended up until February of their freshman year, we can now create a plot to examine whether or not the variables seem to be correlated.
student_belonging |>
ggplot(aes(x = Events_Attended, y = Belonging_Quotient)) +
geom_jitter(width = 0.5, height = 0.5) + #Using jitter to show volume of points in an area
geom_smooth(method = "lm", se = FALSE) +
labs(x = "Total Events Attended", y = "Belonging Score", title = "Correlation between Student Event Attendance and Sense of Belonging")
## `geom_smooth()` using formula = 'y ~ x'
ALT-TEXT: This graph is a scatterplot, representing the correlation between student event attendance and sense of belonging. The x-axis shows the number of events that students have attended ranging from 0 to 50, and the y-axis shows each student’s belonging score ranging from 0 to 20. The majority of the points on the graph are concentrated in the top-left of the graph, with a few outliers in the bottom left and top right, but none in the bottom right. There is also a linear regression line, showing a slight positive correlation between event attendance and reported sense of belonging.
Based on the scatterplot of event attendance and student belonging, we can see that their does seem to be a positive correlation between the two variables, although the correlation seems a bit weaker than I would have anticipated. For further analysis, it would be interesting to get more datapoints and look at the in-depth statistics like the correlation coefficient to understand the strength of the correlation. However, for the purposes of this analysis, it does seem that there is a link between the number of events a student attends and their sense of belonging.
To determine what kinds of trends exist with regard to event attendance, I will create a density plot to represent the amount of people going to events.
event_attendees |> #Creates density plot to track event attendance over time
ggplot() +
geom_density(aes(x = Date)) +
labs(x = "Year", y = "Event Attendance", title = "Event Attendance over Time") +
theme(axis.ticks.y = element_blank(), #Gets rid of y-axis tick markers because they are irrelevant
axis.text.y = element_blank())
ALT-TEXT: This graph is a density plot which shows the year, from late 2016 to early 2024 on the x-axis, and then event attendance on the y-axis. Because it is a density plot, the y-axis tickmarkers have no significance and is therefore omitted. The shape of the graph, with some variation, is strongly upward sloping, with a bit of a dip in 2020 and 2021, peaking towards the end of 2023.
Wow! This graph is the total opposite of what I would have expected. Although there was a predictable downtick during 2020 and early 2021 due to the pandemic, the event attendance seems to be trending significantly upwards over time. This seems to contradict the idea that students have been attending less and less events. But, before we come to any strong conclusions, it’s important to recognize that there could be other factors that are influencing this apparent increase in event attendance. It’s reasonable to assume that over time, the event attendance tracking structures have gotten more robust and that in its initial stages, not everything was being tracked. It’s also possible that the total number of events has gone up over time, yet the attendees per event has undergone little change. Further analysis could benefit from a breakdown of event attendance by individual event so we can see average event attendance as opposed to aggregate.
Lastly, we will explore event attendance by start time of the event, so we can provide recommendations to the OSA with regard to how they can optimize their event planning to increase attendance and potentially also increase student belonging in the process.
event_attendees |> #Creates density plot to track event attendance over time
ggplot() +
geom_bar(aes(x = Hour)) +
labs(x = "Time of Day (Military Time)", y = "Event Attendance", title = "Event Attendance by Time of Day")
ALT-TEXT: This graph is a bar chart, which shows the time of day that campus events started on the x-axis and the aggregate attendance of events at those times on the y-axis. The times range from 0, or 12am up to 22 (or 10pm). The bar chart is quite steeply increasing, starting from 8am until 10pm, with a bit of a dip from 12pm to 2pm. There are a couple outliers of events at early times in the morning, even before 8am, but it is likely that these are just errors within the data. The y-axis ranges from 0 aggregate event attendance all the way up to its peak at 7pm at around 20,000.
Based on this graph, we can see that for events that we want to take place during the first part of the day, the best time for event attendance is late morning. 4pm also seems to be a great time for events, especially with classes finishing up around 3pm. The best overall window of time for events, however, is between 7pm and 10pm.
In summary, we have demonstrated some link between event attendance and student belonging, which highlights the importance of these events. We then learned that the alleged declining trend in event attendance seems to be only perceived, although further analysis may be required. To optimize event attendance, we have found which times of day lead to the greatest event attendance, which is a very actionable insight that can be immediately taken into account for event planning going forward from the OSA. I’m glad to have found insights through this data that I think can actually make an impact on our campus, and I’m excited to keep exploring further, and looking at other ways to break down event attendance and learn how we at the OSA can improve it going forward.