项目背景&产品架构
- 客户需求:拜耳官方旗舰店寻求市场增长点
- 产品架构:
数据说明
- “驱虫剂市场”文件
- 子文件:top100品牌数据、灭鼠杀虫剂、电蚊香套装、盘香灭蟑香蚊香盘、蚊香加热器、蚊香液、蚊香片、防霉防蛀片
- 灭鼠杀虫剂细分市场
- 子文件:杀虫、灭鼠、虱子、螨、蟑螂
- 竞争数据
- 子文件:商品销售数据、商品交易数据、流量渠道数据、评论舆情数据
1 驱虫市场的潜力分析
1、分析整个市场的总体趋势2、分析各子类目市场占比及变化趋势3、分析市场集中度,即是否存在垄断
导包
import glob
import os
import pandas as pd
import numpy as np
import re
import datetime as dt
from sklearn.linear_model import LinearRegression
import seaborn as sns;sns.set()
from matplotlib import pyplot as plt
import jieba
import jieba.analyse
import imageio
from wordcloud import WordCloud
from snownlp import SnowNLP
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif']='simhei'
plt.rcParams['axes.unicode_minus']=False
加载并清洗数据
filenames = glob.glob('*近三年交易额.xlsx')
filenames
def load_file(filename):colname = re.search(r'.*(?=市场)',filename).group()df = pd.read_excel(filename)if df['时间'].dtypes == 'int64': # 可能存在的时间数据杂乱清洗df['时间'] = pd.to_datetime(df['时间'],unit='D',origin=pd.Timestamp('1899-12-30'))df.rename(columns={df.columns[1]:colname},inplace=True)df = df.set_index('时间')return df
dfs = [load_file(i) for i in filenames]
df = pd.concat(dfs,axis=1).reset_index()
df.head()
线性回归补全2018年11、12月数据,便于年维度分析
这里假设:1、各月之间没有明显的周期性变化;2、每年对应月份的数据呈线性变化。
month = df['时间'].dt.month # 提取月份便于索引
for i in [11,12]: dm = df[month == i]xtrain = np.array(dm['时间'].dt.year).reshape(-1,1)ytest = [pd.datetime(2018,i,1)] #测试y第一列为日期for j in range(1,len(dm.columns)):ytrain = np.array(dm.iloc[:,j]).reshape(-1,1)lm = LinearRegression().fit(xtrain,ytrain) #2015、16、17数据训练yhat = lm.predict(np.array([2018]).reshape(-1,1))ytest.append(round(yhat[0][0],2)) #对应列的预测值附在新增加的行后newrow = pd.DataFrame([dict(zip(df.columns,ytest))]) #给预测结果赋值对应的列名df = newrow.append(df)
df
1.1 市场变化趋势描述
# 分组求和,看整个市场交易额逐年变化趋势
byyear = df.groupby('年份').sum(axis=1).reset_index()
byyear
# 绘图
sns.relplot('年份','合计',kind='line',marker='o',data=byyear)
plt.title('近三年驱虫市场趋势',fontsize=16)
plt.xticks(byyear.年份)
plt.xlabel('年份')
plt.yticks(byyear.合计)
plt.ylabel('总交易额')
plt.show()
总趋势:驱虫市场整体处于增长趋势,上升期。
1.2 近三年各子类目市场交易额分析
1.2.1各子类目市场趋势
可见:灭鼠杀虫剂份额大,增长高。
1.2.2 灭鼠杀虫剂市场近三年的增长趋势
1.2.3 各子类目市场交易额占比
可见:每年占比情况变化不大,灭鼠杀虫剂和蚊香液市场大。
1.2.4 各子类目市场年增幅情况
# 计算年增幅
byyear_p = byyear.iloc[:,1:-1]
byyear_diff = byyear_p.diff().iloc[1:,:].reset_index(drop=True)/byyear_p.iloc[:2,:]
byyear_diff.index = ['16-17','17-18']
byyear_diff
可见:
1、电蚊香套装进入负增长,该领域不可进;
2、较稳定增长领域:灭鼠杀虫剂;
3、考虑蚊香加热器产品寿命长,且总交易额较低,占比较低,市场小,故主要考虑灭鼠杀虫剂市场。
1.3 市场集中度描述
采用赫芬达尔指数(Herfindahl-Hirschman Index,缩写HHI)
df1 = pd.read_excel('top100品牌数据.xlsx')
df1
# 生成交易指数占比列,用以描述市场份额
df1['交易指数占比'] = df1['交易指数']/df1['交易指数'].sum()
# 计算HHI指数
HHI = sum(df1['交易指数占比']**2)
print(f'驱虫市场HHI指数:{HHI:.6f}(或{HHI*10000:.2f}),等效公司数:{1/HHI:.2f}')
可见:该市场存在一定竞争,但不存在垄断。
2 灭鼠杀虫剂市场机会点分析
1、最受欢迎的产品类型
2、重点产品细分价格段分析
3、细分市场其它属性分析
加载并清洗数据
os.listdir('../灭鼠杀虫剂细分市场')
os.chdir('../灭鼠杀虫剂细分市场')
filenames1 = glob.glob('*.xlsx')
dfs1 = [pd.read_excel(i) for i in filenames1]
df2 = pd.concat(dfs1,sort=False)
df2.info()
缺失值
df2.isnull().mean()
删除列
1、NA > 98%
2、单一值
3、逻辑上可删:- 如果我有新数据,新数据里会不会有这个x,会有则留下,没有则删去- 链接等没用的列
4、类ID列- 名字- 分类多,每类频次太少,预测能力差
# 空值占比大于98%,删除
df20 = df2.loc[:,~ind1]
# 药品登记号之后的文号列作用不大且空值占比依旧较大,删除
ind11 = df20.columns.get_loc('药品登记号')
df20 = df20.iloc[:,:ind11]
# 特征值单一,删除
ind2 = np.array([len(df20[i].unique())==1 for i in df20.columns])
df21 = df20.loc[:,~ind2]
# 删除逻辑上不可能用到的列
useless = ['时间','页码','链接','主图链接','主图视频链接','排名','运费','下架时间','旺旺'] #目标:寻找增长点,新数据中没有排名信息,故删除
df22 = df21.drop(columns=useless)
df22.isnull().mean()
2.1 产品类别分布
可见:最受欢迎的是灭鼠类产品,市场占比最大,高达38%,需要重点研究。
2.2 灭鼠产品分析
2.2.1 不同价格区间的产品分布
# 对价格分箱进一步观察
bins = [0,50,100,150,200,250,300,500]
labels = ['0-50','50-100','100-150','150-200','200-250','250-300','300以上']
df24['价格区间'] = pd.cut(df24['售价'],bins,labels=labels,include_lowest=True)
df24['价格区间'].value_counts()
2.2.2 计算各价格区间的关键指标
销售额
销售额占比
宝贝数
宝贝数占比
相对竞争度(1-归一化['单宝贝销售额'])
def bykey(df,by,sort='销售额占比'):byk = pd.DataFrame(df.groupby(by).sum()).loc[:,['预估销售额']]byk['销售额占比'] = byk['预估销售额']/byk['预估销售额'].sum()byk['宝贝数'] = df.groupby(by).nunique()['宝贝ID']byk['宝贝数占比'] = byk['宝贝数']/byk['宝贝数'].sum()byk['单宝贝平均销售额'] = byk['预估销售额']/byk['宝贝数']byk['相对竞争度'] = 1-(byk['单宝贝平均销售额']-byk['单宝贝平均销售额'].min())/(byk['单宝贝平均销售额'].max()-byk['单宝贝平均销售额'].min())if sort:byk.sort_values(sort,ascending=False,inplace=True)return byk
byprice = bykey(df24,'价格区间')
byprice
# 绘图观察
def plot_m(bydf):'''绘图函数'''sns.set(font='SimHei',style='white')y1 = bydf['销售额占比']y2 = bydf['相对竞争度']x = bydf.index.tolist()fig = plt.figure(figsize=(10,6))# 柱形图ax1 = fig.add_subplot(111)ax1.set_ylim([0,1]) ax1.bar(x, y1, alpha=0.7,color='g')ax1.set_ylabel('销售额占比',fontsize='14')ax1.tick_params(labelsize=15)for i,(_x, _y) in enumerate(zip(x, y1)):plt.text(_x, _y,f'{_y*100:.2f}%',color='black', fontsize=20, ha='center', va='bottom') plt.xlabel('价格区间')# 折线图ax2 = ax1.twinx() ax2.set_ylim([-0.1,1.1])ax2.plot(x, y2, 'b', ms=10, lw=3, marker='o')ax2.set_ylabel(u'相对竞争度', fontsize='14')sns.despine(left=True, bottom=True) ax2.tick_params(labelsize=15)ax2.legend(loc='upper right')plt.show()
可见:
1、0-50是大容量市场,虽然竞争大,但这么大的蛋糕能参与还是要参与。
2、200-250,竞争小,做高价市场的优先选择,属于机会点,可发展轻奢产品。
2.2.3 0-50细分价格市场分析
可见:10-20相对竞争度低,容量大,优选,20-30也不错。
2.2.4 细分市场的其它属性分析
2.2.4.1 店铺类型
可见:天猫各个方面都优于淘宝。
2.2.4.2 型号
# 筛选出排名前5%的型号,更倾向于大众的产品
bytype1 = bytype[bytype['预估销售额']>=bytype['预估销售额'].quantile(0.95)]
可见:虽然粘鼠板市场份额普遍较高,但是0005在竞争度上有明显的优势。
2.2.4.3 物理形态、净含量
可见:常见物理形态是固体,竞争度也偏高,而胶水虽然竞争度低,但是市场份额较低。
可见:当物理形态为固体,净含量为1时,潜力较大。
3 竞争分析
-
对比市场份额前三的拜耳、安速、科凌虫控,挖掘拜耳市场增长策略
1、产品分布情况2、产品结构特征(BCG矩阵)及发展策略3、流量结构及推广策略4、舆情评论及情感分析(拜耳公司)
os.listdir('../竞争数据')
3.1 品类分布(占比)
3.1.1 类目
an31 = df3an.groupby('类目').sum()
an31
bai31 = df3bai.groupby('类目').sum()
bai31
kl31 = df3kl.groupby('类目').sum()
kl31
可见:拜耳只有一个市场,竞争对手则有不同市场,但主要市场都是灭鼠杀虫剂。
3.1.2 适用对象
可见:
1、拜耳的主要对象是蟑螂,而另外两家除此之外还有螨,鼠。
2、从之前的分析看灭鼠和蟑螂的整体市场份额都大,所以对拜耳公司而言,应开拓新市场,尤其是灭鼠,也应考察其他两家都开拓的螨市场。
3.2 产品结构分析
# 函数1:关键指标
def byproduct(df):'''定义关键指标函数'''dfb = df.groupby('商品').mean().loc[:,['交易增长幅度']] #DataFramedfb['交易金额'] = df.groupby('商品').sum()['交易金额'] #Seriesdfb['交易金额占比'] = dfb['交易金额']/dfb['交易金额'].sum()dfb['商品个数'] = df.groupby('商品').count()['交易金额']dfb.reset_index(inplace=True)return dfb
# 函数2:盖帽法处理异常值
def block(x):'''盖帽函数用90%的值替换最大值'''get = x.quantile(0.9)out = x.mask(x>get,get)return(out)def block1(df):df1 = df.copy()df1['交易增长幅度']=block(df1['交易增长幅度'])df1['交易金额占比']=block(df1['交易金额占比'])return df1
# 函数3:绘制波士顿矩阵图
def plotBCG(df,mean=False,q1=0.5,q2=0.5):f,ax = plt.subplots(figsize=(10,8))ax = sns.scatterplot('交易金额占比','交易增长幅度',hue='商品个数',size='商品个数',sizes=(20,200),palette='cool',legend='full',data=df)for i in range(0,len(df)):ax.text(df['交易金额占比'][i]+0.001,df['交易增长幅度'][i],i)if mean: # 均值线plt.axvline(df['交易金额占比'].mean())plt.axhline(df['交易增长幅度'].mean())else:plt.axvline(df['交易金额占比'].quantile(q1))plt.axhline(df['交易增长幅度'].quantile(q2))plt.show()
# 函数4:根据BCG矩阵,抽取明星、奶牛、问题产品
def extractBCG(df,q1=0.5,q2=0.5,by='交易金额占比'):'''从原始数据中,抽取明星产品、奶牛产品、问题产品'''# 明星产品star = df.loc[(df['交易金额占比']>=df['交易金额占比'].quantile(q1)) & (df['交易增长幅度']>=df['交易增长幅度'].quantile(q2)),:]star = star.sort_values(by,ascending=False)# 奶牛产品:关心市场份额,依交易金额占比排序cow = df.loc[(df['交易金额占比']>=df['交易金额占比'].quantile(q1)) & (df['交易增长幅度']<df['交易增长幅度'].quantile(q2)),:]cow = cow.sort_values(by,ascending=False)# 问题产品:关心市场增长率,依交易增长幅度排序que = df.loc[(df['交易金额占比']<df['交易金额占比'].quantile(q1)) & (df['交易增长幅度']>=df['交易增长幅度'].quantile(q2)),:]que = que.sort_values(by,ascending=False)return star,cow,que
3.2.1 拜耳
可见:
1、问题产品中的潜力款和奶牛产品的商品个数普遍比较多。
2、突出的明星产品不足,但是有快进入明星产品的问题产品。
baistar,baicow = extractBOG(bai4)[:2]
baique = extractBOG(bai4,by='交易增长幅度')[-1]
总结:拜耳大部分产品集中在除蟑上,杀虫也有一定的规模,但是明星产品略乏力,可以进一步发展问题产品灭鼠为明星产品。
3.2.2 安速
可见:奶牛产品足,明星产品部分有前途,问题产品部分有潜力,瘦狗产品不多。
总结:安速没有明显的灭鼠市场,同拜耳在灭蟑方面存在竞争。因此拜耳更应率先发展起灭鼠市场,在新市场增长点建立先发优势。
3.2.3 科凌虫控
可见:奶牛产品足,明星产品少,大部分有前途,问题产品部分有潜力,瘦狗产品少。
总结:科凌虫控每个产品结构相对独立(奶牛除蟑,明星灭鼠,潜力除螨),缺少后续的支持。拜耳若决定进驻灭鼠市场,应仔细研究科凌虫控在灭鼠市场的产品表现,做好准备。
3.3 流量结构分析
-
抽取交易指数排名前10的流量渠道分析
好的流量结构:1、合理的产品结构;2、适当的付费广告占比(一般不超过40%);3、尽可能提升流量入口数量;4、参考同行流量结构
# 自定义流量结构及说明函数
def flow(df):'''流量结构及说明函数'''df0 = df.copy()top10 = df0.sort_values('交易指数',ascending=False).reset_index(drop=True).iloc[:10,:] top10['交易指数占比'] = top10['交易指数']/top10['交易指数'].sum() top10.set_index('流量来源',inplace=True)paid = ['付费流量','直通车','淘宝客','淘宝联盟'] #查得4个付费流量渠道ind = np.any([top10.index == i for i in paid],axis=0) explode = ind * 0.1 ax = top10['交易指数占比'].plot.pie(autopct='%.2f%%',figsize=(5,5),explode=explode)ax.set_ylabel('')plt.show()paidsum = top10['交易指数占比'][ind].sum()salesum = top10['交易指数'].sum() paidsale = salesum * paidsumprint(f'前10流量中:\
总交易指数:{salesum:.0f},付费流量占比:{paidsum*100:.2f}%,付费流量带来交易指数:{paidsale:.0f}') return top10
3.3.1 拜耳
bai5top10 = flow(df5bai)
3.3.2 安速
an5top10 = flow(df5an)
3.3.3 科凌虫控
kl5top10 = flow(df5kl)
可见:付费流量占比三家无较大差异,但拜耳付费流量带来的交易指数占比最高,流量结构较为优秀,应继续维护。
3.4 舆情评论及情感分析
3.4.1 分析过程
1、文本数据清洗
(1)去非中英文(英文应变小写)
(2)分词(jieba/stemming--自定义词典--搜狗词库)
(3)去停用词
(4)去低频词
2、可视化:词云
3、建模:
(1)转化为文档词矩阵(DTM)
(2)有监督:贝叶斯
(3)无监督:LDA、分群、情感分析
# 分词函数
def w_cut(df):df_new = []for i in df:seg0 = pd.Series(jieba.lcut(i))ind3 = pd.Series([len(j) for j in seg0])>1 #筛选出长度大于1的词seg1 = seg0[ind3]ind31 = ~seg1.isin(pd.Series(stopwords)) #去停用词并去重seg2 = list(seg1[ind31].unique())if len(seg2)>0: #去空列表df_new.append(seg2)return df_new
3.4.2 评论词云图
# 绘制词云图函数
def word_cloud(df):mask = imageio.imread(r"D:\CDA课件\10月30日 项目1:电商文本挖掘\data\leaf.jpg")font = r'C:\Windows\Fonts\simkai.ttf' wc = WordCloud(background_color='white',mask=mask,font_path=font).generate(df)plt.figure(figsize=(6,8))plt.imshow(wc)plt.axis('off')plt.show()
word_cloud(bai64)
3.4.3 关键词提取
w = pd.DataFrame(jieba.analyse.extract_tags(bai64,20,True),columns=['关键词','重要度比重'])
w
可见:从词云和关键词来看,舆论评价偏好。
3.4.4 情感分析
# 情感评分函数
def senti(df):sc = []for i in df.评论:s = SnowNLP(str(i))sc.append(s.sentiments)df['情感评分']=screturn df
可见:与竞争品牌相比,拜耳产品的买家评分还较低,可以考虑在产品和售后方面进一步挖掘改进。
3.4.5 挖掘较差评分
s_bai = s_bai.sort_values('情感评分')
bad = s_bai.iloc[:100]['评论']
bad
可见:差评反映了使用效果欠佳、客服存在不周、快递较慢等问题,应结合实际业务进行考察改进。
4 拜耳市场增长点分析结论
4.1 驱虫市场方面:
1、整体市场处于快速增长阶段。
2、灭鼠杀虫剂市场份额大(高于60%),约占第二名蚊香液市场的2倍,且市场增长率接近40%,可认为是明星产品类目,需重点投资和关注。
3、驱虫市场不存在垄断,竞争相对激烈,尚无明显来自大公司的压力。
4.2 灭鼠杀虫剂市场机会点:
1、该市场中,需重点关注的产品类别是:灭鼠和蟑螂。
2、灭鼠方面:
- 最大的市场集中在0-50价格区间内,但该价格段竞争也很激烈。
- 200-250价格区间的市场份额占10%左右,竞争度很低,是值得挖掘的高价市场。
3、灭鼠0-50价格段的产品市场中:
- 10-20价格段市场容量大,竞争度低,值得进一步开发,20-30也不错。
- 店铺类型方面天猫明显优于淘宝。
- 市场份额高的型号是黏鼠板,而型号0005市场份额还行,竞争度较低,值得研究。
- 固态是普遍被大众认可的产品形态。
- 物理形态为固态,净含量是1时,市场份额高竞争度相对较低,值得开发。
4.3 竞争分析方面:
1、产品分布上:
- 可以继续专精于灭鼠杀虫剂市场,但在产品的适用对象方面,灭鼠应当是开拓新市场的增长点。
- 就竞争对手参与都较大的螨虫市场(约30%),结合螨类产品16.17%的市场占比,也应当准备参与。
2、产品结构上:
- 主要集中在除蟑,杀虫也有一定的规模,但是明星产品略乏力。
- 作为问题产品的灭鼠类,交易增幅已然最大且远超第二名,应加大投资,将其推成明星产品。
- 作为竞争对手的安速尚未大力发展灭鼠产品,可抢占先机。但科凌虫控已经在此领域有一定规模,应仔细研究科其在灭鼠市场的产品表现,做好准备。
3、流量结构上:较为优秀,应继续维护。
4、舆情及情感分析上:
- 整体偏好,但在买家评论的评分上与竞争对手相比偏消极。
- 消极评论主要集中在使用效果、客服表现和快递较慢的问题上,应结合业务进一步考察改进。
4.4 核心概括:
1、大力发展灭鼠产品,10-20、20-30、200-250的价格段产品是机会点,店铺优选天猫、型号优选黏鼠板,产品形态优选固态,做好对科凌虫控在灭鼠市场的产品研究。
2、适当发布消螨产品,拓宽产品发展线。
3、考察、改进在产品效果、客服表现和物流系统方面的潜在不足。