"An average of X incidents a day" can mean three different numbers. The mean adds everything up and divides. The median is the middle value when days are sorted. The mode is the most common value. On tidy, symmetric data they agree. Campus crime data is not tidy: most days are quiet, a few (move-in weekend, home football games) are wild. Watch what that skew does to each average.
Check the "exclude the busiest 1%" box. The mean drops — those few frantic days were dragging it up — but the median barely moves, because removing a handful of values from the top doesn't change what's in the middle. Statisticians say the median is robust to outliers. That's why stories about incomes, home prices, and response times usually report medians: one billionaire (or one chaotic homecoming weekend) shouldn't be able to move "the typical" anything.
For your story: if you write "UMPD handles an average of N incidents a day," which number is honest? There's no single right answer — but you should know which one you're using, and whether a reader would picture a typical day or an arithmetic one.
library(tidyverse)
library(lubridate)
activity <- read_csv("https://raw.githubusercontent.com/dwillis/umpd-logs/master/data/all-police-activity.csv")
# One row per calendar day, INCLUDING days with zero incidents --
# forgetting the zero days is the classic way to get this wrong.
daily <- activity |>
mutate(day = as_date(`Date Occurred`)) |>
filter(day >= ymd("2015-01-01")) |> # a few rows carry obviously wrong dates
count(day, name = "incidents") |>
complete(day = seq(min(day), max(day), by = "day"),
fill = list(incidents = 0))
daily |>
summarize(mean = round(mean(incidents), 1),
median = median(incidents))
The numbers above update daily, so your R output may differ slightly from a chart you saw yesterday. For a version pinned to an exact dataset, use a weekly exercise.