
Концепция
В своем проекте я исследую связь между известными серийными убийцами и астрологией. С помощью визуализации данных я попыталась проследить возможные закономерности между знаком зодиака, страной, полом преступника и числом жертв. Исследование построено на основе открытого датасета (Serial Killers by Zodiac Sign, kaggle.com) и не претендует на научную достоверность. Также я сама не верю в астрологию, поэтому мне было еще интереснее провести эксперимент, чтобы вывести, возможно, интересную статистику.
Данные
Датасет содержит информацию о 226 известных серийных убийцах со всего мира. В нём указаны: — имя — страна — годы активности — дата рождения — пол — знак зодиака — подтверждённое количество жертв
Виды графиков
Круговая диаграмма — процентное распределение знаков зодиака среди всех преступников Четкая наглядная визуализация, подходящая для подобных данных.
Столбчатая диаграмма — распределение пола маньяков по знакам зодиака Разделение по полу позволяет посмотреть, есть ли перекос в каких-либо знаках.
Тепловая карта (heatmap) — количество маньяков по странам и знакам зодиака Помогает увидеть региональные паттерны.
Lollipop chart — количество подтверждённых жертв у преступников каждого знака зодиака Редкий тип графика, визуально отличающийся от других.
Оформление
Тематика проекта — маньяки и убийства — напрямую связана с мраком и кровью. Кроваво-бордовая палитра подчёркивает настроение исследования и при этом остаётся стилистически сдержанной и графически выразительной.
Этапы работы
1. Использование нейросети
Для реализации проекта я активно использовала ChatGPT в качестве помощника по анализу данных и генерации кода. Я писала подробные промпты, описывая желаемый результат: от очистки данных до стилизации графиков. ChatGPT: — Помог с предобработкой данных (очисткой от пропусков, фильтрацией по признакам) — Предлагал подходящие типы визуализаций для разных задач — Генерировал код на Python (с использованием pandas, matplotlib, seaborn) — Помогал со стилистикой графиков и разработкой цветовой палитры — Создал обложку проекта в генеративной нейросети на основе промпта
2. Обработка данных
#Импорт и первичный осмотр
import pandas as pd from google.colab import files
file_name = list (uploaded.keys ())[0]
df = pd.read_excel (file_name)
df.head (10)
#Убираем строки со значением «Unknown» для более чистой статистики
birth_s = df['Birthdate'].astype (str).str.strip ().str.lower () zodiac_s = df['Zodiac sign'].astype (str).str.strip ().str.lower ()
mask = (birth_s ≠ 'unknown') & (zodiac_s ≠ 'unknown')
df = df[mask].reset_index (drop=True)
print («Остаток строк:», len (df)) print (df[['Name', 'Country', 'Birthdate', 'Zodiac sign']].head ())
3. Построение графиков
#Настраиваем общие параметры
import matplotlib.pyplot as plt import seaborn as sns
#Пастройка палитры my_palette = ['4B1F1F', '6E2C2C', '8C3B3B', 'B05050', 'D96767']
#Применяем палитру к seaborn sns.set_palette (my_palette)
#Круговая диаграмма
import matplotlib.pyplot as plt
zodiac_counts = df_clean['Zodiac sign'].value_counts ()
bordo_red_palette = ['4B000F', '6A0D1E', '800020', 'A52A2A', '8B0000', 'B22222', '7B1B1B', '9B2D30', '5C1A1A', '7F3A3A', '6F1E1E', '531818']
plt.figure (figsize=(8,8)) plt.pie ( zodiac_counts, labels=zodiac_counts.index, autopct='1.1f', colors=bordo_red_palette, textprops={'fontsize': 14, 'color': '330000'}, labeldistance=1.1)
plt.title ('Распределение маньяков по знакам зодиака', fontsize=18, color='#330000') plt.show ()
#Столбчатая диаграмма
plt.figure (figsize=(12,6)) sns.barplot (data=zodiac_gender_counts, x='Zodiac sign', y='Count', hue='Gender')
plt.title ('Распределение знаков зодиака по полу', fontsize=18,) plt.xlabel ('Знак зодиака', fontsize=14) plt.ylabel ('Количество маньяков', fontsize=14) plt.legend (title='Пол')
plt.show ()
#Heatmap
import matplotlib.pyplot as plt import seaborn as sns from matplotlib.colors import LinearSegmentedColormap
bordo_colors = ['4B000F', '7B1B1B', 'A52A2A', 'B22222', 'D42E2E', 'E06666', 'F2A6A6']
#Инветируем палитру, чтобы темные цвета соответствовали большим значениям bordo_cmap = LinearSegmentedColormap.from_list ('bordo_cmap', bordo_colors[: -1], N=256)
#Создаем сводную таблицу heatmap_data = df_clean.pivot_table (index='Country', columns='Zodiac sign', values='Name', aggfunc='count', fill_value=0)
plt.figure (figsize=(14,10)) sns.heatmap ( heatmap_data, cmap=bordo_cmap, linewidths=0.5, linecolor='gray', annot=True, fmt='d', cbar_kws={'label': 'Количество маньяков'})
plt.title ('Распределение маньяков по странам и знакам зодиака', fontsize=18, color='#4B000F') plt.xlabel ('Знак зодиака', fontsize=14, color='#4B000F') plt.ylabel ('Страна', fontsize=14, color='#4B000F') plt.xticks (rotation=45) plt.yticks (rotation=0) plt.show ()
#Lollipop chart
import matplotlib.pyplot as plt
#Считаем среднее количество жертв zodiac_victims_mean = df_clean.groupby ('Zodiac sign')['Proven victims'].mean ().sort_values ()
line_color = '800000' dot_color = 'FF4D4D'
plt.figure (figsize=(12, 6)) plt.hlines (y=zodiac_victims_mean.index, xmin=0, xmax=zodiac_victims_mean.values, color=line_color, linewidth=2) plt.plot (zodiac_victims_mean.values, zodiac_victims_mean.index, «o», color=dot_color, markersize=8)
plt.title ('Среднее число жертв по знакам зодиака', fontsize=16, color='#4B000F') plt.xlabel ('Среднее число жертв', fontsize=12) plt.ylabel ('Знак зодиака', fontsize=12) plt.grid (axis='x', linestyle='--', alpha=0.5) plt.tight_layout () plt.show ()
Визуализация данных
Круговая диаграмма
Круговая диаграмма, показывающая распределение маньяков по знакам зодиака, выявила явное преобладание некоторых знаков — например, козерогов, скорпионов и рыб — и заметную редкость других, таких как львов и дев, что указывает на неравномерность, хотя теоретически все знаки должны были бы быть представлены примерно равномерно. Несмотря на то что это может быть статистическим совпадением, визуализация цепляет внимание и задаёт интригующий тон всему исследованию: а вдруг за этим действительно стоит нечто большее?
Столбчатая диаграмма
Столбчатая диаграмма, показывающая соотношение пола маньяков по знакам зодиака, подтверждает очевидное: во всех знаках мужчин значительно больше. В некоторых случаях женщин не было вовсе, что подчёркивает общую тенденцию — серийные убийства остаются в основном мужским явлением, вне зависимости от зодиакального знака.
Heatmap
Тепловая карта показывает, что в разных странах преобладают разные знаки, но явной универсальной закономерности нет, однако заметно выделяются Россия (СССР) и Соединенные Штаты, что объясняется большим количеством убийц в сравнении с остальными государствами. В основном, в контексте этого графика можно говорить скорее о культурных и демографических особенностях, чем о зодиакальной зависимости.
Lollipop chart
Lollipop-диаграмма, сравнивающая знаки зодиака по среднему числу жертв, выявляет ярких лидеров — особенно выделяется водолей, за ним идут весы с заметным отставанием. Остальные знаки расположились плотной группой согласно снижающейся тенденции, что делает первые два знака особенно аномальными на общем фоне.
Источники
Serial Killers by Zodiac Sign [Электронный ресурс] // Kaggle. — URL: https://www.kaggle.com/datasets/carolineamaro/serial-killers-by-zodiac-sign (дата обращения: 13.06.2025).
Диск с кодом и датасетом:
https://drive.google.com/drive/folders/1XHgQ3TN76UeTXBi1KB3Dw8f0KhWAn3My?usp=sharing