专栏名称: 爱数据LoveData
中国统计网(www.itongji.cn),国内最大的数据分析门户网站。提供数据分析行业资讯,统计百科知识、数据分析、商业智能(BI)、数据挖掘技术,Excel、SPSS、SAS、R等数据分析软件等在线学习平台。
目录
相关文章推荐
51好读  ›  专栏  ›  爱数据LoveData

Python数据可视化:分析瑞幸VS星巴克全国门店分布情况

爱数据LoveData  · 公众号  · BI  · 2024-04-13 11:29

正文

请到「今天看啥」查看全文


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

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

瑞幸上海分布热力图


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

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个瑞幸门店






请到「今天看啥」查看全文