大众点评已经给出了星级评价,可以看看大致趋势。
准五星商户最多,可能因为大部分食客都习惯给好评,只有实在不满时才会打出低评有关,造成了评级一般不低,但近满分还是蛮少的。
在本文,我们假设评论数目为饭店的热度,也就是它越火,评论数目越多。
评论数目大多在1000以内,但是高于2000,甚至高于4000也还存在一些,这些饭店应该是一些网红店。以5000为约束,筛选出饭店均为小龙坎、蜀大侠都非常知名的火锅店。那么评论数量和星级有关系吗?看下图:
这里取其评论数平均值,发现对于四星以上商户来说,评论数和星级并不关系,但均比低于四星的饭店销量更好。这说明在四星以上之后,人们选择差别不大,但一般不愿意接受评论太差的饭店。
对于笔者这样的学生党来说,影响较大还有人均消费情况。
成都的火锅店人均消费大部分都在50-100的区间内,高于150的也有一些。对于笔者来讲,吃一顿火锅,人均在50-100是可以接受的,高于100,就要低头看看钱包了()。那扩展看,人均消费和星级、评论数量有关系吗?
上图是人均消费和星级的关系,看起来并无任何关系,那说明一些口碑好的火锅店,其实人均也不贵。下面看看人均和评论数目的关系吧。
通过比较,发现评论数目低于500,人均在50-100区间是最多的。当然这肯定和评论数量、人均消费本身集中于这一阶段有关。
吃火锅,一家店的生意好坏,肯定还和它的特色菜有关,笔者通过jieba分词,将爬取到的推荐菜做了一个词云图,如下。
笔者最爱的牛肉是特色菜之最啊,尤其是麻辣牛肉,只要去吃火锅,都要来上一份,其次是毛肚、虾滑、鹅肠等等。
接下来是大家都关心的,口味、环境和服务的情况。
三者得分大多都是集中在8.0-9.2这一阶段,笔者认为,低于7.5分的饭店还是不要去尝试了。同时,星级评价应该也是由这三者得分产生的。
果然如预想的一向,星级评价越好,它在口味、环境和服务的得分越高。那么口味,环境,服务得分与评论数量,平均价格有关系吗?
如图所看,并无什么直接关系,但是我们发现口味、环境和服务三者之间存在着非常好的线性关系,于是单独拿出来画了一个较大的图。
我们并且拟合了线性关系,由于三星商户只有一家,它的情况较为特殊之外,其他星级在口味、环境和服务的关系拟合中保持的相当一致,这也证明我们的猜想,这些变量之间存在线性关系。鉴于笔者本文最大的目的是做推荐,于是,我们进行了K-means聚类,这里取K为3,并且把星级转换为数字,五星对应5分,准五星对应4.5分,以此类推。最终得到了三类,通过作图,看看聚类情况如何吧。
和我们想要的结果一致,在口味、环境、服务和星级上得分越高,我们就越推荐。然而推荐的店铺还是好多,能不能在集中一些呢?于是通过限制评论数量、人均消费和特色菜来进行推荐。由于笔者喜欢人少,便宜还有牛肉的店铺,这里得到了如下的结果:
import time
import requests
from pyquery import PyQuery as pq
import pandas as pd
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36’}
def restaurant(url):
获取网页静态源代码
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
except Exception:
return None
name=[]
url = []
star = []
comment = []
avg_price = []
taste = []
environment = []
services = []
recommend = []
num = {‘hs-OEEp’: 0, ‘hs-4Enz’: 2, ‘hs-GOYR’: 3, ‘hs-61V1’: 4, ‘hs-SzzZ’: 5, ‘hs-VYVW’: 6, ‘hs-tQlR’: 7, ‘hs-LNui’: 8, ‘hs-42CK’: 9}
def detail_number(htm):
try:
a = str(htm)
a = a.replace(‘1<’, ‘<’)
a = a.replace(‘.’, ‘’)
b = pq(a)
cn = b(‘span’).items()
number = ‘’
for i in cn:
attr = i.attr(‘class’)
if attr in num:
attr = num[attr]
number = number + str(attr)
number = number.replace(‘None’, ‘’)
except:
number = ‘’
return number
def info_restaurant(html):
获取饭店的名称和链接
doc = pq(html)
for i in range(1,16):
#获取饭店名称
shop_name = doc(‘#shop-all-list > ul > li:nth-child(’+str(i)+‘) > div.txt > div.tit > a:nth-child(1) > h4’).text()
if shop_name == ‘’:
break
name.append(shop_name)
#获取饭店链接
url.append(doc(‘#shop-all-list > ul > li:nth-child(’+str(i)+‘) > div.pic > a’).attr(‘href’))
try:
star.append(doc(‘#shop-all-list > ul > li:nth-child(’+str(i)+‘) > div.txt > div.comment > span’).attr(‘title’))
except:
star.append(“”)
#获取评论数量
comment_html = doc(‘#shop-all-list > ul > li:nth-child(’+str(i)+‘) > div.txt > div.comment > a.review-num > b’)
comment.append(detail_number(comment_html))
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!