Обзор
Данные везде. Преступность тоже. ФБР управляет программой, называемой равномерной программой преступности (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, где мы погрузились глубже в набор данных преступности.
Ресурсы и ссылки
- [1] https://crime-data-explorer.fr.cloud.gov/explorer/state/california/crime/1995/2017
- https://www.fbi.gov/services/cjis/ucr
- https://crime-data-explorer.fr.cloud.gov/downloads-and-docs
- https://definitions.uslegal.com/c/crime-rate/ -> «Научные ставки не могут учитывать вариации риска».
Оригинал: “https://dev.to/_rich/crime-data-exploration-with-python3-and-pandas-part-1-3445”