作者 | CDA数据分析师

来源 | CDA数据分析师

说起湖南这个地方,大家想到的肯定是各种吃的,最常听到的就是臭豆腐,外焦里嫩,闻起来臭吃起来香,一口下去让人回味无穷。

还有香甜软糯的糖油粑粑,炸至金黄的糯米,外面裹着糖浆。

还有就是口味虾了,口味虾又叫麻辣小龙虾。在夏天的时候,邀上三五好友,来上几盘口味虾,搭配上啤酒,肥宅的生活就这么快乐的开始了,味道麻辣爽口,一口下去就想吃下一口!在湖南,没有吃上口味虾的夏天都是不完整的。

那么湖南的吃货们都喜欢吃哪家的口味虾呢?今天我们就用数据来盘一盘。

我们使用Python获取了大众点评上长沙口味虾店铺的相关信息,进行了数据分析,整体流程如下:

  • 网络数据获取

  • 数据读入

  • 数据探索与可视化

  • K-means聚类分析

数据读入

首先导入所需包,并读入获取的数据集。

# 导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import jieba from pyecharts.charts import Bar, Pie, Page
from pyecharts import options as opts
from pyecharts.globals import SymbolType, WarningType
WarningType.ShowWarning = Falseimport plotly.express as px
import plotly.graph_objects as go 

此数据集包含50个搜索页面共745条数据,字段包含:餐厅名、星级、星级评分、评论数、人均消费、推荐菜、口味、环境和服务得分。

数据预览如下:

# 读入数据
df = pd.read_excel('../data/长沙小龙虾数据.xlsx')
df.drop('detail_url', axis=1, inplace=True)
df.head()

数据预处理

此处我们对数据进行如下处理以便后的分析工作。

  • title: 去除前后符号

  • star:提取星级

  • score: 提取数值,转换为类别型

  • comment_list:提取口味、环境、服务得分

  • 删除多余的行和列

# 星级转换
transform_star = {20: '二星',30: '三星',35: '准四星',40: '四星',45: '准五星',50: '五星'
} # 处理title
df['title'] = df['title'].str.replace(r"\[\'|\'\]", "")
# star处理
df['star'] = df.star.str.extract(r'(\d+)')[0].astype('int')
df['star_label'] = df.star.map(transform_star)
# 处理score
df['score'] = df['score'].str.replace(r"\[\'|\'\]", "").replace("[]", np.nan)
df['score'] = df['score'].astype('float')# 口味
df['taste'] = df.comment_list.str.split(',').str[0].str.extract(r'(\d+\.*\d+)').astype('float')
# 环境
df['environment'] = df.comment_list.str.split(',').str[1].str.extract(r'(\d+\.*\d+)').astype('float')
# 服务
df['service'] = df.comment_list.str.split(',').str[1].str.extract(r'(\d+\.*\d+)').astype('float')# 删除列
df.drop('comment_list', axis=1, inplace=True)
# 删除行
df.dropna(subset=['taste'], axis=0, inplace=True)
# 删除记录少的
df = df[df.star!=20] 

处理之后的数据如下,分析样本为560条。

df.head() 

数据可视化

以下展示部分可视化代码:

1、不同星级店铺数量分布

准四星商户最多,占比高达65%,超过四星以上的商户占比18%,其中五星商户数量最少,仅有10家。

# 产生数据
star_num = df.star.value_counts().sort_index(ascending=True)
x_data = star_num.index.map(transform_star).tolist()
y_data = star_num.values.tolist() # 条形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(x_data)
bar1.add_yaxis('', y_data)
bar1.set_global_opts(title_opts=opts.TitleOpts(title='不同星级商户数量分布'),visualmap_opts=opts.VisualMapOpts(max_=365))
bar1.render()  

2、店铺评论数分布

我们假设评论数目为店铺的热度,也就是它越火,消费人数越多,评论数目越多。

从直方图中可以看出,数据呈现比较严重的右偏分布,其中超过1万评论的仅有两家,我们挑选出来看一下,发现这两家都是超级文和友,超级文和友是长沙网红打卡地,国庆期间一天排16000+个号的超级网红龙虾馆,难怪热度会这么高。

# 直方图
px.histogram(data_frame=df , x='review_num', color='star_label', histfunc='sum', title='不同星级的评论数分布',nbins=20, width=1150, height=750) 

3、人均价格区间分布

我们绘制了所有店铺口味虾人均消费价格分布的直方图,发现价格分布在20~180元之间,其中人均消费大部分都在67-111元的区间内。扩展看,人均消费和商户的星级有关系吗?

# 直方图
px.histogram(data_frame=df , x='mean_price', color='star_label', histfunc='sum', title='小龙虾人均消费价格分布', nbins=20, width=1150, height=750) 

4、不同星级店铺与价格等因素的关系

不同星级与价格的关系:

这里绘制了星级和价格分布的小提琴图,用来展示多组数据的分布状态以及概率密度。从图形可以看出,不同星级和价格之间的分布有显著差异,表现为星级越高,平均消费价格越高。

# 小提琴图
plt.figure(figsize=(15, 8))
sns.violinplot(x='star_label', y='mean_price', data=df, order=['五星', '准五星', '四星', '准四星', '三星']);
plt.title('不同星级和价格的关系', fontsize=20)
plt.show()

 不同星级和其他得分项的关系:

我们预想,星级评价越好,它在口味、环境和服务的得分越高,热度也就越高,从绘制出来的箱线图也可以验证我们的这一假设。

那么店铺得分与口味、环境、服务、评论数量、平均价格有关系吗?接下来我们绘制一张多变量图看一下。

5、数值型变量关系

数值型变量关系

多变量图用于探索数值型变量之间的关系,从多变量图可以看出:

  • 店铺得分与口味、环境、服务得分呈现较为显著的线性相关,这也和之前的验证一致

  • 店铺得分和人均消费价格、评论数量关系不显著;

  • 口味、环境、服务得分之间有显著的正相关,三者存在高则同高的情况。

# 多变量图
sns.pairplot(data=df[['score', 'review_num', 'mean_price', 'taste', 'environment', 'service', 'star_label']], hue='star_label')
plt.show()

数值型变量之间的相关系数

为了验证上述可视化的结果,我们通过Python计算数值型变量之间的pearson相关系数,根据经验,|r|>=0.8时,可视为高相关。从热力图中也可以得到上述结论。

# 相关系数
data_corr = df[['score', 'review_num', 'mean_price', 'taste', 'environment', 'service']].corr()# 热力图
plt.figure(figsize=(15, 10))
sns.heatmap(data_corr, linewidths=0.1, cmap='tab20c_r', annot=True)
plt.title('数值型变量间相关系数', fontdict={'fontsize': 'xx-large', 'fontweight':'heavy'})
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

6、 推荐菜词云图

假设店铺的推荐菜就是不同店铺的热门菜,我们使用jieba对推荐菜进行分词并绘制词云图:

发现"卤虾"、"口味虾"、"油爆虾"是大家爱点的热门菜。另外大家点口味虾的同时也爱点"口味花甲"、"凤爪"、"牛油"之类的串儿等菜。

7、K-means聚类分析群集占比

K-means聚类分析群集占比:

聚类分析用于将样本做群集划分,同一集群内成员的相似性要愈高愈好, 而不同集群间成员的相异性则要愈高愈好。我们使用Python进行了K-means聚类,对数值型变量:得分、评论数、平均价格、口味、环境、服务评论做群集划分,这里取K为3。得到以上三群,其中非常推荐的数量有3家,一般推荐的459家,非常不推荐的有97家。我们看一下这三群的描述性统计:

K-means聚类分析分布:

以上是不同群集的直方图分布,通过群集分布图,可以总结如下:

  • 非常推荐:各项得分最高、评论数最多、价格最高

  • 一般推荐:各项得分居中、评论数居中、价格居中

  • 非常不推荐:各项得分最低、评论数最低、价格最低

由于在做聚类分析时候去除了一个评论数为30509.0的异常样本。加上这条样本,得到最终推荐的四家店铺:

最后附上大众点评上热度值Top10的口味虾店,看看有没有你种草的店吧~

更多精彩推荐
☞太 6 了!区块链包包、疫情防控大脑……程序员这样玩转区块链!
☞谷歌教父传奇:跳级读博士、大学共同创立 Google ,规定工程师 25% 时间思考创意
☞新基建东风下,程序员这样乘风破浪!
☞Python实现信息自动配对爬虫排版程序
☞没想到 Hash 冲突还能这么玩,你的服务中招了吗?
☞观点 | 以太坊客户端多样性问题从何而来?
点分享点点赞点在看

吃货的自我修养,Python 告诉你哪家口味虾最好吃?相关推荐

  1. 我用Python采集了6万多家火锅店数据,告诉你哪家的火锅最好吃。

    大家好,最近太冷太冷了,取暖基本靠抖,通讯基本靠吼!不过天冷了,可以涮火锅吃羊肉,补一补!反正菜鸟哥很喜欢吃火锅,可以开始搞起来!那么,今天我们就用Python爬取某点评网站的火锅数据,一起找找好吃的 ...

  2. 吃货们看好了!python+selenium爬取淘宝美食

    前言 今天为大家介绍一个利用Python的selenium打开浏览器的方式来爬去淘宝美食,这个小案例涵盖了selenium的基本知识点,如何打开浏览器以及关键字的搜索 导入第三方库 打开浏览器 搜索功 ...

  3. kdj python实现_一颗韭菜的自我修养:用Python分析下股市,练练手

    一颗韭菜的自我修养. 机器之心报道,编辑:魔王.陈萍. 股市跌宕起伏.7 月初 A 股飙升,股票瞬间成为大家的热门讨论话题,「现在入场还来得及吗?」几乎成为新的问候语. 然而,经历了连续近 10 个交 ...

  4. python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手

    (给Python开发者加星标,提升Python技能) 来源:机器之心 一颗韭菜的自我修养. 股市跌宕起伏.7 月初 A 股飙升,股票瞬间成为大家的热门讨论话题,「现在入场还来得及吗?」几乎成为新的问候 ...

  5. 一颗韭菜的自我修养:用Python分析下股市,练练手

    一颗韭菜的自我修养. 股市跌宕起伏.7 月初 A 股飙升,股票瞬间成为大家的热门讨论话题,「现在入场还来得及吗?」几乎成为新的问候语. 然而,经历了连续近 10 个交易日的快牛行情后,上证指数上涨势头 ...

  6. python怎么计算总值_一颗韭菜的自我修养:用Python分析下股市,练练手

    一颗韭菜的自我修养. 机器之心报道,编辑:魔王.陈萍. 股市跌宕起伏.7 月初 A 股飙升,股票瞬间成为大家的热门讨论话题,「现在入场还来得及吗?」几乎成为新的问候语. 然而,经历了连续近 10 个交 ...

  7. 用Python分析股市----一颗韭菜的自我修养

    来源:机器之心 编辑:魔王.陈萍 一颗韭菜的自我修养. 股市跌宕起伏.7 月初 A 股飙升,股票瞬间成为大家的热门讨论话题,「现在入场还来得及吗?」几乎成为新的问候语. 然而,经历了连续近 10 个交 ...

  8. 非计算机专业同学的Python自我修养-2

    非计算机专业同学的Python自我修养-2 记录本科大一下的学习过程 2021/3/27 23.40修改 WEEK-4例题 好多代码都是抄的,我并不是真正的原创 兄弟们别直接抄啊,不然考试咋办哪 !! ...

  9. 给吃货:数据告诉你叫什么名字的餐馆菜更好吃?

    这本来是一个美女博士姐姐和我共同参与的严肃学术研究(发表期刊的那种).在征得她同意后,我删掉了大部分的学术性内容,增加了若干张丧心病狂的图片,篡改成了这篇回答.拿出来给大家娱乐一下. 在这个传播为王的 ...

最新文章

  1. OpenResty搭建高性能服务端
  2. tinyxml 内存泄露_有关TinyXML使用的简单总结
  3. python如何启动app_Python手机app爬虫|Airtest连接多个手机的时候,如何启动APP-start_app...
  4. docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用
  5. iOS:Tools:快速注释Doxygen
  6. js 短信验证码 6位数字
  7. 【Pytorch】interpolate==>上下采样函数
  8. 【AI视野·今日CV 计算机视觉论文速览 第195期】Tue, 11 May 2021
  9. 抢注“哔哩哔哩”商标卖成人用品?A站回应:不符合价值观 已申请注销
  10. Latex中插入超链接/网址
  11. (原创)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)
  12. CentOS7虚拟机克隆,且成功互ping
  13. 【事件驱动】【数码管识别】(C++多线程实现多幅图像的同步识别)
  14. 网易云音乐批量下载工具编写过程
  15. 树莓派做服务器装什么系统安装,树莓派 安装 群晖系统安装教程
  16. Mysql系统参数查询和设置
  17. 卅三先生的工程电磁场讲座.EEm05——边界条件001
  18. unity 安卓端输出日志神器--Reporter插件
  19. MATLAB安装 C盘空间不足问题解决
  20. (附源码)springboot基于微信小程序的超市收银系统 毕业设计 271611

热门文章

  1. SnowNLP简易教程:分词、词性标注、情感分析、繁体转换、关键字抽取、相似度计算...
  2. SAP WM 二步法确认TO单据
  3. SAP Batch Derivation功能初探之一
  4. 作为公司新上任的管理者,如何更好的规划工作方案
  5. 强化学习AI:它菜了,我慌了
  6. 如何构建一个成功的AI PoC(概念验证项目)
  7. 图灵奖得主Judea Pearl:人工智能是如何走出死胡同的?
  8. 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
  9. 曝光丨探访哈工大机器人的秘密基地(图)
  10. Python 之 matplotlib (八)Bar