项目简述
上文【2020python数据分析项目:爬取某宝口红数据&数据分析可视化(一)】对数据进行了收集、清洗以及从整体的角度进行分析,本文主要从【看重点】 的角度,对不同档次的口红产品进行分析。
【预处理】区分口红档次
从整体数据看,商品价格数据分布从0-8,888都有,如果不区分各个口红产品的档次,必然会导致后续分析的均值、离异值过大,不利于爆品的分析,因此需要先根据实际情况,将口红分为5档。
【方法】通过查阅相关资料以及调查,对口红价格进行合理的价格区分,最后区分结果如下:
【顶级】[>500] 代表:CL/萝卜丁
【超一线】[400-500]代表:TE CPB
【一线】[300-400] 代表:Dior香奈儿阿尼玛 纪梵希娇 YSL
【二线】[200-300] 代表:兰蔻植村秀雅诗兰黛 资生堂
【大众】[<200] 代表:MAC 欧莱雅 美宝莲3CE
1. 顶级口红 价格--销售额分析
【方法】筛选出价格>500的口红产品进行分析,使用qcut方法,保证每个价格区间的商品数量基本相同,计算每个价格区间的销售额,并使用柱形图进行可视化展示,考察贡献最多销售额的顶级口红价格区间。
from pyecharts import options as opts
from pyecharts.charts import Bar
'''选择价格>500的商品'''
df_select_price1 = df[df["price"]>500]
'''价格区间的划定标准为价格的频数,保证每个区间的商品数量基本相同'''
df_select_price1["group"] = pd.qcut(df_select_price1["price"],10)
'''分组计算销售额,并保留为2位小数'''
df_meanSales1 = df_select_price1.groupby(by="group")[["sales"]].mean()
df_meanSales1["sales"] =df_meanSales1["sales"].map(lambda x: x/1)
df_meanSales1["sales"] = round(df_meanSales1["sales"],2)
'''绘制柱形图'''
list_labels1=["(501.999, 538.2]", "(538.2, 579.0]", "(579.0, 598.0]",
"(598.0, 630.0]", "(630.0, 668.0]", "(668.0, 726.0]",
"(726.0, 880.0]", "(880.0, 1029.9]", "(1029.9, 1388.0]", "(1388.0, 8888.0]"]
c = (
Bar()
.add_xaxis(list_labels1)
.add_yaxis("",df_meanSales1["sales"].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="各价格区间销售额分布图",subtitle="顶级"),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
)
.render_notebook()
)
c
【结论】结合图表和数据进行分析可得,顶级档次的口红最挣钱的价位在[880-1029]其次是[726-880],[880-1029]价位的商品主要是各种口红套装;即消费者对口红套装较为青睐;其次[726-880]对应的是高端的单只口红主要是CL/萝卜丁
2. 爆品分析
【方法】爆品即爆款产品,由于目前的数据不存在时间序列,即可以将此处的爆品理解为短时间内贡献巨大销售额的产品。通过箱线图,我们可以很好的考察各个价格区间内销售额明显高于整体的值,即离异值,离异值越多的价格区间,即产生爆品的数量越多。
import matplotlib.pyplot as plt
import seaborn as sns
df_group = df_select_price1.groupby(by="group")
'''取出各分组后的数'''
createVar = locals()
n = 1
for key,value in df_group:
createVar["df_group"+ str(n)] = df_group.get_group(key)
n += 1
list_labels1=["(501.999, 538.2]", " ", "(579.0, 598.0]",
" ", "(630.0, 668.0]", " ",
"(726.0, 880.0]", " ", "(1029.9, 1388.0]", " "]
'''绘制箱线图'''
sns.set_style("white")
plt.figure(figsize=(8,5), dpi=120)
x = (
df_group1["sales"].values.tolist(),
df_group2["sales"].values.tolist(),
df_group3["sales"].values.tolist(),
df_group4["sales"].values.tolist(),
df_group5["sales"].values.tolist(),
df_group6["sales"].values.tolist(),
df_group7["sales"].values.tolist(),
df_group8["sales"].values.tolist(),
df_group9["sales"].values.tolist(),
df_group10["sales"].values.tolist(),
)
label = list_labels1
plt.boxplot(x, labels=label, meanline=True, showmeans=True,notch=True)
plt.show()
图中的红色框框选的点即为离异值,可以通过其价格和销售额找到其对应的产品。
'''选择sales>4000000得商品【抽取出异常值】'''
df_sort1 = df_select_price1[df_select_price1["sales"]>4000000].sort_values(by="group").reset_index(drop=True)
df_sort1
【结论】通过箱线图和所筛选的离异值数据分析可得:
- 在[726-880],[880-1029]价格区间内具有较多且较高的离异值,说明在此区间更有可能打造爆款商品
- 查看对应区间的离异值,在[726-880]最具爆品特性的是“Christian Louboutin女王权杖唇膏 全色cl萝卜丁口红001M 005M”,其次,由于此款针绣文是套装,并不属于高端品牌。
- nymy的套装在[880-1029]卖的最好,但是由于也是打包卖,单只价格在500左右。反观[500-538]区间的产品,并没有爆品。因此,对于此区间的商品,使用套装的方式出售可以带来更多的
- 顶级档次的口红并没有销售额超过5,000,000的产品
3. 超一线、一线、二线、大众档次口红产品分析
【方法】其他档次的口红的分析方法与顶级档次的口红分析方法相同,只需要替换对应的数据即可,这里不再重复。
4. 各价格爆品综合分析
【方法】对顶级、超一线、一线、二线、大众档次的产品进行爆品分析后,就可以得到给定条件下的所有爆款产品,去除套装数据,并将各爆款绘制成散点图,观察爆款产品特点。
'''整理数据、去除套装产品'''
df_sort = pd.concat([df_sort1,df_sort2,df_sort3,df_sort4,df_sort5])
df_sort = df_sort.reset_index(drop=True)
df_sort = df_sort.drop(index=[1,2]).reset_index(drop=True)
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.commons.utils import JsCode
'''绘制散点图'''
c = (
Scatter()
.add_xaxis(df_sort["price"])
.add_yaxis(
"",
[list(z) for z in zip(df_sort["sales"],df_sort["pro_name"] )],
label_opts=opts.LabelOpts(
formatter=JsCode(
"function(params){return params.value[1]}"
)
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Price-sales"),
tooltip_opts=opts.TooltipOpts(
formatter=JsCode(
"function (params) {return params.name + ' ' + params.value[2];}"
)
),
visualmap_opts=opts.VisualMapOpts(
type_="color", max_=150, min_=70, dimension=1
),
xaxis_opts=opts.AxisOpts(
type_="value", splitline_opts=opts.SplitLineOpts(is_show=True)
),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.render_notebook()
)
c
【结论】根据散点图分析可得:
- 爆品主要集中于大众价位的产品,二线以上的口红产品没有销售额超过5,000,000的爆品
-
结合热点部分的分析【结合看重点部分得出的结论】:
a. 销售额超过15,000,000的爆品,都为唇釉产品,且都有“哑光”关键字,说明消费者比较青睐于自然巨有哑光功能的唇釉产品 【哑光 -- 自然不反光】
b. 超过5,000,000的爆品出现最多的颜色主要是“奶茶色”,“红棕色”,“(烂)番茄色”
5.后续分析和改进
a.【爆品详情分析】筛选出爆品后,可以对爆品的详情进行分析,包括爬取商品评论进行情感分析等,进一步挖掘近期爆品的特性。
b.【时间序列】可以每天/月爬取对应产品数据,分析其销量、价格等数据根据时间的变化趋势。
c.【占比】对爆款产品的国内外品牌占比、各个品牌爆款占比进行可视化展示
作者:爱学习,也爱女票的于饼喵