燃气灶行业分析、淘宝平台销售分析

内容:1.燃气灶(不含集成灶)整体行业分析  2.淘宝平台销量分析  3.针对性建议(部分涉及商业信息略)

一、基本情况

(一)产品定义:

以液化石油气(液态)、人工煤气、天然气等气体燃料进行直火加热的厨房用具

按气源:分为煤气灶、液化气灶、天然气灶;

按灶眼:分为单灶、双灶和多眼灶。

(二)销售渠道

主要分为线上、线下模式。

线下:商超、专卖店(授权店)、加盟店、个体等其他店铺

线上:各网购平台、直播平台,以及占比较小、渠道来源复杂的私域流量(厂家的推手、有粉丝的个人、朋友圈带货达人等)

从一些咨询机构获取的整体数据来看:

2022年数据,线上零售989万台,占总46.0%,较2021年增加了5%;线下零售1162万台,占比54.0%;

目前来看:

线下渠道占比五成多,占比呈逐年减弱趋势;

线上平台占比四成多,并呈逐年上升趋势,有望超过线下渠道,未来的整体市场,会被各类线上、直播逐步挖墙脚;

咨询机构虽然有比较宽泛的渠道和信息来源,但数据也不一定完全准,但大趋势是对的!

(三 )当前行业现状

历史:我国燃气灶起步于1980年,近几十年以来,国内外各种燃具进入市场;

市场整体需求在下降,原因可能是①其他炊具替代影响(**集成灶**)②人口增长放缓③房地产销量下滑

未来大趋势:燃气灶市场较为成熟,客户需求主要在①旧灶换新灶②家庭必备③小餐饮店需要

总体来看:头部的品牌,已占据大部分销量,并且头部效应会愈发明显,小品牌生存空间将进一步缩小;

整体销量图

近年来,2017年为顶峰,销量3186.8万台,零售额215.2亿元。2018年以来,逐年下降,至2020年销量2803.9万台,

零售额为188.4亿元;

近期数据,2022年,国内燃气灶零售量为2151万台,较上年下降15%。

销售额图

2022年,国内燃气灶零售额约为170亿元,与零售量一样有所下滑,但销售额下滑比例比数量少,证明平均单价有所上升;

二、线上情况分析

纸上得来终觉浅,咨询机构的数据可信又不能完全信,实际干一票看看情况:

搜了一下淘宝关键词:“燃气灶不锈钢单炉”的数据;

基于以下假设:

假设1:大品牌应该有自己的线上销售团队,如果线下销售靠前的牌子,线上不会太差;

假设2:线上销售额,占比约一半,可以代表整体的销售排名;

拟爬取淘宝和1688的销售数据:

需要懂的知识:

①淘宝的销量,也有刷的,不完全真实,但整体的趋势还是有价值;

②数据模糊,例如销量4000+,3万+,不会显示具体数,销量几个、几十个的会显示具体个数(如65人付款,会准确到具体数),销量极少一般都是对线上不在乎、或者无能力线上发力的卖家;

③部分销量,显示为多少人已看过(如:10785人看过),一般都是花钱推广的产品,看过几个,销量都比较低,也不是大牌子,这类数据都转为0;

④淘宝销量,为近一年的历史销量,2023年下半年改的,以前一直是近30天的月销;

⑤无法知晓每个SKU的具体销量,需要开店后申请相关权限,只能知道整个链接的销量;

SKU解释:Stock Keeping Unit的首字母缩写,产品唯一标识码,用于区分每个不同的产品,例如iphone14 的 64GB和128GB,虽然都是iphone14,但却是两个不同的SKU,虽然都是同一类产品,颜色不同、内存大小不同,是不是pro、max等,都是不同的SKU;

2.1爬数据

大概长这样,每个链接都点进去,容易被ban,所以只抓首页上面的信息,某宝是显示100页;

基本处理:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pyecharts.charts import Bar
from pyecharts.options import *
plt.rcParams['font.sans-serif'] = ['SimHei']

# 只将一些需要的列导入,重命名
path = "C:/Users/Administrator/Downloads/rqz.xlsx"
df = pd.read_excel(path,usecols=[0,3,4,5,6,7,8,9,10,11,12,13])
pd.set_option('display.max_columns',10)
df.columns = ['title','advan1','advan2','price1','advan3','price2','sales','city','province','shop_name','promo1','promo2']
# 先把完全重复的删掉
df = df.drop_duplicates(subset=['title','shop_name','sales','price1','price2'],keep='first')
# 查看缺失值
# import missingno as msgo
# msgo.bar(df)

同一个店铺,可能有多个商品被搜到,并且还有价格一样但标题不同的,还有同一个店完全一样的链接,被搜到多次,毕竟能爬100个页面,数据约3072条; 知道这个很重要,因为在后面的数据处理和分析中,会被这东西坑!

advan--short for advantage ,每个商品可以放最多三个标签;
promo--promotion ,促销标签,最多可以有两个,略微复杂; 

2.1.2处理价格、销量

# 抓的数据,整数和小数部分,是分开的
df['price'] = df['price1'] + df['price2']
df.drop(['price1','price2'],axis=1,inplace=True)

# 处理销售数量
def clean_sales(df):
    if '看过' in df.sales:
        return 0
    elif '万' in df.sales:
        return int(df.sales.split('万')[0]) * 10000
    elif '+' in df.sales:
        return int(df.sales.split('+')[0])
    else:
        return int(df.sales.split('人')[0])

df['sale_amount'] = df.apply(clean_sales,axis=1)
df.drop('sales',axis=1,inplace=True)

销量按照最少的来取,其中销量按最低算,例如7000+人已付款,则将销量定为7000;

这些销量要看看规则,例如2万+人付款,200+人付款,很少的几十个以内的,会显示具体数字如23人付款;还有极少部分写多少人例如13506人看过。对于看过,选了几个点进去,发现销量都比较少,想着销量真不错,也不至于不写多少人买,应该是花了大价钱付费推荐的,直接计为0;

2.2销量动态图

用pyechart画的图,比较好看点,还可以设置缩放,就是稍微麻烦些,很多参数要仔细设置;

不把销量和销售额放在一个图里,因为销量多的,销售额不一定特别多,这样有一个轴不会变动,看起来不甚聪明;

# 选择销量、销售额靠前的 逆序是为了横向柱状图从大到小显示
groups_1 = df.groupby('shop_name')['money'].sum().sort_values(ascending=True)[-30:]
groups_2= df.groupby('shop_name')['sale_amount'].sum().sort_values(ascending=True)[-30:]

from pyecharts.charts import Bar,Grid,Page
bar_1 = Bar()
bar_1.add_xaxis(list(groups_1.index))
bar_1.add_yaxis("销售额",list(groups_1.values))


bar_1.reversal_axis() # 翻转x和y轴
bar_1.set_global_opts(title_opts=opts.TitleOpts(title='销售额'),
                    xaxis_opts=opts.AxisOpts(name='店铺名称'),
                    yaxis_opts=opts.AxisOpts(name='抓取的销售额'),
                    datazoom_opts=[opts.DataZoomOpts(type_='inside',orient='horizontal',xaxis_index=0,pos_left='10%'),
                                   opts.DataZoomOpts(type_='inside',orient='vertical',xaxis_index=1,pos_right='10%'),
                                  ],
                    legend_opts=opts.LegendOpts(type_='plain',pos_left="30%")
                      
                    )
bar_1.set_series_opts(label_opts=opts.LabelOpts(position="right"), # 设置数值显示在右侧
                    markline_opts=opts.MarkLineOpts(
                        data=[
                        opts.MarkLineItem(type_='max', name='最大值'),
#                         opts.MarkLineItem(type_='min', name='最小值'),
                        opts.MarkLineItem(type_='average', name='平均值')
                            ],linestyle_opts=opts.LineStyleOpts(color='red',opacity=.5,width=2,type_='dashed')
                    )
                     )
# 设置第二个柱状图
bar_2 = Bar()
bar_2.add_xaxis(list(groups_2.index))
bar_2.add_yaxis("销量",groups_2.values.tolist())
bar_2.set_series_opts(label_opts=opts.LabelOpts(position="right"),
                     markline_opts=opts.MarkLineOpts(
                        data=[
                        opts.MarkLineItem(type_='max', name='最大值'),
                        opts.MarkLineItem(type_='average', name='平均值')
                            ],linestyle_opts=opts.LineStyleOpts(color='grey',width=2,type_='dashed'))
                    
                )
bar_2.set_global_opts(
                        title_opts=opts.TitleOpts(title='销量'),
                    xaxis_opts=opts.AxisOpts(name='店铺名称'),
                    yaxis_opts=opts.AxisOpts(name='抓取的销量'),

                    )  
bar_2.reversal_axis()
# # 显示图像
grid = Grid(init_opts=opts.InitOpts(width="1600px",height="1200px"))
grid.add(bar_1,grid_opts=opts.GridOpts(pos_bottom='49%'))
grid.add(bar_2,grid_opts=opts.GridOpts(pos_top='60%'))
grid.render_notebook()

2.3 竞争对手地域分析

competitor = group_place.set_index(['province','city'],inplace=False)
# 添加临时辅助列
temp=competitor.groupby(level=0)['shop_name'].sum()
hehe=pd.merge(left=competitor,right=temp,left_index=True,right_index=True,how='left')
hehe2 = hehe.sort_values(['shop_name_y','shop_name_x'],ascending=False)

col_1 = 100*(hehe2['sale_amount'].cumsum()/hehe2['sale_amount'].sum()).values
col_1 = [str(round(i,2))+'%' for i in col_1]

# 临时决定多加一列
col_3 = 100*(hehe2['sale_amount']/hehe2['sale_amount'].sum()).values
col_3= [str(round(i,2))+'%' for i in col_3]

col_2 = 100*(hehe2['shop_name_x']/hehe2['shop_name_x'].sum()).values
col_2= [str(round(i,2))+'%' for i in col_2]
hehe2.insert(loc=1,column='销量占总体比',value=col_3)
hehe2.insert(loc=2,column='销量累计占比',value=col_1)
hehe2.insert(loc=4,column='店铺数占总体比',value=col_2)
hehe2.drop(columns='shop_name_y',inplace=True)
hehe2.columns=['销量','销量占比','销量累计占比','店铺数量','店铺数占总体比']

主要的竞争对手:

广东--中山、佛山,广州也有点苗头;

浙江--杭州、金华,宁波、绍兴也有点;

再就是山东--滨州、江苏--南京;

2.4不同店铺竞争力分析

旗舰店(一般是一手厂家)、专卖店企业店(一级、二级授权店铺)、大型商超店(仅限苏宁易购、天猫超市、天天特卖工厂)、其他普通个人店(包含很多名字假装是直营店,实际只是忽悠人的个人店,也包含一些无法简单判定是否为二级授权的店铺,都归为杂牌店)的销量分析;后续发现,可能分的不够准,不同店铺的类型需要仔细查看规律,有个什么国货甄选旗舰店,好像也得划分到大型商超店里;

def map_shop(ss):
    if "苏宁易购" in ss:
        return 3
    if "旗舰店" in ss:
        return 1
    elif "专卖店" in ss or "企业店" in ss:
        return 2
    elif "天猫超市" in ss or "天天特卖工厂" in ss:
        return 3
    else:
        return 5
df['shop_type'] = df['shop_name'].apply(map_shop)

temp_2 = df.groupby('shop_type').agg({"sale_amount":sum,'money':sum,"shop_type":'count'})
pd.set_option('display.float_format', lambda x: '%.4f' % x)
new_names = ['旗舰店','专卖\企业店','苏宁天猫淘工厂','杂牌店']
temp_2.index = new_names

temp_2.sort_values(by='money',ascending=False,inplace=True)
# 销量占比
va1 = 100*(temp_2['sale_amount']/temp_2['sale_amount'].sum()).values
va1 = [str(round(i,2))+'%' for i in va1]
# 销售额占比
va2 = 100*(temp_2['money']/temp_2['money'].sum()).values
va2 = [str(round(i,2))+'%' for i in va2]
# 蓝海值计算
temp_2.insert(loc=1,column='销量占比',value=va1)
temp_2.insert(loc=3,column='销售额占比',value=va2)
temp_2['销量蓝海值'] = temp_2['sale_amount']/temp_2['shop_type']
temp_2['销售金额蓝海值'] = temp_2['money']/temp_2['shop_type']
temp_2

销量蓝海值粗略计算=对应的销量/去重店铺数

销量金额蓝海值=销售额/去重店铺数

蓝海值越高,就是能分到的蛋糕越多,越大越好! 

可以看到旗舰店、专卖店还是受到了更多消费者的青睐,杂牌店开的人多,竞争比较激烈,天猫、淘工厂亦蹭顺风车,搞了一部分销量;


2.4.2了解一下数据:

总共抓取了淘宝网页端100页的链接数据,3073条数据,去掉完全重复的后2358条,其中店铺去重后,1194个店铺,意味着有的店铺可能抓取到多条链接;看了一下,淘宝自家或者利益非常相关的店铺,搜索到的链接明显多于其他家,看来胳膊肘是朝着自己的;

2.5 宣传卖点标签

可以看到,商品都有个摆在前面的宣传标签;

aa =pd.DataFrame(df.advan1.value_counts().sort_values(ascending=False))
aa.rename(columns={'advan1':'统计'},inplace=True)
aa.reset_index(inplace=True)

bb =pd.DataFrame(df.advan2.value_counts().sort_values(ascending=False))
bb.rename(columns={'advan2':'统计'},inplace=True)
bb.reset_index(inplace=True)

cc =pd.DataFrame(df.advan3.value_counts().sort_values(ascending=False))
cc.rename(columns={'advan3':'统计'},inplace=True)
cc.reset_index(inplace=True)

dd=pd.concat([aa,bb,cc],axis=1,ignore_index=True)
dd.columns=['宣传卖点-1','统计-1','宣传卖点-2','统计-2','宣传卖点-3','统计-3']
dd

 这些卖点,在商家中宣传得比较多,应是当下产品的重要竞争力!

基于以下经验知识:商家比较清楚当下热门卖点以及消费者需求,可以把自家产品往这方面靠或者吹;

2.6促销分析

ee=pd.DataFrame(df.promo1.value_counts().sort_values(ascending=False))
ee.reset_index(inplace=True)

ff=pd.DataFrame(df.promo2.value_counts().sort_values(ascending=False))
ff.reset_index(inplace=True)

gg=pd.concat([ee,ff],axis=1,ignore_index=True)
gg.columns=['促销手段-1','统计-1','促销手段-2','统计-2']
gg

促销标签这块规则比较乱稍微复杂一点,同时我们发现宣传卖点和促销标签,存在不同列之间有重复的,决定重新合并统计一次;

2.7 两组标签合并统计

2.7.1 宣传卖点标签

ll = list(df.advan1)+list(df.advan2)+list(df.advan3)
# 将三列advan合并统计
empty_dict ={}
for i in ll:
    if i not in empty_dict:
        empty_dict[i]=1
    else:
        empty_dict[i]+=1
empty_dict= sorted(empty_dict.items(),key=lambda d: d[1], reverse=True)
xc_labels=pd.DataFrame(data=empty_dict,columns=['卖点名称','统计数量'])
xc_labels

2.7.2 促销标签

# 将两列promo合并统计
kk = list(df.promo1)+list(df.promo2)
empty_dict_2 ={}
for i in kk:
    if i not in empty_dict_2:
        empty_dict_2[i]=1
    else:
        empty_dict_2[i]+=1
empty_dict_2= sorted(empty_dict_2.items(),key=lambda d: d[1], reverse=True)
pr_labels = pd.DataFrame(empty_dict_2,columns=['推广标签','统计'])
pr_labels

因为准备搞点特征衍生,所以现在是提前做了准备; 

2.8 特征衍生

2.8.1 宣传标签衍生

xc_labels.drop(labels=xc_labels[xc_labels['卖点名称'].isna()].index,inplace=True)
xc_labels['percent'] = xc_labels['统计数量']/xc_labels['统计数量'].sum()
xc_labels['statstic'] = xc_labels['统计数量'].cumsum()/xc_labels['统计数量'].sum()

# 将标签从热门-->冷门分级
level_1 = xc_labels[xc_labels['statstic']<=0.75]['卖点名称'].values
level_2 = xc_labels[(xc_labels['statstic']>0.75)&(xc_labels['statstic']<=0.95)]['卖点名称'].values
level_3 = xc_labels[(xc_labels['statstic']>0.95)&(xc_labels['statstic']<=0.99)]['卖点名称'].values

# level_1
# ['不锈钢', '一级', '脉冲电子点火', '旋火', '5.2KW', '钢化玻璃', '热电偶熄火保护', '直火',
       '钢化玻璃、不锈钢', '双旋火']

简单来讲,对卖家的标签,按照热门程度,最热门的给4分,其次3分,比较冷门的1分,不写0分; 

# 先把那些填充为0比较好搞
df2 = df.copy()
print('去重前:',df2.shape)
df2.drop_duplicates(inplace=True)
df2.fillna(value=0,inplace=True)
def map_advan(df):
    score = 0
    for col in ['advan1','advan2','advan3']:
        if df[col] in level_1:
            score+=4
        elif df[col] in level_2:
            score+=3
        elif df[col] in level_3:
            score+=2
        elif df[col]==0:
            score+=0
        else:
            score+=1
            
    return score
df2['advan_score'] = df2.apply(map_advan,axis=1)
print('去重后:',df2.shape)
df2

新生成的特征列: 

 2.8.2 促销标签页

pr_labels.drop(pr_labels[pr_labels['推广标签'].isna()].index,inplace=True)
pr_labels['percent'] = pr_labels['统计']/pr_labels['统计'].sum()
pr_labels['statstic'] = pr_labels['统计'].cumsum()/pr_labels['统计'].sum()
pd.set_option('display.max_rows',20)
pr_labels

促销这块,种类很多,根据个人主观判断,什么公益宝贝、绿色节能,都没什么卵吸引力,比较厉害的、并且无法量化的是这些:
array(['包邮', '3期', '新品', '30天价保', '6期', '12期'], dtype=object)

先添加一个包含重要且不太好量化的指标列,本人俗称其为犀利值;

def map_promo(df):
    start = 0
    for col in ['promo1','promo2']:
        if df[col] in p_level_1:
            start+=1 
    return start
df2['promo_priority'] = df2.apply(map_promo,axis=1)
df2

再就是比较难搞的,满多少减多少,有很多种,要仔细看原数据,发现规律,总结研究;

有满300元减20元,有淘金币抵扣**元,有官方立减元,有限时直降元,有包邮、3期、6期、12期,多少天保价之类的,一个商品最多有两个标签,而这些分为第一列、第二列,随意组合的,我将有淘金币抵扣的,不论金额大小,都算作商品有一个特征列为1,因为我查到淘金币抵扣的钱,一般都不会太多,主要是正则表达式+各种条件判断太麻烦;

import re
# 先新建合并列 
for i in df2.index:
    df2.loc[i,'combine'] = str(df2.loc[i,'promo1'])+str(df2.loc[i,'promo2'])
    
def temp_map(df):
    pattern_1  = re.compile(r'(\d+)减(\d+)')
    pattern_2  = re.compile(r'[立减,降,补](\d+)')
    pattern_3  = re.compile(r'已抵(\d\.?\d*)')
#     if '抵' in df['combine']:   
#         """淘金币抵扣,情况太复杂,可能多个促销,前后不一,简化处理"""
#         result = re.search(pattern_3,df['combine'])
#         return result.groups()[0]
    if '立减' in df['combine'] or '降' in df['combine']or'补' in df['combine']:   
        """官方立减、限时直降、已补多少"""
        result = re.search(pattern_2,df['combine'])
        return result.groups()[0]    
    if "满" in df['combine']:
        """满多少减多少"""
        result = re.search(pattern_1,df['combine'])
        return result.groups()  # 返回两个数的元组
    else:
        return 0     
df2['new'] = df2.apply(temp_map,axis=1)
df2

如果满a减b,得到是个元组,还要进一步处理; 

df2['满多少'] = [i[0] if type(i)==tuple  else 0 for i in df2['new']]
df2['减多少'] = [i[1] if type(i)==tuple else i if int(i)>0 else 0 for i in df2['new']]
df2['淘金抵'] = [1 if '淘金币'in i else 0 for i in df2['combine']]

# 将没有满多少减多少的,满多少 这一列,设为5000,已知最大为3563
temp_index = df2[df2['满多少']==0].index
df2.loc[temp_index,'满多少'] =5000

# 先转换数据类型
df2[['满多少','减多少']]=df2[['满多少','减多少']].astype(float)
# 新建可学习列
df2['dis_condition'] = df2['满多少']/df2['price'] # 越大越不好促销
df2['disount'] = df2['减多少']/df2['price']  # 越大,促销力度越大

df2.drop(columns=['combine','new','满多少','减多少'],inplace=True)
df2.sample(20)

最终,关于促销手段,我们衍生出了4列;
promo_priority就是包含比较犀利、无法量化的,犀利程度;
淘金抵,简化为0和1,能用淘金币抵扣的就是1,不管多少,查资料好像最大值为商品的1%-5%,费用商家出,其实也不是很多,主要是淘金币抵扣有的在前、有的在后,排列组合多,懒得弄那么细了;
dis_condition,是满a减b中的a除以商品价格,比如商品价格50元,要满300减20;则=300/50=6,可知越大越难满减;没有满减的,就将数值设得比较大,超过列的最大值;
disount,是满a减b中的b,再除以商品价格,=20/50=0.4,越大则优惠力度越大; 

2.9 标题列

import jieba
# 提取所有标题
title_list_all = df2['title'].values.tolist()
title_s=[]
# 先进行切分
for line in title_list_all:
    title_cut = jieba.lcut(line)
    title_s.append(title_cut)

# 去掉没什么意义的词
stopwords = [line.strip() for line in open('d:/停用词表.txt', 'r', encoding='utf-8').readlines()]
title_clean = []
for inner_list in title_s:
    line_clean = []
    for single_word in inner_list:
        if single_word not in stopwords:
            line_clean.append(single_word)
    title_clean.append(line_clean)

# 转为一个大列表
final_list=[]
for line in title_clean:
    for word in line:
        final_list.append(word)

df_word = pd.DataFrame(data={'words':final_list})  # 先转为df好统计
word_count = df_word.words.value_counts().reset_index()
word_count.columns = ['word', 'count'] # 名字有点乱,改一下

2.9.1 提取销量最高的100个词

有个问题,标题中含得最多的词,并非是最好的,要看销量中,含哪个词的销量最高,这样统计数据会重复,不过能代表关键词和销量的关系!

# 发现有单个字的,删掉,补充直到100
count_list=[]
i=0
while len(count_list)<100:
    value = word_count.loc[i,'word']
    if len(value) >1:
        count_list.append(value)
    i+=1


result_dict = {}
for index in df2.index:
    for single_word in count_list:
        if single_word in df2.loc[index,'title']:
            result_dict[single_word] = result_dict.get(single_word,0)
            result_dict[single_word]+=df2.loc[index,'sale_amount']

top100_df = pd.DataFrame(list(result_dict.items()),columns=['word','sale_amount'])
top100_df.sort_values(by='sale_amount',ascending=False,inplace=True)
top100_df.reset_index(drop=True,inplace=True)
top100_df['percent'] = top100_df['sale_amount']/df2.sale_amount.sum()
top100_df

2.9.2 画图看看

plt.figure(figsize=(12,10))
plt.title("标题中最热门的50个词",fontsize=15,fontweight='bold')
sns.set(font='SimSun')
sns.barplot(data=top100_df[:50],x='percent',y='word',alpha=.8)
for i,j in enumerate(top100_df[:50]['percent']):
    plt.text(j+0.03,i,round(j,3),ha='center',va='center')
plt.xlabel('标题词占总销量比')
plt.ylabel('标题关键词')
# plt.savefig('d:/标题关键词热门.jpg',dpi=400,bbox_inches='tight')

三、特征重要性 

目标列是销量,我们衍生了一百多列的特征,后面有些稀疏,用回归算法看看影响销量的因素;

3.1 RF特征重要性 

考虑用RF随机森林、GBDT梯度提升和Lightgbm看看,实际中我的参数换过不少,这边只放一部分,过程中内容比较多,这边就直接放结果了;

解释:判断线上平台,各个表面因素对【销量】的影响:

①promo_priority  推广标签吸引力,首先将推广标签统计,含有【'包邮', '3期', '新品', '30天价保', '6期'】任意一项加一分,一个链接最高2分,最低0分,什么公益宝贝、绿色节能(总共只出现9次)等看起来没什么竞争力的词,不算为有吸引力的标签;promo_priority  即为推广标签吸引力对销量的影响力;

②dis_condition,为打折条件,比如标价是50元,打折条件是满300减20元,打折条件即为300/50=6,单就这个因素,数字越大,证明要满减越难,倍数越小则越容易打折,只包含这个300,减的20影响力较小排在后面;

③price 链接价格  

④has关键词,将标题拆分为很多个短关键词,选了出现次数最多的前100个,例如has苏泊尔,即标题中出现了苏泊尔这个词;

注意:has志高,并非因为标题有志高而销量高,而是因为志高旗舰店,销量排第一,才导致这个因素排在前面,因果关系要知道;has苏泊尔、has太太同理,其他一个不带牌子的例如has猛火、has炉灶,则是标题中,比较火热的;

⑤advan_score: 商品卖点标签的影响力,也是对宣传卖点进行统计,比较火热的给4分,一般火的3分,冷门的1分,不写的0分,每个产品最多写3个卖点标签,一个都不写的0分,最高的12分; advan_score 即为卖点标签的影响力;

⑥count_keys ,商品标题包含最热门的100个词的数量,一些卖的比较火的产品,标题会包含十大几个到20个热门词,较少的也有个六七个,标题越火越容易被搜到(单就标题这个因素而言),成交量一般也高一点;

⑦shop_type:  店铺类型,旗舰店列为1等,专卖、企业店2等,天猫超市、苏宁等列为3等,其他杂牌店列为5等;

3.2 GBDT特征重要性 

GBDT算的结果,是比较偏准的;

3.3 LightGbm

注意此处,importance_type='gain',不是用的split; 其实,要调调参数的,但我主要就是想看看特征重要性而已,树模型基本都能找到规律,大差不差啦;

四、定价策略

这块,是有一些商业性的分析建议的,因为一些原因,就不能写出来了;

4.1  全价格VS销量
 

df2_price= df2[['price','sale_amount','money']]
price_group= df2_price.groupby('price')['sale_amount'].sum()

price_group.plot(figsize=(14,8))
plt.xlabel('价格')
plt.ylabel('淘宝平台显示销量')
plt.legend().set_visible(False)
plt.title('价格与销量图')

要对一些异常高的销量专门看看,比如700元、500元这两个价位段;具体内容略过;

 4.2 三百以内的

price_group_2_df = pd.DataFrame(price_group[(price_group.index < 300)&(price_group.values > 0)])
price_group_2_df.plot(figsize=(14,8))
plt.xlabel('价格')
plt.ylabel('淘宝平台显示销量')
plt.legend().set_visible(False)
plt.title('三百以内销量至少1的价格与销量图')
plt.xticks(ticks=range(0,310,15),labels=range(0,310,15),minor=False)
plt.grid(visible=False)
plt.savefig('d:/三百以内的与销量图.jpg',dpi=400,bbox_inches='tight')

4.3  两百而以内的

因为200的价格有段很突出,所以拉长一点到220;

4.4 品牌店铺对比

 4.5 单个店铺对比

由于我们添加一个但店铺销量累计和列,所以上面数据很多是带有一些重复性质,我们只按店铺划分,这样数据会从430行变为144行;

4.6 销量区间分箱查看

看看,销量很多、销量一般的店铺,占总体的比例,这边只看了旗舰店+荣事达部分;

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值