基于 Pandas 与 Pyecharts 的全国星巴克门店数据可视化分析
本期利用 Python 对全国星巴克门店数据进行分析,主要关注各省份、各城市的门店数量分布及营业时间情况。
涉及的核心库:
- Pandas:数据处理与分析
- Pyecharts:交互式数据可视化
1. 导入模块
首先引入必要的库并忽略警告信息,保持环境整洁。
import pandas as pd
from pyecharts.charts import Line, Bar, Pie, Map, Geo
from pyecharts import options as opts
import warnings
warnings.filterwarnings('ignore')
2. Pandas 数据处理
2.1 读取数据
使用 read_excel 加载本地 Excel 文件中的门店数据。
df = pd.read_excel("./星巴克门店.xlsx")
查看数据基本信息,确认字段类型及缺失值情况。
df.info()
2.2 计算营业时长
原始数据包含开始和停止营业时间,需转换为时间对象后计算差值。注意处理跨天或负值情况(如凌晨结束的情况)。
df['开始营业时间_1'] = pd.to_datetime(df['开始营业时间'])
df['停止营业时间_1'] = pd.to_datetime(df['停止营业时间'])
df['营业时长'] = df['停止营业时间_1'] - df['开始营业时间_1']
df['营业时长'] = pd.to_timedelta(df['营业时长'])
df['营业时长'] = df['营业时长'].dt.total_seconds() / 3600
# 处理可能出现的负数时长(跨天情况)
df['营业时长'] = df['营业时长'].apply(lambda x: x if x > 0 else x + 24)
2.3 营业时长区间划分
将连续的营业时长划分为不同区间,便于后续统计分布。
df['营业时长区间'] = pd.cut(
df['营业时长'],
bins=[0, 8, 10, 12, 14, 16, 24],
labels=["0-8h", "8-10h", "10-12h", "12-14h", "14-16h", "16-24h"]
)
3. Pyecharts 数据可视化
3.1 各省星巴克门店数量柱状图
展示各省份门店数量的排名情况,通过反转坐标轴使数值高的排在上方。
def get_bar1(x_data, y_data):
bar1 = (
Bar(init_opts=opts.InitOpts(width='1000px', height='800px'))
.add_xaxis(x_data[::-1])
.add_yaxis("", y_data[::-1], label_opts=opts.LabelOpts(position="right"))
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts(
title='各省星巴克门店数量分布',
pos_top='2%',
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color='#228be6', font_size=20)
),
visualmap_opts=opts.VisualMapOpts(
is_show=False,
pos_top='70%',
pos_left='20%',
range_color=range_color
)
)
)
return bar1
结果显示上海市门店最多,超过 1000 家;广东、浙江、江苏、北京分列二至五位,均超 500 家。
3.2 各省星巴克门店数量饼图
通过环形图直观展示各省份门店占比情况。
def get_pie(x_data, y_data):
pie = (
Pie(
init_opts=opts.InitOpts(width='1000px', height='800px')
)
.add(
series_name="",
data_pair=[list(z) for z in zip(x_data, y_data)],
radius=["30%", '50%'],
center=["38%", "50%"],
label_opts=opts.LabelOpts(is_show=False, position="center")
)
.set_global_opts(
title_opts=opts.TitleOpts(
title='各省星巴克门店数量占比',
pos_top='2%',
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color='#228be6', font_size=20)
),
visualmap_opts=opts.VisualMapOpts(
is_show=False,
max_=600,
pos_top='70%',
pos_left='20%',
range_color=range_color
),
legend_opts=opts.LegendOpts(is_show=True, pos_right="15%", pos_top="8%", orient="vertical")
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
)
return pie
3.3 各省星巴克门店数量地图
利用地图组件直观呈现地理分布特征。
def get_map(x_data, y_data):
map0 = (
Map(init_opts=opts.InitOpts(width='1000px', height='600px'))
.add("", [list(z) for z in zip(x_data, y_data)], maptype="china")
.set_global_opts(
title_opts=opts.TitleOpts(
title='各省星巴克门店数量分布',
pos_top='2%',
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color='#228be6', font_size=20)
),
visualmap_opts=opts.VisualMapOpts(
is_show=True,
pos_top='70%',
pos_left='20%',
range_color=range_color
)
)
)
return map0
从地图分布可清晰看出,东南沿海地区门店密度远高于内陆其他地区。
3.4 各城市星巴克门店数量 TOP20
统计具体城市的门店数量排名。
数据显示,北上广深及杭州门店数量均在 200 家以上,位列前五。苏州、成都、宁波等城市也超过 200 家。南京、武汉、天津、重庆、西安、无锡等城市则在 100 家以上。
3.5 各城市星巴克门店数量热力图
通过热力图进一步观察城市间的密集程度差异。
3.6 星巴克门店开始营业时间分布
分析门店普遍开门的时间点。
def get_line1(x_data, y_data):
line1 = (
Line(init_opts=opts.InitOpts(width='1000px', height='600px'))
.add_xaxis(x_data)
.add_yaxis("", y_data)
.set_global_opts(
title_opts=opts.TitleOpts(
title='开始营业时间分布',
pos_top='2%',
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color='#228be6', font_size=20)
),
visualmap_opts=opts.VisualMapOpts(
is_show=False,
pos_top='70%',
pos_left='20%',
range_color=range_color
)
)
)
return line1
大多数门店集中在早上 06:45-07:45 之间开始营业,极少数在晚上 20:00 以后。
3.7 星巴克门店停止营业时间分布
分析关门时间的集中趋势。
大部分门店在晚上 21:00-22:00 之间停止营业,仅有少数延长至 23:30 以后。
3.8 星巴克门店营业时长区间分布
综合评估整体运营时长。
数据显示,有 3178 家店营业时长达到 14-16 小时,2075 家在 12-14 小时,10-12 小时的有 1381 家。整体上营业时长 10 小时以上的占比超过 95%,14 小时以上的占比约 80%,说明门店运营时间较长。
注:代码中 range_color 变量需根据实际配色方案定义,此处保留原逻辑结构。


