实训日记十三: Python文本数据挖掘-part4

竞争分析

依据之前的top100品牌数据,分析市场份额前三的商家:拜耳,科凌虫控,安速
分析流程:

  1. 人群画像分析:三个品牌的人群特征基本一致(这里省略)。
  2. 品类分布:依据各个商家产品类别和适用对象的分布,理解每个品牌的产品分布情况(横向发展还是纵向发展)。
  3. 产品结构:依据波士顿矩阵,分析各品牌不同产品的结构特征,为产品发展策略提供依据。
  4. 流量结构:通过流量结构和流量效果的对比,制定推广策略。
  5. 产品舆情:优质产品维稳。

品类分布-产品类别

1、使用商品销售数据(导入数据)

os.chdir('../竞争数据/商品销售数据')
filename2 = glob.glob('*.xlsx')
filename2 
df3 = pd.read_excel(filename2[2])
df3.head(1) 

在这里插入图片描述
2、数据清洗

# 删除无用特征
def load_xlsx_title(filename):
    df = pd.read_excel(filename)
    unless = ['序号','店铺名称','商品名称','主图链接','商品链接']
    df.drop(columns=unless,inplace=True)
    return df

结果如下:

  • 安速
    在这里插入图片描述

  • 拜耳
    在这里插入图片描述

  • 科凌虫控
    在这里插入图片描述

  • 分析各家的产品类别的分布
    将三家公司的数据根据类目分类,绘制饼图

#饼图  [0,1,2]
fig,axes = plt.subplots(1,3,figsize=(10,6)) 
ax = axes[0] #第一个拜耳
bai31['销售额'].plot.pie(autopct='%.f',title='拜耳',startangle=30,ax=ax)
ax.set_ylabel('')
ax = axes[1] #第二个安速
an31['30天销售额'].plot.pie(autopct='%.f',title='安速',startangle=60,ax=ax)
ax.set_ylabel('')
ax = axes[2] #第三个科凌虫控
kl31['30天销售额'].plot.pie(autopct='%.f',title='科凌虫控',startangle=90,ax=ax)
ax.set_ylabel('')
plt.show()

在这里插入图片描述
可见拜耳只有一个市场,其他的有不同市场,但主要市场都是灭鼠杀虫剂。

品类分布-适用对象

  • 对三家公司数据以适用对象进行分类
bai32 = df3bai.groupby('使用对象').sum()
an32 = df3an.groupby('适用对象').sum()
kl32 = df3kl.groupby('适用对象').sum()
  • 分析各家的适用对象的分布
#饼图  [0,1,2]
fig,axes = plt.subplots(1,3,figsize=(10,6)) 
ax = axes[0] #第一个拜耳
bai32['销售额'].plot.pie(autopct='%.f',title='拜耳',startangle=30,ax=ax)
ax.set_ylabel('')
ax = axes[1] #第二个安速
an32['30天销售额'].plot.pie(autopct='%.f',title='安速',startangle=60,ax=ax)
ax.set_ylabel('')
ax = axes[2] #第三个科凌虫控
kl32['30天销售额'].plot.pie(autopct='%.f',title='科凌虫控',startangle=90,ax=ax)
ax.set_ylabel('')
plt.show()

绘制饼图结果如下:
在这里插入图片描述
可见:1、拜耳的主要对象是蟑螂,而另外两家除此之外还有螨,鼠。
2、而从之前的分析看灭鼠和蟑螂的整体市场份额都大。
3、应该开拓新市场,尤其是灭鼠,也考察其他两家都开拓的螨市场。

产品结构-拜耳

  • 使用商品交易数据,每个竞争者分开分析,先分析拜耳的数据。
  • 5个月的数据,每个商品最多5个月都在卖,至少有1个月,所以需要对商品分类汇总。
#自定义分类汇总函数
def byproduct(df):
    dfb = df.groupby('商品').mean().loc[:,['交易增长幅度']] #交易增长幅度做均值
    dfb['交易金额'] = df.groupby('商品').sum()['交易金额']
    dfb['交易金额占比'] = dfb['交易金额']/dfb['交易金额'].sum()
    dfb['商品个数'] = df.groupby('商品').count()['交易金额'] 
    dfb.reset_index(inplace= True)
    return dfb

结果如下:
在这里插入图片描述

其中交易增长幅度可表示市场发展率,交易金额占比可表示市场份额
这两个指标的最大值都远大于3/4分位数,认为是异常值,考虑引入盖帽法,方便作图处理具体如下:

def block(x):#盖帽法:用于限制极端值对数据分析结果的影响
    qu = x.quantile(.9)
    out = x.mask(x>qu,qu) #当大于90%分位数的进行替换
    return(out)
def block2(df):
    df1 = df.copy()
    df1['交易增长幅度'] = block(df1['交易增长幅度']) #使用盖帽法进行替换交易增长幅度
    df1['交易金额占比'] = block(df1['交易金额占比']) #使用盖帽法进行替换交易增长幅度
    return df1
bai41 = block2(bai4)
bai41.describe(percentiles=[0.1,0.9,0.99])

处理结果如下:
在这里插入图片描述

拜耳-BCG图

点的大小为商品个数,以中位数作为波士顿矩阵的分隔线,拜耳的BCG图如下:

# mean True  均值
# mean  False  中位数来分割(0.33 0.33)
def plotBOG(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) #索引标注相对于x轴右移
    if mean:
        plt.axvline(df['交易金额占比'].mean())#垂线
        plt.axhline(df['交易增长幅度'].mean())#水平线
    else:
        plt.axvline(df['交易金额占比'].quantile(q1))#垂线
        plt.axhline(df['交易增长幅度'].quantile(q2))#水平线
    plt.show()
        

绘图结果为;
在这里插入图片描述
结论:我们可以根据实际的业务选择区间的分隔线,由行业经验确定(例如认为增幅0.1在行业里算高,就可以作为分隔线)

从图可以看出:明星产品和奶牛产品的商品个数普遍比较多。

没有突出的明星产品,但是有快进入明星产品的问题产品。

拜耳-明星

查看各个产品结构的产品(除了瘦狗),各种产品排序,关心点不同,排序依据不同。

  • 明星产品:都关心,依什么排序都可以,产品一般不多
  • 奶牛产品:老爆款,关心市场份额,依交易金额占比排序
  • 问题产品,潜力款,关心市场增长率,依交易增长幅度排序
    这里要查看实际数据,故使用盖帽前数据,拜耳明星产品如下:
def extractBOG(df,q1=0.5,q2=0.5,by='交易金额占比'):
    # 明星产品
    star = df.loc[(df['交易金额占比'] >= df['交易金额占比'].quantile(q1))#交易金额大于0.5
          & (df['交易增长幅度'] >= df['交易增长幅度'].quantile(q2)),:] #交易增长幅度大于0.5
    star = star.sort_values(by,ascending=False)
    # 爆款产品
    cow = df.loc[(df['交易金额占比'] >= df['交易金额占比'].quantile(q1))#交易金额大于0.5
          & (df['交易增长幅度'] < df['交易增长幅度'].quantile(q2)),:] #交易增长幅度小于0.5
    cow = cow.sort_values(by,ascending=False)
    # 问题产品
    que = df.loc[(df['交易金额占比'] < df['交易金额占比'].quantile(q1))#交易金额小于0.5
          & (df['交易增长幅度'] >= df['交易增长幅度'].quantile(q2)),:] #交易增长幅度大于0.5
    que = que.sort_values(by,ascending=False)
    
    return star,cow,que

得到拜耳-明星商品:
在这里插入图片描述
主要是除蟑和杀虫,但是占比不大,增幅一般。

拜耳-奶牛

在这里插入图片描述
可见占比最高的是除蟑,灭虫也占一部分,占比一般。

拜耳-问题

在这里插入图片描述
结论: 可见大部分仍然是灭蟑和杀虫 · 交易增长幅度最大的是灭鼠,而之前描述过灭鼠有最高的市场份额,可以作为下一步着 力点 · 总结:拜耳大部分产品集中在除蟑上,杀虫也有一定的规模,但是明星产品略乏力,可以 进一步发展问题产品灭鼠为明星产品

产品结构分析-安速

安速-BCG图

与拜耳数据处理方法一致,直接分析BCG图
在这里插入图片描述
可见奶牛产品足,明星产品部分有前途,问题产品部分有潜力,瘦狗产品不多。

安速-明星

在这里插入图片描述
杀虫和除蟑表现都不错

安速-奶牛

在这里插入图片描述
主要是除蟑,和拜耳产生竞争。

安速-问题

在这里插入图片描述
前几款是灭蟑,除螨,杀虫,都有发展空间。
总结:安速没有明显的灭鼠市场;拜耳和安速比较:拜耳杀虫是老爆款,灭蟑存在一定竞争

结构分析-科凌虫控

科凌虫控-BCG图

在这里插入图片描述
可见奶牛产品足,明星产品少,大部分竞争力强,问题产品部分有潜力,瘦狗产品少。

科凌虫控-明星

在这里插入图片描述
主要是灭鼠,除螨和杀虫。

科凌虫控-奶牛

在这里插入图片描述
主要是除蟑,有很小部分灭虫和灭鼠。

科凌虫控-问题

在这里插入图片描述
有较大潜力的是除螨

总结 科凌虫控积极发展多个产品,然而每个产品结构相对独立(奶牛除蟑,明星灭鼠,潜力除螨),没有后续的支持,竞争力不是那么强。

竞争分析-流量结构-业务逻辑

目前的流量主要由三大块构成:免费流量,付费流量和自主访问

  • 一般的店铺占比是30%,10-15%,50-60%
  • 免费流量中,搜索流量占60%,即搜索流量只占总流量的30%-40% ·
  • 付费流量没有特定的比例,合理的值是一般不超过40%(正常销售时期),如果此类目利 润率高竞争激烈,占比80%也有可能
  • 看店铺付费流量比例是否健康,应该看广告费用在全店销售额的占比.一般控制在10% 左右.(同样的广告费用占比,降低CPC(点击成本),付费流量占比会上升)
  • 付费流量带动免费流量的前提:1.引来的流量是否适合你的店铺和宝贝;2.引流量要达 到一定的数量;3.宝贝适合市场
  • 增加免费流量:一般是以小爆款带动,而这个时代小爆款层出不穷,一般建议主推两三 个宝贝,辅推三五个宝贝,合理安排推广预算占比
  • 好的流量结构:1.合理的产品结构;2.宝贝标题(搜索流量的入口)的关键词布局;3.适当 的付费广告占比;4.尽可能提升流量入口数量;5.参考同行的流量结构

流量结构-拜耳

1、获取流量数据,只取交易指数排名前十的流量渠道

# 只取交易指数排名前十的流量渠道
df0 = df5bai
top10 = df0.sort_values('交易指数',ascending=False).reset_index(drop=True).iloc[:10,:]
#计算交易指数占比,交易指数是销售额的反映
top10['交易指数占比'] = top10['交易指数']/top10['交易指数'].sum()
top10.set_index('流量来源',inplace=True)
top10

2、自定义函数-流量结构说明:

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 = ['付费流量','直通车','淘宝客']
    ind = np.any([top10.index == i for i in paid],axis=0) #true 为付费的
    explode = ind * 0.1 #相当于往外爆0.1的距离
    
    ax = top10['交易指数占比'].plot.pie(autopct='%.1f%%',
                            figsize=(8,8),colormap='cool',explode = explode)
    
    ax.set_ylabel('')
    plt.show()
    
    #输出占比:总交易指数、付费流量占比、付费流量带来的交易指数
    salesum = top10['交易指数'].sum() #总交易指数
    paidsum = top10['交易指数占比'][ind].sum() #付费流量占比
    paidsale = salesum * paidsum #付费流量带来的交易指数
    print(f'前十流量中:总交易指数:{salesum:.0f};付费流量占比:{paidsum*100:.2f}%;付费流量带来的交易指数:{paidsale:.0f}')
    
    return top10

结果如下:
在这里插入图片描述

流量结构-安速

与拜耳数据处理一致,得到结果如下:
在这里插入图片描述
可见拜耳和安速的流量配比是差不多的,安速的整体流量小很多,即流量效果拜耳明显优于安速。

流量结构-科凌虫控

在这里插入图片描述
和拜耳在流量上差不多,科凌虫控付费占比较高 可见拜耳在流量结构上是有优势的,要保持这个优势。

舆情分析-文本挖掘基本流程

使用的数据是评论数据,即文本数据 · 文本数据的分析过程主要有:清洗,可视化,建模.这里针对中文文本

  • 清洗基本流程:1.替换非中英文字符为空格;2.分词(结巴jieba);3.去掉停用词(对描 述和建模无意义的词);4.筛选高频词.此流程需要反复尝试对比效果
  • 可视化:一般都是词云,可能配合关键词排序等
  • 建模:建模前需要将数据转成文档词矩阵(dtm);有监督的话常用的是贝叶斯,其他 偏精度的算法也可以,要注意特征个数;无监督常用的是主题模型LDA,其他诸如 分群,情感分析也可以 · 清洗流程中,尤其是口语化较强的数据,例如评论数据,需要去除重复语句,以及字数少 于某个阈值的评论.

1、导入数据后进行清理
非中英文字符的不要、在分词前逗号、句号不要。

bai61 = [re.sub(r'[^a-z\u4E00-\u9Fa5]+',' ',i,
                flags=re.I) for i in bai6]#中文字符  \u4E00-\u9Fa5  flags=re.I 不区分大小写

2、接着我们来去掉停用词(百度的停用词库)。不过在此之前,我们得先分一下词,这里我们用的分词工具是jieba分词。先来看一下jieba的使用:

jieba.lcut('真心坑人啊 还没到 小时就凝固了 小强依然活跃')

3、接下来正式进行分词

# 先读取停用词
# 原始字符串
stopwords = list(pd.read_csv(r'C:\Users\Lenovo\data\百度停用词表.txt',names=['stopwords'])['stopwords'])
 bai62 = []
for i in bai61:
    #对每条评论分析
    seg1 = pd.Series(jieba.lcut(i))
    ind1 = pd.Series([len(j) for j in seg1])>1 #长度大于1的保留   
    seg2 = seg1[ind1]
    #去掉停用词 isin
    ind2 = ~seg2.isin(pd.Series(stopwords))
    seg3 = list(seg2[ind2].unique())#去重一下
    if len(seg3)>0:
        bai62.append(seg3)

4、词频统计

#词频统计
baifreq = pd.Series(bai63).value_counts()

baifreq[:10]  # 看下前10个词

5、生成词云

#最后一个步骤,调用WordCloud模块生成词云
#读取照片
mask = imageio.imread(r"C:\Users\Lenovo\data\leaf.jpg")
#如果是中文的词云---字体
font = r"C:\Users\Lenovo\data\simhei.ttf"

wc = WordCloud(background_color='white',mask=mask,font_path=font).generate(bai64)
plt.figure(figsize=(8,8))
plt.imshow(wc)
plt.axis('off')#不要坐标轴
plt.show()

在这里插入图片描述
6、关键词提取

w = pd.DataFrame(jieba.analyse.extract_tags(bai64,20,True),columns=['关键词','重要度比重'])
w

结果如下:
在这里插入图片描述
不管从词云还是关键词来看,评价偏好评,没有明显问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值