1.基本分析逻辑

逐步缩进, 先看总的,再看每一类目

1.1分析流程

1.2产品结构 - 波士顿矩阵

1.3市场类别

评判市场和品牌的发展趋势和增长情况,从宏观到微观,从大市场到细分市场:

  1. 互联网产品由关注用户增量到用户存量,判断产品或市场是用户增量还是存量,只需要判断有新的需求出现即可:增量市场:从无到有,以前关注哪些需求没有被满足,快速迭代抢占市场,考虑最多的不是用户体验.
    流量=新增客户.例如:智能手机潮开始时的市场.小米面对的是增量.
    存量市场:从有到优,现在关注如何更好的满足需求,考虑更多的是用户体验.
    产品价值=新体验-旧体验-替换成本,新体验没有突破性大幅增加,产品价值很难实现.
    流量=用户时间(停留时间越久,利益价值越大).
    例如:现在人手一台智能手机,小米面对存量市场,如何让需要换手机的用户换成小米,从有到优.
  2. 创新:想要用产品价值撬动一个用户,同纬度竞争别家的先发优势门槛太高,如果别家体量很大,基本可以放弃;
    创新可能就是剩下的活路,而面对互联网的高速发展,线下需求基本都被互联网化,切入点可能就转移到细分市
    场.
    例如:微信QQ是社交领域的霸主,陌陌探探在陌生人社交上也分了一杯羹,这些已存在的需求,没有被充分实现,也
    算增量市场

1.4产品生命周期

1.5处理项目需求的基本思路

  1. 了解项目公司的背景和对接人员情况
    公司的产品结构,市场环境,对接人的角色和权利等级等
  2. 沟通明确实际的项目需求
    团队内部理解项目需求
    和业务方沟通需求:从业务的角度理解需求可能的解决方案
    优化项目需求
    和业务核对项目需求
  3. 根据项目需求梳理分析思路:每一步分析的目标,需要的数据支持,反复优化
  4. 确定分析工具和人员配置,进行数据分析
  5. 撰写分析结论和方案

1.6 项目需求例子

问题:销售额下降,怎么办?(这个问题太大,方法也很多:优化老客户,扩大流量,提升转化率)

  1. 了解涉及项目相关的所有的业务部门的需求,逻辑,问题点
  2. 拆分:销售额=流量转化率客单价
  3. 待沟通部门:营销部门(活动),推广部门(流量),客服,售后,供应链
    营销:精准营销(找到高价值客户),客户行为分析(响应效果),组合营销(购物篮)推广:竞价排名,买广告位,点击付费(需要很强的经验)
    退款和评论分析:优化产品,优化服务质量
  4. 沟通之前出想法,沟通之后优化,确认项目需求
  5. 数据收集:确认每一步需求的数据(可能用到爬虫)

2.项目背景及产品架构、数据说明

  • 客户介绍:拜耳官方旗舰店(拜耳公司,总部位于德国的勒沃库森,在六大洲的200个地
    点建有750家生产厂;拥有120,000名员工及350家分支机构,几乎遍布世界各国.高分
    子,医药保健,化工以及农业是公司的四大支柱产业.公司的产品种类超过10000种)

  • 客户需求:拜耳官方旗舰店

  • 寻求市场增长点

  • 产品架构:

  • 数据说明:

3.驱虫市场潜力分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline 
import os

3.1导入所有数据

categroy_df = pd.DataFrame()
wormer_path = './data/驱虫剂市场/'
for file in os.listdir(wormer_path):
    if '三年交易额' in file:
        file_path = os.path.join(wormer_path, file)
        df = pd.read_excel(file_path)
        df.set_index('时间', inplace=True)
        name = file.split('市场')[0]
        df.columns = [name]
        categroy_df = pd.concat((categroy_df, df), axis=1)
categroy_df
灭鼠杀虫剂 电蚊香套装 盘香灭蟑香蚊香盘 蚊香加热器 蚊香液 蚊香片 防霉防蛀片
时间
2018-10-01 1.136548e+08 106531.29 4171283.35 315639.48 7.814546e+06 1032414.29 8541153.59
2018-09-01 1.440261e+08 105666.63 6784500.17 457366.41 1.065497e+07 1566651.88 8825870.43
2018-08-01 1.540426e+08 201467.03 10709683.41 746513.13 1.783558e+07 2617149.00 6320153.44
2018-07-01 1.480032e+08 438635.29 16589184.89 1871757.00 3.887792e+07 6209040.06 6302595.06
2018-06-01 1.359438e+08 953749.78 23526385.73 3641025.92 7.649909e+07 12484919.63 7047206.98
2018-05-01 1.241642e+08 1238967.37 28118581.25 5032466.78 1.050396e+08 15309721.94 7942340.44
2018-04-01 7.509661e+07 841051.93 16420341.87 3130513.43 6.254165e+07 7954875.07 7031364.60
2018-03-01 5.918182e+07 475177.48 7900094.91 1198332.81 2.632447e+07 2950648.32 6051561.02
2018-02-01 2.292138e+07 33232.95 545917.66 75714.46 2.235774e+06 218915.63 1393948.47
2018-01-01 3.653873e+07 54305.20 592663.20 86670.45 1.759451e+06 298146.11 2607776.07
2017-12-01 4.292283e+07 71600.17 796930.46 69145.59 2.213103e+06 314120.38 3259747.23
2017-11-01 5.838217e+07 94993.76 1581530.20 168141.79 4.257594e+06 617094.94 5447184.43
2017-10-01 8.226882e+07 145925.31 2824785.80 166522.62 4.290843e+06 766588.77 6152868.25
2017-09-01 1.010081e+08 242194.37 5581352.42 353042.45 7.833349e+06 1574779.65 5792065.80
2017-08-01 1.049504e+08 332922.02 7229409.84 544076.63 1.376039e+07 2323304.14 5081714.64
2017-07-01 1.116729e+08 913425.95 13718046.88 1357778.93 4.257757e+07 6627299.71 6691694.17
2017-06-01 1.051463e+08 2045163.59 19635925.59 2639777.66 8.283230e+07 12422420.21 7155138.87
2017-05-01 9.185035e+07 3606141.82 20275515.85 3185961.75 1.014605e+08 15961946.71 8145781.12
2017-04-01 5.363586e+07 1285599.49 9197868.29 1554864.42 4.880687e+07 6214963.68 6682161.49
2017-03-01 4.078967e+07 390486.57 3397837.60 317206.48 1.488979e+07 1319399.22 3904656.82
2017-02-01 3.467502e+07 209643.87 1519446.34 148158.07 5.929509e+06 687697.46 2584035.90
2017-01-01 2.047156e+07 39434.76 596744.04 48164.63 1.213749e+06 238973.09 1781773.46
2016-12-01 3.546668e+07 84350.57 1234900.05 52118.96 1.558634e+06 293737.20 3504367.98
2016-11-01 4.780625e+07 106291.23 1473418.20 82835.82 2.758827e+06 512990.23 4975519.21
2016-10-01 6.339722e+07 179015.23 2543813.78 130484.07 3.641803e+06 690912.02 4600717.78
2016-09-01 6.864724e+07 210456.69 3092898.02 168724.83 4.632818e+06 930513.91 4642681.07
2016-08-01 7.610885e+07 316467.14 4389862.79 272553.95 8.956868e+06 1581021.50 4151326.68
2016-07-01 7.832954e+07 932728.10 7384968.66 761159.35 2.260036e+07 4088320.77 5412185.06
2016-06-01 7.693264e+07 2184985.33 10859461.67 1728788.53 4.640197e+07 8004562.69 5694825.13
2016-05-01 5.812696e+07 2059879.80 9912801.93 1618361.54 4.777690e+07 7474421.97 5469360.60
2016-04-01 3.762602e+07 1034992.53 4687913.18 758206.81 2.432917e+07 3435257.35 5253619.06
2016-03-01 2.952610e+07 352013.31 1204574.20 246106.75 6.656382e+06 746709.07 3481194.46
2016-02-01 1.500135e+07 96979.48 449199.41 36193.85 6.939075e+05 109108.05 1274810.96
2016-01-01 2.107822e+07 108412.71 619042.01 49670.25 4.828890e+05 113284.71 1562393.95
2015-12-01 2.472756e+07 110068.83 818479.56 34076.91 5.832845e+05 134890.48 2333602.08
2015-11-01 3.303873e+07 185094.22 1197791.27 86889.91 1.579796e+06 325744.43 3364112.14

3.1.1总体增长情况

# 时间类型做index,可以使用resample做重采样
# 重采样就是根据时间分组聚合,可以指定按月M、年Y、日D..
categroy_df.sum(axis=1).resample('Y').sum()
时间
2015-12-31    6.852011e+07
2016-12-31    9.179661e+08
2017-12-31    1.395873e+09
2018-12-31    1.612226e+09
Freq: A-DEC, dtype: float64

3.1.2月度GMV分析

每年每月销售额的条形图

gmv = pd.DataFrame(categroy_df.sum(axis=1))
gmv.columns = ['GMV']
### 查看每一年的每个月的销售额的条形图
gmv['month'] = gmv.index.month
gmv['year'] = gmv.index.year
sns.set()
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
for year in [2015, 2016, 2017, 2018]:
    gmv2018 = gmv.loc[gmv.year == year]
    plt.bar(gmv2018.month, gmv2018.GMV)
    plt.xticks(gmv2018.month, [f'{x}月' for x in gmv2018.month.values])
    plt.ylabel('GMV')
    plt.title(f'{year}年月度GMV分析') 
    plt.show()

​

​

3.1.3连续三年的销售额变化

两种方式
1.  从第一年的11月到第二年的10月份
2.  补全18年的数据   预测  -  - 同期均值
        回归算法填充空值 均值/众数
    
回归算法: 决策树 knn  Linear
X,  y  

X     y  销量  


选择一:
用18年的前10个月的时间作为X 销售额作y,, 给出2018-11, 预测第11个月的y

选择二:
用15,16,17的11月时间做X,销售额做y,  18的11做预测, 得到18年11月的y
categroy_df.head()
灭鼠杀虫剂 电蚊香套装 盘香灭蟑香蚊香盘 蚊香加热器 蚊香液 蚊香片 防霉防蛀片 month
时间
2018-10-01 1.136548e+08 106531.29 4171283.35 315639.48 7814546.15 1032414.29 8541153.59 10
2018-09-01 1.440261e+08 105666.63 6784500.17 457366.41 10654973.47 1566651.88 8825870.43 9
2018-08-01 1.540426e+08 201467.03 10709683.41 746513.13 17835577.80 2617149.00 6320153.44 8
2018-07-01 1.480032e+08 438635.29 16589184.89 1871757.00 38877917.83 6209040.06 6302595.06 7
2018-06-01 1.359438e+08 953749.78 23526385.73 3641025.92 76499091.86 12484919.63 7047206.98 6
categroy_df['month'] = categroy_df.index.month

构造训练集

month11 = categroy_df[categroy_df.month == 11]
X1 = month11.index
Y1 = month11.iloc[:,:-1].values
from sklearn.linear_model import Ridge

分析过程: 使用Timestamp类型也可以,但是太复杂,所以考虑使用更简洁的数据形式
观察发现,唯一不同的就是年 ,所以直接提取出年的信息,作为训练数据即可

timestamp = X1[0]
timestamp
Timestamp('2017-11-01 00:00:00')
timestamp.strftime('%Y-%m-%d')
'2017-11-01'

由于转换为文本类型仍然不可以建模,时间类型太复杂,所以只提取出年,进行计算

X1 = month11.index.year.values

更新数据集

X1 = X1.reshape((-1,1))
Y1
array([[58382172.96,    94993.76,  1581530.2 ,   168141.79,  4257593.87,
          617094.94,  5447184.43],
       [47806248.76,   106291.23,  1473418.2 ,    82835.82,  2758827.44,
          512990.23,  4975519.21],
       [33038726.31,   185094.22,  1197791.27,    86889.91,  1579795.72,
          325744.43,  3364112.14]])
ridge = Ridge()
ridge.fit(X1, Y1)
Ridge()

保存预测结果

# 保存预测结果
result11 = pd.DataFrame(data=ridge.predict([[2018]]), columns=month11.columns[:-1])
result11.index = [pd.Timestamp('2018-11-01')]

同理预测12

month12 = categroy_df[categroy_df.month==12]
X2 = month12.index.year.values.reshape((-1,1))
Y2 = month12.iloc[:,:-1].values
ridge2 = Ridge()
ridge2.fit(X2, Y2)
Ridge()
# 保存预测结果
result12 = pd.DataFrame(data=ridge2.predict([[2018]]), columns=month12.columns[:-1])
result12.index = [pd.Timestamp('2018-12-01')]

汇总数据

category_total = pd.concat((result12, result11, categroy_df), sort=True)

补全月份信息

category_total.month = category_total.index.month

要看连续三年的销售额(gmv)的变化趋势,所以先把每个月的各类别的销售数据进行汇总

GMV_MOMTH = category_total.iloc[:,1:].sum(axis=1)
# resample 就是按照Y(年)来分组 ,前提是必须用时间类型做索引
# 计算每一年的GMV总额
GMV_YEAR = GMV_MOMTH.resample('Y').sum()

由于15年的数据不全,所以删除

GMV_YEAR_DATA = GMV_YEAR.iloc[1:]
plt.figure(figsize=(12, 6))

plt.bar(GMV_YEAR_DATA.index, GMV_YEAR_DATA.values, width=100.0, color='lightgreen')
plt.plot(GMV_YEAR_DATA.index, GMV_YEAR_DATA.values, color='green', marker='*', markersize=20)

plt.xticks(GMV_YEAR_DATA.index, GMV_YEAR_DATA.index.year)
plt.title('2016-2018连续三年销售趋势')
plt.xlabel('年份')
plt.ylabel('销售额(GMV)')
Text(0, 0.5, '销售额(GMV)')

​

​

连续三年销售额呈增长状态,且17-18涨幅有所降低

GMV_YEAR_DATA.index.year
Int64Index([2016, 2017, 2018], dtype='int64')
GMV_YEAR_DATA.values
array([9.17966080e+08, 1.39587273e+09, 1.74288594e+09])

3.2每年各品类销售额占比分析

#月份暂时没有用,删除

category_total.drop(labels=['month'], inplace=True, axis=1)
#计算每一年个类别的销售总额
category_year = category_total.resample('Y').sum()
# 删除15年数据
category_year = category_year.iloc[1:]
category_year.plot()
<AxesSubplot:>

​
​

由上图可以看出,灭鼠杀虫剂和蚊香液是核心市场

3.2.1各市场占比

category_year
灭鼠杀虫剂 电蚊香套装 盘香灭蟑香蚊香盘 蚊香加热器 蚊香液 蚊香片 防霉防蛀片
2016-12-31 6.080471e+08 7.666572e+06 4.785285e+07 5.905205e+06 1.704905e+08 2.798084e+07 50023001.94
2017-12-31 8.477740e+08 9.377532e+06 8.635539e+07 1.055284e+07 3.300656e+08 4.906859e+07 62678822.18
2018-12-31 1.123380e+09 4.580538e+06 1.179678e+08 1.679795e+07 3.567718e+08 5.168906e+07 71698292.75
category_year.loc['2016'].values[0]
array([6.08047077e+08, 7.66657212e+06, 4.78528539e+07, 5.90520471e+06,
       1.70490531e+08, 2.79808395e+07, 5.00230019e+07])
plt.figure(figsize=(18,4))
loc=1
for year in ['2016','2017','2018']:
    plt.subplot(1,3, loc)
    loc += 1
    plt.pie(category_year.loc[year].values[0], labels=category_year.columns, autopct='%.2f%%')   
    _ = plt.axis('equal')
    _ = plt.title(year + '年')

​

​

使用堆叠柱状图,不但可以表达占比, 还能表示出每年的销售总额
#测试数据
data1 = np.array([1,2,3,4])
data2 = np.array([4,3,2,1])
data3 = np.array([2,3,1,5])
plt.bar(np.arange(4), data1)
plt.bar(np.arange(4), data2, bottom=data1)
plt.bar(np.arange(4), data3, bottom=data1+data2)
<BarContainer object of 4 artists>

​

​

plt.figure(figsize=(12, 6))
data_sum = 0
for col_index in range(category_year.columns.size):
    # 读取每一列数据(3年各子类市场的销售数据)
    data = category_year.iloc[:,col_index]
    # 计算3年各子类市场的销售额占比
    pct = data/category_year.sum(axis=1)
    # 绘制堆叠柱状图
    plt.bar(np.arange(3), data, bottom=data_sum,label=data.name)
    
    # 判断某一个子类市场的销售额占比,如果有一年超过了50%, 就把占比的数据绘制进来
    if (pct > 0.5).any():
        y_locs = data/2 + data_sum
        for x, y in zip(np.arange(3), y_locs):
            plt.text(x=x-0.15, y=y, s=f'占比{np.round(pct[x]*100, 2)}%', fontdict={
                'size':14,
                'color':'white'
            })
    # 更新堆叠柱状图的bottom
    data_sum += data
    
plt.legend()
plt.xticks(np.arange(3), [2016, 2017, 2018])
plt.xlabel('年份')
plt.ylabel('子类市场累计销量')
plt.title('三年各子类市场销量及占比分析', fontsize=18)
plt.show()
np.round(1.231314,2)
1.23
category_year.sum(axis=1)
2016-12-31    9.179661e+08
2017-12-31    1.395873e+09
2018-12-31    1.742886e+09
Freq: A-DEC, dtype: float64
category_year.iloc[:,0]/2
2016-12-31    3.040235e+08
2017-12-31    4.238870e+08
2018-12-31    5.616902e+08
Freq: A-DEC, Name: 灭鼠杀虫剂, dtype: float64

3.2.2计算三年的增长率

category_year.index = category_year.index.year
category_incraserate = category_year.T
for last, current in zip(category_incraserate.columns[:2], category_incraserate.columns[1:]):
    col_name = f'{last}-{current}'
    category_incraserate[col_name] = (category_incraserate[current] - category_incraserate[last])/category_incraserate[last]
plt.figure(figsize=(12, 5))
for index_name in category_incraserate.index:
    row_data = category_incraserate.loc[index_name]
    data = row_data.iloc[-2:]
    plt.plot(data, label=index_name)
plt.legend()
plt.title('连续两年各子类市场的增长率分析')
plt.xlabel('年份')
plt.ylabel('增长率')
plt.show()
category_incraserate.loc['电蚊香套装'].iloc[-2:]
2016-2017    0.223171
2017-2018   -0.511541
Name: 电蚊香套装, dtype: float64

灭鼠杀虫市场:
不论是销售额占比、销售增长率都具备明显产品的潜质

另外蚊香液市场也具备相应的增长潜质,但是稍逊于灭鼠杀虫市场

市场机会点可以从这两个子类市场中查找

3.3灭鼠市场的进一步分析

增长率高

竞争度低

竞品市场的市场占有率

s1 == s2

1-s1 == s2

s1 s2

def HHI(x): ## 行业j集中率
    return x**2 + (1-x)**2 
x = np.linspace(0, 1, 100)
sns.set()
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 两家公司的竞争度, 当两家公司的份额相同时,竞争度最低
plt.plot(x, HHI(x))
plt.xlabel('市场份额')
plt.ylabel('竞争度')
# plt.legend()
Text(0, 0.5, '竞争度')

​
​

3.3.1HHI指标(垄断评估)

top100 = pd.read_excel('./data/驱虫剂市场/top100品牌数据.xlsx')
top100
品牌 行业排名 交易指数 交易增长幅度 支付转化指数 操作
0 PREMISE/拜灭士 1 530344 -0.3235 1521 趋势分析
1 科凌虫控 2 474937 -0.1910 1581 趋势分析
2 ARS/安速 3 402372 -0.2682 1448 趋势分析
3 思乐智 4 360780 0.2056 841 趋势分析
4 希诺 5 346656 -0.1085 1865 趋势分析
... ... ... ... ... ... ...
95 BK/帮科 96 67812 -0.5008 1134 趋势分析
96 博尔康 97 66180 -0.2571 792 趋势分析
97 无比滴 98 65779 -0.6264 959 趋势分析
98 厚生 99 65520 -0.4708 1600 趋势分析
99 百户喜 100 65194 -0.0187 822 趋势分析

100 rows × 6 columns

# 计算各品牌的市场占有率
top100['s'] = top100['交易指数']/top100['交易指数'].sum()
HHI = (top100['s']**2).sum()
HHI
0.013546334007208918

范围:
[1/N,‘高度竞争行业’,0.01],
(0.01,‘不集中的行业’,0.15],
(0.15,‘中等集中’,0.25],
(0.25,‘高度集中’,1]

杀虫剂市场的HHI值处于(0.01,0.15]范围,不集中行业,可以进一步挖掘业务增长机会点

产品类别–>细分价格段–>属性

品牌 地域 店铺...

import os
root_path = './data/灭鼠杀虫剂细分市场'

kill_mouse = pd.DataFrame()

for file in os.listdir(root_path):
    file_path = os.path.join(root_path, file)
    df = pd.read_excel(file_path)
    kill_mouse = pd.concat((kill_mouse, df), ignore_index=True, sort=False)
# 需要的字段
features = ['类别','宝贝标题','宝贝ID','销量(人数)','售价','预估销售额','类目','地域','店铺类型','型号','净含量','物理形态']
kill_mouse.head(3)
类别 时间 页码 排名 链接 主图链接 主图视频链接 宝贝标题 宝贝ID 销量(人数) ... 包装数量 农药登记号 容量 使用时间 生产厂家 宝贝成份 规格: 樟脑 包装 产品名
0 杀虫 2018/11/22 18:49:48 16 18 https://item.taobao.com/item.htm?id=578459866289 https://gw3.alicdn.com/bao/uploaded/i3/4089164... https://cloud.video.taobao.com/play/u/40891647... 德国拜耳臭虫杀虫剂家用杀灭除跳蚤药苍蝇猫狗窝喷剂蟑螂药 578459866289 99 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 杀虫 2018/11/22 18:49:49 16 19 https://item.taobao.com/item.htm?id=548196868239 https://gw3.alicdn.com/bao/uploaded/i3/1519846... NaN 蟑螂屋灭蟑螂药家用强力灭蟑清捕捉器除杀蟑螂贴粘板粉杀虫剂特价 548196868239 99 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 杀虫 2018/11/22 18:49:49 16 20 https://item.taobao.com/item.htm?id=580839295562 https://gw3.alicdn.com/bao/uploaded/i2/1052281... NaN 日本Hengai哼爱螨虫贴除螨虫垫祛螨床上用品沙发吸螨包家用杀虫 580839295562 99 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

3 rows × 229 columns

kill_mouse['类别'].value_counts()
杀虫    2000
蟑螂    1743
灭鼠    1523
螨      853
虱      437
Name: 类别, dtype: int64
# 读取灭鼠市场的数据
mouse_data = kill_mouse.loc[kill_mouse['类别'] =='灭鼠', features].copy()
mouse_data.isnull().mean()
类别        0.000000
宝贝标题      0.000000
宝贝ID      0.000000
销量(人数)    0.000000
售价        0.000000
预估销售额     0.012475
类目        0.000000
地域        0.466842
店铺类型      0.000000
型号        0.351937
净含量       0.692712
物理形态      0.201576
dtype: float64

查看某一个类别是否有增长的机会,就是看两点:

  1. 市场份额 低 可以投入
  2. 相对竞争度 越低, 说明这个类别下可以投入

分析逻辑:

产品类别–>细分价格段–>属性 ()

增长机会点: 产品的【各种属性】进行更细一步的拆解

分析属性时要注意:
属性是否是方便整合的 如果字段在录入时就不统一,应该先统一再处理

mouse_data.head()
类别 宝贝标题 宝贝ID 销量(人数) 售价 预估销售额 类目 地域 店铺类型 型号 净含量 物理形态
2000 灭鼠 老鼠胶驱鼠粘鼠板老鼠颗粒强力灭鼠贴家用药yao老鼠夹捕鼠神器笼 566054780243 9976 26.8 267356.8 灭鼠/杀虫剂 广东 韶关 天猫 MT007 NaN 胶水
2001 灭鼠 灭鼠神器家用抓老鼠神器粘鼠板捕鼠神器魔毯 566054780243 9976 26.8 267356.8 灭鼠/杀虫剂 广东 深圳 天猫 MT007 NaN 胶水
2002 灭鼠 粘鼠板超强力老鼠贴粘老鼠板粘纸驱鼠灭鼠器电猫老鼠夹笼子粘鼠胶 572115448996 9945 9.9 98455.5 灭鼠/杀虫剂 NaN 淘宝 21/32 NaN 固体
2003 灭鼠 云杀老鼠贴强力粘鼠板家用老鼠胶灭鼠器老鼠克星正品20片装 39868408322 99 29.9 2960.1 灭鼠/杀虫剂 河南 南阳 天猫 粘鼠板 NaN 固体
2004 灭鼠 得硕粘鼠板超强力大老鼠贴家用捕鼠器灭老鼠笼胶鼠夹子抓老鼠工具 520282897220 99 39.9 3950.1 灭鼠/杀虫剂 NaN 淘宝 NaN g 固体
import warnings
warnings.filterwarnings('ignore')
sns.distplot(mouse_data['售价'])
<AxesSubplot:xlabel='售价', ylabel='Density'>

​
png
​

bins = np.arange(0, 350, 50)
bins = np.concatenate((bins, [float('inf')]))
bins
array([  0.,  50., 100., 150., 200., 250., 300.,  inf])
# 根据bins生成标签的方法
def creat_label(bins):
    res = []
    for i in range(bins.size-1):
        pre = bins[i]
        current = bins[i+1]
        label = '%.0f-%.0f'%(pre, current)
        if current == float('inf'):
            label = '%.0f以上'%(pre)
        res.append(label)
    return res
creat_label(bins)
['0-10',
 '10-20',
 '20-30',
 '30-40',
 '40-50',
 '50-60',
 '60-70',
 '70-80',
 '80-90',
 '90-100']
# 计算相对竞争度的函数
def map_compatitive(x):
    return 1 - (x - x.min())/(x.max() - x.min())
# 分组逻辑
mouse_data['价格区间'] = pd.cut(mouse_data['售价'], bins=bins, labels=create_label(bins))
# mouse_data: 是一个以‘价格区间’ 作为分组字段的dataFrame
def create_compatitive_table(mouse_data):
    # 计算预估销售额(价格区间内)
    预估销售额 = pd.DataFrame(mouse_data.groupby('价格区间')['预估销售额'].sum())
    # 计算预估销售额占比
    预估销售额占比 = 预估销售额/预估销售额.sum()
    预估销售额占比.columns = ['预估销售额占比']

    # 计算宝贝数量 (宝贝种类)
    # 交叉表 特殊的透视表  count  两组数据的交叉关系
    cross_table = pd.crosstab(index=mouse_data['价格区间'], columns=mouse_data['宝贝ID'])
    宝贝数 = (cross_table > 0).sum(axis=1)
    宝贝数 = pd.DataFrame(宝贝数, columns=['宝贝数'])

    # 单宝贝销售额
    单宝贝平均销售额 = 预估销售额['预估销售额'] / 宝贝数['宝贝数']
    单宝贝平均销售额.name = '单宝贝平均销售额'
    单宝贝平均销售额 = pd.DataFrame(单宝贝平均销售额)

    # 相对竞争度
    相对竞争度 = map_compatitive(单宝贝平均销售额)
    相对竞争度.columns = ['相对竞争度']

    return pd.concat((预估销售额,预估销售额占比,宝贝数,单宝贝平均销售额,相对竞争度), axis=1)
create_compatitive_table(mouse_data)
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
价格区间
0-10 141388.77 0.007644 166 851.739578 1.000000
10-20 8102634.14 0.438048 272 29789.096103 0.238170
20-30 4969620.92 0.268670 278 17876.334245 0.551796
30-40 1240874.19 0.067085 98 12661.981531 0.689073
40-50 707568.49 0.038253 40 17689.212250 0.556722
50-60 632300.28 0.034184 33 19160.614545 0.517984
60-70 1786443.74 0.096579 46 38835.733478 0.000000
70-80 38133.02 0.002062 18 2118.501111 0.966650
80-90 217468.44 0.011757 33 6589.952727 0.848931
90-100 660714.71 0.035720 42 15731.302619 0.608268
## 把0-100之间的数据拆分成10组
mouse_data100 = mouse_data.loc[mouse_data['售价'] <= 100].copy()
bins = np.arange(0, 110, step=10)
labels = creat_label(bins)
mouse_data100['价格区间'] = pd.cut(mouse_data100['售价'], bins=bins, labels=labels)
create_compatitive_table(mouse_data100)

预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
价格区间
0-10 141388.77 0.007644 166 851.739578 1.000000
10-20 8102634.14 0.438048 272 29789.096103 0.238170
20-30 4969620.92 0.268670 278 17876.334245 0.551796
30-40 1240874.19 0.067085 98 12661.981531 0.689073
40-50 707568.49 0.038253 40 17689.212250 0.556722
50-60 632300.28 0.034184 33 19160.614545 0.517984
60-70 1786443.74 0.096579 46 38835.733478 0.000000
70-80 38133.02 0.002062 18 2118.501111 0.966650
80-90 217468.44 0.011757 33 6589.952727 0.848931
90-100 660714.71 0.035720 42 15731.302619 0.608268
# 把拆分的过程进行封装
def create_price_table(bins, mouse_data):
    ## 把0-100之间的数据拆分成10组
    high = bins[-1]
    mouse_data100 = mouse_data.loc[mouse_data['售价'] <= high].copy()
    labels = creat_label(bins)
    mouse_data100['价格区间'] = pd.cut(mouse_data100['售价'], bins=bins, labels=labels)
    return create_compatitive_table(mouse_data100)
bins = np.arange(0, 110, 10)
create_price_table(bins, mouse_data)
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
价格区间
0-10 141388.77 0.007644 166 851.739578 1.000000
10-20 8102634.14 0.438048 272 29789.096103 0.238170
20-30 4969620.92 0.268670 278 17876.334245 0.551796
30-40 1240874.19 0.067085 98 12661.981531 0.689073
40-50 707568.49 0.038253 40 17689.212250 0.556722
50-60 632300.28 0.034184 33 19160.614545 0.517984
60-70 1786443.74 0.096579 46 38835.733478 0.000000
70-80 38133.02 0.002062 18 2118.501111 0.966650
80-90 217468.44 0.011757 33 6589.952727 0.848931
90-100 660714.71 0.035720 42 15731.302619 0.608268
bins = np.arange(0, 350, 50)
bins = np.concatenate((bins, [float('inf')]))
price_table = create_price_table(bins, mouse_data)
price_table
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
价格区间
0-50 15162086.51 0.590286 854 17754.199660 1.000000
50-100 3335060.19 0.129840 172 19389.884826 0.995629
100-150 2758086.29 0.107377 46 59958.397609 0.887218
150-200 629813.00 0.024520 28 22493.321429 0.987336
200-250 2743758.00 0.106819 7 391965.428571 0.000000
250-300 237740.00 0.009256 9 26415.555556 0.976854
300以上 819468.00 0.031903 18 45526.000000 0.925786
plt.figure(figsize=(12, 5))
price_table['预估销售额占比'].plot(kind='bar')
price_table['相对竞争度'].plot(kind='line')
plt.legend()
<matplotlib.legend.Legend at 0x15b011d2700>

​
png
​

200-250价格区间时相对竞争度最低的,所以可以作为高端市场的机会点

0-50市场份额高,相对竞争度也高, 但是由于市场份额很高,所以可以进一步的挖掘更细致价格区间

bins = np.arange(0, 60, 10)

price_table_50 = create_price_table(bins=bins, mouse_data=mouse_data)

def show_compatitive(price_table):
    plt.figure(figsize=(12, 5))
    price_table['预估销售额占比'].plot(kind='bar')
    price_table['相对竞争度'].plot(kind='line')
    plt.legend()
    plt.show()
show_compatitive(price_table_50)

​
png
​

10-20元的细分市场,市场份额很高,相对竞争度很低

20-30元的区间,仅次于10-20元的市场,也可以考虑

3.3.2 灭鼠杀虫市场的进一步分析

查看哪个2级类目有更高的市场占有率和增长率

kill_mouse = kill_mouse[features].copy()
kill_mouse.groupby('类别')['预估销售额'].sum().plot(kind='pie', autopct='%.2f%%')
plt.axis('equal')
plt.show()

​
png
​

除灭鼠市场外,蟑螂市场也有较高的占有率,所以可以进一步的挖掘机会点

3.3.3继续挖掘其他属性


kill_mouse
类别 宝贝标题 宝贝ID 销量(人数) 售价 预估销售额 类目 地域 店铺类型 型号 净含量 物理形态
0 杀虫 德国拜耳臭虫杀虫剂家用杀灭除跳蚤药苍蝇猫狗窝喷剂蟑螂药 578459866289 99 29.9 2960.1 灭鼠/杀虫剂 NaN 天猫 特姆得 NaN 液体
1 杀虫 蟑螂屋灭蟑螂药家用强力灭蟑清捕捉器除杀蟑螂贴粘板粉杀虫剂特价 548196868239 99 0.6 59.4 灭鼠/杀虫剂 浙江 金华 淘宝 180325 NaN NaN
2 杀虫 日本Hengai哼爱螨虫贴除螨虫垫祛螨床上用品沙发吸螨包家用杀虫 580839295562 99 98.0 9702.0 灭鼠/杀虫剂 广东 深圳 淘宝 NaN NaN NaN
3 杀虫 蚧壳虫专杀小白药小黑飞多肉花卉介壳虫用专治dx柑橘树植物杀虫剂 580264662322 99 6.9 683.1 灭鼠/杀虫剂 河南 商丘 淘宝 NaN 30g NaN
4 杀虫 雷达杀虫气雾剂清香型家用式蚊子苍蝇蟑螂蚂蚁除虫杀虫剂害虫喷剂 44484517973 99 18.8 1861.2 灭鼠/杀虫剂 河北 秦皇岛 天猫 雷达杀虫气雾剂清香 600ml 喷雾
... ... ... ... ... ... ... ... ... ... ... ... ...
6551 蟑螂 达豪杀蟑笔剂正品神笔蟑螂药跳蚤杀蟑粉笔画笔蚂蚁强效触杀全巢灭 567322968739 14 9.9 138.6 灭鼠/杀虫剂 上海 上海 淘宝 NaN NaN NaN
6552 蟑螂 榄菊速杀杀虫气雾剂 杀蟑螂、跳蚤等蚊虫2件24瓶375元包邮 547638024194 14 375.0 5250.0 灭鼠/杀虫剂 湖南 常德 淘宝 速杀型杀虫气雾剂600ml 600ML 喷雾
6553 蟑螂 全无敌家用室内600ml杀虫剂无香卧室 驱杀蟑螂蚂蚁苍蝇喷雾气雾剂 572950517334 14 20.8 291.2 灭鼠/杀虫剂 河北 秦皇岛 天猫 全无敌杀虫气雾剂无香600ml NaN 喷雾
6554 蟑螂 云杀 蟑螂小强药杀蟑胶饵除灭蟑螂屋粘贴板驱蟑粉厨房家用虫剂 540393439567 14 7.9 110.6 灭鼠/杀虫剂 浙江 杭州 淘宝 蟑螂 10g 啫喱
6555 蟑螂 蟑螂屋蟑螂贴粘板贴纸家用无毒灭蟑螂家用强力灭蟑清买20张送10包 567544678713 14 14.9 208.6 灭鼠/杀虫剂 江西 赣州 淘宝 NaN 10枚/盒 固体

6556 rows × 12 columns

# mouse_data: 是一个以‘价格区间’ 作为分组字段的dataFrame
def create_compatitive_table_by(mouse_data, by):
    # 计算预估销售额(价格区间内)
    预估销售额 = pd.DataFrame(mouse_data.groupby(by)['预估销售额'].sum())
    # 计算预估销售额占比
    预估销售额占比 = 预估销售额/预估销售额.sum()
    预估销售额占比.columns = ['预估销售额占比']

    # 计算宝贝数量 (宝贝种类)
    # 交叉表 特殊的透视表  count  两组数据的交叉关系
    cross_table = pd.crosstab(index=mouse_data[by], columns=mouse_data['宝贝ID'])
    宝贝数 = (cross_table > 0).sum(axis=1)
    宝贝数 = pd.DataFrame(宝贝数, columns=['宝贝数'])

    # 单宝贝销售额
    单宝贝平均销售额 = 预估销售额['预估销售额'] / 宝贝数['宝贝数']
    单宝贝平均销售额.name = '单宝贝平均销售额'
    单宝贝平均销售额 = pd.DataFrame(单宝贝平均销售额)

    # 相对竞争度
    相对竞争度 = map_compatitive(单宝贝平均销售额)
    相对竞争度.columns = ['相对竞争度']

    return pd.concat((预估销售额,预估销售额占比,宝贝数,单宝贝平均销售额,相对竞争度), axis=1)
create_compatitive_table_by(mouse_data, '店铺类型')
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
店铺类型
天猫 23551572.38 0.916903 345 68265.427188 0.0
淘宝 2134439.61 0.083097 789 2705.246654 1.0
mouse_data.head()
类别 宝贝标题 宝贝ID 销量(人数) 售价 预估销售额 类目 地域 店铺类型 型号 净含量 物理形态 价格区间
2000 灭鼠 老鼠胶驱鼠粘鼠板老鼠颗粒强力灭鼠贴家用药yao老鼠夹捕鼠神器笼 566054780243 9976 26.8 267356.8 灭鼠/杀虫剂 广东 韶关 天猫 MT007 NaN 胶水 20-30
2001 灭鼠 灭鼠神器家用抓老鼠神器粘鼠板捕鼠神器魔毯 566054780243 9976 26.8 267356.8 灭鼠/杀虫剂 广东 深圳 天猫 MT007 NaN 胶水 20-30
2002 灭鼠 粘鼠板超强力老鼠贴粘老鼠板粘纸驱鼠灭鼠器电猫老鼠夹笼子粘鼠胶 572115448996 9945 9.9 98455.5 灭鼠/杀虫剂 NaN 淘宝 21/32 NaN 固体 0-10
2003 灭鼠 云杀老鼠贴强力粘鼠板家用老鼠胶灭鼠器老鼠克星正品20片装 39868408322 99 29.9 2960.1 灭鼠/杀虫剂 河南 南阳 天猫 粘鼠板 NaN 固体 20-30
2004 灭鼠 得硕粘鼠板超强力大老鼠贴家用捕鼠器灭老鼠笼胶鼠夹子抓老鼠工具 520282897220 99 39.9 3950.1 灭鼠/杀虫剂 NaN 淘宝 NaN g 固体 30-40
### 对产品型号的top10分析
type_top10 = create_compatitive_table_by(mouse_data, '型号').sort_values('预估销售额', ascending=False)[:10]
type_top10
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
型号
SK600 2672898.00 0.107333 1 2.672898e+06 0.000000
超强力粘鼠板 2120129.32 0.085136 12 1.766774e+05 0.933900
粘鼠板老鼠贴 2051699.02 0.082388 7 2.930999e+05 0.890344
JF-807 1121452.00 0.045033 1 1.121452e+06 0.580436
0005 927590.70 0.037248 2 4.637953e+05 0.826482
驰天粘鼠板 876606.33 0.035201 4 2.191516e+05 0.918010
QL-866 759629.30 0.030504 3 2.532098e+05 0.905268
SD08-F4 707658.00 0.028417 2 3.538290e+05 0.867623
SK300 2018 706422.00 0.028367 1 7.064220e+05 0.735709
大功率驱鼠器 691794.00 0.027780 1 6.917940e+05 0.741182
show_compatitive(type_top10)

​
png
​

SK600 JF-807时两款相对竞争度很低的产品型号,可以进一步关注

但是由于产品型号差异太大,500多种,所以参考价值较低,可以进一步和市场人员沟通

mouse_data['地域'].unique()
array(['广东 韶关', '广东 深圳', nan, '河南 南阳', '浙江 金华', '上海', '广东 广州', '广东 东莞',
       '浙江 宁波', '福建省 泉州市', '江苏 无锡', '山东省 青岛市', '上海 上海市', '北京', '山东 青岛',
       '江苏 宿迁', '河北 唐山', '江苏 盐城', '广东 佛山', '江苏 常州', '浙江省 温州市', '山东 济宁',
       '上海 上海', '北京 北京', '江苏省 常州市', '安徽 蚌埠', '广东省 珠海市', '四川 成都', '浙江 杭州',
       '河南 郑州', '广东 中山', '浙江省 衢州市', '辽宁 沈阳', '湖南 长沙', '北京 北京市', '江苏 苏州',
       '湖北 武汉', '河北 石家庄', '四川省 成都市', '福建 厦门', '广东 汕头', '山东 菏泽', '广东省 广州市',
       '海南 海口', '浙江省 杭州市', '广东 惠州', '江苏 南京', '广东省 东莞市', '重庆 重庆', '广东 茂名',
       '山东 济南', '辽宁 锦州', '浙江 温州', '福建省 厦门市', '浙江 嘉兴', '河北 邯郸', '广东 珠海',
       '河南 新乡', '天津', '江西 吉安', '辽宁省 大连市', '广东省 深圳市', '山东 枣庄', '广东省 佛山市',
       '福建 泉州', '浙江省 金华市', '山东 潍坊', '福建 福州', '安徽省 滁州市', ' 苏州市', '湖南省 长沙市',
       '辽宁 大连', '河北 廊坊', '浙江 绍兴', '天津 天津', '安徽 安庆', '安徽 合肥', '山东 聊城',
       ' 沈阳市', '山东省 聊城市', '湖北省 武汉市', '河北 秦皇岛', '江苏 镇江', '浙江 台州', '河北 沧州'],
      dtype=object)
city_moust_data = mouse_data.loc[mouse_data['地域'].notnull()].copy()
def split_province_city(x):
    infomation = x.split(' ')
    if len(infomation) <= 1:
        return np.array([infomation[0], infomation[0]])
    else:
        return np.array(infomation)
split_province_city('广东 深圳')
array(['广东', '深圳'], dtype='<U2')
city_infos = city_moust_data['地域'].map(split_province_city).values

city_info_list = []
for info in city_infos:
    city_info_list.append([info[0], info[1]])
city_info_df = pd.DataFrame(city_info_list, columns=['省份','城市'])
# 重置索引
city_moust_data.index = np.arange(city_moust_data.shape[0])
city_mouse_data = pd.concat((city_moust_data, city_info_df), axis=1)

由于省份信息不统一,把省份统一处理

city_mouse_data['省份'].unique()
array(['广东', '河南', '浙江', '上海', '福建省', '江苏', '山东省', '北京', '山东', '河北',
       '浙江省', '江苏省', '安徽', '广东省', '四川', '辽宁', '湖南', '湖北', '四川省', '福建',
       '海南', '重庆', '天津', '江西', '辽宁省', '安徽省', '', '湖南省', '湖北省'],
      dtype=object)
def process_province(x):
    return x.split('省')[0]

city_mouse_data.loc[:,'省份'] = city_mouse_data['省份'].map(process_province)

检查省份数据

city_mouse_data['省份'].unique()
array(['广东', '河南', '浙江', '上海', '福建', '江苏', '山东', '北京', '河北', '安徽', '四川',
       '辽宁', '湖南', '湖北', '海南', '重庆', '天津', '江西', ''], dtype=object)
city_info_table = create_compatitive_table_by(city_mouse_data, '省份')
show_compatitive(city_info_table)

​
png
​

上海、四川、广东、海南都是竞争度较低的省份,可以扩大规模

physical_form_table = create_compatitive_table_by(mouse_data, '物理形态')
physical_form_table
预估销售额 预估销售额占比 宝贝数 单宝贝平均销售额 相对竞争度
物理形态
5个1元硬币厚硬板 5226.00 0.000237 1 5226.000000 0.990482
8波段驱鼠器 108205.20 0.004902 1 108205.200000 0.797844
啫喱 643694.50 0.029164 40 16092.362500 0.970155
喷雾 275280.33 0.012472 6 45880.055000 0.914433
固体 19664620.40 0.890947 789 24923.473257 0.953635
声波 328.90 0.000015 1 328.900000 0.999642
服务 56160.00 0.002544 1 56160.000000 0.895202
气体 3253.18 0.000147 2 1626.590000 0.997215
油状 2341.60 0.000106 2 1170.800000 0.998068
液体 445113.50 0.020167 28 15896.910714 0.970520
粉状 329804.28 0.014942 14 23557.448571 0.956190
粘胶 235.20 0.000011 1 235.200000 0.999818
粘鼠板 413.90 0.000019 3 137.966667 1.000000
胶板 1040.00 0.000047 1 1040.000000 0.998312
胶水 534713.60 0.024226 1 534713.600000 0.000000
胶水纸板 358.20 0.000016 1 358.200000 0.999588
胶状 275.50 0.000012 2 137.750000 1.000000
超声波物理驱鼠 536.00 0.000024 1 536.000000 0.999255
show_compatitive(physical_form_table)

​
png
​

8波段驱鼠器、胶水相对竞争度较低, 可以作为机会增长点做进一步扩大

其他形式、其他子类市场,都可以做类似的筛选,再总结即可

4.竞品分析

root_path = './data/竞争数据/商品销售数据/'

sales_data = pd.DataFrame()
for file in os.listdir(root_path):
    file_path = os.path.join(root_path, file)
    df = pd.read_excel(file_path)
    sales_data = pd.concat((sales_data, df), sort=False, ignore_index=True)
sales_data.columns
Index(['序号', '店铺名称', '商品名称', '商品ID', '主图链接', '商品链接', '商品原价', '商品售价', '30天销售量',
       '总销量', '类目', '适用对象', '30天销售额', '物理形态', '型号', '净含量'],
      dtype='object')
features = ['店铺名称','商品ID','总销量','30天销售额','类目']
sales_data_features = sales_data[features]
sales_data_features
店铺名称 商品ID 总销量 30天销售额 类目
0 安速家居旗舰店 527032566392 236321 138176.0 灭鼠/杀虫剂
1 安速家居旗舰店 534230487113 10498 26401.7 灭鼠/杀虫剂
2 安速家居旗舰店 527797679530 117070 32082.7 灭鼠/杀虫剂
3 安速家居旗舰店 527113108079 55672 21430.5 灭鼠/杀虫剂
4 安速家居旗舰店 531350777813 19705 27168.0 灭鼠/杀虫剂
... ... ... ... ... ...
82 科凌虫控旗舰店 539005533029 2826 4309.0 灭鼠/杀虫剂
83 科凌虫控旗舰店 538635967358 1782 507.5 灭鼠/杀虫剂
84 科凌虫控旗舰店 534188548051 3086 1738.0 灭鼠/杀虫剂
85 科凌虫控旗舰店 536273648303 3085 178.2 灭鼠/杀虫剂
86 科凌虫控旗舰店 536126839304 425 118.8 灭鼠/杀虫剂

87 rows × 5 columns

category_sales = pd.pivot_table(data=sales_data_features, 
               index='店铺名称', columns='类目', 
               values='30天销售额', aggfunc='sum')
category_sales
类目 其它园艺用品 漱口水 灭鼠/杀虫剂 灭鼠笼/捕鼠器 空气芳香剂 空调清洁剂 蚊香液 蚊香片
店铺名称
安速家居旗舰店 NaN 9137.3 494539.3 NaN 4668.6 10420.9 24343.6 45.0
拜耳官方旗舰店 NaN NaN 2673315.2 NaN NaN NaN NaN NaN
科凌虫控旗舰店 22880.0 NaN 3734597.0 62293.0 NaN NaN NaN NaN
sns.set()
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12, 4))
for i in range(category_sales.shape[0]):
    ax = plt.subplot(1,3,i+1)
    category_sales.iloc[i].plot(kind='pie', ax=ax)
    plt.axis('equal')
plt.suptitle('主要竞品的销售额占比分析')
Text(0.5, 0.98, '主要竞品的销售额占比分析')

​
png
​

category_sales1 = pd.pivot_table(data=sales_data_features, 
               index='店铺名称', columns='类目', 
               values='总销量', aggfunc='sum')

plt.figure(figsize=(12, 4))
for i in range(category_sales1.shape[0]):
    ax = plt.subplot(1,3,i+1)
    category_sales.iloc[i].plot(kind='pie', ax=ax)
    plt.axis('equal')
plt.suptitle('主要竞品的销售量占比分析')
Text(0.5, 0.98, '主要竞品的销售量占比分析')

​
png
​

三家竞品的产品组合基本一致

4.1 BCG矩阵 查看产品结构是否健康

以拜尔官方旗舰店为例: 分析BCG结构

baier = pd.read_excel('data/竞争数据/商品交易数据/拜耳全店商品交易数据.xlsx')
baier
品牌 时间 商品 行业排名 交易指数 交易增长幅度 支付转化指数 操作 交易金额
0 拜耳 2018-07-01 德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端 1 583483 0.0350 1500 趋势分析 9354158.37
1 拜耳 2018-07-01 进口蟑螂药一窝端德国拜耳拜灭士强力杀蟑胶饵蟑螂屋克星家用全窝 6 278542 0.1258 1194 趋势分析 2470202.91
2 拜耳 2018-07-01 德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁杀虫剂家用室内全窝端 11 212329 0.5070 1328 趋势分析 1518114.06
3 拜耳 2018-07-01 进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用 44 107697 -0.2044 1117 趋势分析 451897.06
4 拜耳 2018-07-01 德国拜耳 除敌跳蚤杀虫剂家用灭蟑螂药虱子杀潮虫臭虫除虫剂喷雾 45 105901 -0.2134 936 趋势分析 438583.74
... ... ... ... ... ... ... ... ... ...
137 拜耳 2018-11-01 德国拜耳上门除灭鼠灭白蚁蟑螂蚊子跳蚤苍蝇上海地区灭虫按件拍下 357 22585 2.4393 266 趋势分析 28969.28
138 拜耳 2018-11-01 德国拜耳丁香医生限量款拜灭士加量家用蟑螂全窝端蟑螂药3支装 385 21568 1.2793 751 趋势分析 26742.75
139 拜耳 2018-11-01 德国进口拜耳蟑螂药拜灭士杀蟑胶饵5g两盒套装全窝端杀灭蟑螂剂屋 418 20221 -0.3242 679 趋势分析 23913.53
140 拜耳 2018-11-01 拜耳灭蚂蚁药家用一窝端室内室外用杀小黄红蚂蚁药神器胶饵拜灭易 437 19549 7.4427 1612 趋势分析 22553.62
141 拜耳 2018-11-01 蟑螂药拜耳拜灭士杀蟑胶饵强力灭蟑清贴捕捉器蟑螂克星家用全窝端 451 19027 0.8653 1619 趋势分析 21521.16

142 rows × 9 columns

# 计算各商品的销售总额
sales_sum = baier.groupby('商品')['交易金额'].sum()
sales_sum
商品
17年德国拜耳进口蚂蚁药拜灭易灭蚁饵剂粉除杀蚂蚁杀虫剂全窝端            42340.55
德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器        197377.17
德国拜耳 除敌跳蚤杀虫剂家用灭蟑螂药虱子杀潮虫臭虫除虫剂喷雾          1394780.59
德国拜耳丁香医生限量款拜灭士加量家用蟑螂全窝端蟑螂药3支装             26742.75
德国拜耳上门除灭鼠灭白蚁蟑螂蚊子跳蚤苍蝇上海地区灭虫按件拍下            28969.28
德国拜耳拜灭士5g+拜灭易12g进口杀蟑螂蚂蚁药蟑螂克星家用全窝端        251225.58
德国拜耳拜灭士5g+除敌5ml*4支进口蟑螂药家用全窝端杀蟑螂套装       1484952.41
德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端         40103850.97
德国拜耳拜灭士蟑螂药一窝端进口全窝端家用灭除杀蟑胶饵5g包邮           236386.32
德国拜耳拜灭易12g+除敌5ml*4支 进口蚂蚁药全窝端家用杀虫剂组合       89566.01
德国拜耳拜灭易灭蚁饵剂粉除杀防蚂蚁药杀虫剂全窝端家用室内花园          1520126.15
德国拜耳拜灭易进口蚂蚁药一窝端灭蚁饵剂清除蚂蚁粉家用全窝端             32246.39
德国拜耳白蚁药杀虫剂全窝端家用除杀防治灭飞蚂蚁特密得预防装修            55113.41
德国拜耳蟑螂药拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑加量装12g           68699.06
德国拜耳跳蚤杀虫剂家用潮虫灭蛾蚋虱子臭虫药除蟑螂5ml*4            318059.43
德国拜耳进口白蚁药除灭防杀白蚁杀虫剂全窝端家用特傚触杀型粉药           564169.77
德国拜耳进口蚂蚁药家用拜灭易灭蚁饵剂杀蚂蚁杀虫剂室内全窝端蚁           214998.61
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁无毒家用室内全窝端             93400.98
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁杀虫剂家用室内全窝端          6130488.42
德国拜耳除敌杀虫剂灭蚊蟑螂蚂蚁药跳蚤苍蝇臭虫除螨虱子家用             393582.71
德国拜耳除敌杀虫剂灭蟑螂药跳蚤苍蝇臭虫除螨虱子喷雾5ml*8           983199.69
德国进口拜耳蟑螂药拜灭士杀灭除蟑胶饵剂粉屋家用全窝端12g*2盒          28605.01
德国进口拜耳蟑螂药拜灭士杀蟑胶饵5g两盒套装全窝端杀灭蟑螂剂屋          189376.20
必抢 德国进口拜耳蟑螂克星家用小强全窝端蟑螂药杀蟑胶饵灭蟑17g         561689.93
拜灭士蟑螂药蟑螂克星家用无毒强力灭蟑清德国拜耳杀蟑饵剂全窝端           140032.47
拜耳拜灭士 蟑螂药家用全窝端 强力灭除厨房蟑螂屋克星杀德国进口          413902.42
拜耳灭蚂蚁药家用一窝端室内室外用杀小黄红蚂蚁药神器胶饵拜灭易            22553.62
拜耳蟑螂药一窝端家用拜灭士杀蟑胶饵德国小强药粉灭蟑螂厨房克星           695372.27
电子猫超声波驱鼠器家用大功率灭鼠防鼠赶老鼠夹药捕鼠干扰粘鼠板            41046.03
蟑螂药30克拜灭士德国拜耳进口安全灭蟑螂杀蟑胶饵颗粒剂传染传毒          221081.46
蟑螂药一窝端德国拜耳拜灭士除蟑灭杀蟑螂克星全窝端家用杀蟑胶           2976922.63
蟑螂药德国拜耳拜灭士强力除杀蟑螂克星胶饵屋家用捕捉器贴全窝端          1198694.67
蟑螂药拜耳拜灭士杀蟑胶饵强力灭蟑清贴捕捉器蟑螂克星家用全窝端            55395.16
蟑螂药进口德国拜耳拜灭士家用除杀蟑螂屋胶饵捕捉器强力清全窝端           101079.33
进口拜耳蚂蚁药家用花园灭蚁饵剂拜灭易除杀蚂蚁杀虫剂室内全窝端           108487.45
进口蚂蚁药德国拜耳拜灭易杀蚁胶饵灭蚁饵剂红黑黄蚂蚁全窝端家用            33514.83
进口蟑螂药 德国拜耳拜灭士家用杀蟑螂胶饵捕捉器蟑螂屋粉全窝端           582636.66
进口蟑螂药 德国拜耳拜灭士杀蟑胶饵灭蟑螂屋贴捕捉器全窝端家用           185691.26
进口蟑螂药 德国拜耳拜灭士杀蟑螂胶饵剂33克灭蟑螂药全窝端家用          143883.32
进口蟑螂药一窝端德国拜耳拜灭士强力杀蟑胶饵蟑螂屋克星家用全窝         13617307.87
进口蟑螂药一窝端德国拜耳拜灭士杀蟑胶饵诱防蟑螂屋全窝端5+12g          67043.14
进口蟑螂药德国拜耳拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑屋12g         1650681.34
进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用          3589799.54
预售德国拜耳进口蟑螂药进口蚂蚁药组合装5g+12g                 85546.09
Name: 交易金额, dtype: float64
# 计算各商品的销售总额占比
sales_pct = sales_sum/sales_sum.sum()
sales_pct
商品
17年德国拜耳进口蚂蚁药拜灭易灭蚁饵剂粉除杀蚂蚁杀虫剂全窝端         0.000523
德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器      0.002439
德国拜耳 除敌跳蚤杀虫剂家用灭蟑螂药虱子杀潮虫臭虫除虫剂喷雾         0.017232
德国拜耳丁香医生限量款拜灭士加量家用蟑螂全窝端蟑螂药3支装          0.000330
德国拜耳上门除灭鼠灭白蚁蟑螂蚊子跳蚤苍蝇上海地区灭虫按件拍下         0.000358
德国拜耳拜灭士5g+拜灭易12g进口杀蟑螂蚂蚁药蟑螂克星家用全窝端      0.003104
德国拜耳拜灭士5g+除敌5ml*4支进口蟑螂药家用全窝端杀蟑螂套装      0.018346
德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端         0.495473
德国拜耳拜灭士蟑螂药一窝端进口全窝端家用灭除杀蟑胶饵5g包邮         0.002920
德国拜耳拜灭易12g+除敌5ml*4支 进口蚂蚁药全窝端家用杀虫剂组合    0.001107
德国拜耳拜灭易灭蚁饵剂粉除杀防蚂蚁药杀虫剂全窝端家用室内花园         0.018781
德国拜耳拜灭易进口蚂蚁药一窝端灭蚁饵剂清除蚂蚁粉家用全窝端          0.000398
德国拜耳白蚁药杀虫剂全窝端家用除杀防治灭飞蚂蚁特密得预防装修         0.000681
德国拜耳蟑螂药拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑加量装12g        0.000849
德国拜耳跳蚤杀虫剂家用潮虫灭蛾蚋虱子臭虫药除蟑螂5ml*4          0.003930
德国拜耳进口白蚁药除灭防杀白蚁杀虫剂全窝端家用特傚触杀型粉药         0.006970
德国拜耳进口蚂蚁药家用拜灭易灭蚁饵剂杀蚂蚁杀虫剂室内全窝端蚁         0.002656
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁无毒家用室内全窝端          0.001154
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁杀虫剂家用室内全窝端         0.075741
德国拜耳除敌杀虫剂灭蚊蟑螂蚂蚁药跳蚤苍蝇臭虫除螨虱子家用           0.004863
德国拜耳除敌杀虫剂灭蟑螂药跳蚤苍蝇臭虫除螨虱子喷雾5ml*8         0.012147
德国进口拜耳蟑螂药拜灭士杀灭除蟑胶饵剂粉屋家用全窝端12g*2盒       0.000353
德国进口拜耳蟑螂药拜灭士杀蟑胶饵5g两盒套装全窝端杀灭蟑螂剂屋        0.002340
必抢 德国进口拜耳蟑螂克星家用小强全窝端蟑螂药杀蟑胶饵灭蟑17g       0.006940
拜灭士蟑螂药蟑螂克星家用无毒强力灭蟑清德国拜耳杀蟑饵剂全窝端         0.001730
拜耳拜灭士 蟑螂药家用全窝端 强力灭除厨房蟑螂屋克星杀德国进口        0.005114
拜耳灭蚂蚁药家用一窝端室内室外用杀小黄红蚂蚁药神器胶饵拜灭易         0.000279
拜耳蟑螂药一窝端家用拜灭士杀蟑胶饵德国小强药粉灭蟑螂厨房克星         0.008591
电子猫超声波驱鼠器家用大功率灭鼠防鼠赶老鼠夹药捕鼠干扰粘鼠板         0.000507
蟑螂药30克拜灭士德国拜耳进口安全灭蟑螂杀蟑胶饵颗粒剂传染传毒        0.002731
蟑螂药一窝端德国拜耳拜灭士除蟑灭杀蟑螂克星全窝端家用杀蟑胶          0.036779
蟑螂药德国拜耳拜灭士强力除杀蟑螂克星胶饵屋家用捕捉器贴全窝端         0.014810
蟑螂药拜耳拜灭士杀蟑胶饵强力灭蟑清贴捕捉器蟑螂克星家用全窝端         0.000684
蟑螂药进口德国拜耳拜灭士家用除杀蟑螂屋胶饵捕捉器强力清全窝端         0.001249
进口拜耳蚂蚁药家用花园灭蚁饵剂拜灭易除杀蚂蚁杀虫剂室内全窝端         0.001340
进口蚂蚁药德国拜耳拜灭易杀蚁胶饵灭蚁饵剂红黑黄蚂蚁全窝端家用         0.000414
进口蟑螂药 德国拜耳拜灭士家用杀蟑螂胶饵捕捉器蟑螂屋粉全窝端         0.007198
进口蟑螂药 德国拜耳拜灭士杀蟑胶饵灭蟑螂屋贴捕捉器全窝端家用         0.002294
进口蟑螂药 德国拜耳拜灭士杀蟑螂胶饵剂33克灭蟑螂药全窝端家用        0.001778
进口蟑螂药一窝端德国拜耳拜灭士强力杀蟑胶饵蟑螂屋克星家用全窝         0.168238
进口蟑螂药一窝端德国拜耳拜灭士杀蟑胶饵诱防蟑螂屋全窝端5+12g       0.000828
进口蟑螂药德国拜耳拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑屋12g        0.020394
进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用         0.044351
预售德国拜耳进口蟑螂药进口蚂蚁药组合装5g+12g              0.001057
Name: 交易金额, dtype: float64

4.2 平均增长率公式

n 是期数

ai 第i期的增长幅

baier.sort_values(['商品','交易增长幅度'])
品牌 时间 商品 行业排名 交易指数 交易增长幅度 支付转化指数 操作 交易金额
22 拜耳 2018-07-01 17年德国拜耳进口蚂蚁药拜灭易灭蚁饵剂粉除杀蚂蚁杀虫剂全窝端 377 28090 -0.2476 1063 趋势分析 42340.55
19 拜耳 2018-07-01 德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器 275 34953 -0.3665 782 趋势分析 62023.73
76 拜耳 2018-09-01 德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器 274 34047 -0.2218 801 趋势分析 59238.66
41 拜耳 2018-08-01 德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器 234 39287 0.2273 806 趋势分析 76114.78
102 拜耳 2018-10-01 德国拜耳 除敌跳蚤杀虫剂家用灭蟑螂药虱子杀潮虫臭虫除虫剂喷雾 117 57373 -0.4751 936 趋势分析 148130.75
... ... ... ... ... ... ... ... ... ...
3 拜耳 2018-07-01 进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用 44 107697 -0.2044 1117 趋势分析 451897.06
60 拜耳 2018-09-01 进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用 14 179897 0.3642 1205 趋势分析 1128379.43
30 拜耳 2018-08-01 进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用 27 151197 0.8303 1204 趋势分析 827141.60
82 拜耳 2018-09-01 预售德国拜耳进口蟑螂药进口蚂蚁药组合装5g+12g 372 27417 -0.0973 836 趋势分析 40588.32
49 拜耳 2018-08-01 预售德国拜耳进口蟑螂药进口蚂蚁药组合装5g+12g 357 29073 0.5336 700 趋势分析 44957.77

142 rows × 9 columns

temp = baier.loc[baier['商品'] == '德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器']
n = temp['交易增长幅度'].size

prod = 1
for a in temp['交易增长幅度'].values:
    prod *= (1+a)
    
increatment_rate = np.power(prod, 1/n) - 1
increatment_rate
-0.15420938866622647
temp['交易增长幅度']
19   -0.3665
41    0.2273
76   -0.2218
Name: 交易增长幅度, dtype: float64
# 计算平均增长率的函数
def increatment_rate(x):
    prod = 1
    for a in x.values:
        prod *= (1+a)
    return np.power(prod, 1/x.size) - 1
def test_function(x):
    print(x)
    print('------------------------------------------')
avg_increate_rate = baier.groupby('商品')['交易增长幅度'].apply(increatment_rate)

avg_increate_rate.size,sales_pct.size,sales_sum.size
(44, 44, 44)

整理

result = pd.concat((sales_sum, sales_pct, avg_increate_rate), axis=1)
result.columns = ['交易金额','交易额占比','平均增长率']
result
交易金额 交易额占比 平均增长率
商品
17年德国拜耳进口蚂蚁药拜灭易灭蚁饵剂粉除杀蚂蚁杀虫剂全窝端 42340.55 0.000523 -0.247600
德国原装进口拜耳蟑螂药全窝端拜灭士5g+12g杀蟑胶饵剂粉屋捕捉器 197377.17 0.002439 -0.154209
德国拜耳 除敌跳蚤杀虫剂家用灭蟑螂药虱子杀潮虫臭虫除虫剂喷雾 1394780.59 0.017232 -0.236978
德国拜耳丁香医生限量款拜灭士加量家用蟑螂全窝端蟑螂药3支装 26742.75 0.000330 1.279300
德国拜耳上门除灭鼠灭白蚁蟑螂蚊子跳蚤苍蝇上海地区灭虫按件拍下 28969.28 0.000358 2.439300
德国拜耳拜灭士5g+拜灭易12g进口杀蟑螂蚂蚁药蟑螂克星家用全窝端 251225.58 0.003104 -0.088763
德国拜耳拜灭士5g+除敌5ml*4支进口蟑螂药家用全窝端杀蟑螂套装 1484952.41 0.018346 0.342020
德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端 40103850.97 0.495473 -0.149060
德国拜耳拜灭士蟑螂药一窝端进口全窝端家用灭除杀蟑胶饵5g包邮 236386.32 0.002920 29.260600
德国拜耳拜灭易12g+除敌5ml*4支 进口蚂蚁药全窝端家用杀虫剂组合 89566.01 0.001107 0.417571
德国拜耳拜灭易灭蚁饵剂粉除杀防蚂蚁药杀虫剂全窝端家用室内花园 1520126.15 0.018781 -0.081254
德国拜耳拜灭易进口蚂蚁药一窝端灭蚁饵剂清除蚂蚁粉家用全窝端 32246.39 0.000398 7.867000
德国拜耳白蚁药杀虫剂全窝端家用除杀防治灭飞蚂蚁特密得预防装修 55113.41 0.000681 5.023800
德国拜耳蟑螂药拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑加量装12g 68699.06 0.000849 1.030066
德国拜耳跳蚤杀虫剂家用潮虫灭蛾蚋虱子臭虫药除蟑螂5ml*4 318059.43 0.003930 -0.025832
德国拜耳进口白蚁药除灭防杀白蚁杀虫剂全窝端家用特傚触杀型粉药 564169.77 0.006970 -0.256507
德国拜耳进口蚂蚁药家用拜灭易灭蚁饵剂杀蚂蚁杀虫剂室内全窝端蚁 214998.61 0.002656 -0.085305
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁无毒家用室内全窝端 93400.98 0.001154 0.044624
德国拜耳进口蚂蚁药拜灭易灭蚁饵剂除杀蚂蚁杀虫剂家用室内全窝端 6130488.42 0.075741 -0.145091
德国拜耳除敌杀虫剂灭蚊蟑螂蚂蚁药跳蚤苍蝇臭虫除螨虱子家用 393582.71 0.004863 -0.124094
德国拜耳除敌杀虫剂灭蟑螂药跳蚤苍蝇臭虫除螨虱子喷雾5ml*8 983199.69 0.012147 0.170093
德国进口拜耳蟑螂药拜灭士杀灭除蟑胶饵剂粉屋家用全窝端12g*2盒 28605.01 0.000353 0.586000
德国进口拜耳蟑螂药拜灭士杀蟑胶饵5g两盒套装全窝端杀灭蟑螂剂屋 189376.20 0.002340 0.054880
必抢 德国进口拜耳蟑螂克星家用小强全窝端蟑螂药杀蟑胶饵灭蟑17g 561689.93 0.006940 -0.391422
拜灭士蟑螂药蟑螂克星家用无毒强力灭蟑清德国拜耳杀蟑饵剂全窝端 140032.47 0.001730 0.970033
拜耳拜灭士 蟑螂药家用全窝端 强力灭除厨房蟑螂屋克星杀德国进口 413902.42 0.005114 0.342553
拜耳灭蚂蚁药家用一窝端室内室外用杀小黄红蚂蚁药神器胶饵拜灭易 22553.62 0.000279 7.442700
拜耳蟑螂药一窝端家用拜灭士杀蟑胶饵德国小强药粉灭蟑螂厨房克星 695372.27 0.008591 -0.069167
电子猫超声波驱鼠器家用大功率灭鼠防鼠赶老鼠夹药捕鼠干扰粘鼠板 41046.03 0.000507 1030.000000
蟑螂药30克拜灭士德国拜耳进口安全灭蟑螂杀蟑胶饵颗粒剂传染传毒 221081.46 0.002731 -0.140822
蟑螂药一窝端德国拜耳拜灭士除蟑灭杀蟑螂克星全窝端家用杀蟑胶 2976922.63 0.036779 -0.072881
蟑螂药德国拜耳拜灭士强力除杀蟑螂克星胶饵屋家用捕捉器贴全窝端 1198694.67 0.014810 -0.097960
蟑螂药拜耳拜灭士杀蟑胶饵强力灭蟑清贴捕捉器蟑螂克星家用全窝端 55395.16 0.000684 0.502894
蟑螂药进口德国拜耳拜灭士家用除杀蟑螂屋胶饵捕捉器强力清全窝端 101079.33 0.001249 1.279586
进口拜耳蚂蚁药家用花园灭蚁饵剂拜灭易除杀蚂蚁杀虫剂室内全窝端 108487.45 0.001340 -0.090902
进口蚂蚁药德国拜耳拜灭易杀蚁胶饵灭蚁饵剂红黑黄蚂蚁全窝端家用 33514.83 0.000414 0.742200
进口蟑螂药 德国拜耳拜灭士家用杀蟑螂胶饵捕捉器蟑螂屋粉全窝端 582636.66 0.007198 -0.193162
进口蟑螂药 德国拜耳拜灭士杀蟑胶饵灭蟑螂屋贴捕捉器全窝端家用 185691.26 0.002294 -0.065099
进口蟑螂药 德国拜耳拜灭士杀蟑螂胶饵剂33克灭蟑螂药全窝端家用 143883.32 0.001778 0.038756
进口蟑螂药一窝端德国拜耳拜灭士强力杀蟑胶饵蟑螂屋克星家用全窝 13617307.87 0.168238 -0.093715
进口蟑螂药一窝端德国拜耳拜灭士杀蟑胶饵诱防蟑螂屋全窝端5+12g 67043.14 0.000828 31.218500
进口蟑螂药德国拜耳拜灭士杀蟑胶饵蟑螂克星全窝端家用灭蟑屋12g 1650681.34 0.020394 -0.186351
进口蟑螂药德国拜耳拜灭士灭杀蟑胶饵剂粉屋克星全窝端12g家用 3589799.54 0.044351 -0.019072
预售德国拜耳进口蟑螂药进口蚂蚁药组合装5g+12g 85546.09 0.001057 0.176597
import warnings
warnings.filterwarnings('ignore')
for col in result.columns:
    col_data = result[col]
    sns.distplot(col_data)
    plt.show()

​
png
​

png
png
result.loc[result['平均增长率'] < 25].plot(kind='scatter', x='交易额占比', y='平均增长率')
*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*.  Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.





<AxesSubplot:xlabel='交易额占比', ylabel='平均增长率'>

​
png
​

result['交易额占比'].median()*10
0.025473970013420555
(result.query("平均增长率 < 25 & 交易额占比 < 0.4")*10).plot(kind='scatter', x='交易额占比', y='平均增长率', s=100, color=np.random.random(size=(40, 3)))
plt.xlim([-1 ,2])
plt.ylim([-5, 8])

# 绘制分割线
plt.plot(np.linspace(-1, 2, 100), [1]*100)
plt.plot([result['交易额占比'].median()*10]*100, np.linspace(-5, 8, 100))
[<matplotlib.lines.Line2D at 0x15b06bbea90>]

​
png
​

plt.scatter(result['交易额占比'], result['平均增长率'])
<matplotlib.collections.PathCollection at 0x15b055b0b50>

​
png
​

5.流量分析

flow_data = pd.DataFrame()

for file in os.listdir('data/竞争数据/流量渠道数据'):
    file_path = os.path.join('data/竞争数据/流量渠道数据',file)
    df = pd.read_excel(file_path)
    brank = file.split('旗舰店')[0]
    df['brank'] = brank
    flow_data = pd.concat((flow_data, df), sort=False, ignore_index=True)
del flow_data['Unnamed: 2']
flow_data
流量来源 交易指数 brank
0 淘内免费 119751 安速家居
1 手淘搜索 86389 安速家居
2 淘内免费其他 62653 安速家居
3 手淘问大家 31348 安速家居
4 手淘旺信 25514 安速家居
... ... ... ...
793 米折 0 科凌虫控
794 淘粉吧 0 科凌虫控
795 其它来源 0 科凌虫控
796 其它来源 0 科凌虫控
797 站外投放 0 科凌虫控

798 rows × 3 columns

ansu['交易指数'].sum()
958694
ansu_top10['交易指数']
0      119751
206    104136
1       86389
210     83819
207     82687
208     68529
2       62653
211     55229
213     50425
5       34921
Name: 交易指数, dtype: int64
def test_func(x):
    rate = ((x)*(ansu_top10['交易指数'].sum()))/(ansu['交易指数'].sum())
    return f'{np.round(rate,2)}%'
ansu = flow_data.loc[flow_data.brank == '安速家居']
ansu_top10 = ansu.sort_values('交易指数', ascending=False)[:10]
# plt.pie(x=ansu_top10['交易指数'],autopct='%.2f%%',colors=sns.color_palette('husl'))
plt.pie(x=ansu_top10['交易指数'],autopct=test_func,colors=sns.color_palette('husl'))
plt.axis('equal')
plt.title('安速家居')
plt.show()

​
png
​

ansu_top10['流量来源'].values
array(['淘内免费', '自主访问', '手淘搜索', '付费流量', '购物车', '我的淘宝', '淘内免费其他', '直通车',
       '品销宝-搜索产品', '猫客搜索'], dtype=object)
plt.figure(figsize=(12, 4))
loc = 1
for brank in flow_data.brank.unique():
    plt.subplot(1,3,loc)
    loc += 1
    brank_data = flow_data.loc[flow_data.brank == brank]
    brank_top10 = ansu.sort_values('交易指数', ascending=False)[:10]
    
    def test_func(x):
        # x就是每个扇形区的占比
        rate = ((x)*(brank_top10['交易指数'].sum()))/(brank_data['交易指数'].sum())
        return f'{np.round(rate,2)}%'
    
    plt.pie(x=brank_top10['交易指数'], autopct=test_func, 
            colors=sns.color_palette('husl'), labels=brank_top10['流量来源'].values)
    plt.axis('equal')
    plt.title(brank)
plt.show()

​
png
​

6.舆情分析

root = 'data/竞争数据/评论舆情数据/'

comment_df = pd.DataFrame()
for file in os.listdir(root):
    file_path = os.path.join(root, file)
    df = pd.read_excel(file_path, sheet_name='初步筛选')
    comment_df = pd.concat((comment_df, df), sort=False, ignore_index=True)
comment_data = comment_df[['产品名称', '评论']].copy()
brank_map = {
    '日本安速小强恢恢蟑螂屋纸盒子捕捉器药灭杀强力家用贴克星全窝端':'安速', 
    '德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端':'拜耳',
    '蟑螂药一窝端蟑螂屋胶饵灭蟑螂无毒厨房家用强力杀蟑螂克星全窝端':'科凌'
}
comment_data['产品名称'].unique()
array(['日本安速小强恢恢蟑螂屋纸盒子捕捉器药灭杀强力家用贴克星全窝端', '德国拜耳拜灭士蟑螂药一窝端杀蟑胶饵灭蟑螂屋无毒克星家用全窝端',
       '蟑螂药一窝端蟑螂屋胶饵灭蟑螂无毒厨房家用强力杀蟑螂克星全窝端'], dtype=object)
comment_data['产品名称'] = comment_data['产品名称'].map(brank_map)
comment_data
产品名称 评论
0 安速 真没想到家里竟有这么多,昨晚上放的,今天早起都还在动,沙发底下,床底下,厨房几乎都是十几二十...
1 安速 效果还不错,每个盒子里都有蟑螂,感觉还不错,之前买过别的牌子,蟑螂都不怎么往里进,这次比以前...
2 安速 物流速度快,蟑螂基本上没有了,以前天天看到蟑螂到处爬,放了一个礼拜效果不错,放上去蟑螂自己就...
3 安速 家里蟑螂太多了,用这个实在很好,不怕污染,一次放上几个,很有效果,密密麻麻,成就感十足。过瘾...
4 安速 物流很快,晚上下单,隔天就到了。东西非常非常非常非常好用,我们一家都满意得不能再满意啦,屋子...
... ... ...
3864 科凌 这个太好用了,我用来才来评价的,又来拍两盒,马上用马上见效
3865 科凌 刚用的第一个星期有效果,过了之后又看到蟑螂了
3866 科凌 比实体店划算多了
3867 科凌 物流很快,很划算,还没用,等用完了评效果
3868 科凌 谢谢您店家

3869 rows × 2 columns

6.1加载停用词

stop_words = pd.read_table('data/百度停用词表.txt', header=None)[0].values

6.2品牌数据提取

import wordcloud
import jieba
from sklearn.feature_extraction.text import CountVectorizer


# 封装展示一个品牌数据的方法
def show_brank_words(brank_name):
    # 品牌数据提取
    ansu = comment_data.loc[comment_data['产品名称'] == brank_name, '评论']
    comment = ' '.join(ansu.values)

#     ## 计算出词的个数
    comment_words = ""
    for word in jieba.cut(comment):
        if word not in stop_words:
            comment_words = comment_words + ' ' + word


    cv = CountVectorizer()
    matrix = cv.fit_transform([comment_words])

    words = cv.get_feature_names()
    count = matrix.toarray()[0]
    words_count = pd.Series(data=count, index=words)
    words_top200 = words_count.sort_values(ascending=False)[:200]



    plt.figure(figsize=(12, 8))
    wc_image = wordcloud.WordCloud(font_path='data/SimHei.ttf',width=800, height=400,background_color='white',
                                   colormap=plt.cm.summer)

    wc_image.generate_from_frequencies(words_top200)
    
    plt.imshow(wc_image)
    plt.title(brank_name)
    plt.show
for brank_name in comment_data['产品名称'].unique():
    show_brank_words(brank_name)

​
png
​

png
png