数据挖掘实用案例分析: 第7章 海底捞火锅运营分析(决策树,spss)

您所在的位置:网站首页 火锅管理运营大全 数据挖掘实用案例分析: 第7章 海底捞火锅运营分析(决策树,spss)

数据挖掘实用案例分析: 第7章 海底捞火锅运营分析(决策树,spss)

2024-07-17 20:33:27| 来源: 网络整理| 查看: 265

第7章 海底捞火锅运营分析

随着社会的不断发展,人们的生活水平不断提高,去餐馆吃饭已经从过去的奢侈享受变成了现在的家常便饭,各种新的餐馆、饭店也如雨后春笋般不断涌现,饮食行业竞争愈发激烈,并且越来越呈现出白热化的趋势。

自20世纪80年代中期起,火锅企业开拓创新发展,尤其是近几年来,火锅业的迅猛发展引起全社会的关注。其中,火锅老字号企业焕发新春,再塑辉煌。新型火锅企业锐意进取,异军突起。火锅企业的连锁经营步伐逐渐加快,连锁店网点数量不断增加,连锁经营的区域也日益拓展,企业规模和实力不断增强,知名品牌不断涌现。

行业的快速发展也带来许多问题,火锅菜品加工工艺相对简单,非常容易复制。市场上只要出现一款畅销的菜品,很快各个店都竞相模仿,导致目前火锅行业菜品单一化现象严重,没有在原料和工艺上对菜品进行创新。由于进入火锅行业的门槛较低,对从业人员的要求并不高,随之而来的是从业人员整体素质相对落后,没有过硬的专业技术,服务理念、经营管理理念、复合管理能力欠佳,从而影响了整个行业的服务水平。大量的新店不断涌现,其中不乏盲目跟风者,导致惨淡经营,给火锅业造成负担,同时也使得火锅店之间的竞争日趋激烈。

在企业的众多经营活动中,每天都会产生大量的数据,这些看似毫无关联的数据,往往具有深层次的紧密关系,对企业的经营和发展策略的决策都会有十分重要的作用和意义。随着大数据时代的来临,数据分析已经成为企业的经营管理者极重视的一项活动。数据分析可以对客观情况进行正确的反映,对企业经营管理过程中产生的数据进行监督,能够有效地改善企业进行各项活动的决策。本章以海底捞火锅店(北京北太平庄牡丹园店)为例进行数据分析。分析饭店的相关数据,同时与同行竞争对手做比较,为饭店的未来发展以及营销提出建议。

7.1 火锅相关数据抓取

利用Python脚本作为数据抓取工具。BeautifulSoup库(可以通过pip下载)提供找到HTML中标签的方法,利用标签得到标签下的文本信息或者标签的属性信息,抓取海底捞(牡丹园店)的数据,使用脚本为again.py。为了在抓取的过程中使脚本更像是人为的操作,而不是爬虫在工作,需要设置好请求头(Request Header)中的参数。

这里设置了很多备用参数,在使用过程中随机换备用参数,可以适当地提高在IP被封禁之前抓取的数据量。在“大众点评”的一条用户评论中可以根据分析的需要,抓取多项数据,如图7.1所示。这些数据包括用户昵称,用户的贡献值,用户对这次用餐的总评分(平均评分),用户对这次用餐的口味、环境、服务的评价,用户的评论内容,用户的用餐时间(评论时间),用户这条评论收到的点赞数等。

图7.1 抓取页面内容

根据这些数据在HTML页面中的标签信息编写代码,利用find、find_all方法找标签,其中第一个参数是标签的名称,第二个参数是标签的属性值,find方法是找到符合筛选条件的第一个标签,而find_all方法是找到符合筛选条件的所有标签的一个数组。寻找用户昵称标签,然后将标签内的文本内容添加到事先定义好的name数组中。star中存储的是用户的贡献值。用户的贡献值在网页中以标签属性的形式存在,通过span的class名来反映。time、score、environment、serve、taste、comment、zan依次是存储时间、总分、环境、服务、口味、评论、点赞数的数组。

把抓取的数据存储到数组后,利用Python读写Excel的库将数据存入Excel表。将Excel的对应表格的值设置为对应的已抓取数据。

接着抓取用户喜欢的菜的数据,这个数据也位于用户评论的页面中,将这项数据与其他数据分开抓取,是因为喜欢的菜这项内容属于选填项,而且有很大一部分用户不去填写喜欢的菜,如果与其他的数据一同抓取,会导致出现较多的数据空白。采集的页面如图7.2所示,采集数据有昵称、时间、喜欢的菜等。

查看页面源代码,发现需要抓取数据的标签及其属性。在脚本运行的过程中不仅仅是要抓取一个页面中的内容,而是要抓取很多结构与标签相似的页面内容,因此写一个循环,自动访问页面的下一页,一种方法是根据页面中的标签文本内容得到下一页面的URL,也可以在写代码时将URL直接输入。

图7.2 采集的页面

7.2 数据预处理

将脚本抓取的数据在Excel中打开,如图7.3所示。

图7.3 脚本抓取的数据

可见,原始数据很粗糙,缺少列名称,同时冗余数据和残缺数据都较多,因此进行下列处理。

首先添加列名称:在第一行对数据添加类别说明,分别为“评价均分”“口味评分”“服务评分”“环境评分”“用户贡献值”“评价日期”“用户昵称”“评价内容”“评价点赞数”;去重处理:全选,单击“数据”-“删除重复项”。得到的数据如图7.4所示。

删除无用数据,评论与评分的分析仅需要与评分有关的前4列和“评价内容”,所以保留上述列,删除其余列。复制一份删除后的表格文件,对复制后的文件,删除评分相关的4列,然后将文件另存为comments.txt文件,该txt文件即为所有的评论内容。

将数据导入SPSS Modeler 18.0,单击“插入”→“源”→Excel,选择文件类型和导入文件。因为这里不需要“用户昵称”“评论内容”和“评价点赞数”等字段,所以单击“过滤”,过滤这3个字段。最后单击“确定”按钮,如图7.5所示。

可通过单击“插入”→“输出”→“表”,并运行该表查看导入的数据,如图7.6所示。

图7.4 Excel初步预处理后的数据

图7.5 设置Excel“源”

图7.6 使用SPSS导入后的数据

从图7.6中可以看出,“评价均分”的格式为“irr-star∗0”,其中“∗”为实际的数值,所以需要将这个数值提取出来。而“口味评分”“服务评分”和“环境评分”的数据虽然不是数值型,但是数据含义明显且已经离散成5类,所以不必进行处理。“用户贡献值”的数据与“评价均分”类似,需要将最后的数值提取出来。而对于“评价日期”,元素数据是离散到每一天,这样离散程度太高了。考虑到一般商家是按照月度进行考核,可以将其处理成以月份为单位。

单击“插入”→“字段选项”→“导出”,将“导出字段”设为“评价月份”,需要将原始数据中的评价日期处理为以月份为单位,这里舍弃了部分数据格式不符合规范的数据,并将其处理成—1。在“公式”栏中输入“if(length(评价日期)==5)then substring_between(1,2,评价日期)elseif(length(评价日期)==8)then substring_between(4,5,评价日期)else"—1"endif”,单击“确定”按钮,如图7.7所示。

图7.7 数值化“评价月份”

同样,可以添加“表”来查看字段。将“评价均分”和“用户贡献值”改为数字形式。分别添加“导出”节点,设置“导出字段”和“公式”为“评价均分(数字)”“substring_between(9,9,评价均分)”;“用户贡献值(数字)”“allbutfirst(8,用户贡献值)”。

继续添加“过滤”节点,已经不需要“评价均分”“用户贡献值”和“评价日期”3个字段了,将其过滤。添加“表”节点,查看现在的数据,如图7.8所示。

对菜品内容做预处理,用到的文件为前面抓取到的菜品内容。“爬虫”抓取的原始数据如图7.9所示。

将C列包含菜名的数据复制并粘贴到新的Excel表格中,选择导出为txt文本文件,重命名为meal.txt。将该txt文件中所有的空白部分替换为单个空格。下面用Python脚本处理该txt,代码如下所示。

图7.8 处理后的评分数据

图7.9 “爬虫”抓取的原始数据

上段代码读取meal.txt中的菜品名,并统计每种菜品出现的次数。最终输出为word. txt,如图7.10所示,展示了推荐数比较多的一些菜品。

这里的数据预处理利用到前面的word.txt和“菜品.xlsx”,用Python实现。选取推荐数大于10的菜进行关联分析,将每一个菜名设置为新的表格列名称。

图7.10 推荐数较多的菜品

读取抓取的“菜品.xlsx”中的每一个用户的推荐菜,若列名称中的菜出现在该用户的推荐菜中,则将对应的单元格设为1,否则设为0。

处理后的meal.xls如图7.11所示。

图7.11 处理后的推荐菜品统计

7.3 数据分析7.3.1 海底捞运营分析

为了能够深入地了解海底捞店铺的经营情况,分析影响该店生意的关键因素,并且通过和其他店铺对比得出海底捞的优势和劣势。首先将处理过的有关海底捞(牡丹园店)的数据导入Watson,提出问题“What drives总分?”,结果如图7.12所示。

与预期的一致,口味、环境、服务是3个主要的影响因素。首先分析口味这一最主要因素的影响。在Watson中输入“口味and总分”可以看到一些可以提问的问题的提示,选择问题“How does the number of Rows compare by口味and总分?”,得到图7.13所示的结果。

图7.13反映出在口味为4的评价中,绝大部分的顾客都给出了5分或者4分的总评分数,所以口味对于一家火锅店而言是至关重要的。此时引入时间维度,首先考虑时间维度与口味的关系。“What are the number of each口味and时间?”,如图7.14所示。

从图7.14看到,明显的事实是2014年的顾客要明显多于2015年与2016年的顾客,这里反映出了这家火锅店存在的问题(接下来会加以分析,此处继续分析口味与时间关系),可以为开设分店以及制定新的策略提供参考。首先通过统计2013年以及2012年的顾客人数发现2014年的人数并不是突然的井喷,而是延续着2012年以及2013年的销量,所以分析2014—2016年这段时间是什么导致了该店的销量下降。在“大众点评”上有商家信息的北京海淀区北太平庄地段共有火锅店48家,在2014年之后出现的店铺共有32家,其中井格老灶、四川老巷子、宽板凳老灶火锅、沸炉火锅这些店的销量较突出。在这个案例中,由于只是抓取网站上的数据,所以不能获得真实销量的数据,以一段时间内的总评论数为依据,假设销量是与总评论数正相关的,从而推测出各个火锅店销量的情况。

图7.12 影响海底捞生意的因素

图7.13 口味以及总分对应数量图

图7.14 口味以及时间对应数量图

共抓取20家店的数据,图7.15是各店建店以来的平均月评论数(这20家店名依次为井格老灶、全香阳坊、口福居、四川老巷子、大得涮肉、宽板凳老灶、小牛海记、小码头、欢乐牧场、池记串吧、沸炉火锅、海底捞、牡丹园涮肉、玉林串串香、老门框、芦月轩、蒸汽石锅鱼、虾吃虾涮、雪中鲜渔村、黔道贵州)。

图7.15 各店自建店以来平均月评论数

其中,海底捞、沸炉火锅两家店的平均月评论数明显多于其他店铺,而图7.16显示了各店2016年的总评论数。

图7.16 各店2016年的总评论数

可以很明显地看到小牛海记在2016年的总评论数遥遥领先,而海底捞店的总评论数虽然位居第二位,但与一些其他火锅店(如四川老巷子、黔道贵州等)的差距却并不大。再结合之前海底捞2014年的评论数与2015年和2016年的对比可以发现,海底捞(牡丹园店)的竞争力已经大不如前,且正处在一个下降期。也就是说,从总的顾客数量来讲,在这个地段并没有显著减少。只不过,海底捞(牡丹园店)的一部分顾客被其他的该地段火锅店瓜分了。如果考虑再开设一家新的火锅店,一定要选在一个火锅店铺相对不那么密集的地段,以减少竞争,同时又要兼顾到交通、人流量等因素,确保有一定的消费人群。

7.3.2 店铺选址分析

为了避免火锅业盲目跟风现象的出现,如果海底捞想要开设新的分店,需要考虑上面提到的交通、人流量、竞争以及自身的因素,为了更好地分析和选择开店位置,可以抓取海淀区的其他行政区的店铺信息以及一些热门行政区的店铺信息。因为需要规避开其他的海底捞火锅店,所以抓取的都是尚未开设海底捞火锅店的区域中前三位的店铺信息。抓取得到的数据处理后如图7.17所示。

图7.17 各区域前三位的店铺信息

将数据导入Watson analytics,数据评分接近90%,为优良数据。因为2016年总评论数最能反映店铺在2016年的火爆程度,所以提出问题“What drives 2016年总评论数”,得到图7.18。

图7.18 对于各店铺而言2016年总评论数的影响因素

对于火锅店来说,最关键的影响因素是服务和所在区域,其次是总评论数(对应这家店积累的口碑与顾客资源)、环境和口味,至于能否进行团购,是否配送外卖以及人均消费金额,这些并不是影响一家店受欢迎程度的主要因素。因此,分析2016年总评论数和所在区域的关系,提出问题“What are the values of 2016年总评论数for each所在区域”,得到结果,如图7.19所示。

图7.19 反映各区域人流量的总评论数图

从图7.19中可以看出,双井、五棵松以及魏公村是2016年生意最好的区域,其次是大钟寺、中关村、知春路、五道口等区域。那么,为了获取更多的客源,优先分析生意最好的区域。图7.20是双井区域口味、环境、服务和人均消费与2016年总评论数的关系。

通过这些数据可以推测,双井这个区域中口味、环境、服务,尤其是人均消费适中的店反而是最受欢迎的,海底捞的服务的优势很难发挥,并且可以看到双井这里抓取的代表性的店铺的2016年总评论数是比较接近的,也就是说,竞争相对激烈,所以双井并不适合海底捞开设新的分店。

类似地,可以分析魏公村和五棵松区域。可以看到,在魏公村区域存在着一家生意火爆的火锅店——重八牛府,其他火锅店竞争不过这家火锅店,而且这家店的口味、服务以及环境都在9分以上,人均消费对销量的影响并不大,虽然海底捞可能会在与这家店的竞争中处于下风,但重八牛府与其他火锅店之间差距最大的地方是服务,也就是说,海底捞的优势有发挥之处,而且该地区的人流量有一定的保证,所以可以考虑在魏公村建设分店。五棵松区域中影响最大的因素是人均消费,而海底捞处于一个不占优势的人均消费区间,其次的因素是服务与环境,海底捞的环境因素也不占优势,服务因素占优势,这样的区域也不是很适合海底捞开设新的分店店铺。

再根据区域与服务的关系分析,如图7.21所示。

因为这两个因素是影响最大的因素,同时海底捞的优势也在于服务,所以根据这幅图进一步分析。魏公村、西三旗、知春路、五道口、中关村中服务因素可以对销量有明显影响,比较适合海底捞这种服务方面有优势的店铺,再加上之前的对人流量较大的区域的分析,推荐在魏公村开设新的店铺。

作为一家火锅店,为了能够获取更多的利润,就需要得到更多的客户。一般来说,对于饮食行业来说,菜品口味是衡量店铺是否受欢迎的关键因素,所以可以结合大众点评网站上给出的推荐菜做出关于菜品的营销建议。

图7.20 双井区域口味、环境、服务和人均消费与2016年总评论数的关系

图7.21 各区域、服务与2016年总评论数的关系

如图7.22所示,根据预处理得到的word.txt以及大众点评的推荐菜找到受欢迎程度较低的菜,包括简阳鱼、金针菇、香蕉酥、猪脑、牛肉丸、简州鱼、拉面以及未上榜的菜品。这些菜不那么受欢迎可能是因为这些菜不适用于火锅这种烹饪方式,也可能是因为本店的对应菜品进货源不够好,导致菜品质量存在一些问题,所以菜品没有达到应该有的受欢迎程度,还有其他的可能性,为了进一步了解,可以分析竞争对手店中的顾客喜欢的菜的情况(主要是考虑两家店中相同的菜的受欢迎程度)。此处抓取主要竞争对手之一——小牛海记潮汕牛肉店(牡丹园店)的喜欢的菜的数据,处理之后如图7.23所示。

图7.22 菜品及受欢迎程度

同样要结合大众点评网站上给出的推荐菜情况。对比分析,发现金针菇以及年糕、米糕、香蕉酥这些点心类的食物的受欢迎程度在这两家店都相对较低,所以可以考虑适当减少这些种类菜品的储备量,还可以看到牛肉丸在小牛海记潮汕牛肉店的受欢迎程度要好于在海底捞火锅店的受欢迎程度,所以有可能是小牛海记潮汕牛肉店的货源更好一些,也有可能是这家店的牛肉丸调味处理的方式更美味。为了深入分析,在小牛海记潮汕牛肉店的推荐菜中单击后弹出的推荐评论页面中抓取有关牛肉丸的推荐的评论。

图7.23 小牛海记潮汕牛肉店菜品受欢迎情况

抓取小牛海记潮汕牛肉店的有关牛肉丸推荐的评论使用的脚本与之前使用的抓取数据的脚本类似,只需要根据网页的具体的URL以及页面标签对代码做出部分修改。根据抓取到的内容提取词频,绘制标签云图如图7.24所示。

图7.24 小牛海记潮汕牛肉店评论标签云图

首先,可以忽略牛肉、肉丸这两个不能够展示顾客感受的词汇,之后发现潮汕火锅、锅底、味道、口感这几个词的词频较高,可以据此推测,这家店的牛肉丸和店内的一些锅底十分搭配,而且牛肉丸的味道和口感都很好,海底捞如果也想让自己店内的牛肉丸更受欢迎,可以考虑增加与之配套的锅底,也可以考虑引进口感更好的牛肉丸。

此外,还可以看到在海底捞店中,简州鱼以及简阳鱼相对不那么受欢迎,反观小牛海记潮汕牛肉店中最受欢迎的就是梭边鱼,那么海底捞也可以考虑更换店内鱼类的品种,例如将简州鱼换成梭边鱼。从菜品的角度出发,还可以考虑菜品之间的相关性,分析各种菜品之间的相关性,从而更好地做出菜品推荐。

7.4 菜品关联分析

根据大众点评网站上用户填写的喜欢菜的信息进行菜品关联分析,如图7.25所示。

图7.25 大众点评网站截图

菜品关联分析的目的是找到用户的推荐菜之间的关系。在抓取的数据中,每个用户的每个推荐菜都分布在一个单元格中,没有统一的列名称,这样的数据导入SPSS Modeler后,会因为没有统一列名称而无法进行分析。需要将所有的菜品统计成为列名称,并看每一个用户的推荐菜是否出现在列名称中,若出现,则设为1,反之设为0。

对数据进一步预处理利用到前面的word.txt和“菜品.xlsx”,用Python实现。选取推荐数大于10的菜进行关联分析,将每个菜名设置为新的表格的列名称,并读取抓取的“菜品.xlsx”中的每一用户的推荐菜,若列名称中的菜出现在该用户的推荐菜中,则将对应的单元格设为1,否则设为0。

处理后的meal.xls如图7.26所示。

图7.26 Excel离散化后的数据

然后将该表格导入SPSS Modeler 18.0,单击“插入”→“源”→Excel,选择文件类型和导入文件。设置数据类型为“分类”,这里只有“0”和“1”两种值,所以也可以设为“标志”。添加“类型”节点,这里需要比较所有字段间的关系,所以将所有字段的角色都设为“任意”,如图7.27所示。

图7.27 设置“类型”节点

单击“插入”→“建模”→Apriori,设置Apriori节点中的“最低条件支持度”为5.0,“最小规则置信度”为10.0,单击“运行”得到结果模型。双击模型查看,如图7.28所示。按照“支持度”排序,“支持度”指含有前后项的记录在总体中的占比,可以看出推荐菜的排名。“滑牛肉”“海底捞牛肉”和“一根面”最受欢迎。其次选择按照“规则支持”排序,“规则支持”指的是前项和后项同时出现的记录在总体的占比。这里商家可以针对那些经常一起出现的菜,设置一些菜的套餐,例如,可以推出“滑牛肉”“海底捞牛肉”和“一根面”3个菜的组合菜,因为3个菜中任意两个都高频地同时出现。也可以推出“滑牛肉”和“鸭血”的组合菜,因为这两个同时出现的概率达到18.628%。商家同样可以根据“规则支持”和“置信度”的排序进行菜品的相关推荐。例如,在用户点了“柠檬水”但未点“滑牛肉”的时候,可以显示“点了柠檬水的用户有58.781%也点了滑牛肉”;在点了“海底捞笋片”而未点“滑牛肉”的时候,可以显示“有57.993%的用户还点了滑牛肉”。通过在用户点菜的时候进行关联推荐,增加相关菜品的销售量。

根据建模的结果,将相同的前项综合在一起,进一步进行数据预处理。单击建模结果中的“将模型复制到剪贴板”,粘贴到result.txt,将所有空白区域替换为单个空格,然后利用Python处理该文本文件,将相同前项的所有后项聚集在一起,结果保存到word1.txt中。代码如下:

图7.28 菜品关联挖掘结果

处理的部分结果如图7.29所示。“->”左边是前项,后边是后项集合。后项集合中每一项为一个后项,包括了后项的名称和置信度。商家可以根据这个整理后的数据,直接在用户选择某一个菜品的时候,出现所有与之相关的其他菜品。

网站上提供的可供用户填写的“喜欢的菜”这个模块能够为菜品的推荐提供一些数据,此外,还可以从用户正面评论中获取关于用户喜欢的菜的数据。对评论数据做一些处理,分析的菜品包括一些受欢迎程度较高的菜品。

图7.29 后项聚集数据

all_food=['虾滑','一根面','滑牛肉','海底捞牛肉','鸭肠','嫩牛肉','毛肚','柠檬水','抻面','海底捞笋片','鱼片','午餐肉','豆花','豆浆','鸭血','牛肉丸','捞面','猪脑','猪蹄','番茄锅底','羊肉丸','鲜虾滑','肥牛','金针菇','小料','鱼豆腐','豆皮','简阳鱼','黄喉','肥肠','手切羊肉','竹荪','海底捞小料','冻豆腐','鸭舌','墨鱼滑','豌豆尖','免费水果','千层肚','小吃','鸳鸯锅','牛蛙','蒿子秆']

所使用的评论为抓取到的全部评论。首先从这些评论中为每个菜品找到有关的评论。判断评论是否符合标准的规则为:如果某条评论中提到了某种菜品,则将该条评论视为菜品的相关评论,添加到菜品的评论列表中,之后再写入文件。具体代码如下:

然后将得到的各自菜品对应的评论分别存储在一个txt文件中,利用结巴分词对得到的评论做分词处理。结巴分词是一个Python中文分词组件,支持3种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。同时还支持自定义词库。使用结巴分词需要先安装对应的库,安装指令为pip install jieba或pip3 install jieba,代码对于Python2/3是兼容的。之后利用其中的分词的方法做分词以及词频统计,并且存储到菜品各自对应的文件中。具体代码如下(jiebaD.py):

jieba.cut方法为分词的方法,此处选择的是全模式,jieba.add_word方法为自定义词库向词典中添加词条的方法,这里把菜品的词汇一一添入,此外还可以统计各词汇所占的权重,代码如下(jiebaE.py)。其中,jieba.analyse.extract_tags()方法提取出比重在前50的词汇,并且输出对应的占比情况到各个菜品的对应文件。

通过词频统计以及词汇、词频占比分析之前根据喜欢的菜所得到的菜品关联情况,在点了海底捞牛肉的情况下,滑牛肉出现11次,占比为24.5%,位列第一位,虾滑出现7次,占比为1.56%,位列第三位;在点了滑牛肉的情况下,海底捞牛肉出现11次,占比为2%,位列第十位,虾滑出现66次,占比为12.2%,位列第一位,鸭血出现33次,占比为6%,位列第二位,柠檬水出现22次,占比为4%,位列第四位;在点了虾滑的情况下,滑牛肉出现66次,占比为5%,位列第一位(上述所述位列第几位为词频占比在所有菜品词频占比中的排名,之所以菜品词频占比不高,是因为有海底捞,好吃,不错等与菜品无关词汇占比较高)。

通过上述统计可以发现,通过“喜欢的菜”以及评论做出的菜品关联大致是吻合的,所以基于评论中反映的情况,依据在点了菜品1的情况下,对于菜品2的购买量这一指标设计并实现一个推荐算法,可以根据顾客输入的菜品推荐1~3个菜品。首先在命令行输入:python recommend.py,回车后程序运行,该推荐程序的具体操作流程如“Demo程序”,如图7.30所示。

具体代码实现(recommend.py)如下:

其中的菜品和文件夹下存储的菜品是有关分词后词汇、词频占比的文件,作为推荐程序的数据支持。

除了菜品、口味,还有很多其他的影响因素影响着店铺的生意情况,为了能够进一步分析,充分利用评论中的文本内容,分析评分与评论之间存在的关联,根据评论中的内容做出更好的营销建议。

7.5 用户评论与评分的关联分析

开源的分词库“结巴分词”(https://github.com/fxsjy/jieba),对评论内容comments. txt(预处理后得到的文件)进行关键词提取。进行关键词提取用到了基于TF-IDF算法的关键词抽取,TF-IDF算法可以评估某个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。算法函数为jieba.analyse.extract_tags(sentence,topK=20,withWeight= False,allowPOS=())。函数的接口参数中,topK为返回几个TF/IDF权重最大的关键词,设置为1000;withWeight为是否一并返回关键词权重值,这里设置为True。allowPOS仅包括指定词性的词,这里设置为('n' 't' 's' 'f' 'v' 'a' 'b' 'z' 'm' 'q' 'x')。这里过滤掉了介词、连词、助词、叹词、代词、副词、语气词、前后缀与标点符号,保留了名词、形容词等11种词性。

大致浏览本店评论后,结合上文的高推荐菜品名,添加一部分自定义语料库,如“抻面”“一根面”这样的食材,“棋牌”“游乐场”这样的设施。最终具体的代码如下,结果保存到commentsWord.txt中。

提取后的结果如图7.31所示,每一行为关键词及其权重。

由于这样出现的结果,部分词语如“不错”“好吃”“味道”等,在实际分析的时候由于谓语或其他成分的缺失没有实用价值,所以须手动将这部分词语删除,大致删除部分词语后保留了600个关键词。同时需要对提取的关键词进行分组。

图7.31 提取后的结果

这里首先尝试用知识图谱的方式实现词语的自动分组。目前可用的中文知识图谱有DBpedia、BabelNet、ConceptNet、楚辞、OpenKG.CN和CN-DBpedia等几种。这里涉及大量火锅食材名,以很常见的食材名“抻面”“虾滑”和常用服务名“外卖”“半份”作为测试词汇,在上述几个知识图谱工具中进行测试,发现大部分工具的语料库都不能提取到分类名。最后选择了工具CN(-?)DBpedia(http://kw.fudan.edu.cn/cndbpedia/intro/),该工具支持RESTful式的API调用。使用该工具对前文提取的关键词进行分类。Python实现的代码如下。

最终提取的部分结果如图7.32所示。

知识图谱提取的结果具有一定的参考价值,但是限于当前中文语料库和语义网的不完整,很多分类并不能自动提取出来。并且由于在分析一些词语的时候带有了主观意识,所以该部分的词语也不能正确提取,例如,“游乐区”和“婴儿车”在这里的分类是“儿童”,就完全不同于语义网中任何三元组的定义,所以知识图谱也不能提取出来。结合class.txt中的知识图谱提取结果,最后划分了29个有分析价值的组。其中包括了火锅底料、食材、小吃等食物类型;排队、服务等基础设施相关类;额外表演、外卖等附加服务类;以及顾客的类型。该分类记录在classification.txt中。知识图谱分类结果见表7.1。

图7.32 最终提取的部分结果

表7.1 知识图谱分类结果

下面将该分类结果写回Excel。代码实现中,读取上面得到的classification.txt,然后将每一个关键词写到新的表格文件的第一行,同时需要新建一个字典存储关键词及其下的详细内容。接着读取之前抓取的评论,对每一个关键词看顾客的评论中是否有该词下属的详细词汇。这里用到“结巴分词”的分词功能,函数是jieba.lcut。若找到了一个详细词汇,则将对应的单元格设为1,反之设为0。这里针对“结巴分词”的词库缺失,添加了部分词语。具体代码如下。

将最初抓取的数据中与评分相关的4列加入到代码生成的表格中,同样可以用Python实现,这里直接将之前的数据复制过来。comments Word.xls如图7.33所示。

图7.33 comments Word.xls

将该表格导入SPSS Modeler 18.0,单击“插入”→“源”→Excel,选择文件类型和导入文件。接着对评分的3个字段进行数值化处理。在之前的“源”节点后单击“插入”→“字段选项”,选择“导出”,将导出字段设置为“评价均分_数值”,并输入公式“substring_between(9,9,评价均分)”,单击“确定”按钮,如图7.34所示。

图7.34 数值化“评价均分”

继续添加3个导出节点,分别对“口味评分”“服务评分”和“环境评分”做数值化处理。在3个节点后单击“插入”→“字段选项”,添加“过滤器”,将前4个字段过滤掉,单击“确定”按钮,如图7.35所示。

图7.35 过滤数值化前的数据

可单击“插入”→“输出”,添加“表格”节点查看导出后的字段。

单击“插入”→“字段选项”,选择“类型”节点。将除评分外的其他字段的测量设为“标记”。将“评价均分_数值”的角色设为“目标”,将“口味评分_数值”“服务评分_数值”和“环境评分_数值”的角色设为“无”。其他保持默认值,单击“确定”按钮,如图7.36所示。

图7.36 设置“类型”节点

在该“类型”节点后,单击“插入”→“建模”→Apriori,设置Apriori节点中的“最低条件支持度”为3.0,最下规则置信度为5.0,其他保持默认值,单击“运行”按钮得到结果模型。

这里,第一次生成的模型中很大比例都有“服务”,考虑到本店的服务一直是核心竞争力,为了更多地突出其他因素,在“类型”节点中将“服务”的角色设为“无”。重新运行生成模型。

选择按照“置信度百分比”排序,得到的结果如图7.37所示。可以对结果进行下列分析。这里的分析一部分是对本店进一步改进的建议,另一部分是其他火锅店可以学习本店的内容。

图7.37 评论和打分关联分析

(1)顾客在提到有额外表演或服务的时候,有高达70%的顾客给出了5分好评。其他店如果没有这方面的表演或服务,可以考虑增加这方面的内容,增加用户满意度。

(2)在食材方面,评论涉及面食、河鲜与海鲜、牛肉类的,均有超过60%的顾客给予了好评,本店可以考虑结合上文做的菜品推荐和这里的高分评价菜,一起做菜品的营销。

(3)同时提到“其他素菜”和“底料”的时候,5分好评占到64.9%。本店可以将“其他素菜”分类的素菜与“底料”一起组合成不同的锅底供顾客选择。

(4)有高于8%的顾客提到配料,其中高于60%的顾客给予了5分好评,另外约有32%的顾客给予了4分好评,4分与5分评价总和超过90%。这说明本店的配料也有独到的地方,其他火锅店可以尝试学习改进自己的配料。

(5)在提到“饮料”的评论中,5分评价达到59%,4分评论达到28%。而在分类中提到的饮料主要为“柠檬水”“豆浆”和“凉茶”3种,说明这3种饮料更受欢迎。其他火锅店也可以考虑增加缺失的饮料。

(6)提到“半份”的有65%的顾客给予了好评,这也是本店的特色之一。菜品允许点半份,这既避免了浪费,也方便顾客点不同的菜。其他的火锅店可以考虑借鉴这个销售策略。

(7)有21%的顾客提到“排队”,但其中62.5%的顾客仍然选择了好评。这是因为本店在顾客等位的时候提供了免费的零食和额外的服务,这在减少顾客流失和保证客源上有很大的帮助。有3.488%的顾客提到了专为排队提供的零食,他们中也有超过62%的顾客给予了5星好评。

(8)有7.888%的顾客的评论中提到“回头客”相关的内容。这说明本店在口味和服务上有一致性,并且能够吸引顾客二次消费。

除此之外,还可以对本店的顾客评论做情感分析,了解顾客喜好。

7.6 顾客情感分析

为了对用户做出情感分析,需要获得用户在大众点评上对于该火锅店所做的评论的内容,抓取评论使用Python脚本。

由于网络平台中“水军”以及恶意评论等行为的存在,所以得到的评论内容有可能是不够好的数据,所以接下来需要先对得到的评论内容进行预处理,可以使用在线的去重工具去除重复内容,链接为http://quchuchongfu.renrensousuo.com。

只需要将要去重的文本复制到文本框中,单击“去重”即可达到去重效果。

要进行文本的中文分词处理,这里用一个Python的分词工具——结巴分词,只需要安装jieba包,就可以在Python中使用。

import jieba import jieba.analyse import jieba.posseg as pseg

之后,对评论的文本内容进行中文分词处理:核心代码如下:

pseg.cut()方法针对文本进行分词,其中word和flag表示处理得到的关键词和该关键词的词性,由于处理得到的关键词中,介词、连词、时间词、代词、副词等是没有意义的,所以可以过滤除去这些词,同时计算关键词在该评论文本中的出现频率。最后将结果(关键词和该关键词的频率)保存到一个Excel文件中。

图7.38 处理后结果

尽管通过过滤除去了介词、连词、时间词、代词、副词等,但仍然有一些词是没有意义的,这时可以手动去除没有意义的词。处理后的结果如图7.38所示。

根据分词之后的词频,可以画出标签云,如图7.39所示。

从标签云图可以看出顾客的关注点主要在于“服务”“味道”“环境”等,也可以看出,这家火锅店能够为前来用餐的顾客提供“好吃”的菜品,让很多客户觉得“不错”,服务比较“热情”。这些优势是需要继续维持的方面。火锅店也可以针对这些特色做广告宣传的工作。但是,从标签云图同时也能够看到一些存在的问题,例如顾客会觉得店里过于拥挤,需要排队。火锅店可以考虑开设分店将消费者分流或者是制订避开高峰时间段用餐的优惠政策(折扣、礼品馈赠等方式),这是火锅店可以做出改善的细节。

下面再分析文本中用户的情感。这里用一个Python的情感分析包SnowNLP来实现,它会分析每条评论的用户情感,并给出一个[0~1]之间的数值,从0到1表示了消极情绪到积极情绪的变化过程。越靠近1说明积极情绪越高。处理的核心代码如下:

s1.sentiments得到该条评论的得分,并最终将每条评论的得分与该评论的内容写入到motion1.txt文件中,如图7.40所示。

图7.39 标签云图

图7.40 评论与情感得分

可以看出,得分基本反映了用户的情感,是比较合理的。

那么,根据该数值,就可以得到用户的情感。划定积极情绪、中间情绪以及消极情绪之间的范围为[0.6~1]、[0.4~0.6]、[0~0.4]。然后计算积极情绪、中间情绪和消极情绪的比例。核心代码如下:

通过执行代码,得到各种情绪占比。

积极情绪、中间情绪、消极情绪的比例分别为0.77、0.05、0.17,大部分客户对该店是比较满意的。态度处于中间水平的客户不多,有将近两成的客户对该店不满意。

可以从热评词中分析关注该热评词的客户对该店的态度:从上面的标签云图中很容易发现评论的热评词,如“服务”“味道”“环境”等,可以从这些热评词入手,看客户比较关注的地方,该店做得怎么样。从最热的词“服务”入手,计算出提到“服务”这一热评词的所有评论有多少,然后分析其中的积极情绪、中间情绪、消极情绪分别占多少比例。

执行之后,就得到相应的数据,如图7.41所示。

为了对比分析,可以找出评论中不包含“服务”这一热评词的评论,分析其各种情绪所占的比例,结果如图7.42所示。

图7.41 包含“服务”一词情绪分析

图7.42 不含“服务”一词情绪分析

对比图7.41和图7.42可以发现,在不包含“服务”的评论中,积极情绪降低了将近10%,消极情绪和中间情绪都有所增加,这说明“服务”这一因素很大程度上决定了该店的客户情感,所以说明“服务”是影响客户情感的关键因素,必须引起商家的重视。从包含“服务”这一热评词的情绪与所有评论的情绪的对比中可以看出,包含“服务”的评论中,积极情绪要比总体的情绪稍高,这说明该店在服务方面做得比较好,有一定的竞争力。所以,商家必须重视“服务”在客户情感中的重要作用,应该在“服务”方面继续保持优势,争取服务水平更上一层楼。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭