Описание проекта
Я выбрала датасет про породы собак в формате CSV. В нём есть названия пород (Breed) и текстовое описание их характера в виде списка качеств (Character Traits). Эти данные удобны тем, что их можно обработать в Pandas и превратить текстовые признаки в измеряемые показатели.
Мне было интересно анализировать именно этот датасет, потому что тема «характер пород» близка и полезна людям, а ещё здесь есть задача «перевода» текста в числа: по спискам traits можно посчитать условную дружелюбность/недружелюбность и сравнить породы между собой. Это даёт практическую ценность: видно, какие качества чаще всего встречаются и как распределяются оценки по породам.
Для визуализации я выбрала несколько типов графиков, чтобы показать данные с разных сторон: столбчатые диаграммы для топ-5 самых дружелюбных и недружелюбных пород (наглядное сравнение лидеров), гистограмму для распределения показателя по всем породам (общая картина), boxplot чтобы показать медиану и разброс, и точечную диаграмму (scatter) чтобы проверить, влияет ли количество характерных черт в описании на итоговую оценку.
Этапы работы
Импортирую библиотеки для анализа данных (pandas, numpy) и построения графиков (matplotlib), плюс re для обработки строковых данных.
С помощью Adobe Color создаю 3 фирменных цвета проекта (палитра), чтобы все графики были в одном стиле.
- Загружаю CSV в таблицу df, удаляю дубликаты и проверяю размер датасета через df.shape, чтобы убедиться, что данные прочитались корректно.
- Создаю функцию to_traits_list (), которая очищает поле Character Traits: приводит к lowercase, делит строку по запятым, убирает пробелы и удаляет пустые значения/\N.
- Применяю очистку к столбцу Character Traits и создаю: • traits_list — список traits для каждой породы • traits_count — количество traits у породы (длина списка)
- Задаю список «friendly» -traits (словарь) и считаю метрики: • friendly_score — сколько friendly-traits есть у породы • friendly_ratio — доля friendly-traits среди всех traits (friendly_score / traits_count) для сравнения пород в одной шкале 0.1
создаю таблицу valid для анализа: оставляю только строки, где friendly_ratio посчитан, и фильтрую породы с слишком короткими описаниями (traits_count >= 5), чтобы рейтинг был устойчивее.
Формирую таблицу top5 — топ-5 пород с максимальным friendly_ratio (и доп. сортировкой по score/count), чтобы получить список самых «friendly» по описанию датасета.
Формирую таблицу bottom5 — топ-5 пород с минимальным friendly_ratio, чтобы получить список наименее „friendly» по описанию датасета.
Настраиваю единый стиль графиков через plt.rcParams (размер, фон, сетка, шрифты) и создаю функцию style (ax), которая приводит оси/границы/сетку к единому виду
Самые распространённые черты характера пород собак
Собираю все черты (traits) из traits_list, считаю частоты и строю горизонтальную диаграмму Top-12 самых частых черт характера.
График показывает, какие черты чаще всего встречаются в описаниях пород в датасете. Это даёт контекст и «фон» для дальнейшего анализа дружелюбности.
Распределение показателя дружелюбности
Строю гистограмму распределения friendly_ratio по всем породам и добавляю линию среднего значения.
График показывает, как распределяется «доля friendly-traits» среди пород (где находится большинство значений и есть ли крайности). Линия среднего помогает увидеть типичное значение метрики.
Топ-5 самых дружелюбных пород собак по данным датасета
Сортирую top5 для красивого порядка и строю barh-график Top-5 самых дружелюбных пород по friendly_ratio, добавляю подписи чисел на столбцы.
Получаем итоговый рейтинг лидеров по friendly_ratio. Он визуально объясняет, какие породы имеют максимальную долю friendly-traits в тексте датасета.
Топ-5 наименее дружелюбных пород собак по данным датасета
Считаю отдельную метрику «unfriendly/guard profile» на основе набора traits (например protective/alert/independent/strong/…). Создаю unfriendly_score, unfriendly_ratio, фильтрую данные, выбираю Top-5 по unfriendly_ratio и строю barh-график.
Этот график показывает породы, у которых выше доля характерных черт из набора «guard/defensive profile» (по данным из Character Traits). Это объясняющий график: он выделяет Top-5 по выбранной метрике.
Считаем описательную статистику для метрики в valid (беру friendly_ratio, а если его нет — unfriendly_ratio): mean, median, std, квартили Q1/Q3 и IQR.
Итог
Цель проекта была достигнута: по метрике friendly_ratio (доля «friendly» -traits в описании породы) были чётко выделены Top-5 самых дружелюбных и Top-5 наименее дружелюбных пород на основе данных выбранного датасета. Изучающие графики добавили „картину мира“ — стало видно, какие черты характера чаще всего встречаются в описаниях и как в целом распределяется дружелюбность по выборке: значения friendly_ratio не одинаковые, а заметно разнятся между породами. Объясняющие графики превратили это в понятный результат. Конечно, выводы относятся к текстовым описаниям характерных черт внутри набора данных и лучше всего подходят для сравнения пород в рамках этого датасета, а не как „абсолютная истина“ о поведении собак :)
Иллюстрация и обложка проекта созданы с помощью ChatGPT Plus.
Описание применения генеративной модели
ChatGPT Plus — использовался для получения рекомендаций по работе с кодом. Для создания иллюстрации и обложки, а также для помощи в редактировании текстовой части проекта.
Adobe Color — применялся для формирования цветовой палитры.