你知道海底捞在全国有多少家店吗?

本文通过编程从海底捞官网获取全国门店数据,进行地图绘制和坐标转换,利用folium和pyecharts展示店面分布。数据显示,上海和北京的海底捞店面数最多,分别为81家和78家。同时,文章提供了地图可视化的实现过程。
摘要由CSDN通过智能技术生成

来源:可以叫我才哥

前段时间小团建去吃了海底捞,最近又看新闻说海底捞要关闭300家店,300家店是什么概念呢?那让我们先来看看海底捞全国有多少家店吧!

e1d456c512dde0eb26e8117c2b4cf058.gif

海底捞

目录:

  • 1. 数据采集

  • 2. 地图绘制

    • 2.1. 坐标转换

    • 2.2. 地图绘制

  • 3. 店面分布

35dc5995e2fc21efc362366c2cb4ef45.png

1. 数据采集

b7c99dc88ea055f434ea7b72388e30d5.png

直接打开海底捞官网,拖到首页最下面我们可以看到全球各国家与地区门店选择,点击中国即可进入到中国门店列表,在开发者模式找到源数据地址。

2d23dca6021d4c1fb0221f6d0909a681.png

可以看到请求到的数据格式很整洁,我们可以非常方便的处理,看代码:

import requests
import pandas as pd

# 接口地址
url = 'https://www.haidilao.com/eportal/store/listObjByPosition?country=CN&language=zh'
# 请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
    "accept": "application/json, text/plain, */*"
    }
r = requests.get(url, headers=headers)
# 门店数据信息
data = r.json()
# 转化为DataFrame类型
df = pd.DataFrame(data['value'])
# 存储本地
df.to_excel('海底捞.xlsx',index=False)

数据预览:

74cbecf400db34b95273bde3f98ae9f6.png

一共1404家门店

06f60a2c440a2c721ee499ad7ed7ea9e.png

2. 地图绘制

f3511a1cdbcdf48bd98d9dbfac6e058c.png

在采集到的数据中我们可以看到有经纬度坐标(百度地图),这里我的目标是将店地址绘制到地图上,采用的是folium绘图库。由于这个库没有百度地图,有高德地图,因此我需要先将经纬度坐标从百度转为高德,再进行地图绘制。

2.1. 坐标转换

在高迪开平找到坐标转换的接口,然后直接转换即可。

https://lbs.amap.com/api/webservice/guide/api/convert

c89d12d592a550a2f7c34ef8d91b3967.png
# 用于存储转换后的坐标列表
ss1 = []

for i , location in enumerate(df[['longitude','latitude']].values):
    location = str(location[0])+','+str(location[1])
    url = 'https://restapi.amap.com/v3/assistant/coordinate/convert?'
    
    parames = {
        'locations':location,
        'coordsys':'baidu',
        'key':'你的key',
        }
    
    r = eval(requests.get(url, params=parames).json()['locations'])
    ss = [r[1],r[0]]
    ss1.append(ss)
    print(f'\r{i+1}',end='')

输出结果:

3e1584bc74d2e420059d76a26cb3c0ca.png

2.2. 地图绘制

基于经纬度坐标点+店铺名称数据用于绘制,代码如下:

from folium import plugins
import folium

m = folium.Map([39.904989, 116.405285], # 北京中心区域经纬度
    zoom_start=10,
                tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # 高德街道图
                # tiles='https://mt.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', # google 地图
                # tiles='Stamen Toner',
               attr='高德')  

# 绘制店标记
groups = folium.FeatureGroup('')
for l,label in zip(ss1,df['storeName'].to_list()):
    groups.add_child(
        folium.CircleMarker(
            location=l,
            radius=7,
            color='yellow',
            fill=True,
            fill_color='red',
            fill_opacity=0.4,
            popup=folium.Popup(html=label,max_width=100),
        )
    )
m.add_child(groups)
m.add_child(folium.LatLngPopup())  

# 区域密度
marker_cluster = plugins.MarkerCluster().add_to(m)      
for l,label in zip(ss1,df['storeName'].to_list()):
    # 添加marker到地图
    folium.Marker(
        location = l,
        icon=None,
        # popup=folium.Popup(html=label,max_width=100),
    ).add_to(marker_cluster)

m.add_child(marker_cluster)

m.save('海底捞.html')  # 将结果以HTML形式保存到本地

输出结果对比:

左侧是绘制的,右侧是官网的

6f25605d986b4956535bf4122cdcc8c5.png
对比

95bf9d681282275569289b45a7299401.png

3. 店面分布

60ad9ff516af728df7f9d5b1565e3e9f.png

同样的,在高德地图开放平台也有经纬度坐标转化位置信息的接口,我们通过店铺经纬度信息找到其所在省市(原始数据中地址信息格式不统一,比较难解析)。

citys = []
provinces = []
for i , location in enumerate(df[['longitude','latitude']].values):
    location = str(location[0])+','+str(location[1])
    url = 'https://restapi.amap.com/v3/geocode/regeo?'
    params = {
        'location':location,
        'key':'4e3f878e4f74ad3b522d10830e54cfa2',
        'extensions':'base',
        'batch':'false',
        'roadlevel':0,
        }
    
    r = requests.get(url, params=params)
    data = r.json()['regeocode']
    city = data['addressComponent']['city']
    province = data['addressComponent']['province']
    if len(city)==0:
        city = province
    citys.append(city)
    provinces.append(province)
    print(f'\r{i+1}',end='')
df['城市'] = citys

获取城市信息后,就可以直接分组统计不同城市的海底捞店铺数了。

df.groupby('城市')['storeId'].nunique().sort_values(ascending=False).head(10)
城市店铺数
上海市81
北京市78
深圳市52
西安市52
广州市47
武汉市42
郑州市41
杭州市40
成都市33
南京市32

海底捞在全国242个城市有店面,其中在营店面数最多的城市是上海共81家店,其次是北京有78家店

from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

df = pd.read_clipboard()
c = (
    Map()
    .add("海底捞店面数", [list(z) for z in zip(df.省, df.数量)], "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="海底捞全国各省店面数分布"),
        visualmap_opts=opts.VisualMapOpts(max_=200),
    )
)
c.load_javascript()
c.render_notebook()
bdee71e332be8b2f8da3d277d2a19e7d.png
数量
广东185
江苏148
浙江120
上海81
北京78
山东78
河南75
陕西71
湖北64
福建59
安徽55
河北49
四川48
湖南44
天津30
江西27
广西24
辽宁22
重庆22
山西18
云南16
甘肃15
内蒙古15
吉林14
海南11
贵州11
黑龙江10
宁夏9
青海5

也可以用ExcelEasyShu插件进行绘制,效果如下:

8d8b0b2ce7e86b5fb34a4aa4364240de.png

咱们今天就简单介绍到这里吧!

-------- End --------

54f733a056d87ee9c34e9c8a37bad252.png
精选资料

回复关键词,获取对应的资料:

关键词资料名称
600《Python知识手册》
md《Markdown速查表》
time《Python时间使用指南》
str《Python字符串速查表》
pip《Python:Pip速查表》
style《Pandas表格样式配置指南》
mat《Matplotlib入门100个案例》
px《Plotly Express可视化指南》
精选视频

可视化: Plotly Express

财经: Plotly在投资领域的应用 | 绘制K线图表

排序算法: 冒泡排序 | 选择排序 | 快速排序 | 归并排序 | 堆排序 | 插入排序 | 希尔排序 | 计数排序 | 桶排序

b882169bcdd147ec016d329ffa37cfd8.png
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值