孟子老人家曾经曰过,食、色,性也。今天咱不讲色,就讲讲这个字。

俗话说民以食为天,这吃饱了干活才不累嘛,奈何世面上的饭店多如牛毛,良莠不齐,经常你花了大价钱结果发现不好吃。那有没有一个方法能不用花钱,一键找到最值得去的饭店呢?有!那便是数据分析+机器学习

刚好看到了 @路人甲 分享了一个关于大众点评的数据,共爬取了58万条记录。这可真是瞌睡送个枕头——正是时候,省了自己爬取数据的功夫。看了下数据也都挺规整的,那就……直接开干吧!

警告:本篇文章容易勾起你的深夜报社欲望,减肥节食人士请提前退散hhh

本文主要分4个方面:数据处理、数据分析、机器学习、总结思考。

一、数据处理

1.数据去重

首先,先来查看下数据。啊哈,共有585915条数据,10个维度。

  • “City”:所属城市,共有49个热门城市;

  • “Cuisine”:所属菜系,共有72种不同菜系;

  • “Name”:饭店名字,共有231877个;

  • “Star”:星级,取值为0、20、30、35、40、45、50;

  • “Comments”:评论数量;

  • “PCC”:人均消费;

  • “Taste”:口味评分,取值从0到10;

  • “Environment”:环境评分,取值从0到10;

  • “Service”:服务评分,取值从0到10;

  • “Addr”:地址;

但我发现这些数据中有不少是重复的,鉴于餐厅可能有分店所以名字重复可以理解(其实不能,分店也要加上XX分店呀,不过好像大众点评没那么严格),所以我选取了地址作为衡量标准,无论如何地址都应该是唯一的,如果两家店地址重复,那我只能认为他们是一家店。由此去重后,数量由585915降到了516674,少了将近7000条数据。

2.缺失处理

再观察缺失值的情况:

“Name”字段有11个缺失值,鉴于名字是一个餐厅必不可少的要素,所以对这11家缺少名字的餐厅予以删除惩罚(这都什么人呀,连名字都懒得起?)“Addr”同理,没地址我可找不到你啊。

然后对于“Taste”、“Environment”、“Service”以及“Comments”和“PCC”都存在缺失值的数据,我本来是想打算给他们回填0处理的,但是转念一想,我是想找出优秀的餐厅啊,那么这些“三无”餐厅对于整体分析没有帮助,是冗余值。而且还会在计算平均值等各项指标时造成误差,所以我决定“狠心”把他们都删除了。

当然有些“三无”餐厅可能只是刚刚开业的新餐厅,因为时间太短还没有积攒到评价,确实会存在一部分的误杀情况。不过去新餐厅就餐也是有风险的,我这次只想来个保险的分析。So,等你们攒够了足够的评分再来入选吧。是金子总会发光的。

删去缺失值后,数据减少了差不多一半,这说明至少在这次的数据集中大众点评上将近一半的店铺是缺失关键信息的,不能对我们有很好的指引。点评君你还要加油啊!

嗯,这下数据就干净多了。

3. 构建特征

接下来为了后面在分析口味等评分时更方便,我在这里构建了一个新的特征——“overall”(综合分),即“口味”、“环境”及“服务”三者的平均分,精度取一位小数。

最后再对处理后的数据有个直观的了解,看看每个类目都包含了哪些数据。

二、数据分析

1.整体分析

餐厅数量:

可以看出餐厅数量最多的还是北上广深四个一线城市,其中帝都的数量是最多的共有12522间餐厅(帝都人民好幸福!),最少的是兰州(呃,宇宙第一店兰州拉面的大本营啊,没想到数量最少)。广深两座城市数量基本持平,不愧是我专吃福建人的大吃省(大雾)。

这在一定程度上也反应出了城市的发展程度,毕竟民以食为天,人口净流入大的城市其饭店等基础民生的设施也更多。

除北上广深四大一线城市外,像南京、天津、成都、杭州等明星二线城市饭店数量也很突出,都超过了平均值,而像一些欠发达地区饭店数量则较少,基本符合前面的分析。

菜系种类:

一线城市依然名列前茅,符合预期,帝都力压群雄,拔得头筹。

不过令人感到惊讶的是,天津竟然仅以一票之差屈居第二。在我想来,菜品最多样化的城市应该都是外来人口流入巨大的城市,因为城市聚集了天南海北各地的人,大家口味不同自然就有了不同菜系的市场。而在一个历史相对悠久,人口流动并不是特别大的城市,悠久的历史早就使得当地人培养出了自己的饮食文化,因而种类不会特别多。不过这也说明,天津作为直辖市之一,发展的越来越好,潜力巨大。与此相似的还有成都、南京、杭州等热门二线城市。

同时,菜系种类的多寡也能反映出一个城市的包容度及本土文化的强势程度。种类多说明城市的包容性强,而种类少说明本土的饮食文化非常强势,挤压甚至同化了不少其他种类。多少爽朗的北方爷们爱上了精致的广东早茶,又有多少吃不得辣的人一把鼻涕一把泪的在川菜馆里大快朵颐。

整体角度:

可以看出本次采样的49个城市中,饭店大多集中在东南沿海,尤其是长三角和珠三角地区,另外京津冀地区虽然并非沿海区域,但靠着帝都威名也同样聚集了大量的饭店。这也大体反应出了我国地域经济形势及发展态势:东南沿海发达,西北地区欠发达的形势并没有得到太大的改善,祖国的发展还需要靠我们来建设啊。

另外,需要强调的是,本次分析数据并非全量数据,所以可能只是反映了一部分情况,真实情况或许不同。

2. 深圳情况

接下来让我们聚焦到单个城市看一看,因为本人居住在深圳,所以我就来看看深圳的情况。首先定位到深圳,查看下深圳的数据:

餐厅星级:

星级分布符合正态分布,主要集中在3.5星附近,2星和5星的都很少(1星数据清理时已去除)。3.5星的基本上是其他星级之和,而从3.5星到4星的数量陡然下降,说明4星是一个非常大的瓶颈,想要突破对于大部分店家而言难度不小。

绝大部分店家在达到一个平均水准(3.5星)后就停留在这里了,很难做的更好。而从3星到3.5星的陡然提升也说明3星是一个比较容易达到的星级。所以那些2星3星的店家,好好反省下吧,哈哈哈。

人均消费:

深圳饭店人均消费最高1806元,最低4元,平均67元。嗯,平均67元,好像跟我的感觉差不多,基本上每次跟小伙伴们出去吃饭人均都在七八十到一百多吧,比平均值略高一点。唉,收入没有跑赢平均值,吃饭消费倒是跑赢了……怪不得恩格尔系数暴涨啊。

分布情况:

我们将人均消费分成几个范围组,接着出现了非常明显的一个右偏分布。绝大部分人人均消费都是少于200元,普遍集中在100元以内(看到这里我心里又平衡了)。然而还是有少部分人人均消费大于1000的,对于这部分人我只想说,土豪求抱大腿啊啊啊! 看来这又给我定下一个小目标:先吃它1000块。

这也反应出深圳这座城市中,大部分人都是普通的工薪阶级,人均消费能力相对较低,但同时依然有少量的资产阶级拥有远超大众的消费能力,贫富差距很大,两极分化严重,符合二八原则。

当然,深圳是一座年轻的城市,寻梦的城市,虽然贫富差距大,但总有不服输的追梦者创造出了不少神话,在这个越来越定型的社会中脱离了自身所处阶级,实现了阶级跃迁blablabla.....(干了这碗鸡汤)

最后,出于好奇,我看了下最贵的是哪家餐厅。

额,西安老刘家,1806元?我怎么没听过这家店。于是我去大众点评看了下……好吧画风是这个样子的:

这充分告诉我们,有时候数据是不可信的,这数据太离谱了,不知道点评君是怎么得出这样的数据的。

人气情况:

我把评论数的多少作为判定其人气高低的指标,毕竟人气高的话点评的人也会多,而无人问津的店自然也就没什么人点评。虽然这样判断不是很准确,但至少应该是正相关的,所以在没有想到(就是懒)更好的办法前就勉强拿来一用吧。

当然,如果一家店特别坑,也会导致大量的评论前来吐槽,但负面人气也是人气啊,现在不都流行负面炒作嘛。

评论最多的店有20094条评论,而最少的只有1条评论,平均是294条。

从图一可以看到只有一家店评论超过了2万,基本上大家还都是在1万条以下的。针对2万条评论的这家店我看了下,是“ 幸福西饼生日蛋糕(布心店)分店”。

这么高的评论数不像是自然情况下的产生的,应该是有人为干扰因素,可能是店家搞的什么活动,类似于评论返现之类的造成的极端数据。

通常情况下,评论越多也就意味着店面规模或者品牌越大型,因为只有大型的店面,才能有更高的知名度,吸引更多的人过来就餐。小店面在这一点上是无法与大店媲美的,当然也会有那种几十年的老店就是一个小小的店面,然后人们口口相传声名远播,但这种情况太少,个例我们就不予考虑了。

我们观察一下分布情况,跟人均消费一样,依然是个右偏分布,绝大部分都集中在100条以下。也就是绝大部分店面都是小店,真正能做大的、做成连锁品牌的店面非常的少,看来成功总是属于少部分人啊。

评分指标:

把口味、环境、服务及之前构建的综合指标放在一起查看其分布情况,可看出每一个指标都是呈正态分布的,大部分集中在7.2到7.6之间,剩下两端的分布很少。

然后我发现了一个有意思的现象:

在2星的时候,环境比其他项的评分均分要高,这说明在星级较低的餐厅就餐时人们对于其环境的容忍度是比较高的。这或许是因为大家去一个低星级餐厅时已经对其环境有一定的心理预设。

而随着星级越来越高,各项指标也越发平衡,说明饭店如果想得到更高的星级必须要均衡发展,不能偏科。同时,我还注意到5星级的饭店其服务得分会略微高于其他项,这说明越高星级的餐厅越重视服务水平。

换句话说,这说明了我们现在的很多餐厅,尤其是高档餐厅,相比于食物本身的味道它们更注重形式和服务表现。毕竟高级餐厅从口味上已经很难拉开距离,此时更多的附加价值与软实力才是制胜根本。

综合水准:

看起来深圳的各项指标还是挺均衡的。

去过深圳的朋友可以猜一下这几项指标最高的分别都是哪些店面,说不定有你常去的店铺哦。


以上饭店请联系我付广告费,谢谢!

那从菜系的角度,什么菜系最贵,最受欢迎呢?

居然是海鲜!有没有想到呢。那最受欢迎的菜系咧? 竟然是江浙菜!讲道理,我还以为是早茶呢,毕竟我大广东不是都喝早茶的么?

最后,来看看星级和评分之间的关系:

查看星级与评分之间的关系,发现呈正相关,星级越高综合评分越高。跟我预计的差不多。

三、机器学习

前面对数据进行了一个初步的探索,接下来想通过各项指标来预测星级。

这是一个多分类问题,由于时间和精力有限,我决定把它转化为一个二分类问题,既判断一个餐厅是否为好餐厅。我将“Star”二值化,阈值取39,即简单的取星级4星以上的为好餐厅,标记为1,以下的为还需努力的,标记为0。然后将菜系由非数值标签处理为数值标签,本来应该再进行哑变量处理的,因为转为数值标签后,会有潜在顺序关系。但是不知道为何,进行了哑变量处理后,后面筛选特征重要性的时候就出问题了,由于时间有限,我后来就放弃了哑变量处理。所以这里多少是会有点误差的。

查看下处理后的数据:

接下来划分feature和label。

Star为标签,然后选“Cuisine”,“Comments”,“PCC”,“Taste”,“Environment”,“Service”作为特征。为什么不选City呢?因为城市都是深圳,大家都一样没有意义;不选Name的原因很简单,这又不是算卦,咱不看面相;不选Addr也是一个道理,咱也不看风水;不选overall是因为该分值就是由“Taste”,“Environment”,“Service”三个指标的均值构成的,相关性很高,可以舍去~

接着计算特征重要性,取前80%的特征作为训练特征。即“Comments”,“Taste”,“Environment”,“Service”这四个特征。

对数据进行特征缩放,因为评论数量和评分之间相差过大,所以进行特征缩放,防止某一过大值挤压其他过小的值。

随后采取交叉验证测试模型得分,CV取10。

我尝试了 LinearSVC、SVM、朴素贝叶斯、随机森林及XGBoost模型,测量下来XGBoost模型表现最好,所以下一步就是对XGBoost模型进行调参。

啊,终于到了苦逼的调参时刻了!

最后调完超参数后,得分由原来的0.9489上升到了0.9497,撒花。

测试:

那么假使有这么一家神秘的店面,其评论数为100,口味9.2,环境9.3,服务8.2,那么这家店值不值得去呢?

嗯,分类为1,看来值得去,哈哈哈哈。

四、总结思考

仅针对本次数据,通过上面的分析可以得出以下结论:

  1. 两极分化。大众点评上有52.1%商家没有得到过任何点评,这说明有大量商家无人问津,无法依靠大众点评为他们引流 ,带来人气。但同时热门商家点评非常火爆,会进一步带动人气。这将会使得二者之间的差距愈来愈大。

  2. 一线城市不管是餐厅数量还是菜系种类都领先于二三线城市。这反应了一线城市的发展水平目前还是其他城市所无法比拟的,待在一线还是可以享受到很多便利的。

  3. 二线直逼一线城市。重点二线城市发展速度很快,从餐厅数量和菜系种类上愈来愈逼近一线城市,甚至于出现了像天津这样在菜系种类上已经超越一线的城市。如果要去二线城市发展的话,可以优先考虑如杭州、南京、成都、天津等这样的重点二线城市。

  4. 地区集中。大多数餐厅都集中在长三角、珠三角及环京地区,而西部地区则很少。反应了目前我国还是处在东南地区发达,西部地区欠发达的局面下。另外长三角、珠三角这两个超级城市群依然拥有很强的竞争力。

  5. 星级分布服从正态分布。从3.5星到4星是一个门槛,跨越难度很大,有73.8%的店面无法跨越,但过了之后前景也很好。

  6. 人均消费较低。大部分人都是工薪阶级,86.4%的人消费低于100元。但仍有部分土豪消费水平远超普通人,社会财富分布依然悬殊。

  7. 口味、环境、服务指标都服从正态分布。另外随着星级越来越高,各项指标也越发平衡,饭店如果想得到更高的星级必须均衡发展。

  8. 利用机器学习简单的对餐厅做好坏分类是可行的。

结论:

本次分析的数据由于不是全量数据,所以结论难免会与真实情况存在差异。而且本次分析的也比较简陋,很多情况都没有考虑到,结论也略显稚嫩,部分地方或许会有纯堆砌数据却无深入分析的情况存在。这是我以后要尽量避免,努力提高自己的地方。

另外,机器学习的部分非常简陋,特征的选取应该有更好的方法,而且标签的定义也过于简单。本来是想做多分类任务的,从指标来预测星级,不过由于时间问题只好改成了二分类任务了。这点在以后的迭代中需要更加完善下。

最后,为何我会闲着无聊写这篇报告呢?因为我正好要换工作啊!

各位大佬们,求介绍工作,求内推啊~~~~~

(此段划重点啊喂~,逃~)

本文作者:郝伟楠

本文编辑:yuese

这么腻害的作者,如果优达菌不拿出来兜售兜售,良心过意不去!如有伯乐相中了,可以关注优达学城订阅号,回复关键字“简历”,查看郝伟楠的完整简历。

打开微信扫描二维码,关注优达学城(Udacity)订阅号,

回复关键字【学习资料】,获取来自硅谷的,包括【前端开发技能清单】【大数据求职指南】、【机器学习求职指南】、【Tableau学习PDF】等一系列独家豪华学习资料,让你不落人后!

冲着这肉蟹煲,记得点赞和留言支持我们哦。

深夜报社哪家强?我分析了大众点评20w家店告诉你!相关推荐

  1. 基于snownlp及朴素贝叶斯的情感分析——以大众点评网评论为例

    「情感分析」是对带有感情色彩的主观性文本进行分析.处理.归纳和推理的过程.按照处理文本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析.其中,前者多用于舆情监控和信息预测,后者可帮助用 ...

  2. Python探秘大众点评北京火锅店第①期:好吃的火锅在哪里?

    文章目录 1. 说明 2. 北京火锅店基础数据 2.1. 火锅分类 2.2. 各地区火锅分类 2.3. 各地区火锅店数量 3. 北京火锅店评分数据 3.1. 评分直方图 3.2. 各地区商家评分箱线图 ...

  3. O2O创业哪家强 一文了解深圳60多家O2O创业公司

    一九七九年的春天,有一位老人在中国的南海边画了一个圈,这个圈也是现在互联网界的南派代表:深圳.深圳作为改革开放建立的第一个经济特区,"深圳速度"一直引领着国内经济的发展.亿欧网盘点 ...

  4. 上海计算机一级优秀率,数据 | 上海初中哪家强?2020四校八大预录数据告诉你!...

    在上海,评价一所学校,有这么一句话:初中看预录,高中看综评.说到预录,首先想到的就是上海最有名的四校八大,各初中每年的四校八大预录人数一直是家长们的重要参考指标! 根据2020年各校的预录数据,我们整 ...

  5. python爬取大众点评网商家信息以及评价,并将数据存储到excel表中(源码及注释)

    import requests from bs4 import BeautifulSoup import traceback # 异常处理 import xlwt # 写入xls表 # Cookie记 ...

  6. python大众点评网实训报告中的参考文献_python爬取大众点评网商家信息以及评价,并将数据存储到excel表中(源码及注释)...

    import requests from bs4 import BeautifulSoup import traceback # 异常处理 import xlwt # 写入xls表 # Cookie记 ...

  7. 抗DDOS攻击哪家强?是堵还是疏?

    近期,安全狗SRC联合i春秋SRC部落,携手推出了爆款话题:传统抗D设备vs新兴CDN抗D:抗D效果哪个好? 话题一经发布,好评如潮,热评无数,四方雷动.为了避免懒癌晚期的表哥们错过这个干货满满的内容 ...

  8. 【安全狗SRC】抗D设备哪家强?你来!大佬告诉你答案

    上周,安全狗SRC联合SRC部落,携手推出了爆款话题: 传统抗D设备 vs 新兴CDN抗D:抗D效果哪个好? 一经发布简直好评如潮,热评无数,四方雷动(?) 原帖在此,错过的吃瓜表哥们可以再围观一下~ ...

  9. 分析大众点评产品成败的因素,从pest和波特五力出发。

    大众点评app 从PEST宏观分析大众点评app的现状 P:国家对于大众点评这种团购美食app没有明确的政策,市场面基于被大众点评.美团.口碑等app垄断产业.也无任何政策上的支持.但随着web3.0 ...

最新文章

  1. 建筑师——由来已久的梦想
  2. (五)官方Neo4j 3.3.9 Java API例子
  3. hive复合数据类型之map
  4. 问题 F: 成绩统计
  5. 微盟CEO孙涛上市致辞:曾豪言30岁前不敲一次钟 人生都不完整
  6. 查看数据库开了inodb_Mysql中查看表的类型InnoDB
  7. sqlite3的命令简单说明
  8. visio插入箭头_visio流程图中画箭头
  9. 手机网站注册页面html模板,手机网页登录注册自适应模版
  10. 基于SSM+MySQL+Vue前后端分离的在线问卷调查系统
  11. Python学习笔记——python基础 3. 字符串
  12. 登录harbor时的SSL异常: x509: certificate is valid for ingress.local
  13. (7)数据分析-秩和检验
  14. Null和Underfined
  15. excel简单操作。python
  16. 基于OCR模板匹配的手写英文字母数字识别matlab仿真
  17. 华为认证三个等级区别在哪?
  18. 开启VPN和NAT服务
  19. 0~9生成随机数4位数
  20. python中redis incr的使用

热门文章

  1. 大数据时代的“被遗忘权”之争
  2. 日记本java代码_简单的JAVA日记本程序源代码
  3. python clicknium 微信发送消息以及获取好友列表
  4. 知乎网站2010年12月开放,三个月后获得了李开复的天使投资
  5. 设备管理器出现“未知USB设备”同时蓝牙不可用的解决方法
  6. 唐巧总结的40个国人iOS技术博客
  7. 战地2服务器怎么虚拟人数,战地2如何修改人数
  8. dns配置异常怎么修复_dns配置异常不能上网如何修复
  9. 我的世界rpg服务器背包位置,我的世界查看玩家背包方法 如何查看玩家背包
  10. Installations