分析过程

整个过程一共分为三个步骤:

  1. 数据来源(细节部分不做展开,代码已公开在GitHub上)

  2. 基础分析(可以跳过,一些基本的数据分析方法、流程)

  3. 进阶分析(先来一张热力图,所有店铺的空间数据分析)

数据来源

利用爬虫技术获取了餐饮全分类、地域一级二级分类

在获取每个分类下面的标题、分数、评论、地址、人均、所有代金券数据

然后要把数据存入MySql数据库中

基础分析

先max,min看下异常数据,这些极值会影响最后统计结果,人均价格和评分有0的情况,对最后统计没有意义将这些数据进行剔除

对数据总量和剔除无效后的数据做一个占比展示,那么最后可以使用的数据26793条,占总量89%

from pyecharts import Liquid
'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
liquid = Liquid(title="样本数",subtitle='样本总量29876 剔除均价和评分为0的数据所剩的数量26793')
liquid.add("Liquid", [0.89, 0.7, 0.5, 0.3], is_liquid_outline_show=False)
liquid


好,接下来我们再来看下在这89%的数据中,我们按人均价格降序排解,到底哪几家会脱颖而出~

from pyecharts import Bar,Griddf = df.head(10)
title = df['title']
avg_price =  df['avg_price']
avg_score = df['avg_score']
comment_num = df['comment_num']bar = Bar(title="餐饮商家前十排行",subtitle='数据来源神秘组织:*团',width=800,height=400)
bar.add("人均", title, avg_price, mark_point=["min", "max"],mark_line=["average"])
bar.add("评论数", title, comment_num,mark_point=["max"],is_label_show=True, xaxis_rotate=30)grid = Grid(height=500)
grid.add(bar, grid_bottom="30%")



榜单前10的平均人均消费也达到了1126.4 RMB,其中,最贵的是“黄公子”人均 2665 RMB,不由得让我们对前10的商家起了兴趣,于是上了百度查看了一下

【黄公子】 人均 2665 RMB

隐藏在老式洋房里的一家人均千元的定制私房菜,仪式感十足,每天只接受10位顾客的预定,你们谁家宽裕的可以带我去遛遛 =。=

【MOOK酒吧】人均 1044 RMB

什么是“当当当当,当当当?” 天哪! 还有漂亮的小姐姐…~哇靠,仿佛恋爱了… =。=

【洋房火锅】人均 901 RMB

火锅中的劳斯莱斯…A级和牛600~800,涮一片牛肉小两百…我的天…贫穷真的限制我了我的想象 =。=


看完最贵的,那么我们看下最热的,也就是评论数最多的

从数据表中可以看出,整个评论排行榜的前十均被 小吃快餐、自助餐 2类霸榜(其中还剔除了各种xxx分店),有趣的是前十店铺的地址大多都在 嘉定、奉贤、松江、曹路 这些地区都在上海外环以外。这里有些店铺可能存单刷单嫌疑。

from pyecharts import Bar,Gridsql3 = '''#sql3
select distinct a.sub_id,a.sub_name,
b.poi_id,b.title,b.avg_price,b.avg_score,b.comment_num,b.address from meituan_classify_info as a
inner join meituan_shop_info as b on a.sub_id = b.sub_id and a.class_type = b.class_type
where a.class_type = 1 and a.sub_id not in(24,393,395) and b.avg_price <> 0 and b.avg_score <> 0
and CONCAT(b.sub_id,b.poi_id) not in ('6342030772','4050576755','6350576755','4052163162','2006068147006','5452800270','4087812358','6387812358','543311762')
order by b.comment_num desc limit 10;
'''df3 = pd.read_sql(sql3,conn)
data = sorted(df3[['title','comment_num']].values ,key=lambda x: x[1],reverse=True)
attr = [i[0] for i in data]
val = [i[1] for i in data]bar = Bar()
bar.add('comment_num', attr, val,is_label_show=True,xaxis_rotate=30)
grid3 = Grid(height=500)
grid3.add(bar, grid_bottom="30%")

【燕烤猪蹄店】人均 10 RMB

评论数量第一的竟然是家烤猪蹄店…!! 但为何以如此高的评论数位居榜首?是否存在刷榜行为?
对这块了解的请留言告知~(图3是本尊,喜欢的请点赞!)

好了,言归正传,分类不同,价格会相差很大,所以不能对所有类别进行全量统计(例如日料和小吃的价格就是天壤之别)下面的箱线图就很好的表达了这些分类的数据分布情况:

from pyecharts import Boxplotsql = '''select distinct sub_id,sub_name from meituan_classify_info where class_type = 1 and sub_id not in(24,393,395)'''
df = pd.read_sql(sql,conn)sql2 = '''select distinct poi_id,avg_price,sub_id from meituan_shop_info where class_type = 1 and avg_price <> 0 and avg_score <> 0'''
df2 = pd.read_sql(sql2,conn)x_axis = []
y_axis = []
for i in df.index:sub_id = df.loc[i].values[0]sub_name = df.loc[i].values[1]  avg_price = df2[df2['sub_id'] == sub_id ]['avg_price'].valuesx_axis.append(sub_name)y_axis.append(avg_price)boxplot = Boxplot("菜系数据分布情况")
_yaxis = boxplot.prepare_data(y_axis)   # 转换数据
tp_dict = {k:v for k,v in zip(x_axis,_yaxis)}
idx_tp = sorted([(max(v),k) for k,v in zip(x_axis,_yaxis)])# 根据max排序
x_ax = []
y_ax = []
for i in idx_tp:x_ax.append(i[1])y_ax.append(tp_dict[i[1]])
boxplot.add('boxplot', x_ax,y_ax,is_datazoom_show=True, datazoom_type='both',xaxis_rotate=30)grid = Grid()
grid.add(boxplot, grid_bottom="20%")


分类有很多种,要把菜系和食品的类别区分开(火锅可以是川菜也可以是日料,日料可以是自助也可以是海鲜)所以我们要把分类再细化,这里剔除食品分类,筛选出菜系类别(如:日料、川菜、粤菜、浙江菜、西北菜等)

from pyecharts import Piesorted_df = sorted(df4[['sub_name','cnt']].values, key=lambda x:x[1],reverse=True)
attr = [i[0] for i in sorted_df]
val = [i[1] for i in sorted_df]pie = Pie("*团各大菜系店铺数", title_pos='center', width=800)pie.add("菜系", attr, val, center=[50, 50], is_random=True,radius=[35,65], rosetype='radius',legend_orient='vertical',legend_pos='left',is_legend_show=True, is_label_show=True)


川湘菜、浙江菜、日料、粤菜、韩料 位居前5,可以说统计结果跟现实中完全吻合,继续对数据进行下钻,接下来就来专门研究下日料的情况。

进阶分析

在做日料店分布之前先来,上海市餐饮整体的一个分布情况,将数据库所有店铺的地址做清洗处理,然后百度地理经纬度坐标

将区域的每个坐标进行分组聚类,然后嵌入百度地图中(具体怎么嵌,请搜索百度地图SDK平台),就生成了下图 :

# 这里有几个知识点,地理坐标系一共分为几类
# 1.GPS设备获取的角度坐标,wgs84坐标
# 2.国测局坐标,gcj02坐标
# 3.百度经纬度坐标,bd09ll坐标
# 由于坐标信息都是经过加密处理,需要统一坐标才能够使用sql = '''select round(lng,4),round(lat,4),count(*) * 10 from meituan_shop_mapgroup by round(lng,4),round(lat,4);'''
cur.execute(sql)
result = cur.fetchall()
# 将坐标聚类,清洗
hotmap = [{"lng": float(i[0]), "lat": float(i[1]), "count": int(i[2])} for i in result]

15层级图中可以获取到很多信息,人口密集程度,商业繁华程度侧面就不说了,主要一下三点:

  1. 明显的两大区域,分别是以静安寺为中心向南京西路延伸段、人民广场至南京路延申段,两大商业区餐饮商铺成均匀及延续分布,说明不仅店多而且分布广。

  2. 次级区域分别有,上海火车站(不夜城)、中山公园、八佰伴、长寿路
    说明这些地区也有相当部分市场。

  3. 高热集中区域有,陆家嘴、环球港、中山公园、华东大学、马当路地铁站,铜川路等,这些高热征他们都分布在地铁枢纽区域,地域小店铺分布密集。

12层级图中环以外区域,从10点方向逆时针主要有几个明显区域:

安亭镇、南翔镇、华漕镇、九亭镇、莘庄镇、曹行镇、周浦镇、张江镇、川沙镇、金桥镇、曹路镇,都是以人口较密区域成散点式分布

10层级图上海餐饮分布总览:

左下3个大片红色区域由外向内分别是:金山、奉贤、松江
右下大红色是:惠南
上面岛屿是:崇明

终于到了上海日料分布情况的环节

热力图呈现大面积黄色区域为古北、天山地区,那边日本企业较多,所以日料店也相对较多,其次就是静安寺、人名广场、徐家汇、八佰伴等商圈

好了,地理坐标系的分析就到此告一段落,接下来尝试找出最好吃的日料店,由于评论,价格,评分的数值不在一个维度中,那么我们先要对这些数值进行收敛处理,处理步骤如下:

  1. 点评极值差异相当大,那么用log10去对评论进行收敛

  2. 价格虽越贵越好吃的概率较大,但为了找到性价比最高的店,这里将价格作为降权处理

  3. 评分最大5分最小0分,将0分提出,也同样对其进行收敛处理

  4. 对3个指标的线性加权,再用算法进行归一化处理(var - min) / (max - min) 就得到了最后的评分

'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
selectpoi_id, title,(result - min_rst) / (max_rst - min_rst) as convergence,comment_num ,comnt ,avg_price ,price ,avg_score ,score, result , max_rst , min_rstfrom(selectpoi_id, title,comment_num,ifnull(log(20,comment_num),0) as comnt,avg_price,log10(avg_price) as price,avg_score,ifnull(log2(avg_score),0) as score,ifnull(log(20,comment_num),0) - log10(avg_price) + ifnull(log2(avg_score),0) as result,1 as inner_col    from meituan_shop_infowhere sub_id = 20059 and avg_price <> 0) as x
left join
(selectmax(ifnull(log(20,comment_num),0) - log10(avg_price) + ifnull(log2(avg_score),0)) as max_rst,min(ifnull(log(20,comment_num),0) - log10(avg_price) + ifnull(log2(avg_score),0)) as min_rst,1 as inner_col    from meituan_shop_infowhere sub_id = 20059 and avg_price <> 0) as y on x.inner_col = y.inner_col
order by convergence desc

所有日料店加权计算后评分后,筛选出300RMB以上的日料店,吃货们自己去百度搜下吧,就不逐个介绍了

【舞泽】人均 313 RMB
很多料理都是采用蒸的方法来烹饪的,「生冻雪蟹」「蒸海鲜」「帝王蟹」「茶泡饭」都是特色,这些我都是听说的,等赚到钱了一定要去吃一下~

Python数据分析美团商家,告诉你上海好吃好喝的地方相关推荐

  1. python库有哪些餐厅_Python告诉你上海有哪些高性价比的西餐厅

    原标题:Python告诉你上海有哪些高性价比的西餐厅 点击上方"AI时间",关注并设为星标 加入人工智能技术社区! 源 / Python与数据分析文 /shenzhongqiang ...

  2. 【小盐巴学习笔记】—美团吃饭哪家强?Python词云分析告诉你

    [小盐巴学习笔记]-美团吃饭哪家强?Python词云分析告诉你 效果图 前言 一.爬虫分析 1.分析网址 2.分析数据 二.完整代码 1.爬取美团牛排店评论 2.绘制词云图 3.词云分析 总结 效果图 ...

  3. python课程费用-上海Python数据分析课程

    招生对象 本科学历或以上(有潜力学员可放宽到大专),在校大一至大四均可,理工科.经管类等专业背景,计算机类专业大三大四学生优先录取并签订就业推荐保障协议,已毕业学员请咨询课程老师另外安排. 实训目标 ...

  4. Python数据分析实战:上海二手房价分析

    1 数据搜集 使用 urllib 库中的request 模块爬取赶集网发布的上海二手房信息,包括包括户型.面积.单价等,再使用BeautifulSoup 库解析爬取的HTML数据,最终将数据保存到CS ...

  5. 使用python抓取美团商家信息

    抓取美团商家信息 import requests from bs4 import BeautifulSoup import jsonurl = 'http://bj.meituan.com/' url ...

  6. python数据分析实战之用户分析及RFM模型分析

    理论基础知识可以看我之前的博客: 1.python之Numpy知识点详细总结 2.python最最最重要的数据分析工具之pandas 3.pandas之表连接与高级查询 也可以进入我的专栏:欢迎订阅哦 ...

  7. python数据分析第9天

    python数据分析第9天 电商网站用户/订单/活动数据分析项目 商业模式 B2B:商家对商家(企业卖家对企业买家),交易双方都是企业,最典型的案例就是阿里巴巴,汇聚了各行业的供应商,特点是订单量一般 ...

  8. Python数据分析可以应用到哪些领域

    随着大数据的应用越来越广泛,应用的行业也越来越多,我们每天都可以看到一些关于数据分析的新鲜应用,从而帮助人们获取到有价值的信息.例如,网购时经常发现电商平台向我们推荐商品,往往这类商品都是我们最近浏览 ...

  9. 1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...

最新文章

  1. Android FM模块学习之一 FM启动流程
  2. 在特定索引处插入字符串
  3. 对于JavaScript中this关键字的理解
  4. SAP CRM和SAP Hybris的订单日志
  5. Linux 如何查看命令所在位置/查看命令文件所在位置
  6. 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
  7. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
  8. 【计算机网络】wireshark数据流追踪、图像抓取(转)
  9. clientHeight.offsetHeight.scrollHeight等的区别
  10. Windows下安装和配置Maven的方法及注意事项
  11. HALCON:模板匹配方法总结
  12. [转]Chrome 错误代码:ERR_UNSAFE_PORT
  13. Android GridView 分页加载数据
  14. 三、取消发布的WebService(删除一个发布成功的Web服务)
  15. c++病毒代码(附源码)
  16. php thrift 编译,Thrift 源码编译
  17. Flask后端实践 连载十三 Flask输出Excel报表
  18. 2021年惠来一中高考成绩查询入口,2021年广东高考体检报告结果查询时间及查询网址入口...
  19. Web安全-表单域隐藏
  20. Flutter实现微信支付和iOS IAP支付

热门文章

  1. c语言spawn函数什么作用,c – boost :: asio :: spawn有什么作用?
  2. QTranslator语言转换
  3. 编程模拟自然(九):元胞自动机
  4. MIT黑科技:通过手机记录的咳嗽数据检测是否感染新冠病毒
  5. 《SQL基础教程》读书小记
  6. 电子档案管理系统软件的档案检索工具有哪些?
  7. 旅游卡加盟代理合伙人模式软件开发
  8. 做一个AV网站需要做什么
  9. CET-6六级考前冲刺 听力 Tuesday
  10. b社服务器稳定吗,B社向玩家道歉 《辐射76》将会在12月推出两次大补