You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何绘制并分析DataFrame中餐厅营业高峰时段列表数据

餐厅高峰时段可视化解决方案

前提说明

现有数据包含3个字段:餐厅(Restaurants)、日期(Day)、高峰时段(busy_hours),其中busy_hours存储为数值列表,现有散点图无法满足分析需求,且空时段条目会干扰统计。

第一步:数据预处理

原有代码仅过滤了NaN值,无法过滤busy_hours为空列表的条目,且列表格式的字段无法直接用于可视化,需要先做如下处理:

  1. 将CSV读取后默认是字符串格式的busy_hours转换为Python数值列表
  2. 过滤busy_hours为空的所有行
  3. 将列表拆分为长表格式,每一行对应单条餐厅+日期+单个高峰时段的记录
    预处理代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import ast

# 读取数据
df = pd.read_csv("template (3).csv")
# 转换busy_hours从字符串列表到真实列表(CSV读取时列表会被识别为字符串)
df['busy_hours'] = df['busy_hours'].apply(lambda x: ast.literal_eval(x) if isinstance(x, str) else x)
# 过滤空高峰时段的条目
df = df[df['busy_hours'].apply(len) > 0]
# 拆分为长表
df_explode = df.explode('busy_hours', ignore_index=True)
# 确保时段是数值类型
df_explode['busy_hours'] = df_explode['busy_hours'].astype(int)

第二步:可选可视化方案

方案1:分餐厅高峰时段频次热力图

适合直观展示各餐厅全时段的高峰出现频率:

# 统计每个餐厅各时段出现的次数
heatmap_data = df_explode.groupby(['Restaurants', 'busy_hours']).size().unstack(fill_value=0)

plt.figure(figsize=(16, 8), dpi=80)
sns.heatmap(heatmap_data, cmap='Reds', annot=True, fmt='d')
plt.xlabel('高峰时段(小时)')
plt.ylabel('餐厅名称')
plt.title('各餐厅高峰时段出现频次热力图')
plt.show()

方案2:分餐厅高峰时段分布群图

适合展示各餐厅高峰时段的分布离散情况,可叠加日期维度分组:

plt.figure(figsize=(16, 7), dpi=80)
sns.swarmplot(data=df_explode, x='Restaurants', y='busy_hours', size=8, alpha=0.7)
# 如果需要按日期区分颜色可改为:
# sns.swarmplot(data=df_explode, x='Restaurants', y='busy_hours', hue='Day', size=8, alpha=0.7)
plt.xlabel('餐厅名称')
plt.ylabel('高峰时段(小时)')
plt.title('各餐厅高峰时段分布')
plt.xticks(rotation=45)
plt.show()

注意事项

  • 若运行时提示字段不存在,请注意检查Restaurants字段的拼写是否和CSV文件中一致
  • 如果你的busy_hours字段存储的是0-23的24小时制数值,上述代码可直接运行,若为其他格式需先做数值映射
  • 若需要按星期几聚合分析,可先将Day字段转换为星期类别后再分组统计

内容的提问来源于stack exchange,提问作者micheal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:39:03