Рубрики
Без рубрики

Разведка данных преступности с Python3 и Pandas: часть 2

Анализируя уровень убийств для набора данных UNITES 2017 года. Теги с DataExplation, Python, Pandas.

Преступность Пандас (2 часть серии)

Задача

Целью этой почтовой серии является изучение наборов данных из UCR (Уничная программа отчетности о преступности). В этом посте мы будем использовать Pandas, чтобы копаться глубже в статистике преступления для убийства. После подготовки набора данных для сравнения мы разимся на каждое государство на основе количества преступлений на душу населения.

Следуйте или оформить код на Github.

О данных

Набор данных, который мы используем, это оценочно_crimes.csv Скачано из Проводник данных Cime Веб-сайт. Этот файл содержит предполагаемые преступления на 7 видов преступлений, с 1995 до 2017 года, для Соединенных Штатов. Для получения дополнительной информации об этом наборе данных и как он скомпилирован посетите Проводник данных CIME.

Подготовка данных

Для манипулирования на данных мы будем использовать Pandas. Первое, что нам нужно сделать, это загрузить набор данных и загрузить его в DataFrame Pandas.

Если вам нужен набор данных, вы можете скачать его здесь: https://github.com/rbk/Crime-Data-Analysis

В следующем коде мы используем Pandas, чтобы открыть оценочно_crimes.csv в dataframe Отказ

Мы указываем столбцы, с которыми мы хотим работать, указав Ушижелы атрибут. Этот атрибут говорит read_csv Функция для загрузки только в колонне с заголовками, которые находятся в массиве Colls:

import pandas

cols = [
    'year',
    'state_name',
    'population',
    'homicide',
]

raw_data = pandas.read_csv('../data/estimated_crimes.csv', usecols=cols)

print(raw_data.head())

Выход:

   year state_name  population  homicide
0  1995        NaN   262803276     21606
1  1996        NaN   265228572     19645
2  1997        NaN   267783607     18211
3  1998        NaN   270248003     16974
4  1999        NaN   272690813     15522

Если вам интересно, как узнать, какие заголовки вашего CSV используют Информация Функция:

data = pandas.read_csv('../data/estimated_crimes.csv')
print(data.info())

Выход:


RangeIndex: 1196 entries, 0 to 1195
Data columns (total 16 columns):
year                   1196 non-null int64
state_id               1173 non-null float64
state_abbr             1173 non-null object
state_name             1173 non-null object
population             1196 non-null int64
violent_crime          1196 non-null int64
homicide               1196 non-null int64
rape_legacy            1196 non-null int64
rape_revised           260 non-null float64
robbery                1196 non-null int64
aggravated_assault     1196 non-null int64
property_crime         1196 non-null int64
burglary               1196 non-null int64
larceny                1196 non-null int64
motor_vehicle_theft    1196 non-null int64
caveats                71 non-null object
dtypes: float64(2), int64(11), object(3)

Топ 10 государств, рейтинг от общего количества убийств

Теперь, когда у нас есть наши данные, загруженные в DataFrame, мы можем начать обработку данных. Первое, что мы сделаем, это составить штаты по количеству убийств.

Это плохая идея. Давайте все равно сделаем это, чтобы увидеть, почему.

Это очень простая задача. Во-первых, мы запрашиваем DataFrame к году:

# Get 2017 state data
# We use notnull because the state name is not null for states
data = raw_data.query('year == 2017 and state_name.notnull()')

Далее мы сортируем данные, используя sort_values Отказ Используя по Атрибут, мы предоставляем массив столбцов для сортировки по. В этом случае мы сортируем по подсчету убийств.

# Ranked By Total Homicides
ranked_by_total = data.sort_values(by=['homicide'], ascending=False)
ranked_by_total = ranked_by_total.reset_index()
del ranked_by_total['index']
print(ranked_by_total.head(10))

Выход:

   year      state_name  population  homicide
0  2017      California    39536653      1830
1  2017           Texas    28304596      1412
2  2017         Florida    20984400      1057
3  2017        Illinois    12802023       997
4  2017    Pennsylvania    12805537       739
5  2017            Ohio    11658609       710
6  2017         Georgia    10429379       703
7  2017        Missouri     6113532       600
8  2017  North Carolina    10273419       591
9  2017       Louisiana     4684333       582

Вышеуказанная колонна убийства отсортирована по количеству.

Из этого простого вида мы можем сказать, что Калифорния имеет самые убийцы в год. Статистически это правда, но они также имеют наибольшее население любого государства.

Топ 10 штатов по населению

   year      state_name  population  homicide
0  2017      California    39536653      1830
0  2017           Texas    28304596      1412
0  2017         Florida    20984400      1057
0  2017        New York    19849399       548
0  2017    Pennsylvania    12805537       739
0  2017        Illinois    12802023       997
0  2017            Ohio    11658609       710
0  2017         Georgia    10429379       703
0  2017  North Carolina    10273419       591
0  2017        Michigan     9962311       569

Рейтинг государств таким образом не имеет смысла, потому что количество убийств не пропорционально количеству людей в штатах.

От того, что смотрит на убийстве на уровне проживания против населения, вы можете видеть, что существует сильная корреляция между количеством убийств и населения.

Далее мы рассмотрим штаты по уровню убийства.

Топ 10 государств, занимающихся общего читания по отношению к размеру населения

Теперь мы рассмотрим штаты в убийстве по размеру населения. Это даст нам более четкую картину уровня убийств, например, количество убийц на 100 000 человек.

Во-первых, мы будем использовать Pandas Применить Функция для создания новой строки. Функция Apply принимает имя функции и «применяется» результат функции к каждой строке. Наша функция называется per_capital Отказ

Функция per_capita принимает каждую строку данных и выполняет расчет для нормализации данных.

Результатом заключается в том, что у нас есть столбец для каждой строки с количеством убийств на 100 000 человек.

# Ranked By Total Homicides Relative to the Population Size
# Per 100,000 people
def per_capita(row):
    """Calculate the homcide rate per capita."""
    total_homicides = row['homicide']
    population = row['population']
    count = (total_homicides / population) * 100000
    return count

data['per_captia'] = data.apply(per_capita, axis=1)

# Ranked By Total Homicides
ranked_by_population = data.sort_values(by=['per_captia'], ascending=False)
ranked_by_population = ranked_by_population.reset_index()
del ranked_by_population['index']
print(ranked_by_population.head(50))

Наконец, мы распечатаем все строки.

Выход:

    year            state_name  population  homicide  per_captia
0   2017  District of Columbia      693972       116   16.715372
1   2017             Louisiana     4684333       582   12.424394
2   2017              Missouri     6113532       600    9.814294
3   2017                Nevada     2998039       274    9.139307
4   2017              Maryland     6052177       546    9.021547
5   2017              Arkansas     3004279       258    8.587751
6   2017                Alaska      739795        62    8.380700
7   2017               Alabama     4874747       404    8.287610
8   2017           Mississippi     2984100       245    8.210181
9   2017             Tennessee     6715984       527    7.846951
10  2017              Illinois    12802023       997    7.787832
11  2017        South Carolina     5024369       390    7.762169
12  2017            New Mexico     2088070       148    7.087885
13  2017               Georgia    10429379       703    6.740574
14  2017              Oklahoma     3930864       242    6.156407
15  2017                  Ohio    11658609       710    6.089920
16  2017               Indiana     6666818       397    5.954865
17  2017               Arizona     7016270       416    5.929076
18  2017              Kentucky     4454189       263    5.904554
19  2017          Pennsylvania    12805537       739    5.770941
20  2017        North Carolina    10273419       591    5.752710
21  2017              Michigan     9962311       569    5.711526
22  2017              Delaware      961939        54    5.613662
23  2017                Kansas     2913123       160    5.492387
24  2017              Virginia     8470020       453    5.348275
25  2017               Florida    20984400      1057    5.037075
26  2017                 Texas    28304596      1412    4.988589
27  2017         West Virginia     1815857        85    4.680985
28  2017            California    39536653      1830    4.628616
29  2017              Colorado     5607154       221    3.941393
30  2017               Montana     1050493        41    3.902929
31  2017            New Jersey     9005644       324    3.597744
32  2017                  Iowa     3145711       104    3.306089
33  2017             Wisconsin     5795483       186    3.209396
34  2017            Washington     7405743       230    3.105698
35  2017          South Dakota      869666        25    2.874667
36  2017           Connecticut     3588184       102    2.842664
37  2017              New York    19849399       548    2.760789
38  2017                Hawaii     1427538        39    2.731976
39  2017               Wyoming      579315        15    2.589265
40  2017         Massachusetts     6859819       173    2.521932
41  2017                Oregon     4142776       104    2.510394
42  2017                  Utah     3101833        73    2.353447
43  2017               Vermont      623657        14    2.244824
44  2017              Nebraska     1920076        43    2.239495
45  2017             Minnesota     5576606       113    2.026322
46  2017          Rhode Island     1059639        20    1.887435
47  2017                 Idaho     1716943        32    1.863778
48  2017                 Maine     1335907        23    1.721677
49  2017          North Dakota      755393        10    1.323814
50  2017         New Hampshire     1342795        14    1.042601

Что мы можем сделать из этого анализа

Новая колонна per_capita , дает нам более точное описание уровня убийств на 100 000 человек для каждого государства. Например, мы могли бы сказать, что для каждого 100 000 человек в Луизиане есть 2,4 убийства.

Вот несколько выводов, которые мы можем сделать из этого анализа:

  • Район Колумбии имеет самый высокий уровень убийств, рейтинг № 1 для большинства убийств на душу населения (на 100 000 человек).
  • Хотя Калифорния имеет наибольшее население, уровень убийств в стране ранги в стране.
  • Новый Гэмпшир имеет самый низкий уровень убийств.

Заключение

Урок этого анализа заключается в том, что сортировка по количеству не говорит о полной истории о данных. Калифорния будет ранжироваться № 1 в убийствах с первого анализа, но в действительности, Калифорния имеет более низкую уровень убийств, чем 28 других государств. Это простой пример того, как данные могут быть обманутыми.

Рекомендовать, мы использовали Pandas read_csv Изучить оценочную набор данных преступности 2017. Мы ранжировали штаты по общему количеству убийц. Затем мы посмотрели на уровень убийств, которая дала очень разные взгляды на то, как занимаются государствами в домашних районах.

Спасибо за прочтение!

ФБР Отказ от ответственности

«Данные, найденные в исследовательской преступности преступления, представляют собой сообщаемое преступление, и не является исчерпывающим отчетом о всей преступлении, которое происходит. Важно рассмотреть различные факторы, которые приводят к участию в преступности и преступности в сообществе до интерпретации данных. Без этих соображений доступные данные могут быть обманутыми. Факторы, которые следует учитывать включать размер и плотность населения, экономические условия, уровень занятости, прокурорскую, судебную и исправительную политику, административные и следственные средства правоохранительные органы, отношение граждан к преступности и полицейской деятельности, а также эффективная сила полиции ».

Исследователь данных преступности, полученный 19:45, 22 июля 2019 года

Преступность Пандас (2 часть серии)

Оригинал: “https://dev.to/_rich/crime-data-exploration-with-python3-and-pandas-part-2-23l1”