大数据 爬虫Python AI Sql数据乐园

2020python数据分析项目:爬取某宝口红数据&数据分析可视

2020-05-02  本文已影响0人  于饼喵

项目简述

上文【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
离异值产品

【结论】通过箱线图和所筛选的离异值数据分析可得:

  1. 在[726-880],[880-1029]价格区间内具有较多且较高的离异值,说明在此区间更有可能打造爆款商品
  2. 查看对应区间的离异值,在[726-880]最具爆品特性的是“Christian Louboutin女王权杖唇膏 全色cl萝卜丁口红001M 005M”,其次,由于此款针绣文是套装,并不属于高端品牌。
  3. nymy的套装在[880-1029]卖的最好,但是由于也是打包卖,单只价格在500左右。反观[500-538]区间的产品,并没有爆品。因此,对于此区间的商品,使用套装的方式出售可以带来更多的
  4. 顶级档次的口红并没有销售额超过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
爆品分布分析
【结论】根据散点图分析可得:
  1. 爆品主要集中于大众价位的产品,二线以上的口红产品没有销售额超过5,000,000的爆品
  2. 结合热点部分的分析【结合看重点部分得出的结论】
    a. 销售额超过15,000,000的爆品,都为唇釉产品,且都有“哑光”关键字,说明消费者比较青睐于自然巨有哑光功能唇釉产品 【哑光 -- 自然不反光】
    b. 超过5,000,000的爆品出现最多的颜色主要是“奶茶色”,“红棕色”,“(烂)番茄色”

5.后续分析和改进

a.【爆品详情分析】筛选出爆品后,可以对爆品的详情进行分析,包括爬取商品评论进行情感分析等,进一步挖掘近期爆品的特性。
b.【时间序列】可以每天/月爬取对应产品数据,分析其销量、价格等数据根据时间的变化趋势。
c.【占比】对爆款产品的国内外品牌占比、各个品牌爆款占比进行可视化展示


作者:爱学习,也爱女票的于饼喵

上一篇下一篇

猜你喜欢

热点阅读