Продолжаем наше исследование, посвященное ситуации в США со стрельбой полицейских и уровнем преступности среди представителей белой и черной (афроамериканской) рас. Напомню, что в первой части я рассказал о предпосылках исследования, его целях и принятых оговорках / допущениях; а во второй части была демонстрация анализа взаимосвязи между расовой принадлежностью, преступностью и гибелью от рук служб правопорядка.
Напомню также и промежуточные выводы, сделанные на основе статистических наблюдений (за период с 2000 по 2018 год):
В количественном (абсолютном) выражении белых жертв полиции больше, чем черных.
В среднем от рук полиции погибает 5.9 на 1 млн. черных и 2.3 на 1 млн. белых (черных в 2.6 раз больше).
Годовой разброс (отклонение) по гибели чернокожих от рук полиции почти в два раза выше, чем в данных по белым жертвам.
Жертвы полиции среди белых монотонно растут (в среднем на 0.1 - 0.2 в год), в то время как жертвы среди черных вернулись на уровень 2009 г. после пика в 2011 - 2013 гг.
Белые совершают в два раза больше преступлений, чем черные, в абсолютном выражении, но в 3 раза меньше в относительном выражении (на миллион представителей своей расы).
Преступность среди белых относительно монотонно растет на протяжении всего периода (выросла в 2 раза за 18 лет). Преступность среди черных также растет, но скачкообразно. За весь период преступность среди черных выросла также в 2 раза (аналогично белым).
Гибель от рук полиции связана с криминальностью (количеством совершаемых преступлений). При этом эта корреляция неоднородна по расам: для белых она близка к идеальной, для черных далека от таковой.
Смертельные случаи при встречах с полицией растут "в ответ" на рост преступности, с лагом в несколько лет (особенно видно по данным среди черных).
Белые преступники немного чаще встречают смерть от рук полиции, чем черные.
Сегодня, как я обещал, посмотрим на географическое распределение этих данных по отдельным штатам США, что должно либо подтвердить, либо опровергнуть выводы, сделанные в масштабах всей страны.
Однако, прежде чем мы займемся этой географией, давайте сделаем шаг назад и посмотрим, что будет, если вместо категории "все преступления" (All Offenses) в качестве исходных данных по преступности взять только самые "злодейские". Многие из моих читателей указали в комментариях, что это будет правильнее, так как "все преступления" включают, например, мелкое воровство или торговлю наркотиками, что (по логике) не должно быть связано с агрессивным поведением, провоцирующим полицейских на стрельбу. Хотя я лично не могу целиком с этим согласиться и считаю, что любое совершенное преступление может повлечь за собой повышенное внимание со стороны полиции (которое, в свою очередь, может кончиться не лучшим образом)... все же, давайте проявим любопытство и посмотрим!
Нападения и убийства вместо "всех преступлений"
Итак, в том месте, где мы формируем датасет по преступлениям, вместо строки
df_crimes1 = df_crimes1.loc[df_crimes1['Offense'] == 'All Offenses']
пишем:
df_crimes1 = df_crimes1.loc[df_crimes1['Offense'].str.contains('Assault|Murder')]
Таким образом, наш новый фильтр включает виды преступлений, связанных с нападением (Assault) и убийством (Murder). Замечу сразу, что этот набор данных не включает непредумышленное убийство и убийство в рамках самозащиты, а только умышленное убийство.
Весь остальной код оставляем без изменений. Вот что дает перерасчет данных.
Удельное количество преступлений на миллион представителей расы:
Видим, что порядок меньше, но графики почти идентичны предыдущим (по всем преступлениям).
Связь между преступностью и жертвами полиции:
Корреляционная матрица:
White_promln_cr | White_promln_uof | Black_promln_cr | Black_promln_uof | |
---|---|---|---|---|
White_promln_cr | 1.000000 | 0.684757 | 0.986622 | 0.729674 |
White_promln_uof | 0.684757 | 1.000000 | 0.614132 | 0.795486 |
Black_promln_cr | 0.986622 | 0.614132 | 1.000000 | 0.680893 |
Black_promln_uof | 0.729674 | 0.795486 | 0.680893 | 1.000000 |
Как видим, согласованность в этом случае хуже (0.68 против 0.88 и 0.72 по данным всех преступлений). Но радует здесь, по крайней мере, что коэффициенты корреляции почти не различаются между белыми и черными, т.е. можно сказать, что между преступлениями и жертвами полиции есть некая постоянная корреляция.
Ну, и наш "самодельный" индекс - отношение количества жертв полиции к количеству преступлений:
Здесь разница между расами выглядит еще более заметной, чем в прошлый раз. Вывод тот же - белые преступники чаще гибнут от рук полиции, чем черные.
Таким образом, все сделанные выводы остаются в силе.
Что ж, теперь - уроки географии! :)
Исходные данные
Для анализа преступности по штатам я использовал другие исходные датасеты из базы данных ФБР, а именно:
оценку количества основных видов преступлений по штатам (State level UCR Estimated Crime Data Endpoint) - без разбивки по расовой принадлежности (CSV здесь);
количество арестов по штатам (State level Arrest Demographic Count By Offense Endpoint) - с разбивкой по расовой принадлежности (CSV здесь).
К сожалению, получить качественные данные по совершенным преступлениям, штатам и расовому признаку не удалось, как я ни бился: возвращаемые результаты далеко не полные, в частности, отсутствует информация по некоторым штатам. Но и этих данных вполне достаточно для нашего скромного анализа.
Первый набор содержит данные о количестве преступлений по всем 51 штату с 1991 по 2018 год, по следующим видам преступлений:
violent crime: все насильственные преступления (убийство, грабеж, изнасилование и нападение с отягчающими обстоятельствами), см. определение на сайте ФБР;
homicide: убийство
rape legacy: изнасилование (по старым меркам - до 2013 г.)
rape revised: изнасилование (по новым меркам - начиная с 2013 г.)
robbery: грабеж
aggravated assault: нападение с отягчающими обстоятельствами
property crime: преступления против собственности
burglary: взлом / проникновение в собственность
larceny: хищение
motor vehicle theft: угон автотранспорта
arson: поджог
Для целей настоящего исследования мы будем использовать количество насильственных преступлений (violent crime), что согласуется с вышеизложенной логикой.
Второй набор содержит данные по количествам преступлений по 51 штату с 2000 по 2018 год, с разбивкой по расам (выделяемые расовые категории - см. в предыдущей статье). Поскольку БД по арестам имеет несколько другую разбивку по типам преступлений и не имеет готового набора по насильственным преступлениям, исходный запрос и результаты содержат 4 вида соответствующих правонарушений (убийство, грабеж, изнасилование и нападение с отягчающими обстоятельствами).
География преступности без расовой принадлежности
Для начала посмотрим на количество совершаемых преступлений насильственного характера по штатам без расовой принадлежности преступников:
import pandas as pd, numpy as np
CRIME_STATES_FILE = ROOT_FOLDER + '\\crimes_by_state.csv'
df_crime_states = pd.read_csv(CRIME_STATES_FILE, sep=';', header=0,
usecols=['year', 'state_abbr', 'population', 'violent_crime'])
Загруженные данные:
year | state_abbr | population | violent_crime | |
---|---|---|---|---|
0 | 2016 | AL | 4860545 | 25878 |
1 | 1996 | AL | 4273000 | 24159 |
2 | 1997 | AL | 4319000 | 24379 |
3 | 1998 | AL | 4352000 | 22286 |
4 | 1999 | AL | 4369862 | 21421 |
... | ... | ... | ... | ... |
1423 | 2000 | DC | 572059 | 8626 |
1424 | 2001 | DC | 573822 | 9195 |
1425 | 2002 | DC | 569157 | 9322 |
1426 | 2003 | DC | 557620 | 9061 |
1427 | 2016 | DC | 684336 | 8236 |
1428 rows × 4 columns
Добавим полные названия штатов (CSV перечня штатов здесь - уже использовали в прошлый раз). Также почистим и отсортируем данные:
df_crime_states = df_crime_states.merge(df_state_names, on='state_abbr')
df_crime_states.dropna(inplace=True)
df_crime_states.sort_values(by=['year', 'state_abbr'], inplace=True)
Поскольку в датасете есть данные о численности населения, вычислим удельные значения преступности на миллион человек:
df_crime_states['crime_promln'] = df_crime_states['violent_crime'] * 1e6 / df_crime_states['population']
Наконец, отобразим данные в виде двумерного массива за период с 2000 по 2018 год, переместив названия штатов в столбцы и убрав лишние столбцы:
df_crime_states_agg = df_crime_states.groupby(['state_name', 'year'])['violent_crime'].sum().unstack(level=1).T
df_crime_states_agg.fillna(0, inplace=True)
df_crime_states_agg = df_crime_states_agg.astype('uint32').loc[2000:2018, :]
Получили таблицу с 19 строками (по количеству наблюдений, т.е. лет с 2000 по 2018) и 51 столбцом (по количеству штатов).
Давайте отобразим топ-10 штатов по среднегодовому количеству преступлений:
df_crime_states_top10 = df_crime_states_agg.describe().T.nlargest(10, 'mean').astype('int32')
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
state_name | ||||||||
California | 19 | 181514 | 19425 | 153763 | 165508 | 178597 | 193022 | 212867 |
Texas | 19 | 117614 | 6522 | 104734 | 113212 | 121091 | 122084 | 126018 |
Florida | 19 | 110104 | 18542 | 81980 | 92809 | 113541 | 127488 | 131878 |
New York | 19 | 81618 | 9548 | 68495 | 75549 | 77563 | 85376 | 105111 |
Illinois | 19 | 62866 | 10445 | 47775 | 54039 | 64185 | 69937 | 81196 |
Michigan | 19 | 49273 | 5029 | 41712 | 44900 | 49737 | 54035 | 56981 |
Pennsylvania | 19 | 46941 | 5066 | 39192 | 41607 | 48188 | 51021 | 55028 |
Tennessee | 19 | 41951 | 2432 | 38063 | 40321 | 41562 | 43358 | 46482 |
Georgia | 19 | 40228 | 3327 | 34355 | 38283 | 39435 | 41495 | 47353 |
North Carolina | 19 | 37936 | 3193 | 32718 | 34706 | 38243 | 40258 | 43125 |
Давайте также посмотрим на графике для наглядности:
df_crime_states_top10 = df_crime_states_agg.loc[:, df_crime_states_agg_top10.index]
plt = df_crime_states_top10.plot.box(figsize=(12, 10))
plt.set_ylabel('Кол-во насильственных преступлений (2000 - 2018)')
"Голливудский" штат намного опережает по этой печальной статистике все остальные. Тройка лидеров - южные штаты (Калифорния, Техас и Флорида); именно про эти штаты снято большинство американских фильмов про бандитов :)
Также видно, что в некоторых штатах уровень преступности существенно изменился за наблюдаемый период (Калифорния, Флорида, Иллинойс), в то время как в других он остался почти на том же уровне (например, в Джорджии).
Подозреваю, что преступность непосредственно связана с численностью населения. Давайте посмотрим на топ-10 штатов по населению в 2018 году:
df_crime_states_2018 = df_crime_states.loc[df_crime_states['year'] == 2018]
plt = df_crime_states_2018.nlargest(10, 'population').sort_values(by='population').plot.barh(x='state_name', y='population', legend=False, figsize=(10,5))
plt.set_xlabel('Население (2018)')
plt.set_ylabel('')
Как говорится, те же фаберже, только в профиль. Удостоверимся в корреляции между преступностью и населением:
# группируем данные по штатам за 2000 - 2018 гг (среднее арифметическое по полям)
df_corr = df_crime_states[df_crime_states['year']>=2000].groupby(['state_name']).mean()
# смотрим корреляцию между столбцами "население" и "кол-во преступлений"
df_corr = df_corr.loc[:, ['population', 'violent_crime']]
df_corr.corr(method='pearson').at['population', 'violent_crime']
- получаем коэффициент корреляции 0.98. Что и требовалось доказать!
А вот удельные показатели преступности дают совсем другой топ-лист:
plt = df_crime_states_2018.nlargest(10, 'crime_promln').sort_values(by='crime_promln').plot.barh(x='state_name', y='crime_promln', legend=False, figsize=(10,5))
plt.set_xlabel('Кол-во насильственных преступлений на 1 млн. чел. (2018)')
plt.set_ylabel('')
Вот так дела! По удельным значениям впереди штаты с небольшой численностью населения: Округ Колумбия (т.е. столица США) и Аляска (в обоих по 700+ тыс. человек на 2018 г.) и один штат со средней численностью (Нью-Мексико с 2 млн. чел.) Из нашего предыдущего топа здесь засветился только Теннесси, что придает этому штату, мягко говоря, не очень хорошую репутацию...
Отобразим наши наблюдения на карте США. Для этого необходимо импортировать библиотеку folium:
import folium
Сначала - преступления за 2018 г. в абсолютных значениях:
FOLIUM_URL = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data'
FOLIUM_US_MAP = f'{FOLIUM_URL}/us-states.json'
m = folium.Map(location=[48, -102], zoom_start=3)
folium.Choropleth(
geo_data=FOLIUM_US_MAP,
name='choropleth',
data=df_crime_states_2018,
columns=['state_abbr', 'violent_crime'],
key_on='feature.id',
fill_color='YlOrRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Насильственные преступления за 2018 г.',
bins=df_crime_states_2018['violent_crime'].quantile(list(np.linspace(0.0, 1.0, 5))).to_list(),
reset=True
).add_to(m)
folium.LayerControl().add_to(m)
m
Теперь то же в удельных значениях (на 1 млн человек):
m = folium.Map(location=[48, -102], zoom_start=3)
folium.Choropleth(
geo_data=FOLIUM_US_MAP,
name='choropleth',
data=df_crime_states_2018,
columns=['state_abbr', 'crime_promln'],
key_on='feature.id',
fill_color='YlOrRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Насильственные преступления за 2018 г. (на 1 млн. населения)',
bins=df_crime_states_2018['crime_promln'].quantile(list(np.linspace(0.0, 1.0, 5))).to_list(),
reset=True
).add_to(m)
folium.LayerControl().add_to(m)
m
Видим, что в первом случае примерно поровну северных и южных штатов, а во втором случае - одни южные штаты плюс столица США и Аляска.
Жертвы полиции по штатам (без расовой принадлежности)
Давайте сейчас поглядим, что происходит в конкретных штатах в отношении полицейской стрельбы на уничтожение.
Подготовим данные: добавим в наш существующий датасет по гибели от рук закона (см. предыдущую часть) полные наименования штатов, сгруппируем количество случаев по штатам, выделим период с 2000 по 2018 год и отобразим удобным образом.
df_fenc_agg_states = df_fenc.merge(df_state_names, how='inner', left_on='State', right_on='state_abbr')
df_fenc_agg_states.fillna(0, inplace=True)
df_fenc_agg_states = df_fenc_agg_states.rename(columns={'state_name_x': 'State Name'})
df_fenc_agg_states = df_fenc_agg_states.loc[:, ['Year', 'Race', 'State', 'State Name', 'Cause', 'UOF']]
df_fenc_agg_states = df_fenc_agg_states.groupby(['Year', 'State Name', 'State'])['UOF'].count().unstack(level=0)
df_fenc_agg_states.fillna(0, inplace=True)
df_fenc_agg_states = df_fenc_agg_states.astype('uint16').loc[:, :2018]
df_fenc_agg_states = df_fenc_agg_states.reset_index()
Отобразим топ-10 штатов за 2018 год:
df_fenc_agg_states_2018 = df_fenc_agg_states.loc[:, ['State Name', 2018]]
plt = df_fenc_agg_states_2018.nlargest(10, 2018).sort_values(2018).plot.barh(x='State Name', y=2018, legend=False, figsize=(10,5))
plt.set_xlabel('Кол-во жертв от рук полиции за 2018 г.')
plt.set_ylabel('')
Также посмотрим на данные за весь период в виде "ящиков с усами":
fenc_top10 = df_fenc_agg_states.loc[df_fenc_agg_states['State Name'].isin(df_fenc_agg_states_2018.nlargest(10, 2018)['State Name'])]
fenc_top10 = fenc_top10.T
fenc_top10.columns = fenc_top10.loc['State Name', :]
fenc_top10 = fenc_top10.reset_index().loc[2:, :].set_index('Year')
df_sorted = fenc_top10.mean().sort_values(ascending=False)
fenc_top10 = fenc_top10.loc[:, df_sorted.index]
plt = fenc_top10.plot.box(figsize=(12, 6))
plt.set_ylabel('Кол-во жертв от рук полиции (2000 - 2018)')
Ну что же, та же "великолепная троица": Калифорния, Техас и Флорида плюс еще два южных штата - Аризона и Джорджия. Лидеры обнаруживают, как и прежде, больший разброс по годам, демонстрируя изменения.
Связь между жертвами полиции и криминалом
Как и в предыдущей статье, будем исследовать связь между гибелью от рук полиции и криминальностью. Начнем пока без выделения расового признака, чтобы посмотреть есть ли связь в целом и как она распределяется по штатам.
Для начала необходимо объединить данные по преступлениям (насильственного характера) с данными по жертвам полиции, попутно указав диапазон с 2000 по 2018 год (этот же период анализировался в предыдущей части исследования).
# добавляем в исходный датасет полные названия штатов
df_fenc_crime_states = df_fenc.merge(df_state_names, how='inner', left_on='State', right_on='state_abbr')
# переименовываем столбцы
df_fenc_crime_states = df_fenc_crime_states.rename(columns={'Year': 'year', 'state_name_x': 'state_name'})
# обрезаем период до 2000-2018
df_fenc_crime_states = df_fenc_crime_states[df_fenc_crime_states['year'].between(2000, 2018)]
# агрегируем количество смертей по годам и штатам
df_fenc_crime_states = df_fenc_crime_states.groupby(['year', 'state_name'])['UOF'].count().reset_index()
# добавляем данные по преступлениям
df_fenc_crime_states = df_fenc_crime_states.merge(df_crime_states[df_crime_states['year'].between(2000, 2018)], how='outer', on=['year', 'state_name'])
# заполняем пробелы нулями
df_fenc_crime_states.fillna({'UOF': 0}, inplace=True)
# приводим типы данных
df_fenc_crime_states = df_fenc_crime_states.astype({'year': 'uint16', 'UOF': 'uint16', 'population': 'uint32', 'violent_crime': 'uint32'})
# сортируем
df_fenc_crime_states = df_fenc_crime_states.sort_values(by=['year', 'state_name'])
На выходе:
year | state_name | UOF | state_abbr | population | violent_crime | crime_promln | |
---|---|---|---|---|---|---|---|
0 | 2000 | Alabama | 7 | AL | 4447100 | 21620 | 4861.595197 |
1 | 2000 | Alaska | 2 | AK | 626932 | 3554 | 5668.876369 |
2 | 2000 | Arizona | 11 | AZ | 5130632 | 27281 | 5317.278651 |
3 | 2000 | Arkansas | 4 | AR | 2673400 | 11904 | 4452.756789 |
4 | 2000 | California | 97 | CA | 33871648 | 210531 | 6215.552311 |
... | ... | ... | ... | ... | ... | ... | ... |
907 | 2018 | Virginia | 18 | VA | 8517685 | 17032 | 1999.604353 |
908 | 2018 | Washington | 24 | WA | 7535591 | 23472 | 3114.818732 |
909 | 2018 | West Virginia | 7 | WV | 1805832 | 5236 | 2899.494527 |
910 | 2018 | Wisconsin | 10 | WI | 5813568 | 17176 | 2954.467893 |
911 | 2018 | Wyoming | 4 | WY | 577737 | 1226 | 2122.072846 |
Напомню, что столбец UOF (от "Use Of Force" - применение силы) содержит количество смертей от рук служб правопорядка (которых я иногда кратко называю "полицией", хотя здесь есть и другие службы, например ФБР) в результате намеренного применения силы.
Сразу создадим и датафрейм со среднегодовыми данными:
df_fenc_crime_states_agg = df_fenc_crime_states.groupby(['state_name']).mean().loc[:, ['UOF', 'violent_crime']]
Отобразим графики преступлений и жертв полиции (среднегодовые значения для всех штатов):
plt = df_fenc_crime_states_agg['violent_crime'].plot.bar(legend=True, figsize=(15,5))
plt.set_ylabel('Среднегодовое кол-во насильственных преступлений')
plt2 = df_fenc_crime_states_agg['UOF'].plot(secondary_y=True, style='g', legend=True)
plt2.set_ylabel('Среднегодовое кол-во жертв от рук полиции', rotation=90)
plt2.set_xlabel('')
plt.set_xlabel('')
plt.set_xticklabels(df_fenc_crime_states_agg.index, rotation='vertical')
plt
Если внимательно посмотреть на эту совмещенную диаграмму, можно сделать пару наблюдений:
связь между преступностью и гибелью от полиции хорошо прослеживается "невооруженным глазом": зеленая кривая в большинстве случаев "повторяет" столбики преступности;
в штатах с высоким уровнем преступности (Флорида, Иллинойс, Мичиган, Нью-Йорк, Техас) количество жертв полиции несколько ниже (в пропорциональном отношении) по сравнению со штатами с более низким уровнем преступности.
Посмотрим на диаграмму рассеяния:
plt = df_fenc_crime_states_agg.plot.scatter(x='violent_crime', y='UOF')
plt.set_xlabel('Среднегодовое кол-во насильственных преступлений')
plt.set_ylabel('Среднегодовое кол-во жертв от рук полиции')
Здесь становится хорошо заметно, что соотношение между жертвами полиции и преступностью зависит от уровня преступности. Условно говоря, для штатов со среднегодовым количеством преступлений до 75 тыс. количество жертв полиции растет полее полого, чем для штатов со среднегодовым количеством преступлений свыше 75 тыс. Таких "преступных" штатов здесь, как мы видим, всего четыре. Давайте посмотрим им "в лицо":
df_fenc_crime_states_agg[df_fenc_crime_states_agg['violent_crime'] > 75000]
UOF | violent_crime | |
---|---|---|
state_name | ||
California | 133.263158 | 181514.578947 |
Florida | 54.578947 | 110104.315789 |
New York | 19.157895 | 81618.052632 |
Texas | 64.368421 | 117614.631579 |
Ну конечно же, это уже знакомая нам четверка "всадников Апокалипсиса": Калифорния, Флорида, Техас и Нью-Йорк.
Давайте посмотрим на корреляцию между нашими данными по 3 кейсам:
Штаты со среднегодовым количеством преступлений до 75 тыс.
Штаты со среднегодовым количеством преступлений свыше 75 тыс. (наша "четверка")
Все штаты
Для первого кейса:
df_fenc_crime_states_agg[df_fenc_crime_states_agg['violent_crime'] <= 75000].corr(method='pearson').at['UOF', 'violent_crime']
получаем коэффициент 0.839. Это значимая величина, но до 0.9 не доходит, так как здесь налицо значительный разброс по 47 штатам.
Для второго кейса:
df_fenc_crime_states_agg[df_fenc_crime_states_agg['violent_crime'] > 75000].corr(method='pearson').at['UOF', 'violent_crime']
получаем уже 0.999 - идеальную корреляцию!
Для третьего кейса (все штаты):
df_fenc_crime_states_agg.corr(method='pearson').at['UOF', 'violent_crime']
получаем нечто среднее между двумя предыдущими: 0.935. Но этот общий коэффициент указывает на весьма значительно корреляцию.
А теперь посмотрим, как распределен по штатам наш "индекс стрельбы в преступников" (это, конечно, условное название). Разделим, как и раньше, количество жертв полиции на количество преступлений:
df_fenc_crime_states_agg['uof_by_crime'] = df_fenc_crime_states_agg['UOF'] / df_fenc_crime_states_agg['violent_crime']
plt = df_fenc_crime_states_agg.loc[:, 'uof_by_crime'].sort_values(ascending=False).plot.bar(figsize=(15,5))
plt.set_xlabel('')
plt.set_ylabel('Отношение кол-ва жертв полиции к кол-ву преступлений')
Здесь интересно заметить, что наши лидеры по преступности ушли в середину и даже ближе концу, показывая тем самым, что в самых преступных штатах не самые "кровавые" полицейские (по отношению к потенциальным или реальным преступникам).
Промежуточные выводы:
1. Количество насильственных преступлений прямо зависит от количества населения (спасибо, кэп!)
2. В абсолютном выражении лидеры по преступности - самые населенные штаты: Калифорния, Флорида, Техас и Нью-Йорк.
2. В удельном отношении (на миллион населения) преступности больше в южных штатах, чем в северных, где заметны только два низко населенных штата - Аляска и Округ Колумбия (г. Вашингтон).
3. Между преступностью и гибелью от рук полиции подтверждается заметная корреляция, составляющая в среднем 0.93 по всем штатам. При этом для лидеров по преступности эта корреляция достигает почти единицы (т.е. линейная пропорция), в то время как для остальных штатов - 0.84.
Влияние расы на преступность и гибель от полиции по штатам
Убедившись, что преступность в целом влияет на гибель от рук полиции, давайте добавим теперь расовый фактор и посмотрим, на что он влияет. Как я уже объяснил выше, для этой цели будем использовать данные по арестам, поскольку они являются наиболее полными из доступных, покрывая основные виды преступлений и все штаты США. Естественно, ни в одном штате и ни в одной стране нельзя приравнять количество арестов к количеству преступлений, но эти показатели, тем не менее, тесно взаимосвязаны. Поэтому для статистических изысканий аресты нам годятся. И мы уже договорились, что будем рассматривать аресты только за насильственные преступления (убийство, грабеж, изнасилование и нападение с отягчающими обстоятельствами), в соответствии с принятой концепцией анализа.
Загружаем данные из CSV и привычно добавляем названия штатов:
ARRESTS_FILE = ROOT_FOLDER + '\\arrests_by_state_race.csv'
# берем только аресты белых и черных
df_arrests = pd.read_csv(ARRESTS_FILE, sep=';', header=0, usecols=['data_year', 'state', 'white', 'black'])
# суммируем аресты за 4 вида преступлений по годам и штатам
df_arrests = df_arrests.groupby(['data_year', 'state']).sum().reset_index()
# добавляем наименования штатов
df_arrests = df_arrests.merge(df_state_names, left_on='state', right_on='state_abbr')
# переименовываем и удаляем столбцы
df_arrests = df_arrests.rename(columns={'data_year': 'year'}).drop(columns='state_abbr')
# поглядим, что получилось
df_arrests.head()
year | state | black | white | state_name | |
---|---|---|---|---|---|
0 | 2000 | AK | 140 | 613 | Alaska |
1 | 2001 | AK | 139 | 718 | Alaska |
2 | 2002 | AK | 143 | 677 | Alaska |
3 | 2003 | AK | 173 | 801 | Alaska |
4 | 2004 | AK | 163 | 765 | Alaska |
Сразу создадим данные со среднегодовыми показателями:
df_arrests_agg = df_arrests.groupby(['state_name']).mean().drop(columns='year')
Аресты белых и черных по 51 штату (среднегодовые значения)
black | white | |
---|---|---|
state_name | ||
Alabama | 2805.842105 | 1757.315789 |
Alaska | 221.894737 | 844.157895 |
Arizona | 1378.368421 | 7007.157895 |
Arkansas | 2387.894737 | 2303.789474 |
California | 26668.368421 | 87252.315789 |
Colorado | 1268.210526 | 5157.368421 |
Connecticut | 2097.631579 | 2981.210526 |
Delaware | 1356.894737 | 1048.578947 |
District of Columbia | 111.111111 | 4.944444 |
Florida | 12.000000 | 7.000000 |
Georgia | 8262.842105 | 3502.894737 |
Hawaii | 81.052632 | 368.736842 |
Idaho | 44.000000 | 1362.263158 |
Illinois | 5699.842105 | 1841.894737 |
Indiana | 3553.368421 | 5192.263158 |
Iowa | 1104.421053 | 3039.473684 |
Kansas | 522.315789 | 1501.315789 |
Kentucky | 1476.894737 | 1906.052632 |
Louisiana | 5928.789474 | 3414.263158 |
Maine | 63.736842 | 699.526316 |
Maryland | 7189.105263 | 4010.684211 |
Massachusetts | 3407.157895 | 7319.684211 |
Michigan | 7628.157895 | 6304.157895 |
Minnesota | 2231.210526 | 2645.736842 |
Mississippi | 1462.210526 | 474.368421 |
Missouri | 5777.473684 | 5703.368421 |
Montana | 27.684211 | 673.684211 |
Nebraska | 591.421053 | 1058.526316 |
Nevada | 1956.421053 | 3817.210526 |
New Hampshire | 68.368421 | 640.789474 |
New Jersey | 6424.157895 | 6043.789474 |
New Mexico | 234.421053 | 2809.368421 |
New York | 8394.526316 | 8734.947368 |
North Carolina | 10527.947368 | 7412.947368 |
North Dakota | 61.263158 | 277.052632 |
Ohio | 4063.947368 | 4071.368421 |
Oklahoma | 1625.105263 | 3353.000000 |
Oregon | 445.105263 | 3373.368421 |
Pennsylvania | 11974.157895 | 11039.473684 |
Rhode Island | 275.684211 | 699.210526 |
South Carolina | 5578.526316 | 3615.421053 |
South Dakota | 67.105263 | 349.368421 |
Tennessee | 6799.894737 | 8462.526316 |
Texas | 10547.631579 | 22062.684211 |
Utah | 167.105263 | 1748.894737 |
Vermont | 43.526316 | 439.210526 |
Virginia | 4100.421053 | 3060.263158 |
Washington | 1688.947368 | 6012.105263 |
West Virginia | 271.263158 | 1528.315789 |
Wisconsin | 3440.055556 | 4107.722222 |
Wyoming | 27.263158 | 506.947368 |
При рассмотрении этих данных нельзя не заметить некоторые странности. В одних штатах аресты исчисляются тысячами и сотнями, в других - десятками и единицами. Так, например, по Флориде - одному из самых густо населенных штатов - отображается только 19 арестов в год (12 черных и 7 белых). Здесь явно не хватает каких-то точек наблюдений; проверим это:
df_arrests[df_arrests['state'] == 'FL']
И видим, что, действительно, по Флориде доступны данные только за 2017 год. Что ж, придется использовать то, что имеем... По остальным штатам все данные есть. Но разница на 1-2 порядка может также объясняться различной населенностью. Давайте подгрузим данные по населению (для обеих рас) и посмотрим.
Данные по численности я взял с сайта Бюро переписи населения США. В России сайт почему-то не работает, но вы же знаете, как заставить его заработать ;) Здесь подготовленный CSV с данными переписи с 2010 по 2019 г.
К сожалению, сведений по населению по штатам за более ранние периоды (с 2000 по 2009 г.) нет. Таким образом, для этой части исследования придется сузить диапазон наблюдений до 9 лет (с 2010 по 2018 г.).
POP_STATES_FILES = ROOT_FOLDER + '\\us_pop_states_race_2010-2019.csv'
df_pop_states = pd.read_csv(POP_STATES_FILES, sep=';', header=0)
# данные имеют специфический формат, придется поколдовать ))
df_pop_states = df_pop_states.melt('state_name', var_name='r_year', value_name='pop')
df_pop_states['race'] = df_pop_states['r_year'].str[0]
df_pop_states['year'] = df_pop_states['r_year'].str[2:].astype('uint16')
df_pop_states.drop(columns='r_year', inplace=True)
df_pop_states = df_pop_states[df_pop_states['year'].between(2000, 2018)]
df_pop_states = df_pop_states.groupby(['state_name', 'year', 'race']).sum().unstack().reset_index()
df_pop_states.columns = ['state_name', 'year', 'black_pop', 'white_pop']
Данные по численности белых и черных по штатам
state_name | year | black_pop | white_pop | |
---|---|---|---|---|
0 | Alabama | 2010 | 5044936 | 13462236 |
1 | Alabama | 2011 | 5067912 | 13477008 |
2 | Alabama | 2012 | 5102512 | 13484256 |
3 | Alabama | 2013 | 5137360 | 13488812 |
4 | Alabama | 2014 | 5162316 | 13493432 |
... | ... | ... | ... | ... |
454 | Wyoming | 2014 | 31392 | 2167008 |
455 | Wyoming | 2015 | 29568 | 2177740 |
456 | Wyoming | 2016 | 29304 | 2170700 |
457 | Wyoming | 2017 | 29444 | 2148128 |
458 | Wyoming | 2018 | 29604 | 2139896 |
Добавляем этот датасет к арестам и вычисляем удельные показатели по арестам на 1 млн представителей каждой расы:
df_arrests_2010_2018 = df_arrests.merge(df_pop_states, how='inner', on=['year', 'state_name'])
df_arrests_2010_2018['white_arrests_promln'] = df_arrests_2010_2018['white'] * 1e6 / df_arrests_2010_2018['white_pop']
df_arrests_2010_2018['black_arrests_promln'] = df_arrests_2010_2018['black'] * 1e6 / df_arrests_2010_2018['black_pop']
И так же создаем датасет со среднегодовыми показателями:
df_arrests_2010_2018_agg = df_arrests_2010_2018.groupby(['state_name', 'state']).mean().drop(columns='year').reset_index()
df_arrests_2010_2018_agg = df_arrests_2010_2018_agg.set_index('state_name')
Объединенный датасет по арестам и численности (среднегодовые значения)
state | black | white | black_pop | white_pop | white_arrests_promln | black_arrests_promln | |
---|---|---|---|---|---|---|---|
state_name | |||||||
Alabama | AL | 1682.000000 | 1342.000000 | 5.152399e+06 | 1.349158e+07 | 99.424741 | 324.055203 |
Alaska | AK | 255.000000 | 870.555556 | 1.069489e+05 | 1.957445e+06 | 445.199704 | 2390.243876 |
Arizona | AZ | 1635.555556 | 6852.000000 | 1.279172e+06 | 2.260403e+07 | 302.923002 | 1267.000192 |
Arkansas | AR | 1960.666667 | 2466.000000 | 1.855574e+06 | 9.465137e+06 | 260.459917 | 1055.854934 |
California | CA | 24381.666667 | 79477.000000 | 1.007921e+07 | 1.128020e+08 | 704.731408 | 2419.234376 |
Colorado | CO | 1377.222222 | 5171.555556 | 9.508173e+05 | 1.882940e+07 | 274.209456 | 1439.257054 |
Connecticut | CT | 1823.777778 | 2295.333333 | 1.643690e+06 | 1.165681e+07 | 196.712775 | 1114.811569 |
Delaware | DE | 1318.000000 | 914.111111 | 8.354622e+05 | 2.635794e+06 | 347.374980 | 1582.395733 |
District of Columbia | DC | 139.222222 | 4.777778 | 1.288488e+06 | 1.154416e+06 | 4.112547 | 108.101938 |
Florida | FL | 12.000000 | 7.000000 | 1.415383e+07 | 6.498292e+07 | 0.107721 | 0.847827 |
Georgia | GA | 8137.222222 | 4271.444444 | 1.279378e+07 | 2.500293e+07 | 170.939250 | 639.869143 |
Hawaii | HI | 81.333333 | 383.777778 | 1.124298e+05 | 1.453712e+06 | 264.353469 | 725.477589 |
Idaho | ID | 51.888889 | 1373.777778 | 5.288222e+04 | 6.154316e+06 | 223.151878 | 978.205026 |
Illinois | IL | 4216.000000 | 1284.222222 | 7.554687e+06 | 3.980927e+07 | 32.199075 | 557.493894 |
Indiana | IN | 2924.444444 | 5186.111111 | 2.522917e+06 | 2.267508e+07 | 228.699515 | 1155.168768 |
Iowa | IA | 1181.000000 | 2999.222222 | 4.305640e+05 | 1.141794e+07 | 262.666753 | 2760.038539 |
Kansas | KS | 539.555556 | 1512.111111 | 7.116182e+05 | 1.006714e+07 | 150.232160 | 758.851182 |
Kentucky | KY | 1443.888889 | 2173.666667 | 1.442174e+06 | 1.558094e+07 | 139.526970 | 1001.433470 |
Louisiana | LA | 5917.000000 | 3255.333333 | 6.021228e+06 | 1.174245e+07 | 277.277874 | 981.334817 |
Maine | ME | 78.000000 | 678.000000 | 7.667733e+04 | 5.059062e+06 | 134.024032 | 1019.061684 |
Maryland | MD | 6460.444444 | 3325.444444 | 7.229037e+06 | 1.426036e+07 | 233.317775 | 893.942720 |
Massachusetts | MA | 3349.555556 | 6895.111111 | 2.249232e+06 | 2.226671e+07 | 309.745910 | 1505.096888 |
Michigan | MI | 6302.444444 | 5647.444444 | 5.645176e+06 | 3.170670e+07 | 178.111684 | 1116.364030 |
Minnesota | MN | 2570.000000 | 2686.777778 | 1.311818e+06 | 1.867259e+07 | 143.902882 | 1986.464052 |
Mississippi | MS | 1251.000000 | 418.777778 | 4.478208e+06 | 7.122651e+06 | 58.753686 | 279.574565 |
Missouri | MO | 4588.333333 | 5146.111111 | 2.854060e+06 | 2.023871e+07 | 254.292323 | 1608.303611 |
Montana | MT | 34.222222 | 788.333333 | 2.210444e+04 | 3.660813e+06 | 214.944902 | 1525.795754 |
Nebraska | NE | 618.888889 | 1154.888889 | 3.701520e+05 | 6.709768e+06 | 172.269972 | 1687.725359 |
Nevada | NV | 2450.000000 | 4480.333333 | 1.052192e+06 | 8.647157e+06 | 517.401564 | 2316.374085 |
New Hampshire | NH | 89.777778 | 784.777778 | 7.873600e+04 | 5.012056e+06 | 156.580888 | 1141.127571 |
New Jersey | NJ | 5429.555556 | 4971.888889 | 5.241910e+06 | 2.595141e+07 | 191.427955 | 1037.217679 |
New Mexico | NM | 260.111111 | 3136.000000 | 2.053876e+05 | 6.905377e+06 | 454.129135 | 1268.115549 |
New York | NY | 6035.777778 | 6600.222222 | 1.373077e+07 | 5.534157e+07 | 119.253616 | 439.581451 |
North Carolina | NC | 9549.000000 | 6759.333333 | 8.804027e+06 | 2.844145e+07 | 238.320077 | 1088.968561 |
North Dakota | ND | 100.666667 | 386.222222 | 6.583289e+04 | 2.583206e+06 | 149.190455 | 1536.987272 |
Ohio | OH | 3632.888889 | 3733.333333 | 5.879375e+06 | 3.844592e+07 | 97.107129 | 617.699379 |
Oklahoma | OK | 1577.333333 | 3049.000000 | 1.189604e+06 | 1.160567e+07 | 262.904593 | 1326.463864 |
Oregon | OR | 375.444444 | 3125.000000 | 3.292284e+05 | 1.402225e+07 | 222.819615 | 1148.158169 |
Pennsylvania | PA | 11227.000000 | 10652.111111 | 5.945100e+06 | 4.232445e+07 | 251.598838 | 1893.415475 |
Rhode Island | RI | 274.888889 | 595.000000 | 3.275551e+05 | 3.592825e+06 | 165.605635 | 837.932682 |
South Carolina | SC | 4703.222222 | 3094.111111 | 5.365012e+06 | 1.324712e+07 | 234.287821 | 877.892998 |
South Dakota | SD | 103.777778 | 448.333333 | 6.154533e+04 | 2.903489e+06 | 153.995184 | 1641.137012 |
Tennessee | TN | 7603.000000 | 9068.666667 | 4.460808e+06 | 2.070126e+07 | 438.486812 | 1708.022356 |
Texas | TX | 10821.666667 | 21122.111111 | 1.345661e+07 | 8.628389e+07 | 245.051258 | 803.917061 |
Utah | UT | 193.222222 | 1797.333333 | 1.558876e+05 | 1.079659e+07 | 166.431266 | 1240.117890 |
Vermont | VT | 54.222222 | 520.555556 | 3.017111e+04 | 2.376143e+06 | 219.129918 | 1785.111547 |
Virginia | VA | 4059.555556 | 3071.222222 | 6.544598e+06 | 2.340732e+07 | 131.178648 | 620.504151 |
Washington | WA | 1791.777778 | 5870.444444 | 1.147000e+06 | 2.289368e+07 | 256.632241 | 1566.862244 |
West Virginia | WV | 294.111111 | 1648.666667 | 2.597649e+05 | 6.908718e+06 | 238.517207 | 1132.059057 |
Wisconsin | WI | 3525.333333 | 4046.222222 | 1.516534e+06 | 2.018658e+07 | 200.441064 | 2325.622492 |
Wyoming | WY | 28.777778 | 464.555556 | 2.856356e+04 | 2.151349e+06 | 216.004646 | 1005.725503 |
Отобразим в виде диаграмм:
Количество арестов в абсолютных значениях
plt = df_arrests_2010_2018_agg.loc[:, ['white', 'black']].sort_index(ascending=False).plot.barh(color=['g', 'olive'], figsize=(10, 20)) plt.set_ylabel('') plt.set_xlabel('Среднегодовое кол-во арестов (2010-2018 гг.)')
Длинная картинка
2. Теперь в удельных значениях:
plt = df_arrests_2010_2018_agg.loc[:, ['white_arrests_promln', 'black_arrests_promln']].sort_index(ascending=False).plot.barh(color=['g', 'olive'], figsize=(10, 20))
plt.set_ylabel('')
plt.set_xlabel('Среднегодовое кол-во арестов на 1 млн представителей расы (2010-2018 гг.)')
Еще одна длинная картинка
Что можно сказать при взгляде на эти данные?
Во-первых, конечно, количество арестов зависит от количество населения - это заметно по данным для обеих рас.
Во-вторых, в абсолютных показателях белых арестовывают несколько чаще. Говорю "несколько", потому как видно, что эта закономерность соблюдается не во всех штатах (см. например, Северная Каролина, Джорджия, Луизиана и др.) А во-вторых, разница в большинстве штатов не слишком заметна (за исключением, пожалуй, Калифорнии, Техаса, Колорадо, Массачусетса и нескольких других штатов.
В-третьих, в удельных показателях (на миллион представителей расы) во всех штатах черных арестовывают гораздо больше, чем белых.
Давайте проверим наши выводы цифрами.
Разница между средним количеством арестов белых и черных:
df_arrests_2010_2018['white'].mean() / df_arrests_2010_2018['black'].mean()
- получаем 1.56. Т.е. белых за наблюдаемые 9 лет арестовывали в среднем в полтора раза больше, чем черных.
Теперь то же в удельных показателях:
df_arrests_2010_2018['white_arrests_promln'].mean() / df_arrests_2010_2018['black_arrests_promln'].mean()
- получаем 0.183. Т.е. вероятность ареста черных в 5.5 раз выше, чем белых.
Таким образом, гипотеза о большей преступности среди черных еще раз подтверждается на примере арестов по всем штатам США.
Чтобы понять, как раса и преступность связаны с гибелью от рук стражей закона, объединим данные по арестам с данными по жертвам полиции.
Подготовим данные по жертвам с расовым признаком с разбивкой по штатам:
df_fenc_agg_states1 = df_fenc.merge(df_state_names, how='inner', left_on='State', right_on='state_abbr')
df_fenc_agg_states1.fillna(0, inplace=True)
df_fenc_agg_states1 = df_fenc_agg_states1.rename(columns={'state_name_x': 'state_name', 'Year': 'year'})
df_fenc_agg_states1 = df_fenc_agg_states1.loc[df_fenc_agg_states1['year'].between(2000, 2018), ['year', 'Race', 'state_name', 'UOF']]
df_fenc_agg_states1 = df_fenc_agg_states1.groupby(['year', 'state_name', 'Race'])['UOF'].count().unstack().reset_index()
df_fenc_agg_states1 = df_fenc_agg_states1.rename(columns={'Black': 'black_uof', 'White': 'white_uof'})
df_fenc_agg_states1 = df_fenc_agg_states1.fillna(0).astype({'black_uof': 'uint32', 'white_uof': 'uint32'})
Полученный датасет
year | state_name | black_uof | white_uof | |
---|---|---|---|---|
0 | 2000 | Alabama | 4 | 3 |
1 | 2000 | Alaska | 0 | 2 |
2 | 2000 | Arizona | 0 | 11 |
3 | 2000 | Arkansas | 1 | 3 |
4 | 2000 | California | 19 | 78 |
... | ... | ... | ... | ... |
907 | 2018 | Virginia | 11 | 7 |
908 | 2018 | Washington | 0 | 24 |
909 | 2018 | West Virginia | 2 | 5 |
910 | 2018 | Wisconsin | 3 | 7 |
911 | 2018 | Wyoming | 0 | 4 |
Производим объединение:
df_arrests_fenc = df_arrests.merge(df_fenc_agg_states1, on=['state_name', 'year'])
df_arrests_fenc = df_arrests_fenc.rename(columns={'white': 'white_arrests', 'black': 'black_arrests'})
Пример данных за 2017 год
year | state | black_arrests | white_arrests | state_name | black_uof | white_uof | |
---|---|---|---|---|---|---|---|
15 | 2017 | AK | 266 | 859 | Alaska | 2 | 3 |
34 | 2017 | AL | 3098 | 2509 | Alabama | 7 | 17 |
53 | 2017 | AR | 2092 | 2674 | Arkansas | 6 | 7 |
72 | 2017 | AZ | 2431 | 7829 | Arizona | 6 | 43 |
91 | 2017 | CA | 24937 | 80367 | California | 25 | 137 |
110 | 2017 | CO | 1781 | 6079 | Colorado | 2 | 27 |
127 | 2017 | CT | 1687 | 2114 | Connecticut | 1 | 5 |
140 | 2017 | DE | 1198 | 782 | Delaware | 4 | 3 |
159 | 2017 | GA | 7747 | 4171 | Georgia | 15 | 21 |
173 | 2017 | HI | 88 | 419 | Hawaii | 0 | 1 |
192 | 2017 | IA | 1400 | 3524 | Iowa | 1 | 5 |
210 | 2017 | ID | 61 | 1423 | Idaho | 0 | 6 |
229 | 2017 | IL | 2847 | 947 | Illinois | 13 | 11 |
248 | 2017 | IN | 3565 | 4300 | Indiana | 9 | 13 |
267 | 2017 | KS | 585 | 1651 | Kansas | 3 | 10 |
286 | 2017 | KY | 1481 | 2035 | Kentucky | 1 | 18 |
305 | 2017 | LA | 5875 | 2284 | Louisiana | 13 | 5 |
324 | 2017 | MA | 2953 | 6089 | Massachusetts | 1 | 4 |
343 | 2017 | MD | 6662 | 3371 | Maryland | 8 | 5 |
361 | 2017 | ME | 89 | 675 | Maine | 1 | 8 |
380 | 2017 | MI | 6149 | 5459 | Michigan | 6 | 7 |
399 | 2017 | MN | 2513 | 2681 | Minnesota | 1 | 7 |
418 | 2017 | MO | 4571 | 5007 | Missouri | 13 | 20 |
437 | 2017 | MS | 1266 | 409 | Mississippi | 7 | 10 |
455 | 2017 | MT | 50 | 915 | Montana | 0 | 3 |
474 | 2017 | NC | 8177 | 5576 | North Carolina | 9 | 14 |
501 | 2017 | NE | 80 | 578 | Nebraska | 0 | 1 |
516 | 2017 | NH | 113 | 817 | New Hampshire | 0 | 3 |
535 | 2017 | NJ | 4859 | 4136 | New Jersey | 9 | 6 |
554 | 2017 | NM | 205 | 2094 | New Mexico | 0 | 20 |
573 | 2017 | NV | 2695 | 4657 | Nevada | 3 | 12 |
592 | 2017 | NY | 5923 | 6633 | New York | 7 | 9 |
611 | 2017 | OH | 4472 | 3882 | Ohio | 11 | 23 |
630 | 2017 | OK | 1638 | 2872 | Oklahoma | 3 | 20 |
649 | 2017 | OR | 453 | 3222 | Oregon | 2 | 9 |
668 | 2017 | PA | 10123 | 10191 | Pennsylvania | 7 | 17 |
681 | 2017 | RI | 315 | 633 | Rhode Island | 0 | 1 |
700 | 2017 | SC | 4645 | 2964 | South Carolina | 3 | 10 |
712 | 2017 | SD | 124 | 537 | South Dakota | 0 | 2 |
731 | 2017 | TN | 6654 | 8496 | Tennessee | 4 | 24 |
750 | 2017 | TX | 11493 | 20911 | Texas | 18 | 56 |
769 | 2017 | UT | 199 | 1964 | Utah | 1 | 5 |
788 | 2017 | VA | 4283 | 3247 | Virginia | 8 | 17 |
804 | 2017 | VT | 75 | 626 | Vermont | 0 | 1 |
823 | 2017 | WA | 1890 | 5804 | Washington | 8 | 27 |
842 | 2017 | WV | 350 | 1705 | West Virginia | 1 | 10 |
856 | 2017 | WY | 36 | 549 | Wyoming | 0 | 1 |
872 | 2017 | DC | 135 | 8 | District of Columbia | 1 | 1 |
890 | 2017 | WI | 3604 | 4106 | Wisconsin | 6 | 15 |
892 | 2017 | FL | 12 | 7 | Florida | 19 | 43 |
ОК, теперь можно вычислить корреляцию между арестами и жертвами полиции, как мы уже делали раньше:
df_corr = df_arrests_fenc.loc[:, ['white_arrests', 'black_arrests', 'white_uof', 'black_uof']].corr(method='pearson').iloc[:2, 2:]
df_corr.style.background_gradient(cmap='PuBu')
white_uof | black_uof | |
---|---|---|
white_arrests | 0.872766 | 0.622167 |
black_arrests | 0.702350 | 0.766852 |
Получаем вновь неплохую корреляцию: 0.87 для белых и 0.77 для черных! Здесь интересно отметить, что эти значения очень близки к коэффициентам корреляции, полученным нами на примере данных по преступлениям в предыдущей части статьи (там было 0.88 для белых и 0.72 для черных).
Наконец, давайте посмотрим на наш "индекс стрельбы в преступников", разделив количество жертв полиции на количество арестов по каждой расе:
df_arrests_fenc['white_uof_by_arr'] = df_arrests_fenc['white_uof'] / df_arrests_fenc['white_arrests']
df_arrests_fenc['black_uof_by_arr'] = df_arrests_fenc['black_uof'] / df_arrests_fenc['black_arrests']
df_arrests_fenc.replace([np.inf, -np.inf], np.nan, inplace=True)
df_arrests_fenc.fillna({'white_uof_by_arr': 0, 'black_uof_by_arr': 0}, inplace=True)
Посмотрим на графике, как распределяется этот показатель по штатам (возьмем 2018 год):
plt = df_arrests_fenc.loc[df_arrests_fenc['year'] == 2018, ['state_name', 'white_uof_by_arr', 'black_uof_by_arr']].sort_values(by='state_name', ascending=False).plot.barh(x='state_name', color=['g', 'olive'], figsize=(10, 20))
plt.set_ylabel('')
plt.set_xlabel('Отношение кол-ва жертв к кол-ву арестов (за 2018 г.)')
Опять длинная картинка
Видно, что в большинстве штатов показатель для белых превышает показатель для черных, хотя есть и яркие исключения: Юта, Западная Вирджиния, Канзас, Айдахо и Округ Колумбия.
Но сравним средние показатели по всем штатам:
plt = df_arrests_fenc.loc[:, ['white_uof_by_arr', 'black_uof_by_arr']].mean().plot.bar(color=['g', 'olive'])
plt.set_ylabel('Отношение кол-ва жертв к кол-ву арестов')
plt.set_xticklabels(['Белые', 'Черные'], rotation=0)
Показатель для белых выше в 2.5 раза. То есть, если этот индекс о чем-то говорит, то белый преступник имеет в среднем в 2.5 раза большую вероятность встретить смерть от рук полиции, чем черный преступник. Конечно, этот показатель сильно варьируется по штатам: например, в Айдахо черный преступник погибает в 2 раза чаще белого, а в Миссисипи - в 4 раза реже.
Что же, это исследование подошло к концу. Пора резюмировать.
Выводы
Преступность в штатах прямо зависит от численности населения. Наиболее "преступные" штаты, о которых мы привыкли смотреть криминальные хроники или художественные фильмы, - просто самые густо населенные. При рассмотрении удельных показателей насильственных преступлений (на душу населения) лидерами оказываются совершенно неожиданные штаты - Аляска, Округ Колумбия (со столицей США) и Нью-Мексико.
В целом южные штаты показывают более высокие показатели преступности (в удельном выражении), чем северные штаты.
В США количество совершаемых преступлений и арестов обнаруживает значительную разницу среди белых и среди черных в удельном выражении: черные совершаю в 3 раза больше преступлений и в 5 раз чаще попадают под арест, чем белые.
Черные погибают в 2.5 раза чаще от рук служб правопорядка, чем белые.
Гибель от рук служб правопорядка имеет хорошо прослеживаемую связь с преступностью: чем больше преступлений, тем больше смертельных исходов от встреч с полицией. Эта корреляция подтверждается в целом по штатам и для каждой расы, хотя она немного выше для белых. Это подтверждается и разницей в отношении количества жертв полиции к количеству преступлений и арестов между расами: белые преступники имеют несколько более высокую вероятность встретить смерть, чем черные.
Хочу напоследок выразить благодарность моим читателям, давшим ценные комментарии и советы :)
PS. В следующей, отдельной статье я планирую продолжить рассматривать преступность в США и ее связь с расовой принадлежностью. Сначала поколдуем с официальными данными по преступлениям на почве расовой и иной нетерпимости, а потом поглядим на конфликты между полицией и населением с другой стороны и разберем случаи гибели полицейских при исполнении служебных обязанностей. Если эта тема интересна, прошу дать знать в комментариях!
Ссылка на английскую версию статьи (по просьбам трудящихся).