查看原文
其他

Python 爬取李子柒辣椒酱 1794 条数据,有人嫌牛肉粒太小...... | 原力计划

程序人生 2020-02-24

The following article comes from 数据不吹牛 Author 小Z


作者 | 小Z
责编 | 胡巍巍
出品 | CSDN博客
是的,这是一篇分析李子柒辣椒酱的文章。
本文会从一个具体的评价分析场景切入,按步分析,力求还原分析的每个环节。相关案例数据和代码可空降文末获取。
最近收到不少留言,问笔者最多的竟然是:
“我是偏运营/业务分析的,复杂的分析算法我不会,还有什么方法能够对评价类数据做更深入分析吗?”
刚开始我会昧着良心回复“词云啊!”
然鹅总是会被DISS“词云太简单了吧,有点Low!”
我狰狞一笑,虽然这个问题有点像“我长的不帅也没钱,有没有什么办法能够追到白富美”。但从数据分析的角度来看,仍不失为一个好问题。
好在哪里呢?在回答之前,先瞧一个数据分析常见思维误区:
一些同学总是认为,分析不出来有价值的结果,是因为有两只拦路虎,一是数据量和维度不够,二是因为自己不会复杂的分析模型和算法。然后,也没有再去思考,如何基于现状更进一步地分析问题。
数据维度和算法的价值当然不言而喻,但总是把分析不出结果和价值的锅甩出去,这种归错于外的思维非常危险,它营造了一种“分析不出结果,我也没办法”的心安理得。
而“我不会高阶分析工具和方法,但基于现状,去思考或者询问有没有更好的分析方式”,虽然这种思维也有槽点,但本身算是一种在现阶段尝试去解决问题的思路。
So,我们循着后一种思路,以李子柒在天猫上卖的一款辣椒酱评价为例:
看看基于现有的“单薄”数据维度,怎样让分析再向前迈进一步。

明确目标

鲁迅曾经没说过:“明确分析目标,你的分析已经成功了一大半”。
做深入分析之前,面对这一堆评价数据,我们要明确,究竟想通过分析来解决什么问题?只有明确分析目标,才能把发散的思维聚焦起来。
为了给大家一个明确的分析锚点,假设我们是这款辣椒酱的产品负责人,要基于评价,更好的获悉消费者对产品的看法,从而为后续产品优化提供思路。
所以,我们的分析目标是“基于评价反馈,量化消费者感知,指导优化产品”。
注:这里给到的一个假设目标并不完美,主要是抛砖引玉,大家可以从不同的维度来提出目标假设,尝试不同分析方向。
是不是有那么一丢丢分析思路了?别急,目标还需要继续拆解。

拆解目标

这些年来,最有价值的一个字,便是“拆”了:在数据分析中也是同理。
我们在上一步已经确定了“基于评价优化产品”的目标,但这只是一个笼统模糊的目标。要让目标真正可落地,“拆”是必不可少的一步。
“拆”的艺术大体可以分为两步,第一步是换位思考。
评价来源于客户,客户对产品有哪些方面的感知呢?我们可以闭上眼睛,幻想自己购买了这款辣椒酱。
接着进入第二步,基于换位的逻辑拆解,这里可以按照模拟购物流程的逻辑来拆解:
首先,李子柒本身有非常强的IP光环,大家在选购时或多或少是慕名而来。所以,在购买决策时,到底有多大比例是冲着李子柒来的?
Next,在没收到货前,影响体验的肯定是物流,付款到收货用了几天?派送员态度怎么样,送货上门了吗?
收到货后,使用之前,体感最强的则是包装。外包装有没有破损?有没有变形?产品包装是精致还是粗糙?
接下来是产品体验,拿辣椒酱来说,日期是否新鲜?牛肉用户是否喜欢?到底好不好吃?
吃完之后,我们建立起了对产品的立体感知——性价比。我花钱买这个产品到底值不值?这个价位是贵了还是便宜?实惠不实惠?
品牌、物流、包装、产品(日期、口味)和性价比五大天王锋芒初现,我们下一步需要量化消费者对于每个方面的感知。

Python实现

对于评价的拆解和量化,这里介绍一种简单粗暴的方式,按标点把整条评论拆分成零散的模块,再设置一系列预置词来遍历。
注:再次强调我们这篇内容的主题是“如何基于最基础的技术,做进一步的分析,这里假设我们只会最基础的Python语法和Pandas。
有同学会问“为什么不用分词”!此问可谓正中我怀。不过,我把这个问题当作开放式思考题留给大家——如果用分词,如何实现同样的效果,以及有什么优缺点?
言归正传,我们先看看实战爬取的评论数据,一共1794条:
把每条评论按照标点拆分成短句,为了省事,用了简单的正则拆分:
我们发现,就算是比较长段的评论,也只是涉及到品牌、物流、包装、产品和性价比的部分方面,所以,我们依次去遍历匹配,看短句中有没有相关的内容,没有就跳过,有的话再判断具体情绪。
以物流为例,当短句中出现“物流”、“快递”、“配送”、“取货”等关键词,大体可以判定这个短句和物流相关。
接着,再在短句中寻找代表情绪的词汇,正面的像“快”、“不错”、“棒”、“满意”、“迅速”;负面的“慢”、“龟速”、“暴力”、“差”等。
在我们预设词的基础上进行两次遍历匹配,大体可以判断这句话是不是和物流相关,以及客户对物流的看法是正面还是负面:
为方便理解,用了灰常丑陋的语法来一对一实现判断。包装、产品和性价比等其他模块的判断,也是沿用上述逻辑,只是在预设词上有所差异,部分代码如下:
def judge_comment(df,result):

    judges = pd.DataFrame(np.zeros(13 * len(df)).reshape(len(df),13),
                      columns = ['品牌','物流正面','物流负面','包装正面','包装负面','原料正面',
                                 '原料负面','口感正面','口感负面','日期正面','日期负面',
                                 '性价比正面','性价比负面'])

    for i in range(len(result)):
        words = result[i]
        for word in words:
            #李子柒的产品具有强IP属性,基本都是正面评价,这里不统计情绪,只统计提及次数
            if '李子柒' in word or '子柒' in word or '小柒' in word or '李子七' in word\
                or '小七' in word:
                    judges.iloc[i]['品牌'] = 1

            #先判断是不是物流相关的
            if '物流' in word or '快递' in word or '配送' in word or '取货' in word:
                #再判断是正面还是负面情感
                if '好' in word or '不错' in word or '棒' in word or '满意' in word or '迅速' in word:
                    judges.iloc[i]['物流正面'] = 1
                elif '慢' in word or '龟速' in word or '暴力' in word or '差' in word:
                    judges.iloc[i]['物流负面'] = 1

            #判断是否包装相关
            if '包装' in word or '盒子' in word or '袋子' in word or '外观' in word:
                if '高端' in word or '大气' in word or '还行' in word or '完整' in word or '好' in word or\
                   '严实' in word or '紧' in word:
                    judges.iloc[i]['包装正面'] = 1
                elif  '破' in word or '破损' in word or '瘪' in word or '简陋' in word:
                    judges.iloc[i]['包装负面'] = 1

            #产品
            #产品原料是牛肉为主,且评价大多会提到牛肉,因此我们把这个单独拎出来分析
            if '肉' in word:
                if '大' in word or '多' in word or '足' in word or '香' in word or '才' in word:
                    judges.iloc[i]['原料正面'] = 1
                elif '小' in word or '少' in word or '没' in word:
                    judges.iloc[i]['原料负面'] = 1

            #口感的情绪
            if '口味' in word or '味道' in word or '口感' in word or '吃起来' in word:
                if '不错' in word or '好' in word or '棒' in word or '鲜' in word or\
                    '可以' in word or '喜欢' in word or '符合' in word:
                    judges.iloc[i]['口感正面'] = 1
                elif '不好' in word or '不行' in word or '不鲜' in word or\
                    '太烂' in word:
                    judges.iloc[i]['口感负面'] = 1

            #口感方面,有些是不需要出现前置词,消费者直接评价好吃难吃的,例如:
            if '难吃' in word or '不好吃' in word:
                judges.iloc[i]['口感负面'] = 1
            elif '好吃' in word or '香' in word:
                judges.iloc[i]['口感正面'] = 1

            #日期是不是新鲜
            if '日期' in word or '时间' in word or '保质期' in word:
                if '新鲜' in word:
                    judges.iloc[i]['日期正面'] = 1
                elif '久' in word or '长' in word:
                    judges.iloc[i]['日期负面'] = 1
            elif '过期' in word:
                judges.iloc[i]['日期负面'] = 1

            #性价比
            if '划算' in word or '便宜' in word or '赚了' in word or '囤货' in word or '超值' in word or \
                '太值' in word or '物美价廉' in word or '实惠' in word or '性价比高' in word or '不贵' in word: 
                judges.iloc[i]['性价比正面'] = 1
            elif  '贵' in word or '不值' in word or '亏了' in word or '不划算' in word or '不便宜' in word:
                judges.iloc[i]['性价比负面'] = 1

    final_result = pd.concat([df,judges],axis = 1)

    return final_result

运行一下,结果毕现:

第一条评价,很明显的说快递暴力,对应“物流负面”计了一分。
第二条评价,全面夸赞,提到了品牌,和正面的物流、口感信息。
第三条评价,粉丝表白,先说品牌,再夸口感。
看起来还不赖,下面我们对结果数据展开分析。

结果分析

我们先对结果做个汇总:
一共爬了1794条评论,评论中有提及到我们关注点的有1937次(之所以用次,是因为一条评论中可能涉及到多个方面)。粗略一瞥,口感和原料占比较高,画个图更细致的看看。
看来,辣椒酱的口感(好不好吃)是客户最最最关注的点,没有之一,占比高达57.98%,领先其他类别N个身位。
慢随其后的,是原料、品牌、性价比和包装,而物流和日期则鲜有提及,消费者貌似不太关注,或者说目前基本满足要求。
那不同类别正负面评价占比是怎么样的呢?
整体来看,主流评论以好评为主,其中口感、品牌(这个地方其实没有细分)、包装以正面评价占绝对主导。
原料和性价比,负面评价占比分别是14%和38%,而物流和日期由于本身占比太少,参考性不强。
作为一个分析师,我们从原料、性价比负面评价占比中看到了深挖的机会。
原料负面评价是单纯的在吐槽原材料吗?
初步筛选之后,发现事情并没有那么简单。
原料负面评价共出现了53次,但里面有24次给了口感正面的评价,甚至还有8次原料正面评价!罗生门吗?
这8次即正面又负面的原料评价,其实是揭了我们在预置词方面的不严谨,前面判断牛肉相关的短句,“小”就是负面,“大”就是正面,有些绝对。
而判断准确的原料差评中,虽然有一半说味道不错,但还是不留情面的吐槽了牛肉粒之小,之少,甚至还有因此觉得被骗。
如何让牛肉粒在体感上获取更多的好评,是应该在产品传播层做期望控制的宣导?还是在产品层增加牛肉的“肉感”?需要结合具体业务进一步探究。
性价比呢?
性价比相关负面评价共58次,负面情绪占性价比相关的38%。这些负面评价消费者大多数认为价格偏贵,不划算,还有一部分提到了通过直播渠道购买价格相对便宜,但日常价格难以接受。
坦白讲,这款辣酱的价格在线上确实属于高端价位,而价格体系是一个比较复杂的场景,这里暂不展开分析。
但是对于这部分认为性价比不符预期的客户,是应该因此反推产品价格,还是把他们打上“价格敏感的标签”,等大促活动唤醒收割,这是两条可以考虑并推进的道路。
物流和日期提及太少,不具备参考性,但为了不那么虎头蛇尾,我们还是顺手看一眼物流负面评价:
果然,物流是一项必备需求,基本满足预期的话消费者并不会主动提及,没达预期则大概率会雷霆震怒。而物流暴力、速度太慢是两个永恒的槽点。
至此,我们基于看起来简单的评价数据,用简单浅白的方式,做了细致的拆分,并通过拆分更进一步的量化和分析,向深渊,哦不,向深入迈进了那么一丢丢。

 总结

文中涉及到的代码,主要是抛砖引玉,大家还可以结合实际,做更精细的梳理和判断。在整个分析过程中,去思考如何更深入的分析,如何明确分析方向,如何通过换位思考和流程拆解,把大目标拆成可以分析的小目标,并最终落地,则需要在实践中反复磨练,与君共勉!
原文链接:https://blog.csdn.net/weixin_38754337/article/details/103867289?ops_request_misc=%7B

热 文 推 荐

在家办公,我比上班还累你信吗?

亏了?面试时薪资我要一万,HR 只给八千!

小米回应 50 亿疫情贷款申请;爱奇艺 App 崩溃;OpenSSH 8.2 发布 | 极客头条

Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了!| 博文精选

2019年度区块链安全复盘总结

AI芯片发展的前世今生


你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存