Racially motivated hate crime in London - Analysis

^Note: While the goal for this analysis is to specifically extract numbers for racially motivated crime in London, some of the reported data groups racially and religiously motivated crime together. Where this is the case, we will refer to the crime category by its proper full classification. In addition, the groupings for hate crime vary over time and dataset.

Data and notes

Police recorded crime and outcomes open data tables

Hate crime statistics

The data for the following year Hate crime, England and Wales, 2014 to 2015 similarly contains an excel document, recorded under Hate crime, England and Wales, 2014 to 2015: data tables. Here "Hate crime strand: Race" is reported as:

All the numbers for the period 2011-2014 differ.

MPS hate crime or special crime dashboard data

Additional resources

Definition of hate crime used for the purposes of hate crime recording in the UK. In particular, note:

Discussion

Helper functions

Police recorded crime and outcomes open data tables

Data for period Apr 2002 to Mar 2007

Corresponding FY: FY2002-2003 Q1 to FY2006-2007 Q4

# this cell it commented out as it takes a long time to compute; the resulting dataset is loaded from disk. dfs_1 = [] for i in range(2, 7): df = pd.read_excel("data/prc-pfa-0203-to-0607-tabs.ods", sheet_name='200{}-'.format(i) +'0'+ str(i+1)) dfs_1.append(df)df_crimes_1 = pd.concat(dfs_1)df_crimes_1.to_csv("data/df_crimes_1.csv")

Data for the period Apr 2007 to Mar 2012

Corresponding FY: FY2007-2008 Q1 to FY2011-2012 Q4

# this cell it commented out as it takes a long time to compute; the resulting dataset is loaded from disk. dfs_2 = [] for i in range(7, 12): if (i<9): df = pd.read_excel("data/prc-pfa-mar2008-mar2012-tabs.ods", sheet_name='200{}-'.format(i) +'0'+ str(i+1)) elif i==9: df = pd.read_excel("data/prc-pfa-mar2008-mar2012-tabs.ods", sheet_name='2009-10') else: df = pd.read_excel("data/prc-pfa-mar2008-mar2012-tabs.ods", sheet_name='20{}-'.format(i) + str(i+1)) dfs_2.append(df)df_crimes_2 = pd.concat(dfs_2)df_crimes_2.to_csv("data/df_crimes_2.csv")

Data for period Apr 2012 to Dec 2020

Corresponding FY: FY2012-2013 Q1 to FY2020-2021 Q3

# this cell it commented out as it takes a long time to compute; the resulting dataset is loaded from disk. dfs_3 = [] for i in range(12, 21): df = pd.read_excel("data/prc-pfa-mar2013-onwards-tables-130521.ods", sheet_name='20{}-'.format(i) + str(i+1)) dfs_3.append(df)df_crimes_3 = pd.concat(dfs_3)df_crimes_3.to_csv("data/df_crimes_3.csv")

Combined data for all the available periods

df_crimes = pd.concat([df_crimes_1, df_crimes_2, df_crimes_3])df_crimes.to_csv("data/crimes_all.csv")

Convert financial year to calendar year

Select data just for the Met Police and only for the selected crimes as per above

Visualise main results

Crimes per crime group for a given year

# uncomment this data set to view a list of bar charts per year of all the crime categories # a more unseful representation with a line chart is below for year in ['2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020']: barchart(list(crimes_per_group_per_year(year).index), list(crimes_per_group_per_year(year).values), title=year)

Crimes per crime group over time

Plot a line chart over time to observe if there are any changes per category.

MPS hate crime or special crime dashboard data

Select only the categories of crime that fall under the major category of hate crime, and the subcategory 'Racist and Religious Hate Crime'.

Re-compute the data on an yearly basis. The montly-basis data shows dips for certain months for which I don't have information of the cause. This could be because of recording timings, etc. To eliminate any strange ambiguity, we want to consider the data on a yearly basis.

The same data, plotted in the original montly basis interval. From the original Met Police Dashboard

"Met Police Hate Crime Dashboard"