社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python数据可视化:瑞幸会撼动星巴克的行业地位吗?

量化研究方法 • 1 年前 • 494 次点击  


瑞幸和星巴克在我国市场上,是把咖啡领域的大部分业务都已经给占领的状态,今天小爱就给大家分享一下,使用Python数据可视化分析瑞幸与星巴克全国门店分布情况,一起来吧!

瑞幸会撼动星巴克的行业地位吗?

10月份瑞幸咖啡的酱香拿铁火出圈,让瑞幸再一次出现在聚光灯下,上一次还是财务造假的时候。


这几年国内咖啡市场火热,带动瑞幸在内的很多咖啡品牌飞速发展,从2013年到2023年,预计中国人均咖啡消费量上涨了238%,现在全国合计咖啡门店数量已超10万家,且以每年上万家的数量在增长。


瑞幸咖啡的崛起让我们想到咖啡界的标杆-星巴克,星巴克几乎是过去十几年咖啡的代名词,也是城市白领们的生活方式。


现在出现的现象是,但凡有星巴克门店的地方,几百米内几乎都有瑞幸门店的身影,有的甚至两三个形成包围之势。


下面通过可视化看板和Python数据分析来对比星巴克和瑞幸门店在数量、区域分布上的差异及关联关系。


主要有两点发现:


1、星巴克更集中于长三角、珠三角、京津冀等沿海经济发达地区,特别是一二线城市;瑞幸相比星巴克较为分散,在很多三四线及以下城市也有门店。


2、瑞幸门店选址集中在星巴克周边,数据显示方圆500米范围内,全国平均每个星巴克门店周边有0.6个瑞幸门店。


数据集

因为要对比分析星巴克和瑞幸门店数量和位置,所以数据集主要字段有门店名称、经度、纬度、城市。

注:数据集时间为2022年,有20%左右的数量误差

全国星巴克咖啡门店数据集:全国瑞幸咖啡门店数据集:

两个数据集都存放在平台上,通过数据视图可以直接查看和使用数据集,后面我们用来搭建数据看板。


因为后面需要Python来处理数据,所以需要通过API数据接口来获取数据,操作起来非常方便,留着后面备用。

import requests
headers = { "x-token""你的鉴权token" }
response = requests.get("http://app.chafer.nexadata.cn/openapi/v1/sheet/sht22nId5uouP2/records?size=1&page=1", headers = headers)
print(response.json())

星巴克、瑞幸全国门店数对比

截至数据集时间(2022年),星巴克全国门店数量预计4442,瑞幸咖啡全国门店数量预计3904,星巴克门店数比瑞幸多14%。

从量级上来看两者已经很接近,而且瑞幸正以可怕的增长速度扩张门店,以我家附近的商圈为例,去年还只有一家瑞幸,今年已经有三家。


星巴克无论从选址位置、开店成本、门店面积、店员数量上来说都比瑞幸要苛刻一些,瑞幸主打外卖+外带,这也是除市场需求因素外,瑞幸能快速扩张的原因。


星巴克分布全国Top20城市


星巴克门店数量前五的城市是:上海、北京、杭州、深圳、广州。在前二十城市中,长三角有6个,珠三角有5个,京津冀2个。

上海的星巴克门店数量668,是第二名北京2倍之多,同时上海也是全球星巴克门店数量最多的城市,看来魔都人民对咖啡的喜爱名不虚传。


杭州的星巴克数量仅次与上海、北京,高于深圳、广州,杭州的互联网和电商从业者们也比较喜欢星巴克。


瑞幸分布全国Top20城市


瑞幸门店数量前五的城市是:上海、北京、广州、深圳、杭州,与星巴克前五城市一样,但排序略有差异。


在前二十城市中,长三角有6个,珠三角有2个,京津冀2个。

星巴克主要聚集在沿海一二线城市,而瑞幸在内陆城市快速占领市场,瑞幸前20的城市中已经有了合肥、昆明、郑州,而星巴克前20里并没有出现这三个省会城市。


因此瑞幸门店的分布更加分散,没有过度集中在一线城市。


星巴克全国分布热力图


通过星巴克门店热力图也能看到,红色高密度区主要集中在沿海地区,内陆则呈现点状式分布,比较稀疏。

瑞幸全国分布热力图


瑞幸门店分布则更加均匀,除沿海地区,华中地区湖南、安徽、湖北、湖南等也有比较多的门店。

星巴克上海分布热力图


上海是全国咖啡消费需求最大的城市,我们看看星巴克门店在上海的分布情况。

整体上星巴克门店集中在上海市区内环范围,往外以点线式分散,郊区五大新城、浦东机场、虹桥枢纽也是较为集中的区域。

瑞幸上海分布热力图


瑞幸在上海市区内环的集中度没有星巴克那么明显,整体数量上也少很多。

Python数据分析

下面再深入分析星巴克和瑞幸门店的关联关系,我们知道瑞幸咖啡是后起之秀,据说很多门店的选址依据主要看周边是否有星巴克。


那全国范围每个星巴克门店周边平均有多少个瑞幸门店呢?这次从方圆500米范围看看瑞幸在星巴克周边的聚集情况。


我们使用Python和其第三方库shapely来进行处理数据,shapely主要用来处理地理坐标数据。

第一步:导入所需要的库

# 导入相关库
import pandas as pd
import requests
import time 
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

第二步:从API中抽取数据




    
# 抽取星巴克和瑞幸门店数据,通过下秒机器人API调用
# 抽取星巴克门店数据
headers = { "x-token""tk7a2980431688455e8976e4bad4d13d6a" }
starbucks_list = []
for i in range(1,10):
    response_1 = requests.get("http://app.chafer.nexadata.cn/openapi/v1/sheet/sht22nId5uouP2/records?size=500&page={0}".format(i), headers = headers)
    starbucks = response_1.json()['data']['list']
    starbucks = pd.DataFrame(starbucks)
    time.sleep(1)
    starbucks_list.append(starbucks)
starbucks = pd.concat(starbucks_list)
# 抽取瑞幸门店数据
luckin_list =[]
for j in range(1,9):
    response_2 = requests.get("http://app.chafer.nexadata.cn/openapi/v1/sheet/sht22nIeomVmYy/records?size=500&page={0}".format(j), headers = headers)
    luckin = response_2.json()['data']['list']
    luckin = pd.DataFrame(luckin )
    luckin_list.append(luckin)
    time.sleep(1)
luckin = pd.concat(luckin_list)

第三步:判断星巴克门店方圆500米范围内的瑞幸门店数

# 根据星巴克咖啡店坐标绘制半径为XX米的地理区域
def circle(data,radius):
    # radius 表示区域半径
    # 给定地理坐标
    center_latitude = float(data['维度'])
    center_longitude = float(data['经度'])
    # 创建圆形区域
    center_point = Point(center_longitude, center_latitude)
    circle = center_point.buffer(radius/111300)
    # 创建多边形区域
    polygon = Polygon(circle.exterior)
    return polygon

# 根据经纬度构建坐标点
def point(data):
    # 给定地理坐标
    center_latitude = float(data['维度'])
    center_longitude = float(data['经度'])
    # 创建坐标点
    center_point = Point(center_longitude, center_latitude)
    return center_point

# 判断瑞幸咖啡店是否在星巴克方圆500m范围内
def is_inside(data):
    polygon = data['Polygon']
    # 判断坐标是否在区域内
    n = 0
    luckin_city = luckin[luckin['城市']==data['城市']]
    for point in luckin_city['Point']:
        is_inside = polygon.contains(point)
        # 打印判断结果
        if is_inside:
            n = n + 1
    return n

# 根据星巴克门店坐标位置绘制方圆半径为500米的地理区域
starbucks['Polygon'] = starbucks.apply(circle,axis=1,args=(500,))

# 根据瑞幸门店经纬度构建坐标点
luckin['Point'] = luckin.apply(point, axis=1)

# 判断瑞幸门店是否在星巴克门店方圆500米范围内
starbucks['Luckin_numbers' ] = starbucks.apply(is_inside, axis=1)


数据处理后如下:

第四步:分析数据

  1. 方圆500米范围内,全国平均每个星巴克门店周边有0.6个瑞幸门店
# 方圆500米范围内,全国平均每个星巴克门店周边有0.6个瑞幸门店
starbucks['Luckin_numbers'].mean() 

输出:0.6

  1. 方圆500米范围内,全国最多的星巴克门店周边有7个瑞幸门店
# 方圆500米范围内,最多的星巴克门店周边有7个瑞幸门店
starbucks['Luckin_numbers'].max()

输出:7

  1. 方圆500米范围内,星巴克门店周边平均瑞幸门店数各城市排名,最多的是临沂市,平均每个星巴克门店周边有1.8个瑞幸门店
# 方圆500米范围内,星巴克门店周边平均瑞幸门店数各城市排名
# 最多的是临沂市平均每个星巴克门店周边有1.8个瑞幸门店
city_list = []
for city in pd.unique(starbucks['城市']):
    avg_luckin_numbers = starbucks[starbucks['城市']==city]['Luckin_numbers'].mean()
    starbucks_nums = starbucks[starbucks['城市']==city]['名称'].count()
    city_list.append([city,starbucks_nums,avg_luckin_numbers])

df = pd.DataFrame(city_list,columns=['city','starbucks_nums','avg_luckin_numbers'])
df.sort_values(by=['avg_luckin_numbers'],axis=0,ascending=False)


输出:

看来瑞幸确实与星巴克有着不解的缘分,难怪我们会看到星巴克周边那么多的瑞幸门店。


星巴克门店养成了周边用户喝咖啡的习惯,或者说这里喝咖啡的用户比较多,星巴克才来这里开店,那么在星巴克周边再开瑞幸咖啡,就可以低成本获取一大波潜在用户,尽管有竞争,还是非常值得的。


总   结

我们通过可视化看板和Python数据分析展示了星巴克和瑞幸咖啡门店的区域分布、关联关系,其实还有很多值得分析挖掘的地方。


比如说有些城市星巴克门店周边的瑞幸门店非常少,或者几乎没有,那原因是什么?是潜在的机会还是要规避的深坑?


如果大家有兴趣可以试一试。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169046
 
494 次点击