Исходный размер 1140x1600

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

Выбор данных

Для своего финального проекта я выбрала анализ статистики совершенных преступлений до 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 ()

Исходный размер 1030x622

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

Исходный размер 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 года»

Исходный размер 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 года»

Исходный размер 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

Анализ данных и визуализация статистики преступлений в РФ
Проект создан 25.09.2024
Мы используем файлы cookies для улучшения работы сайта и большего удобства его использования. Более подробную информац...
Показать больше