基于pycharts星巴克门店分布可视化分析

# 导入项目所需的模块
import pandas as pd
from pyecharts.charts import *
from pyecharts import options as opts
# 使用pandas读取数据
df = pd.read_csv('directory.csv') 
df.head()

查看缺失值 

df.isnull().sum()

del df['Phone Number']
del df['Postcode']

df.isnull().sum()

 删除空值

df.dropna(inplace= True)

地理热力图

  • 从热力图分布来看,星巴克门店主要还是集中于美国,其次在亚洲的日本,韩国,中国沿海地区也有不少分布;

  • 非洲,大洋洲几乎看不到星巴克门店的存在,当然这其中的原因,有的是出于该地区的消费水平考虑,星巴克不愿去开设门店,比如非洲地区,有的是因为当地居民瞧不上星巴克这种“商业咖啡”,比如澳大利亚

#通过`pd.merge()`将数据进行关联,获取门店的所属国家信息;

country_df = pd.read_excel('./abb_country.xlsx')
df_new = pd.merge(df,country_df,left_on='Country',right_on='abb',how = 'left')
# 数据分组计数,计算每个国家的门店数
df_t = df_new.groupby(['Coun'])['Brand'].count().reset_index()
df_t.head()
df_t.columns = ['Coun', '计数']
data_pair =  [i for i in zip(df_t['Coun'],df_t['计数'])]

绘制星巴克全球门店

# 新建一个Map
chart = Map(
    init_opts=opts.InitOpts(
        theme='roma',
        width='680px',
        height='600px'
    )
)

# # 添加数据
chart.add(
    "门店",  # 系列名称
    data_pair,
    maptype = "world",   # 地图类型——世界地图
    is_roam=False,   # 关闭缩放,即不能通过滚轮放大缩小
    zoom=1.2,  # 地图显示缩放比例
    is_map_symbol_show=False,   # 不显示地图上的小红点
    label_opts=opts.LabelOpts(is_show=False)   # 标签设置(国家的名称)
    )

chart.set_global_opts(
    # 标题设置
    title_opts=opts.TitleOpts(
        title="星巴克全球门店覆盖",  # 主标题
        subtitle='数据截止日期:2021年9月'  # 副标题
        ),
    # 图例设置
    legend_opts=opts.LegendOpts(is_show=False),
    # 视觉组件
    visualmap_opts=opts.VisualMapOpts(
        is_show=True,  # 显示视觉组件的图例
        is_piecewise=True,   # 颜色分段显示
        orient='vertical',   # 图例的布局,设置为垂直布局
        pos_left='2%',   # 图例显示位置
        pos_top='40%',
        range_text=[
            '门店数量', ''],   # 文本
        pieces=[{'min': 1000},
                {'min': 500,
                 'max': 1000},
                {'min': 100,
                 'max': 500},
                {'max': 100}],  # 设置数值的分段
        range_color=["#CCD3D9", "#E6B6C2", "#D4587A", "#DC364C"]  # 颜色范围
        ),

)

chart.render_notebook()

城市分布

# 按中国城市分组计数
temp = df.groupby('City')['Brand'].count().reset_index()
temp.columns = ['City','计数']

data_pair = [i  for i  in zip(temp['City'],temp['计数'])]

data_pair.sort(key=lambda x: x[1], reverse=True) # 进行排序 降序 

top_city  = data_pair[:20][::-1]  #  取20个 并且倒取

# 新建一个Bar
chart = Bar(
    init_opts=opts.InitOpts(
        theme='light',
        width='980px',
        height='900px'
    )
)

# 添加x轴数据
chart.add_xaxis([x[0] for x in top_city])
# # 添加y轴数据
chart.add_yaxis(
    "",
    [x[1] for x in top_city],
    # 标签设置
    label_opts=opts.LabelOpts(
        is_show=True,   # 显示标签
        position='insideRight',   # 显示位置
        formatter='{c}' ,  # 显示内容 {c}显示数值
        )
        )

chart.set_global_opts(
    title_opts=opts.TitleOpts(   # 标题设置
        title="星巴克门店最多20个城市",
        subtitle='数据截止日期:2017年2月'),
    )
# # xy轴翻转
chart.reversal_axis()
chart.render_notebook()

门店所有权占比

  • Company Owned:公司独资直营,这也是星巴克门店最多的经营方式;
  • Licensed: 许可经营;
  • Joint Venture: 合资经营,比如:国内江浙沪地区的星巴克最早就是由星巴克与统一集团联手经营,17年7月的时候星巴克已收回所有权;
  • Franchise:授权经营,类似麦当劳的经营模式;
# 分组计数,计算门店不同所有权的门店数量
df_t = df.groupby('Ownership Type')['Brand'].count().reset_index()
df_t.columns = ['经营方式', '计数']


data_pair = [i  for i  in zip(df_t['经营方式'],df_t['计数'])]

# 数据排序
data_pair.sort(key=lambda x: x[1], reverse=True) # 进行排序 降序 


# 新建一个饼图
chart = Pie(
    init_opts=opts.InitOpts(
        theme='light',
        width='680px',
        height='500px',
        bg_color='white'
    )
)

# 添加数据
chart.add(
    '',
    data_pair,
    radius=["10%", "45%"],  # 内外径设置
    rosetype="area",  # 通过半径展示占比
    label_opts=opts.LabelOpts(formatter="{b}: {d}%")  # 标签设置
)
chart.set_global_opts(
    # 标题设置
    title_opts=opts.TitleOpts(
        title="星巴克门店门店所有权分布",
        subtitle='数据截止日期:2017年2月'),
    # 图例设置
    legend_opts=opts.LegendOpts(
        is_show=True,
        pos_left='left',
        pos_top='10%',
        orient='vertical',
    ),
)

chart.render_notebook()

 

 星巴克国内门店最多10个城市

# 使用pandas读取数据
df = pd.read_csv('directory.csv')
df_20 = df[df['Country']=='CN'].groupby('City')['Brand'].count().reset_index().sort_values('Brand',ascending=False).head(20)
df_20.columns = ['City','计数']
data_pair  = [i  for i in zip(df_20['City'].to_list(),df_20['计数'].to_list())]
top_city = sorted(data_pair, key=lambda x: x[1], reverse=True)[:10][::-1]
# 新建一个Bar
chart = Bar(
    init_opts=opts.InitOpts(
        theme='chalk',
        width='980px',
        height='900px'
    )
)
# 添加x轴数据
chart.add_xaxis([x[0] for x in top_city])  # 元组的0索引
# 添加y轴数据
chart.add_yaxis(
    "",
    [x[1] for x in top_city],  #  元组的1索引 
    # 标签设置
    label_opts=opts.LabelOpts(
        is_show=True,   # 显示标签
        position='insideRight',   # 显示位置
        formatter='{c}'   # 显示内容 {c}显示数值
        )
        )

chart.set_global_opts(
    title_opts=opts.TitleOpts(   # 标题设置
        title="星巴克国内门店最多10个城市",
        subtitle='数据截止日期:2017年2月'),
    xaxis_opts=opts.AxisOpts(is_show=False),  # x轴位置显示在上方
    )
# xy轴翻转
chart.reversal_axis()
chart.render_notebook()

星巴克国内门店分布

# 新建GEO实例
geo = Geo(
    init_opts=opts.InitOpts(
        theme='dark',
        width='980px',
        height='600px'
    )
)


data_pair = []
for idx, row in df[df['Country']=='CN'].iterrows():  # 
    # 需要添加自定义坐标点(坐标的那个点 ,经度,维度 )
    geo.add_coordinate(row['Store Number'], row['Longitude'], row['Latitude'])
    # 点数据存放再datapair中
    data_pair.append([row['Store Number'], 1])  # 1 表示一个数 

# 添加地图   
geo.add_schema(
    maptype="china",
    zoom=1.5,   # 地图缩放比例
)

geo.add(
    '',  # 系列名称
    data_pair,
    type_='heatmap',  # type选择heatmap
    is_large=True,  # 当图表数据量大时可设置为True,进行优化
    blur_size=4,  # 光晕大小
    point_size=3,   # 点的大小  可参考文章https://blog.csdn.net/qq_27484665/article/details/117395302

)


geo.set_global_opts(
    # 标题设置
    title_opts=opts.TitleOpts(
        title="星巴克国内门店分布", pos_top='3%', pos_left='center', 
        title_textstyle_opts=opts.TextStyleOpts(color='red', font_size=20)  # 标题字体风格设置
        ),
    # 视觉组件设置,默认通过颜色完成映射
    visualmap_opts=opts.VisualMapOpts(
        is_show=True,  # 关闭组件框的显示
        max_=10,  # 映射数据的范围最大值
        range_color=['blue', 'blue', 'green', 'yellow', 'red']  # 颜色范围
        ),
)


# print(data_pair)
geo.render_notebook()

 

 由图可见,星巴克在中国主要分布在沿海地区以及四川、重庆、武汉和北京

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值