数据分析——对大众点评数据的数据分析以及机器学习

之前在网上下载了一份大众点评共 58 万条记录的数据,原处是出于「@路人甲」。看了一下有很多人都拿去分析,于是我也借此机会练习一下。

本次分析过程核心技术部分主要有两个部分——数据分析和机器学习。但是我在机器学习部分遇到了一些问题,目前还没有解决。解决了后会更新的。

注意:接下来的分析结果都是基于这些数据,所以有可能只是反映了一部分情况,是否是真实情况有待商榷。

环境

  • 语言:Python3
  • 工具:全世界最好的 Jupyter Notebook
  • 系统:MacOS
  • 主要 Python 库:Numpy、Pandas、sklearn、pyecharts(可视化,超棒)

数据处理

在进入分析挖掘之前,往往先要对数据做预处理,预处理包括几个步骤可参考我之前的文章。

这次分析任务的数据预处理较简单。根据不同的业务场景不同的做法。

一、观察数据

先打开 Excel 数据文件观察一下

数据格式比较规范,但随便上下滑动几下就会发现有缺失值以及重复的数据,不过不用担心等会就会处理。

从 Excel 中可以数据有 10 个维度:

  • City:餐厅所在城市
  • Cuisine:所属菜系
  • Name:餐厅的名字
  • Star:星级,取值为0、20、30、35、40、45、50
  • Comments:餐厅收到的评论数量
  • PCC:人均消费
  • Taste:口味评分,取值为 0 到 10
  • Environment:环境评分,取值为 0 到 10
  • Service:服务评分,取值为 0 到 10
  • Addr:餐厅的地址

用 DataFrame 进行加载,查看前几项数据,查看数据维度信息

可以看到有 585914 条数据。

二、数据去重

选择地址作为重复的衡量标准,因为无论如何地址都应该是唯一的,如果两家店地址重复,那只能认为他们是一家店。

果然有 70000 多的数据有重复。去除后只有 516674 条数据了。

三、检查缺失值情况并处理

观察缺失值情况

Name字段的缺失值的数据有 11 条,不知道是故意不取名字还是爬取数据的时候丢失了。Addr也是,所以对于这两个字段都缺失的给予删除。

对于那些在TasteEnvironmentService以及CommentsPCC都存在缺失值的数据,开始的时候我打算填 0 处理,但是后来又觉得这些数据对整体分析无益,在计算各项指标时会造成误差,所以还是都删除吧。

删除了将近一半的数据。

检查一下数据现在干净了没有。

好的,数据已经没有缺失值了。

四、构建特征

为了接下来的分析更加方便,在这里构建一个新的特征Overall,表示综合评分,即“口味”、“环境”及“服务”三者的平均分,精度取一位小数。

接下来再对总体的数据做一个概览,看看每个类目都包含了哪些数据。

数据分析

好了,下面进入激动人心的时刻了。

一、整体分析

首先先对总的数据做一些整体性的分析,有助于了解总体全局的情况。

1. 餐厅数量

看来还是北上广深的餐饮业更好呀,毕竟是一线城市。其中北京的数量最多有 12522 间,最少的是兰州,没有去过兰州不知道那边的情况是怎么样的。

我们重庆的餐厅数量比我想象中的要少,出现这种情况的原因我觉得可能是重庆人对外地美食的容纳度不够好,基本上都是火锅店、串串、江湖菜馆等等这些,很少在重庆的街头看到其他地方的美食,在成都就不会这样,在成都的街头随时可以看到外地的美食。希望我们重庆越来越好。

从餐厅数量上也可以看出一个城市的发展程度,基本上都是一线二线城市的餐厅数量比较多,因为这些地方的人口流量都比较大。

2. 菜系种类

一线城市的菜系种类依然比较多,北京依然是最多的。

天津居然仅以一票之差屈居第二。菜品种类多表示这个城市的容纳度以及人口流入都非常大,而种类少说明本土的饮食文化非常强势,挤压甚至同化了不少其他种类,我觉得就是我们重庆了。

3. 整体角度

可以看出饭店主要集中在沿海地区,也大体反映了我国地域的经济形势,沿海地区总体要比内地的发展要好。

二、成都情况分析

分析了整体情况,下面分析一下单个城市的情况。虽然我是重庆人,但是我在成都这边读书,对这边的餐饮也比较感兴趣,况且成都的数据确实比重庆的要多。所以还是分析一下成都的数据吧。

简单的看一下成都的数据

1. 餐厅星级

星级分布符合正态分布,主要集中在 3.5 星附近,4 星到 5 星的餐厅越来越少,这也比较正常,因为优秀的往往是少数的。这些店家也需要不断努力提升自己的 Level。

2. 人均消费

成都饭店人均消费最高的是 3460 元,最便宜的是 3 元,感觉就是我平常在学校外面吃的那种饼。整个成都的人均消费平均是 60,感觉应该是这样,在成都中心地带的消费应该更高,周边的都拉低了。

分布情况:

明显是一个右偏分布。绝大多数普通人的消费都是少于 200,更多的是集中在 100 元以内。但还是有人大于 1000、2000 的。

3. 最贵的餐厅

出于好奇看了一下成都最贵的餐厅是哪一家:

人均 3460 元,贵倒是贵,但是评分都不是很高,甚至有点低,反正我也吃不起。

4. 人气情况

这里是根据评论数来判断人气情况的。

人气最高的有 8533 条评论,人气最低的只有 1 条评论。看一下人气最高的店是哪一家店。

是我很喜欢吃的茶餐厅,人均消费也不贵,可以那天去试一下。

分布情况:

总体是右偏分布,大多数餐厅都是 8000 条以下,8000 以上的餐厅只有两家店。看来成功是属于少数人的。

5. 各项得分(口味,环境,服务,综合)

可以看到星级较好的餐厅,他们的各项评分都比较均匀比较高。说明很多高档餐厅比的不仅仅注重是食物本身的味道,还很注重形式和服务表现。所以这也告诉我们,要想成功,必须软硬条件兼具。

一个比较有趣的现象是:在 2 星的餐厅环境比其他项的评分均分要高,说明大家去星级较低的餐厅就餐时人们对于其环境的容忍度是比较高的。

符合正态分布,大多数餐厅的各项评分都在 7.2、7.4 左右,环境评分普遍要比其它评分分数更高,看来大家对成都人民对环境的容忍度比较高。

6. 综合水准

成都的各项指标比较均衡。

综合水准最高的餐厅

最后一个是什么广告,我都不知道是不是餐厅,不知道大众点评怎么搞的。

我为什么要在晚上写这个,肚子好饿。

7. 从菜品的角度来看

果然还是火锅最受欢迎,毕竟西南地区。

8. 星级与评分之间的关系

查看星级与评分之间的关系,发现呈正相关,星级越高综合评分越高。正常的情况也应该是这样的。

左边有一些数在 x 轴零坐标上方,出现这种情况是因为我没有将星级为 0 的餐厅去除。

三、成都火锅和重庆火锅的比较

比较这个主要是出于我对火锅的喜爱,出于好奇心。

1. 成都火锅与重庆火锅的平均价格比较

这点我必须公正客观的说,成都这边的火锅好贵,比重庆要贵一些,应该不止 10 块钱。

2. 上海火锅的价格

跟我想象的差不多,毕竟这些地方的物价、地价都非常的高,如果按照西南地区的价格买,会破产的。当然如果西南地区以这个价格卖,也会破产的,没有人吃。

3. 成都火锅与重庆火锅的综合评价

emmmmmm,好的我承认我有点意外。由于是重庆人,毫不夸张的说从小吃火锅长大,所以我对火锅的要求比较严格,我个人觉得,是客观的觉得重庆的火锅更好吃更正宗。

机器学习

在机器学习部分,主要分为三个步骤:

  1. 将类别数值化
  2. 划分 feature 和 label
  3. XGBoost

但是后面出了一点问题,导致准确率为 100%,这是不可能的,我决定先解决这个问题了来再更新这一部分的内容。

总结思考

对大众点评数据的分析比较基础简单,但也包含了数据分析的整个流程,所以肯定是有非常多的收获。过程中也遇到了很多问题,包括对数据不同处理的判断,可视化展示的 bug,机器学习部分遇到的难题等等。最后完成了还是非常开心,感动十分满足。

继续提升功力吧!