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

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

Исследуйте данные преступности ФБР из всех государств США. Какие выводы вы можете нарисовать? Теги с DataExplation, Python, Pandas.

Обзор

Данные везде. Преступность тоже. ФБР управляет программой, называемой равномерной программой преступности (UCR), которая собирает данные преступности от ~ 18 000 агентств по всему Соединенным Штатам. Эта база данных является золотой рулой интересной статистики о преступлении в Соединенных Штатах. Следуйте и узнайте о том, как вы можете использовать Python, чтобы проанализировать эти данные. Моя надежда заключается в том, что вы учитесь на этой статье, а затем пойти на некоторые исследования данных самостоятельно.

Полный исходный код: https://github.com/rbk/Crime-Data-Analysis

Инструменты передачи данных Мы будем использовать

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

Вы вскоре влюбитесь в Пандас. Нет, не милые приятные панды, которые вы видите в зоопарке, панды Python. Pandas – это библиотека, которая имеет дело с массивными массивами данных Breeze, как вы увидите в следующем разделе. Пандас построен на вершине Numpy. Я рекомендую проверять их обоих:

Скачать набор данных

Возьмите набор данных, чтобы начать. Вы можете использовать какой-то метод проще всего для скачивания набора данных. Вот УРИ набора данных мы будем работать с:

http://s3-us-gov-west-1.amazonaws.com/cg-d4b776d0-d898-4153-90c8-8336f86bdfec/estimated_crimes.csv

Этот набор данных содержит указываемые отказывавшихся уголовные инциденты, представленные с 1995 по 2017 год во всех Соединенных Штатах.

Перед погружением в код есть еще одна вещь … Отказ от ответственности.

Отказ от ответственности о рисовании выводов из этого набора преступления

Набор данных преступности представляет собой компиляцию отчетов инцидентов со временем. Термин «курс преступности» является число преступлений на человека в данном населении. Важно отметить, что это не учитывает сотни факторов риска, связанных с безопасностью города или государства. Например, Нью-Мексико может оказать более высокую ставку преступности, чем в среднем, но статистически не новая Мексика – это опасное место для жизни. Данные не учитывают плотность населения, экономические условия, цены на занятость и эффективную силу полиции 1 Отказ

Кроме того, вы не можете просто предположить, что определенное состояние более безопасно, потому что уровень преступности ниже среднего. Причина, по которой эта претензия недействительна, заключается в том, что преступление в определенных областях просто не будет сообщено из-за самого преступления.

Хорошо, достаточно отказ от ответственности …

Время к коду!

Огоньте свой IDE или редактор или Jupyter Notebook Hadies и Gents. Мы собираемся в очереди по линии. У вас должна быть папка с файлом CSV под названием оценочно_crimes.csv Отказ В этой папке вам нужен файл Python. Я обычно использую main.py Отказ Этот код будет в Python3. Вам также нужно будет установить PANDAS:

pip install pandas

Цель

В следующих шагах мы будем преобразовать файл CSV из FBI в новый CSV с новыми столбцами, которые помогают нам визуально понимать данные. В частности, мы собираемся определить среднюю ставку преступности на национальном уровне, а затем сравнивать уровень преступности каждого государства США, чтобы показать разницу в процентах, по отношению к среднему страну.

Шаг 1: Загрузите CSV в PandaS DataFrame

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

Первый трюк, который вы должны знать о пандах при работе с файлами CSV, является удивительным read_csv функция. Функция Read_CSV загрузит любой файл CSV в PandaS DataFrame. Из этого DataFrame мы можем использовать все виды функций Pandas для манипулирования и запрашивать данные.

import pandas

# Read the CSV into a Dataframe
data = pandas.read_csv('estimated_crimes.csv')

Как только данные будут прочитать в переменной, мы можем использовать голова Функция для печати первых 5 рядов DataFrame:

# Print the first 5 lines of the dataframe
print(data.head())

Выход

Теперь, прежде чем двигаться дальше, давайте удалим столбцы данных, которые нам не нужно сейчас. Чтобы сделать это, прочитайте CSV с Ушижелы вариант. Ушижелы Рассказывает функцию чтения только использовать указанный список столбцов:

import pandas

# Which columns to use
columns = ['year', 'state_name', 'population', 'violent_crime', 'property_crime']

# Get the data into a dataframe from csv
data = pandas.read_csv('estimated_crimes.csv', usecols=columns)

Теперь, когда вы печатаете данные, легче визуализировать.

# Print the first 5 lines of the dataframe
print(data.head())

Выход

Шаг 2: Фильтр данных

Теперь, когда у вас есть данные в DataFrame, вы развязали мощность Pandas! Вторая хитрость панд – Запрос функция. С помощью функции запроса мы можем отфильтровать наш файл CSV, чтобы содержать строки только для определенного года.

Используя наше dataframe сверху:

data = data.query('year == 2017')

Если это не заставляет вас рады использовать панды, я не знаю, что будет. После выполнения этой функции запроса наши данные должны содержать только строки, в которых столбец года 2017 год.

Другой фильтр, который нам необходимо добавить, – это удаление строки, в которой столбец состояния является NULL. В этом конкретном CSV верхние строки являются скомпилированными национальными статистиками, поэтому государственный столбец не заполнен. Мы можем фильтровать эти строки, используя Pandas Notnull Функция:

data = data[data['state_name'].notnull()]

Любая строка, в которой столбец состояния является NULL или NAN, будет удален из DataFrame.

Шаг 3: добавить новые столбцы данных с применением

Теперь, когда у нас есть данные очищены. Мы добавим три столбца. Используя панды Применить Функция Мы можем создавать новые столбцы в данных в два этапа.

Первый шаг – определить вашу функцию. Эта функция возьмет каждую строку из DataFrame. Например, следующая функция будет рассчитаться на преступления на 1000 человек в каждом ряду.

def crime_per_capita(row, number_of_people):
    total_crimes = row['violent_crime'] + row['property_crime']
    population = row['population']
    count = (total_crimes/population)*number_of_people
    return count

Наш DataFrame теперь может использовать эту функцию для создания нового столбца, используя Применить :

data['crime_per_1000'] = data.apply(crime_per_capita, args=(1000,), axis=1)
print(data.head())

Запуск печатной головки покажет новую колонку с количеством преступлений на каждые 1000 человек.

Далее мы вычисляем национальную ставку преступности, а затем использовать национальную ставку преступности для сравнения каждого отдельного уровня преступности государств. После того, как мы вычисляем процентное отличие от среднего уровня преступности к каждому государству США, мы сможем быстро увидеть различия в курсах преступности по всему США.

# 1 Get National Average
total_population = data['population'].sum()
total_crimes =+ data['violent_crime'].sum() + data['property_crime'].sum()
national_average_per_cap = (total_crimes/total_population)*1000

# 2.0 Add column of diff to national average
def compute_diff(row):
    diff = row['crime_per_1000'] - national_average_per_cap
    return diff

data['diff_of_national_average'] = data.apply(compute_diff, axis=1)

# 2.1 Add column of percent diff compared to national average
def compute_percent(row):
    percent = (row['crime_per_1000']/national_average_per_cap)*100
    if percent > 100:
        return "+" + str(int(percent-100)) + "%"
    return "-" + str(100 - int(percent)) + "%"

data['percent_diff_national'] = data.apply(compute_percent, axis=1)

Делать выводы

Из данных выше мы видим, что:

  • Огайо и Мэриленде имеют самые низкие показатели преступности на 2% ниже среднего. Это означает, что там мы меньше преступлений, сообщаемых за каждые 1000 человек, чем в среднем по стране.
  • Мэрилендец имеет наименьшее количество преступлений на душу населения в 2017 году.
  • Уровень преступности в районе Колумбии почти в два раза превышает средний по стране (+ на 91% выше среднего по стране).

Возможности разведки данных бесконечны с этим набором данных и многие другие. Просто имейте в виду, что вы должны принять участие в отказ от ответственности, прежде чем делать предположения о безопасности только на одном размещении данных. Существуют сотни факторов, которые определяют реальную безопасность города или района.

Чтобы заключить, мы посмотрели на набор данных из веб-сайта FBI UCR под названием «оценочные_Crimes.CSV». Мы использовали библиотеку Pandas Python для фильтрации и преобразования данных так, чтобы он мог прочесть проще. Затем мы придумали несколько выводов о данных.

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

Ресурсы и ссылки

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