Original size 1140x1600

Анализ данных и визуализация статистики преступлений в РФ

PROTECT STATUS: not protected

Выбор данных

Для своего финального проекта я выбрала анализ статистики совершенных преступлений до 2020 года. Статистику я взяла из списка Яндекса из раздела: портал открытых данных правоохранительной системы проекта «Открытая полиция».

Обоснование выбора данных

Анализ данных о совершённых преступлениях до 2020 года показался мне интересным потому, что позволяет проследить динамику изменений в криминальной ситуации, выявить основные тенденции и закономерности развития преступности. Это поможет лучше понять причины роста или снижения определённых видов преступлений, оценить эффективность мер, принимаемых правоохранительными органами, и разработать стратегии профилактики и борьбы с преступностью. Мне было интересно сравнить самые часто посещаемые мной города по количеству совершаемых преступлений, поэтому большая часть графиков сравнивает Московскую и Астраханскую область.

Какой вид графиков было решено сделать

Для наиболее эффективной демонстрации, а также анализа данных были выбраны сделующие способы визуализации:

  1. Линейная диаграмма
  2. Столбчатая диаграмма
  3. Круговая диаграмма

График «Статистика преступлений в Москве и Астрахани по годам»

После этого был указан путь до файла с данными file_path = 'C:\Users\Admin\Documents\Донская.xlsx'

Для того, чтобы код работал корректно, была введена команда для удаления не цифровых значений в столбце с количеством преступлений data = data.dropna (subset=['value'])

Столбик с датами был переведён в формат дат и извлечены года для отображения значений именно по ним data['report_period_end'] = pd.to_datetime (data['report_period_end']).dt.year

После были отфильтрованы два интересующих региона — Москва и Астрахань condition1 = data['region_name'] == 'Астраханская область' condition2 = data['region_name'] == 'Московская область'

data_filtered_astrakhan = data[condition1] data_filtered_moscow = data[condition2] Здесь проверяется равна ли строка в столбце region_name значению 'Астраханская область'. То же самое с Москвой.

Далее идёт группировка данных по годам и выделение максимального значения max_values_astrakhan = data_filtered_astrakhan.groupby ('report_period_end')['value'].max () max_values_moscow = data_filtered_moscow.groupby ('report_period_end')['value'].max ()

Далее идёт построение самого графика plt.figure (figsize=(10, 6)) — задается размер графика plt.plot (max_values_astrakhan.index, max_values_astrakhan.values, color='skyblue', alpha=0.7, label='Астраханская область') — задаётся цвет, индекс, значение для оси Y, прозрачность линии и название для легенды. plt.plot (max_values_moscow.index, max_values_moscow.values, color='magenta', alpha=0.7, label='Московская область') plt.title ('Статистика преступлений в Москве и Астрахани по годам') — заголовок plt.xlabel ('Год') — название оси Х plt.ylabel ('Значение') — название оси Y plt.grid (True) — сетка для графика plt.legend () — отображение легенды plt.show () — отображение графика

Таким образом, полный код был следующим: import pandas as pd import matplotlib.pyplot as plt file_path = 'C:\Users\Admin\Documents\Донская.xlsx' data = pd.read_excel (file_path, header=0, names=['name', 'value', 'region_name', 'report_period_end']) data = data.dropna (subset=['value']) data['report_period_end'] = pd.to_datetime (data['report_period_end']).dt.year condition1 = data['region_name'] == 'Астраханская область' condition2 = data['region_name'] == 'Московская область' data_filtered_astrakhan = data[condition1] data_filtered_moscow = data[condition2] max_values_astrakhan = data_filtered_astrakhan.groupby ('report_period_end')['value'].max () max_values_moscow = data_filtered_moscow.groupby ('report_period_end')['value'].max () plt.figure (figsize=(10, 6)) plt.plot (max_values_astrakhan.index, max_values_astrakhan.values, color='skyblue', alpha=0.7, label='Астраханская область') plt.plot (max_values_moscow.index, max_values_moscow.values, color='magenta', alpha=0.7, label='Московская область') plt.title ('Статистика преступлений в Москве и Астрахани по годам') plt.xlabel ('Год') plt.ylabel ('Значение') plt.grid (True) plt.legend () plt.show ()

Original size 1030x622

График «Статистика преступлений в Москве и Астрахани по годам»

Original size 1020x617

Данный график представляет собой те же данные, что и первый, однако здесь представлена столбчатая диаграмма

Задавался следующим кодом: import pandas as pd import matplotlib.pyplot as plt file_path = 'C:\Users\Admin\Documents\Донская.xlsx' data = pd.read_excel (file_path, header=0, names=['name', 'value', 'region_name', 'report_period_end']) data = data.dropna (subset=['value']) data['report_period_end'] = pd.to_datetime (data['report_period_end']).dt.year condition2 = data['region_name'] == 'Московская область' condition1 = data['region_name'] == 'Астраханская область' data_filtered_moscow = data[condition2] data_filtered_astrakhan = data[condition1] max_values_astrakhan = data_filtered_astrakhan.groupby ('report_period_end')['value'].max () max_values_moscow = data_filtered_moscow.groupby ('report_period_end')['value'].max () plt.figure (figsize=(10, 6)) plt.bar (max_values_moscow.index, max_values_moscow.values, color='red', alpha=0.7, label='Московская область', width=0.4) plt.bar (max_values_astrakhan.index, max_values_astrakhan.values, color='blue', alpha=0.7, label='Астраханская область', width=0.4) plt.title ('Статистика преступлений в Москве и Астрахани по годам') plt.xlabel ('Год') plt.ylabel ('Значение') plt.grid (True) plt.legend () plt.show ()

График: «Статистика преступлений по России за январь 2022 года»

Original size 1037x666

Для создания данного графика использовался следующий код: iimport pandas as pd import matplotlib.pyplot as plt file_path = 'C:\Users\Admin\Documents\Донская.xlsx' data = pd.read_excel (file_path, header=0, names=['name', 'value', 'region_name', 'report_period_end']) data = data.dropna (subset=['value']) data['report_period_end'] = pd.to_datetime (data['report_period_end']) start_date = '01.01.2022' end_date = '31.01.2022' condition_date = (data['report_period_end'] >= pd.to_datetime (start_date)) & (data['report_period_end'] <= pd.to_datetime (end_date)) data_filtered = data[condition_date] data_plot = data_filtered.pivot_table (values='value', index='report_period_end', columns='region_name', aggfunc='sum') plt.figure (figsize=(14, 8)) data_plot.plot (kind='bar', ax=plt.gca ()) plt.title ('Статистика преступлений по России за январь 2022 года') plt.xlabel ('Январь') plt.ylabel ('Количество преступлений') plt.grid (True) plt.xticks (rotation=0) plt.legend (title='Регионы', loc='upper center', fontsize='small', bbox_to_anchor=(0.5, -0.15), ncol=7) plt.show ()

В отличие от первого кода тут мы использовали: start_date = '01.01.2022' end_date = '31.01.2022' Строки задают даты начала и конца периода, который будет использоваться для фильтрации данных. data_plot = data_filtered.pivot_table (values='value', index='report_period_end', columns='region_name', aggfunc='sum') Здесь создается таблица (pivot_table) из отфильтрованных данных. Значения столбца 'value' суммируются по каждой комбинации 'report_period_end' и 'region_name'.

Пришлось повозиться с легендой из-за большого количества данных, однако в итоге она задаётся следующей строчкой: plt.legend (title='Регионы', loc='upper center', fontsize='small', bbox_to_anchor=(0.5, -0.15), ncol=7) title задает заголовок легенды loc='upper center' указывает местоположение легенды, fontsize='small' задает размер шрифта bbox_to_anchor=(0.5, -0.15) указывает позицию легенды относительно графика ncol=7 задает количество столбцов в легенде.

Круговой график: «Статистика преступлений по России за январь 2022 года»

Original size 1007x763

Для создания круговой диаграммы, необходимо было изменить тип графика на pie plt.pie (data_plot['value'], startangle=140, textprops={'fontsize': 8}) Для более чистого вида графика было решено убрать проценты и названия регионов из самого графиак и вынести их в легенду

При работе использовалась нейросеть DEEPSEEK К ней обращалась за следующей помощью:

  1. Перечень всех возможных цветов для легенды
  2. Корректировка ошибок в коде
  3. Перечень команд для образования разных диаграмм
  4. Помощь в установке пакетов для визуализации

Стилизация

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

Итоги

Блокнот и датасет: https://disk.yandex.com.am/d/YPcn3X1YNfOM-g

Анализ данных и визуализация статистики преступлений в РФ
Project created at 25.09.2024
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more