Transparent methods

How the ZIP-year outcomes are calculated and classified.

This page explains the dataset structure, formulas, analytical labels, publication choices, and important limits on interpretation.

Purpose

The dashboard aligns three recorded public-safety measures—calls, arrests, and offenses—at the ZIP-code and calendar-year level. Its purpose is to make geographic patterns easier to inspect and to help residents, researchers, journalists, and policymakers identify questions that deserve deeper analysis.

It is an independent analytical resource produced within the National Data System ecosystem. It is not an official San Antonio Police Department or City of San Antonio publication.

Unit of analysis

Each record represents one ZIP code in one year. The public dataset contains 298 ZIP-year records covering 2023, 2024, 2025, and a partial 2026 period. ZIP codes with small or unusual counts remain in the full table so users can see the supplied records, but ranking controls include a minimum-call floor to reduce misleading comparisons.

2025 source-record audit

The 2025 ZIP analysis includes 59,155 arrest-source rows and 135,285 offense-source rows assigned to 76 ZIP areas. The original source files contain 59,505 arrest rows and 136,708 offense rows for 2025. Approximately 0.59% of arrest rows and 1.04% of offense rows were not represented in the ZIP-level outcome table. Source rows are not equivalent to unique reports: the arrest data contains 37,247 unique Report IDs, while the offense data contains 125,125 unique Report IDs. The arrests-per-100-offenses measure is an aggregate row-count ratio and must not be interpreted as a clearance rate.

The source audit distinguishes raw CSV rows, unique Report_ID values, and the rows represented in the ZIP-level analytical table. These are different units and should not be presented as interchangeable counts.

Open the machine-readable 2025 audit JSON.

Measures and formulas

Arrest-to-call rate

total arrests ÷ total calls

The dashboard displays this as arrests per 100 calls. It does not mean that every call should or could result in an arrest.

Offense-to-call rate

total offenses ÷ total calls

The dashboard displays this as offenses per 100 calls. Calls can include service activity that is not recorded as an offense.

Arrest-to-offense rate

total arrests ÷ total offenses

The dashboard displays this as arrests per 100 offenses. This is an aggregate alignment ratio—not a case-clearance rate. It does not establish that a particular arrest resulted from a particular offense.

Analytical outcome profiles

ProfileRuleMeaning
Calls without offensesTotal offenses = 0The row contains calls but no aligned recorded offenses.
Lower arrest-to-offenseArrest-to-offense ratio < 0.25 and offenses > 0Fewer than 25 arrests per 100 recorded offenses in the aligned ZIP-year totals.
Higher arrest-to-offenseArrest-to-offense ratio > 0.75More than 75 arrests per 100 recorded offenses in the aligned ZIP-year totals.
Standard rangeAll other rowsThe ratio falls between the two analytical thresholds.

These labels are analytical categories, not official SAPD classifications. They do not label a ZIP code as safe, unsafe, effective, ineffective, over-policed, or under-policed.

Year treatment

2025 is the latest complete calendar year. It is the default for overview cards and rankings. The 2026 records are retained because they provide current directional context, but they are clearly marked as partial and should not be compared to full-year totals without adjusting for elapsed time and data completeness.

Ranking floor

The default ranking floor is 4,000 calls. Users may change it to 10,000, 20,000, or no minimum. The floor applies only to ranking panels. It does not remove records from the full downloadable dataset.

Small denominators can create extreme ratios. For example, one additional arrest or offense can sharply change a ZIP-year ratio when the underlying totals are very small. Those records are preserved for transparency but should be interpreted with caution.

Key limitations

Recommended companion data

Strong conclusions require additional context, including offense type and severity, call priority, dispatch and arrival times, case-clearance status, staffing and patrol deployment, demographic and population denominators, land use, daytime population, transportation corridors, and changes in reporting practices.

Data files and reproducibility

The deployable package includes the full CSV, a JSON representation used by the browser, a summary file, and a machine-readable manifest containing the schema, row count, year coverage, classification rules, and SHA-256 checksum. A PowerShell builder is also included so the site can be regenerated from the authoritative local CSV inside the National Data System environment.

Editorial standard

This dashboard treats rankings as prompts for accountability and further investigation—not as final judgments. Language is intentionally framed around recorded counts, aligned ratios, and analytical profiles to reduce the risk of implying causation that the dataset cannot establish.

Return to dashboard