Преступность Пандас (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”