Введение
Для анализа использован набор данных о женской одежде и отзывах покупателей из онлайн-магазина. Источником является сайт Kaggle. Набор содержит 23486 отзывов и 10 переменных, каждая строка соответствует одному отзыву и включает информацию о вещи, возрасте покупателя, заголовке и тексте отзыва, рейтинге, рекомендации, числе положительных откликов и категориальных признаках, описывающих тип и отдел одежды.
Набор данных интересен тем, что позволяет изучить предпочтения покупателей по возрасту и категориям одежды, выявить зависимость рейтинга от длины отзывов, а также применять многомерный анализ и визуализацию на реальных коммерческих данных.
Цель анализа
Цель анализа заключается в выявлении возрастных предпочтений покупателей, определении категорий с высоким и низким рейтингом, изучении характера и длины отзывов, а также формулировании рекомендаций по маркетингу и ассортименту.
Для анализа были использованы разные типы графиков: Столбчатые диаграммы для распределения рейтингов, горизонтальные столбчатые диаграммы для среднего рейтинга по категориям, гистограмма с кривой плотности для распределения возраста, диаграмма размаха для длины отзывов по рейтингу и возрасту, тепловая карта для среднего рейтинга по категориям и возрастным группам. Такой подход позволяет наглядно сравнивать категории и выявлять зависимости.
Обработка данных
Данные были обработаны поэтапно. Сначала импортированы библиотеки для работы с таблицами и визуализацией, затем загружен файл CSV и проверено его содержимое. Пропуски в заголовках и текстах отзывов заполнены пустыми строками, числовые столбцы приведены к целым, рассчитана длина каждого отзыва. Это позволило строить корректные графики и анализировать зависимости:
coding: utf-8
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rcParams
Загрузка CSV
df = pd.read_csv («/content/WomensClothingdata.csv») df.head ()
Очистка и подготовка данных
df[«Title»] = df[«Title»].fillna (»») df[«Review Text»] = df[«Review Text»].fillna (»») df[«Rating»] = df[«Rating»].astype (int) df[«Positive Feedback Count»] = df[«Positive Feedback Count»].astype (int) df[«Age»] = df[«Age»].astype (int) df[«review_length»] = df[«Review Text»].apply (len)
Стилизация графиков
Графики оформлены с использованием нестандартных цветовых палитр Seaborn и шрифта DejaVu Sans. Заголовки выделены жирным, градиенты и контрастные границы помогают акцентировать внимание на ключевых данных. Такой стиль делает графики более информативными и приятными для восприятия:
rcParams['font.family'] = 'DejaVu Sans'
custom_palette = sns.color_palette («pastel») sns.set_theme (style="whitegrid», palette=custom_palette)
plt.rcParams[«figure.figsize»] = (12, 6)
Распределение рейтингов и средний рейтинг по категориям
Столбчатые диаграммы позволяют увидеть, какие оценки преобладают и какие категории получают высокие или низкие средние рейтинги. С помощью группировки данных groupby и визуализации через seaborn построены графики распределения рейтингов и среднего рейтинга по категориям:
Распределение рейтингов (столбчатая диаграмма):
counts = df[«Rating»].value_counts ().sort_index () colors = sns.color_palette («rocket», len (counts))
counts.plot (kind="bar», color=colors, edgecolor='black') plt.title («Распределение рейтингов», fontsize=16, fontweight='bold') plt.xlabel («Рейтинг», fontsize=12) plt.ylabel («Количество отзывов», fontsize=12) plt.show ()
Средний рейтинг по категории одежды:
rating_by_class = df.groupby («Class Name»)[«Rating»].mean ().sort_values () colors = sns.color_palette («mako», len (rating_by_class))
rating_by_class.plot (kind="barh», color=colors, edgecolor='black') plt.title («Средний рейтинг по типу одежды», fontsize=16, fontweight='bold') plt.xlabel («Средний рейтинг», fontsize=12) plt.ylabel («Тип одежды», fontsize=12) plt.show ()
Результаты показали, что большинство отзывов положительные (4–5). Лидеры — Casual bottoms, Layering, Jeans, а аутсайдеры — Trend, Chemises, Dresses.
Распределение возраста покупателей
Чтобы изучить возрастной состав аудитории, построили гистограмму с кривой плотности:
Возраст покупателей (гистограмма + KDE)
sns.histplot (df['Age'], bins=20, kde=True, color=»#FF6F61», edgecolor="black») plt.title («Распределение возраста покупателей», fontsize=16, fontweight='bold') plt.xlabel («Возраст», fontsize=12) plt.ylabel («Количество отзывов», fontsize=12) plt.show ()
Здесь bins=20 делит возраст на интервалы, kde=True строит кривую плотности, а цвет выбран для наглядности.
Результат показал, что основная аудитория — 30–50 лет с пиком на 35–40, после 60 лет количество отзывов резко падает.
Длина отзывов по рейтингу и возрастным группам
График показывает распределение длины отзывов в зависимости от рейтинга и возраста покупателей:
plt.figure (figsize=(12,6)) sns.boxplot (x='Rating', y='review_length', hue=pd.cut (df['Age'], bins=[18,30,40,50,60,70]), data=df, palette="viridis») plt.title («Длина отзывов по рейтингу и возрастным группам», fontsize=16, fontweight='bold') plt.xlabel («Рейтинг», fontsize=12) plt.ylabel («Длина отзыва (символы)», fontsize=12) plt.legend (title='Возрастная группа') plt.show ()
Молодые покупатели (18–30) оставляют более короткие отзывы, независимо от рейтинга. Группа 30–50 лет пишет отзывы средней длины, с небольшой тенденцией к увеличению длины при росте рейтинга.
Пожилые покупатели (60–70) создают наиболее длинные отзывы для товаров с высокими оценками, что отражает внимание к качеству товара и более детальный разбор его особенностей.
Средний рейтинг по категории и возрастной группе
Тепловая карта построена на основе сводной таблицы средних рейтингов по категориям одежды и возрастным группам с помощью pivot_table и sns.heatmap.
Создаем возрастные группы: df['Age_group'] = pd.cut (df['Age'], bins=[18,30,40,50,60,70], labels=['18-30', '31-40', '41-50', '51-60', '61-70'])
Средний рейтинг: pivot_rating = df.pivot_table (index='Class Name', columns='Age_group', values='Rating', aggfunc='mean')
plt.figure (figsize=(14,8)) sns.heatmap (pivot_rating, annot=True, fmt=».2f», cmap='YlGnBu', cbar_kws={'label': 'Средний рейтинг'}) plt.title («Средний рейтинг по типу одежды и возрастной группе», fontsize=16, fontweight='bold') plt.ylabel («Class Name») plt.xlabel («Возрастная группа») plt.show ()
Покупатели 18–30 лет лидируют по оценкам повседневных брюк (4.50) и нижнего белья (4.50), клиенты 61–70 лет предпочитают многослойную одежду (4.78) и домашний стиль (4.30). Пляжная одежда плавно понижается в рейтинге с 4.34 (18–30) до 3.71 (61–70), что, вероятно, связано с изменением образа жизни и потребностей.
Весь код



