一、数据预处理:为分析打好基础

在进行可视化分析前,我们需要先对原始数据进行预处理,将其转化为便于分析的格式。本次分析的核心数据包括商品标题、店名、销量、销售额等信息,预处理主要涉及文本分词类别标注两个关键步骤。

商品标题中包含了丰富的信息(如品类、适用人群等),但原始标题是连续的字符串,无法直接用于分析。我们使用 jieba 分词库的 “搜索引擎模式” 对标题进行分词,将长文本拆分为独立的词语:

python

import jieba 
subtitle = []
# 遍历所有标题,用搜索引擎模式分词(更细粒度,适合提取关键词)
for each in data['title']:
    k = jieba.lcut_for_search(each)
    subtitle.append(k)
data['subtitle'] = subtitle  # 新增“分词结果”列

例如,“男士保湿面霜” 会被拆分为 ["男士", "保湿", "面霜", "保湿面霜"],为后续的类别标注和人群定位提供了关键词基础。

为了分析不同品类的销售表现,我们需要给商品标注 “大类” 和 “小类”。这里通过预设的分类字典(dcatg)实现自动标注 —— 字典键为分词后的关键词,值为对应的(大类,小类):

python

# 假设dcatg是提前构建的分类字典,例如:{"面霜": ("护肤品", "面部护理"), ...}
sub_type = []  # 小类
main_type = []  # 大类
for i in range(len(data)):
    exist = False
    # 遍历标题分词结果,匹配分类字典
    for j in data['subtitle'][i]:
        if j in dcatg:
            sub_type.append(dcatg[j][1])
            main_type.append(dcatg[j][0])
            exist = True
            break  # 取第一个匹配的类别
    if not exist:
        sub_type.append('其他')  # 未匹配到的归为“其他”
        main_type.append('其他')
data['sub_type'] = sub_type
data['main_type'] = main_type

二、多维度可视化分析

1. 品牌表现分析:谁是市场 “优等生”?

品牌是消费者选择商品的重要参考,我们从 “商品数量”“总销量”“总销售额” 和 “平均单价” 四个指标对比不同品牌的表现:python

import matplotlib.pyplot as plt 
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题
plt.figure(figsize=(12, 10))

# 子图1:各品牌商品数量(反映品牌丰富度)
plt.subplot(2,2,1)
data['店名'].value_counts().sort_values().plot.bar()
plt.title('各品牌商品数')

# 子图2:各品牌总销量(反映市场接受度)
plt.subplot(2,2,2)
data.groupby('店名').sale_count.sum().sort_values().plot.bar()
plt.title('各品牌总销量')

# 子图3:各品牌总销售额(反映营收能力)
plt.subplot(2,2,3)
data.groupby('店名')['销售额'].sum().sort_values().plot.bar()
plt.title('各品牌总销售额')

# 子图4:各品牌平均单价(反映定价策略)
plt.subplot(2,2,4)
avg_price = data.groupby('店名')['销售额'].sum() / data.groupby('店名').sale_count.sum()
avg_price.sort_values().plot.bar()
plt.title('各品牌平均单价')

plt.tight_layout()  # 自动调整布局

2. 品类分布分析:哪些品类更受欢迎?

品类是连接商品和消费者的核心纽带,我们从 “大类” 和 “小类” 两个层级,分析不同品类的销量和销售额占比:

python

# 大类与小类的销量、销售额占比(饼图)
plt.figure(figsize=(12, 12))

# 大类销量占比
plt.subplot(2,2,1)
data.groupby('main_type').sale_count.sum().plot.pie(autopct='%0f%%', title='各大类销售量占比')

# 大类销售额占比
plt.subplot(2,2,2)
data.groupby('main_type')['销售额'].sum().plot.pie(autopct='%0f%%', title='各大类销售额占比')

# 小类销量占比
plt.subplot(2,2,3)
data.groupby('sub_type').sale_count.sum().plot.pie(autopct='%0f%%', title='各小类销售量占比')

# 小类销售额占比
plt.subplot(2,2,4)
data.groupby('sub_type')['销售额'].sum().plot.pie(autopct='%0f%%', title='各小类销售额占比')

plt.tight_layout()

价格是影响购买决策的核心因素,我们将品牌按平均单价分为 “0-100 元”“100-200 元”“200-300 元”“300 元以上” 四个区间,分析不同价格带的销售表现:

python

# 划分价格区间
A = avg_price[(avg_price <= 100) & (avg_price > 0)].index  # 0-100元
B = avg_price[(avg_price <= 200) & (avg_price > 100)].index  # 100-200元
C = avg_price[(avg_price <= 300) & (avg_price > 200)].index  # 200-300元
D = avg_price[avg_price > 300].index  # 300元以上

# 可视化:各价格区间的销售额占比与平均单店销售额
plt.figure(figsize=(16, 8))

# 左图:各品牌销售额占比(按价格区间着色)
plt.subplot(1,2,1)
sum_sale_byprice = sum_sale[A].sort_values().append(sum_sale[B].sort_values()).append(sum_sale[C].sort_values()).append(sum_sale[D].sort_values())
plt.pie(x=sum_sale_byprice, labels=sum_sale_byprice.index, 
        colors=['grey']*len(A)+['g']*len(B)+['y']*len(C)+['m']*len(D),
        autopct='%0f%%')

# 右图:各价格区间的平均单店销售额
plt.subplot(1,2,2)
plt.bar('0-100元', np.mean(sum_sale[A]), color='grey')
plt.bar('100-200元', np.mean(sum_sale[B]), color='g')
plt.bar('200-300元', np.mean(sum_sale[C]), color='y')
plt.bar('300元以上', np.mean(sum_sale[D]), color='m')
plt.title('不同价格区间的平均单店销售额')

python

# 男士与非男士专用商品的销量、销售额占比
plt.figure(figsize=(16, 16))

# 男士专用商品中小类销量占比
plt.subplot(2,2,1)
data.loc[data['是否男士专用'] == '是'].groupby('sub_type').sale_count.sum().plot.pie(autopct='%0f%%', title='男士各小类销售量占比')

# 非男士专用商品中小类销量占比
plt.subplot(2,2,2)
data.loc[data['是否男士专用'] == '否'].groupby('sub_type').sale_count.sum().plot.pie(autopct='%0f%%', title='非男士专用各小类销售量占比')

# 男士专用商品销量占总销量比例
plt.subplot(2,2,3)
data.groupby('是否男士专用').sale_count.sum().plot.pie(autopct='%0f%%', title='男士专用销售量占比')

# 男士专用商品销售额占总销售额比例
plt.subplot(2,2,4)
data.groupby('是否男士专用')['销售额'].sum().plot.pie(autopct='%0f%%', title='男士专用销售额占比')

下期再见

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐