How to compute rolling crime totals from MPD’s daily crime dashboard for custom date ranges?

Checked on January 6, 2026
Disclaimer: Factually can make mistakes. Please verify important information or breaking news. Learn more.

This fact-check may be outdated. Consider refreshing it to get the most current information.

Executive summary

Computing rolling crime totals from the Metropolitan Police Department’s (MPD) daily crime dashboard requires downloading MPD’s report-date data, choosing a rolling-window length, and summing incidents per window using a spreadsheet or script; the MPD dashboard uses “report date” and preliminary DC code offense definitions rather than FBI NIBRS categories, so methodological choices materially affect results [1] [2]. The DC Crime Cards mapping app and MPD’s data pages provide the export and refresh mechanics needed to build custom date ranges and moving sums, but users must account for the dashboard’s preliminary status and daily cutoffs when interpreting trends [3] [4].

1. Know what the dashboard actually contains and its limits

MPD’s public dashboards compile offenses based on the date the offense was reported to MPD—“Report Date”—and the visualizations and downloadable Crime Cards reflect preliminary DC criminal-code offense definitions rather than FBI or final incident classifications, meaning totals can change with reclassification or later updates [1] [4]. The district-level “Year‑to‑Date Crime Comparison” snapshot on the daily crime page is explicitly updated to a specific midnight cutoff and is not the same as FBI NIBRS Part I totals, so direct comparisons to federal series require caution [2] [4]. Users should treat the dashboard as a near-real-time operational feed, not a finalized historic record [4].

2. Get the raw data from MPD’s tools

Start by exporting incident-level or daily-aggregated data from MPD’s data portals: the DC Crime Cards application and the MPD “Data and Statistics” download links are the canonical sources for the public dashboard figures and provide CSV/JSON export options for the report-date records needed to compute rolling totals [3] [1]. Confirm the download includes the report date field and the offense-category fields you want (violent/property/individual offense codes) because rolling sums must be computed on consistent fields derived from the report-date timestamp [1]. The daily dashboard itself is a summary snapshot and may not directly give day-by-day CSVs without using the Crime Cards or data mapping export [3].

3. Prepare the dataset: normalize dates and categories

Once exported, canonicalize the report-date into a proper date column and filter to the custom date range to be analyzed; because the dashboard resets at midnight for each day, ensure the time zone and midnight cutoff match MPD’s published behavior to avoid off-by-one errors [4]. Map MPD’s preliminary DC offense labels into the analysis buckets desired (for example, violent vs. property) using the Crime Cards definitions so that the moving totals compare like with like [1]. Note that the public data may undergo reclassification later, so capture a timestamp for the download to document which “version” of MPD’s preliminary data is being analyzed [4].

4. Compute rolling totals: steps for spreadsheets and code

For a simple spreadsheet: create a table with one row per report-date and counts per offense category, then add a rolling-sum column using a windowed SUM over the prior N days (e.g., =SUM(offset/current row, −(N−1), 0…)) to produce a moving total for any N-day window. For reproducible code, sort by report-date and apply a windowed sum (pandas: df.set_index('report_date').rolling(window=N).sum()) to compute N-day rolling totals efficiently; this works regardless of whether N is 7, 30, or custom. Always validate by spot-checking totals against the dashboard’s published daily snapshot for overlapping dates to confirm alignment with MPD’s reporting logic [2] [1].

5. Interpret results and disclose caveats

Any rolling-total chart derived from MPD’s daily dashboard must explicitly disclose that numbers are preliminary, are compiled by report date, and do not equate to FBI NIBRS Part I counts; MPD’s own pages warn users that comparisons to federal statistics are “inaccurate and misleading” if those differences aren’t accounted for [4] [2]. Alternative viewpoints include treating report-date trends as a useful operational signal for short-term change while reserving archival or policy analysis for final, reclassified datasets; the data portals (Crime Cards and MPD downloads) enable both approaches but require transparency about the preliminary nature of the source [1] [3]. If institutional motives matter, note that daily dashboards emphasize timeliness and public transparency while MPD hedges on classification accuracy—an implicit tradeoff between speed and certainty that should be flagged in any public reporting [4].

Want to dive deeper?
How do MPD report-date crime figures differ from FBI NIBRS counts and why does it matter?
What are step‑by‑step scripts (Python/pandas) for downloading MPD Crime Cards CSVs and computing 7‑, 30‑, and 90‑day rolling totals?
How frequently does MPD reclassify historic incidents and how should analysts version-control dashboard downloads?