Идея
Пришла мне аболютно закономерно: взяла то, что интересно (самая главная ценность во все времена), нашла по слову Fashion на предложенном Kaggle.com (https://www.kaggle.com/datasets/paramaggarwal/fashion-product-images-small) И задалась самыми простыми (но от этого не менее важными) вопросами: Что носят люди? Какой цвет носят люди? Чем одежда мужчин отличается от одежды женщин? Кого больше? Gucci/Louis Vuitton? Или победит массовость спорта? (Сам датасет не то чтобы про продажи, но, надо думать, если делают фото товаров, значит есть спрос?)
Что даст анализ и визуализация?
Мы проведём анализ и построим цепочку визуализаций: в первую очередь, это позволит выделить практические выводы, которые позволяют в общем оценить рынок (ровно в той мере, в которой он отражён в датасете), посмотреть на ситуацию как бы сверху. Это очень полезно, особенно в современном мире, где данные буквально повсюду, как оказалось.
Какие графики я использовала
- Круговая — хорошо видны пропорции от целого
- Столбчатая — хороша для топов и сравнения количества
- Линейчатая — аналог столбчатой, но удобнее когда много значений, которые становится трудно прочесть
- Тепловая карта — чудесно отображает связи элементов
Весь лонгрид было решено сделать в пастельных тонах, чтобы настроить читающего на спокойный и аналитический лад) Ну и потому что мне самой она нравится.
Как я обрабатывала данные
1. Загрузка и первичный осмотр данных.
Загрузила файл и просто посмотрела на него. Цель — понять общую суть данных и их вид.
# загружаю csv файл с данными
df = pd.read_csv('styles.csv', on_bad_lines='skip')
print(f"Строк: {len(df)}")
# смотрю как выглядят данные
df.head()
2. Проверка пропусков и целостности данных.
Посмотрела на пропуски.
# Проверяю пропущенные значения
print("Пропущено:")
print(df.isnull().sum())
Дальше пойдёт статистическая обработка данных.
Нейрорука
Приложена к генерации всех этих замечательных иллюстраций (Всё в chatGPT) https://chatgpt.com/ Промпт: действуй как хороший дизайнер, у меня есть идея: сделать презентацию в пастельных тонах, в ней я буду излагать своё мини-исследование про анализ данных одежды, визуально она должна быть лёгкой и приятной, в пастельной палитре, а ещё обложку нарисуй в таком же стиле, чтобы всё выглядело модно и органично
Также ChatGPT помог разобраться с методами статистики Промпт: действуй как ментор по анализу данных, скажи, какие статистические методы для этого используются, вглубь не лезь, я только начинаю разбираться в этой теме
Применённые статистические методы
Дескриптивная статистика (mean/min/max и т. д.) # статистика по числовым столбцам df.describe () # Хочется увидеть и категориальные тоже (общее) df.describe (include="all») # Отдельно статистика: df.select_dtypes (include="number»).agg ([«min», «max», «mean»])
Частотный анализ (сколько раз встречается значение) # смотрю распределения по основным категориям print («Сколько товаров для кого:») # Беру количество значений print (df['gender'].value_counts ()) print () print («Основные категории:») print (df['masterCategory'].value_counts ()) print () print («Самые популярные типы вещей:») print (df['articleType'].value_counts ().head (10))
Анализ количества пропусков # Проверяю пропущенные значения print («Пропущено:») print (df.isnull ().sum ())
Кросс-табуляция — в виде тепловой карты, показывает связи # создаю кросс-таблицу (теплокарту) crosstab = pd.crosstab (df['masterCategory'], df['gender'])
# рисую тепловую карту plt.figure (figsize=(10, 6), facecolor='#F5F0EB') sns.heatmap (crosstab, annot=True, fmt='d', cmap='YlOrBr', cbar_kws={'label': 'Количество'}, linewidths=1, linecolor='#F5F0EB')
plt.title ('Связь основных категорий и пола', fontsize=13, pad=15, color='#6B5D54') plt.tight_layout () plt.savefig ('graph3_heatmap.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
- Обработка текста — получила бренд из названия (по-простому: первое слово в названии) # создаю копию датасета только с непустыми названиями df_brands = df[df['productDisplayName'].notna ()].copy ()
# беру первое слово как бренд df_brands['brand'] = df_brands['productDisplayName'].str.split ().str[0]
# считаю топ брендов top_brands = df_brands['brand'].value_counts ().head (15)
Кто больше всех одевается?
Самый первый и фундаментальный вопрос. Рынок в виде сверху. Мужские товары занимают половину всего ассортимента (49.9! %). Женские на втором месте. Остальное — это унисекс вещи, детская одежда и товары для мальчиков/девочек отдельно. Честно говоря, я удивлена что мужских вещей так много! Обычно когда я хожу по магазинам, кажется что женских отделов всегда больше.
# Кто больше всех одевается? # считаю сколько товаров для каждого пола gender_counts = df['gender'].value_counts () # создаю фигуру с бежевым фоном plt.figure (figsize=(8, 8), facecolor='#F5F0EB') # выбираю цвета для круговой диаграммы — все в бежевой гамме (через Adobe Color) colors = ['D4C5B9', 'E8DDD3', 'C9B8A8', 'A89584'] # рисую круговую диаграмму (пирог) plt.pie (gender_counts, labels=gender_counts.index, autopct='%1.1f%%', colors=colors, startangle=90, textprops={'fontsize': 11}) plt.title ('Распределение товаров по полу', fontsize=14, pad=20, color='#6B5D54') # Сохраняю график в высоком качестве для лонгрида plt.savefig ('graph1_gender.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show (
А цвет?
Черный и белый — это вообще вне конкуренции! Потому что это классика. Синий на третьем месте — тоже очень популярный цвет, особенно для джинсов и рубашек. Интересно что розовый довольно высоко в списке — наверное за счет женской одежды. Люди предпочитают нейтральные и базовые цвета. Яркие цвета есть, но их меньше.
# А цвет? # беру топ цветов по популярности top_colors = df['baseColour'].value_counts ().head (15) # создаю фигуру plt.figure (figsize=(10, 8), facecolor='#F5F0EB') ax = plt.gca () ax.set_facecolor ('FFFFFF') # белый фон для графика # тут горизонтальные столбцы plt.barh (range (len (top_colors)), top_colors.values, color='#C9B8A8', edgecolor='#8B7B6B', linewidth=1.5) # подписываю оси plt.yticks (range (len (top_colors)), top_colors.index, fontsize=10) plt.xlabel ('Количество товаров', fontsize=11, color='#6B5D54') plt.title ('Топ самых популярных цветов', fontsize=13, pad=15, color='#6B5D54') # сетку чтобы было легче читать plt.grid (axis='x', alpha=0.3, color='#D4C5B9') plt.tight_layout () # сохраняю plt.savefig ('graph2_colors.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
Кто что носит?
Одежда — самая большая категория и для мужчин и для женщин. Мужской одежды побольше. Аксессуары — у женщин их больше чем у мужчин. Это логично, женщины обычно больше внимания уделяют аксессуарам — сумки, украшения, шарфы. Расстроил малый выбор для детей, относительно взрослых, дети же тоже хотят и должны иметь выбор и красиво одеваться ( Интересно что категория унисекс не такая большая. Хотя сейчас много говорят про гендерно-нейтральную моду. Но данные староваты, наверно.
# Кто что носит? # создаю кросс-таблицу (теплокарту) — в ней видно связи между парой элементов crosstab = pd.crosstab (df['masterCategory'], df['gender'])
# рисую plt.figure (figsize=(10, 6), facecolor='#F5F0EB')
# использую мягкую палитру sns.heatmap (crosstab, annot=True, fmt='d', cmap='YlOrBr', cbar_kws={'label': 'Количество'}, linewidths=1, linecolor='#F5F0EB') # Обзываю plt.title ('Связь основных категорий и пола', fontsize=13, pad=15, color='#6B5D54') plt.tight_layout ()
# сохраняю и отображаю график plt.savefig ('graph3_heatmap.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
Во что больше всех одеваются?
В целом видно что спортивные бренды доминируют в датасете. Это показывает что люди стали больше ценить комфорт и функциональность в одежде. Плюс спортивную одежду можно носить куда угодно, это уже не только для зала.
# Во что больше всех одеваются? # сначала нужно достать бренды из названий товаров (просто первое слово) # создаю копию датафрейма только с непустыми названиями df_brands = df[df['productDisplayName'].notna ()].copy () # разбиваю название по пробелам и беру первое слово — обычно это бренд df_brands['brand'] = df_brands['productDisplayName'].str.split ().str[0] # считаю топ брендов top_brands = df_brands['brand'].value_counts ().head (15) # рисую график plt.figure (figsize=(10, 8), facecolor='#F5F0EB') ax = plt.gca () ax.set_facecolor ('#FFFFFF')
# горизонтальные столбцы plt.barh (range (len (top_brands)), top_brands.values, color='#D4C5B9', edgecolor='#8B7B6B', linewidth=1.5) # оси и названгие plt.yticks (range (len (top_brands)), top_brands.index, fontsize=10) plt.xlabel ('Количество товаров', fontsize=11, color='#6B5D54') plt.title ('Топ брендов по количеству товаров', fontsize=13, pad=15, color='#6B5D54') plt.grid (axis='x', alpha=0.3, color='#D4C5B9') plt.tight_layout ()
plt.savefig ('graph4_brands.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
Что носят больше всего?
Футболки — абсолютный лидер! Их аж больше 7000 штук. Ведь футболка это базовая вещь в любом гардеробе. На втором месте рубашки — около 3200 штук. Рубашки тоже очень универсальная вещь, можно носить и на работу, и на прогулку. На первом месте из неодёжного — повседневная обувь, а на втором — часы.
Все эти вещи базовые, достаточно интересно.
# Что носят больше всего? # считаю топ типов одежды top_articles = df['articleType'].value_counts ().head (10)
# создаю фигуру plt.figure (figsize=(12, 6), facecolor='#F5F0EB') ax = plt.gca () ax.set_facecolor ('#FFFFFF')
# обычная вертикальная столбчатая диаграмма plt.bar (range (len (top_articles)), top_articles.values, color='#B8A99A', edgecolor='#8B7B6B', linewidth=1.5)
# подписываю столбцы — поворачиваю названия под углом чтобы влезли plt.xticks (range (len (top_articles)), top_articles.index, rotation=45, ha='right', fontsize=10) plt.ylabel ('Количество', fontsize=11, color='#6B5D54') plt.title ('Топ самых популярных типов товаров', fontsize=13, pad=15, color='#6B5D54')
# сетка по горизонтали plt.grid (axis='y', alpha=0.3, color='#D4C5B9') plt.tight_layout ()
plt.savefig ('graph5_articles.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
В какой сезон больше всего одеваются?
Летние товары — это больше 20 тысяч штук! Это почти половина всего датасета. Очень большая разница с другими сезонами. Осени и зимы и весны примерно одинаково. Удивило, что весны так мало Возможно, летнюю одежду просто проще и дешевле производить, так как она тонкая и лёгкая
# В какой сезон больше всего одеваются? # считаю кол-во товаров для каждого сезона season_counts = df['season'].value_counts ()
# рисую график plt.figure (figsize=(10, 6), facecolor='#F5F0EB') ax = plt.gca () ax.set_facecolor ('#FFFFFF')
# столбчатая диаграмма plt.bar (season_counts.index, season_counts.values, color='#A89584', edgecolor='#8B7B6B', linewidth=1.5)
plt.ylabel ('Количество товаров', fontsize=11, color='#6B5D54') plt.title ('Распределение товаров по сезонам', fontsize=13, pad=15, color='#6B5D54') plt.grid (axis='y', alpha=0.3, color='#D4C5B9') plt.tight_layout ()
# сохраняю plt.savefig ('graph6_seasons.png', dpi=300, bbox_inches='tight', facecolor='#F5F0EB') plt.show ()
Самые интересные для меня выводы
По столь интересной и важной для меня работе
Бренды Спортивные гиганты прямо-таки доминируют на рынке, обгоняя high-fashion бренды. Всё таки победила простота и удобство.
Люди Имеют огромный ассортимент одежды летом, хотят одеваться легко, чувствовать себя свободно, выбирают спортивную одежду
Данные Могут рассказать очень много, даже о такой, как я думала сначала, не связанной с ними сфере.
Файл с кодом и датасет: https://drive.google.com/drive/folders/1Ot-LexDJv_FrNGbyD-BVYbpg8mVA5Yn1?usp=drive_link



