美文网首页大数据 爬虫Python AI Sql数据乐园
2020python数据分析项目:爬取某宝口红数据&数据分析可视

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

作者: 于饼喵 | 来源:发表于2020-05-02 05:30 被阅读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.【占比】对爆款产品的国内外品牌占比、各个品牌爆款占比进行可视化展示


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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/rajhghtx.html