引言:数据背后的美妆消费密码

每年的双十一购物节都是中国电商市场的重头戏,而美妆类产品往往是这场消费盛宴中的焦点。本文基于 "双十一淘宝美妆数据",通过数据清洗、特征工程、可视化分析等步骤,深入挖掘美妆市场的消费趋势、品牌表现及用户偏好,为品牌方和消费者提供有价值的参考。

一、数据初探:揭开数据集的面纱

1.1 数据概览

本次分析使用的数据集包含 27598 条记录,涵盖了淘宝平台上多个美妆品牌的商品信息,主要特征包括:

  • update_time:数据更新时间
  • id:商品唯一标识
  • title:商品标题
  • price:商品价格
  • sale_count:销量
  • comment_count:评论数
  • 店名:品牌名称

通过df.head()查看前 5 行数据,我们可以快速了解数据的基本结构:

update_timeidtitlepricesale_countcomment_count店名
2016/11/14A18164178225CHANDO / 自然堂 雪域精粹纯粹滋润霜 50g...139.026719.02704.0自然堂
2016/11/14A18177105952CHANDO / 自然堂凝时鲜颜肌活乳液 120ML...194.08122.01492.0自然堂

1.2 数据特征分析

通过df.info()df.describe(),我们得到了更深入的信息:

  • 数据类型:3 个数值型特征(price、sale_count、comment_count)和 4 个对象型特征
  • 缺失值:sale_count 和 comment_count 存在缺失(共 2354 条)
  • 数值分布:价格均值 362.83 元,中位数 205 元,存在高价商品拉高均值;销量均值 12301.77 件,中位数 1445 件,分布呈右偏态
  • 二、数据清洗:为分析奠定基础

    2.1 重复值处理

    使用drop_duplicates()方法去除重复数据,共发现 86 条重复记录,处理后保留 27512 条有效数据。

    2.2 缺失值处理

    观察缺失值所在行发现,sale_count 和 comment_count 的缺失往往同时出现,且集中在植村秀、SK-II 等品牌。推测这些缺失值代表销量为 0,因此采用fillna(0)用 0 填补缺失值,确保后续分析的准确性。

    2.3 特征工程:创造新的分析维度

    2.3.1 商品标题分词

    利用 jieba 分词工具对商品标题进行分词处理,提取关键信息

    import jieba
    subtitle = []
    for each in data['title']:
        k = jieba.lcut_for_search(each)  # 搜索引擎模式
        subtitle.append(k)
    data['subtitle'] = subtitle
    

    分词后,我们可以更精准地识别商品属性,为后续分类打下基础。

    2.3.2 商品分类体系构建

    根据美妆行业常见分类标准,构建二级分类体系:

  • 大类:护肤品、化妆品、其他
  • 小类:乳液类、眼部护理类、面膜类等 13 个子类别
  •  

    通过自定义分类字典dcatg,实现商品自动分类:

    # 部分分类规则示例
    basic_data = """护肤品	乳液类	乳液	美白乳	润肤乳
    护肤品	眼部护理类	眼霜	眼部	眼膜
    化妆品	口红类	唇釉	口红	唇彩	唇膏"""
    
    # 生成分类字典
    dcatg = {}
    for i in basic_data.split('\n'):
        main_cat, sub_cat, *keys = i.strip().split('\t')
        for key in keys:
            dcatg[key] = (main_cat, sub_cat)
    
     

    最终分类结果显示,有 4273 件商品被归为 "其他" 类,占比约 15.5%,说明分类体系仍有完善空间。

    2.3.3 性别专属特征提取

    通过标题中的关键词识别男士专用商品:

    sex = []
    for i in range(len(data)):
        if '男士' in data['subtitle'][i] or '男生' in data['subtitle'][i]:
            sex.append('是')
        elif '男' in data['subtitle'][i] and '女' not in data['subtitle'][i] and '斩男' not in data['subtitle'][i]:
            sex.append('是')
        else:
            sex.append('否')
    data['是否男士专用'] = sex
    

    统计显示,男士专用商品共 2179 件,占比 7.9%,非男士专用商品 25333 件,占比 92.1%。

    2.3.4 销售额计算

    新增 "销售额" 特征,为后续分析提供关键指标

    data['销售额'] = data.price * data.sale_count

三、数据分析与可视化:洞察市场规律

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from datetime import datetime

# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 假设data已完成清洗和特征工程
# data = pd.read_csv('cleaned_data.csv')

# 1. 品牌销售表现分析
plt.figure(figsize=(15, 6))

# 1.1 销量TOP5品牌
top5_sale = data.groupby('店名')['sale_count'].sum().nlargest(5)
plt.subplot(1, 3, 1)
top5_sale.plot(kind='bar', color='skyblue')
plt.title('销量TOP5品牌')
plt.ylabel('总销量')

# 1.2 销售额TOP5品牌
top5_rev = data.groupby('店名')['销售额'].sum().nlargest(5)
plt.subplot(1, 3, 2)
top5_rev.plot(kind='bar', color='lightgreen')
plt.title('销售额TOP5品牌')
plt.ylabel('总销售额')

# 1.3 品牌平均单价对比
avg_price = data.groupby('店名')['销售额'].sum() / data.groupby('店名')['sale_count'].sum()
top_avg_price = avg_price.nlargest(5)
plt.subplot(1, 3, 3)
top_avg_price.plot(kind='bar', color='salmon')
plt.title('平均单价TOP5品牌')
plt.ylabel('平均单价(元)')

plt.tight_layout()
plt.show()

# 2. 品类销售分析
plt.figure(figsize=(12, 5))

# 2.1 大类销量占比
main_type_sale = data.groupby('main_type')['sale_count'].sum()
plt.subplot(1, 2, 1)
plt.pie(main_type_sale, labels=main_type_sale.index, autopct='%1.1f%%')
plt.title('大类销量占比')

# 2.2 小类销量TOP5
sub_type_sale = data.groupby('sub_type')['sale_count'].sum().nlargest(5)
plt.subplot(1, 2, 2)
sub_type_sale.plot(kind='bar', color='purple')
plt.title('小类销量TOP5')
plt.ylabel('总销量')

plt.tight_layout()
plt.show()

# 3. 时间趋势分析
plt.figure(figsize=(10, 5))

# 3.1 每日销量趋势
data['update_time'] = pd.to_datetime(data['update_time'])
daily_sale = data.groupby(data['update_time'].dt.date)['sale_count'].sum()
daily_sale.plot(marker='o', color='blue')
plt.title('双十一期间每日销量趋势')
plt.ylabel('总销量')
plt.grid(linestyle='--', alpha=0.7)
plt.show()

# 4. 性别差异分析
plt.figure(figsize=(8, 5))
gender_sale = data.groupby('是否男士专用')['sale_count'].sum()
gender_sale.plot(kind='bar', color=['orange', 'green'])
plt.title('男士专用与非男士专用商品销量对比')
plt.ylabel('总销量')
plt.show()

核心分析结论:

  1. 品牌表现

    • 相宜本草在销量和销售额上均位居榜首,但其平均单价较低(属于大众消费价位)
    • 雅诗兰黛平均单价最高,体现高端品牌溢价能力
    • 悦诗风吟商品数量多但销量未进前三,存在商品结构优化空间
  2. 品类特征

    • 护肤品类占总销量的 70% 以上,是绝对主力
    • 小类中清洁类、补水类、面霜类位列销量前三,反映基础护肤需求旺盛
  3. 时间规律

    • 销量峰值出现在 11 月 9 日(双十一前 2 天)
    • 11 月 11 日当天销量显著下降,说明消费者存在 "错峰购物" 行为
  4. 性别差异

    • 男士专用商品销量仅占总量的 6.5%,市场潜力待挖掘
    • 男士商品中以清洁类(如洗面奶)为主,占比超 40%

四、结论与建议

主要结论

  1. 价格策略影响显著:低价品牌在销量和销售额上均占优,大众市场仍是主力
  2. 品类偏好明显:护肤品(尤其清洁类、补水类)是消费主流
  3. 性别市场分化:男士专用商品占比低,但清洁类需求明确
  4. 时间规律特殊:双十一当天销量不及预期,预热期和返场期表现更好
  5. 评论数据异常:部分品牌评论数与销量不匹配,需关注数据真实性
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐