Wyndham is ranked 4th among all councils in Victoria in terms of number of recorded offences, but ranked 54th in terms of these offences relative to the council’s population. Both of these rankings refer to the same council in the same year.
Now, what does a crime ranking mean?
I investigate this in three dimensions: counts and rates of offences, offence categories, and over time. This report relies on data from Crime Statistics Agency (CSA, 2026) for 79 Victorian council regions, spanning the period from June 2017 to June 2026.
Wyndham had 23,923 offences for the year ended June 2026. This put it at position 4 based on count while its rate of offences was 6,554 per 100,000 people, putting it at 54th position by rate.
The case of Northern Grampians is opposite, being at position 55th by count and 6th by rate.
Count gives information about the number of offences in each council. Rate takes into account the offence count against the resident population in each council. The use of different measures changes the comparison between these two councils and the other councils in Victoria.
Hover over a council to get its count, rate and ranks. Points on the dotted line will have similar ranks using either of the two measures.
Source: Crime Statistics Agency (2026), Table 01. The dotted line shows equal ranks. The ranking for offenses committed does not indicate personal security levels. Ranking involves 79 councils in Victoria where equal values are given equal ranks. There is no necessary relationship between the difference in ranks and the offense levels.
The overall rate rank of Wyndham is 54th; however, its rank differs among offence categories. Wyndham has ranked 30th in property and deception offences, and 64th in justice procedures offences.
Northern Grampians has an overall rank of 6th, whereas its ranks in the five offence categories range from 3rd to 14th.
The overall rank takes into account the five offence categories above. The consideration of each category individually reveals information that is not revealed in the overall rank.
Select a council using the drop down menu above. The points indicate its ranks within each of the offence categories, whereas the dashed line indicates its overall rank.
Source: Crime Statistics Agency (2026), Tables 01 and 02. The category ranking has used aggregated rates for the LGAs from Table 02. The overall ranking has used published rates from Table 01. These categories have data for all 79 councils. “Other offences” category has been excluded since data is available only for 74 councils. The dashed line represents the rank of the chosen council in the overall rate. The detailed calculations may vary from the published values. Ranking does not take into consideration the seriousness of the offence.
In 2017, Wyndham ranked 55th in the rate ranking and in 2026, 54th.
It appears to remain largely in the same place, however, its offence rate experienced ups and downs throughout this period.
The rate increased by 7.7% between 2017 and 2026, even though it decreased by 7.6% between 2025 and 2026.
Unlike Wyndham, Northern Grampians had a different trend. The rate increased by 39.0% between 2017 and 2026, including an increase of 19.8% in the last year. The rank changed from 12th to 6th.
Rank reflects the position of the council compared to other councils. The rate and its history reveal what has changed within this council.
Hover over the dot to see the count, rate, rank and change from the previous year. The labels on the ends of the lines reveal the total percentage change since 2017.
Source: Crime Statistics Agency (2026), Table 01. Each year covers a 12-month period ending in June. Wyndham and Northern Grampians are contrasting examples from Chart 1; they are not a representative sample of Victorian councils.
Before judging a council by its crime ranking, ask: Is the ranking based on counts or rates? Which offences does it include? What has changed over time? A single rank cannot answer all three questions.
I used the CSA’s recorded offences workbook for the year ending June 2026 (Crime Statistics Agency, 2026).
The council comparisons include 79 local government areas. I excluded regional totals, justice institutions and immigration facilities, and Unincorporated Victoria from the council dataset.
Table 01 and Table 02 were converted from the downloaded workbook
into UTF-8 CSV files using a Python standard-library script
(support/export_source_tables.py). This export extracts
stored cell value contents without changing the numeric precision as
represented by Excel formatting, and without calculating any new rate
statistics. This conversation script does not change the counts.
The R preparation script imports these CSV files with
read.csv(), converts numeric fields, simplifies column
names and trims text. It checks row counts, council coverage, missing
values, negative values and duplicate records. The report does not need
to reopen the Excel workbook during knitting.
For overall counts, rates and rankings, I used the published figures in Table 01.
For offence categories, I added the detailed counts and LGA rates in Table 02 within each council, year and offence division. Police service area rates were not used.
I also compared the detailed counts with the published totals. They matched for 540 of 790 council-year records. The remaining 250 differed by exactly one offence. I retained these differences rather than changing the figures to make the tables agree. The exact cause of each difference was not established.
Councils were ranked from highest value to lowest value, independently for each year. For categories comparison, the ranking was independent for each offence division.
The SQL command is min_rank(desc(value)). The same value
is given the same rank, while the subsequent one is left unused. For
instance, two councils with second place will have rank 2, followed by
rank 4. It is consistent with the behavior of min_rank()
(Wickham et al., 2026).
The rank difference is:
Rank difference = count rank − rate rank.
If the answer is positive, the council occupies higher positions in the ranking by rate than by count.
For the annual change shown in Chart 3, I used:
Annual change (%) = ((current year’s rate − previous year’s rate) / previous year’s rate) × 100.
The R calculation is equivalent to:
100 * (offence_rate / previous_rate - 1)
There is no annual change for the first year because the dataset used here does not include the preceding year’s rate.
For the change between the first and last years, I used:
Change from 2017 to 2026 (%) = ((2026 rate − 2017 rate) / 2017 rate) × 100.
These are standard percentage-change calculations applied to the CSA rates. The endpoint change is the total change over the period, not an average annual growth rate.
Calculations use the numeric precision stored in the source workbook. Further rounding is applied only when displaying figures.
I used R for the analysis and visualisations. R provides the statistical computing environment used by the scripts (R Core Team, 2026).
The main packages and their roles were:
read.csv() and
converting numeric fields (R Core Team, 2026).str_trim()
(Wickham, 2025).These references document the software and methods used. They do not mean that the complete assignment scripts were copied from those publications.
Council areas contain multiple neighbourhoods. A council-level result should not be treated as a description of every suburb, street or resident within that area.
The figures describe recorded offences. A rate per 100,000 residents is not an individual’s probability of experiencing crime.
The charts show differences and changes in the data. They do not establish what caused those patterns or provide a complete measure of personal safety.
Use OpenAI(chatgpt) for refine the written work.
Allaire, J. J., Xie, Y., Dervieux, C., McPherson, J., Luraschi, J., Ushey, K., Atkins, A., Wickham, H., Cheng, J., Chang, W., & Iannone, R. (2026). rmarkdown: Dynamic documents for R (Version 2.32) [Computer software]. https://github.com/rstudio/rmarkdown
Crime Statistics Agency. (2026). Recorded offences by LGA: Year ending June 2026 [Data set]. DataVic. https://discover.data.vic.gov.au/dataset/data-tables-recorded-offences
R Core Team. (2026). R: A language and environment for statistical computing [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Sievert, C. (2020). Interactive web-based data visualization with R, plotly, and shiny. Chapman & Hall/CRC. https://plotly-r.com/
Wickham, H. (2025). stringr: Simple, consistent wrappers for common string operations (Version 1.6.0) [Computer software]. https://doi.org/10.32614/CRAN.package.stringr
Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2026). dplyr: A grammar of data manipulation (Version 1.2.0) [Computer software]. https://doi.org/10.32614/CRAN.package.dplyr
Xie, Y. (2026). knitr: A general-purpose package for dynamic report generation in R (Version 1.52) [Computer software]. https://yihui.org/knitr/