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

大家好,我是才哥。

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

7dfeb2645d75e507443172490a68801c.gif

海底捞

目录:

  • 1. 数据采集

  • 2. 地图绘制

    • 2.1. 坐标转换

    • 2.2. 地图绘制

  • 3. 店面分布

daae23a72fd0a30dba2582eebbf0b13d.png

1. 数据采集

8506f131f6e8d310778c8e0d24e1c422.png

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

936ce81586a66601453ff7afe893d200.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)

数据预览:

4e5f1aa78bd551f8aa405dcb4f7e61b1.png

一共1404家门店

6563ae5dff18cb1fd952914a2393917d.png

2. 地图绘制

ae44a6e33514ae56fa65e346f2181cc5.png

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

2.1. 坐标转换

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

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

53e711351d580d818bc1bda53c8672d5.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='')

输出结果:

fd20c139beaa13140d8556f901cc95a0.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形式保存到本地

输出结果对比:

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

4423ccec096c0c48c9716389c19c9cd9.png
对比

1886a2ae962df6acdbd2aef567e21ac0.png

3. 店面分布

e52b411e088e9699f25b3fa11655041d.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()
9ac52d41e06f4327cfc645efb159c464.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插件进行绘制,效果如下:

7e22928e07e1ab8d3383f161353fc788.png

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

de3b6216df8556d603e31ce18f24be3e.png

2abf90b210f9fb323be0eb4a9c381d7f.png

扫码加好友,加入海归Python编程和人工智能群

阅读更多

最近群里出现的3个数据处理需求,如何用Pandas简单实现一下

2021-11-14

a682e98e0a83432dc6f7c746951427e3.png

粉丝破万,和你一起聊一聊学习与公众号写作的一些事儿~

2021-11-12

8a01bb7b98b966fbc3d0e51f08b17baf.png

用Python读写Word文档入门

2021-11-05

b3fac30f55eb7f632229eb61c60e6be6.png

555b9d4780c47e084099625d4f261a4a.png

5cc5abfd055ba5c4171e829325ab7ce0.png

扫码加好友,加入海归Python编程和人工智能群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值