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

如何绘制时间序列DataFrame的多超市商品价格波动折线图

多超市疫情期商品价格走势可视化实现方案

前置数据清洗

先处理原始数据里的干扰值,否则出图会有明显偏差:

  • 你样例数据里价格列的0不是真实售价,是对应日期该超市未采集到该商品价格的标记,先统一替换为空值,避免折线被拉到0轴产生误导:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取数据后执行
price_columns = ['AC', 'BFRESH', 'LIDL', 'SUPERM']
df[price_columns] = df[price_columns].replace(0, pd.NA)
# 把索引的日期转成标准时间格式,保证时序轴排序正确
df.index = pd.to_datetime(df.index)
  • 按条码+日期做去重校验,避免同一条码同天多条重复记录拉歪聚合结果。

全量数据初步探查方案

你提到直接画968个商品的折线会杂乱,不用硬画单商品线条,先从聚合趋势和分布特征入手:

  • 大盘趋势观测:按周/月维度聚合各超市所有商品的平均售价、中位售价,画折线看整体价格走向,能快速定位疫情不同阶段各超市的整体定价变化,比如封控期是否出现普涨。参考代码:
# 按月聚合各超市平均售价
monthly_mean_price = df[price_columns].resample('M').mean()

plt.figure(figsize=(12, 6))
for market in price_columns:
    plt.plot(monthly_mean_price.index, monthly_mean_price[market], label=market, linewidth=2)
plt.title('各超市月度平均商品售价走势')
plt.xlabel('日期')
plt.ylabel('平均售价')
plt.legend()
plt.grid(alpha=0.3)
plt.show()
  • 全商品分布观测:如果要同时看所有商品的价格变化,把折线透明度调到0.1及以下,按超市分面绘制,密集的半透明线条会自然形成价格分布带,既能看到不同超市的商品价格区间随时间的变化,也不会因为线条堆叠显得杂乱:
# 转成长表适配分面绘图
df_long = df.reset_index().melt(
    id_vars=['Date', 'BARCODE'], 
    value_vars=price_columns,
    var_name='supermarket', 
    value_name='price'
)

g = sns.relplot(
    data=df_long,
    x='Date', y='price',
    col='supermarket',
    kind='line',
    alpha=0.08, # 调低透明度
    col_wrap=2,
    height=4, aspect=1.5,
    legend=False # 900多个条码不用显示图例
)
g.set_axis_labels('日期', '商品售价')
g.set_titles('超市:{col_name}')
plt.show()

代表性商品精细化分析

等你筛选出重点分析的商品后,就可以做清晰的单商品多超市价格对比:

  • 代表性商品筛选参考逻辑:
    • 优先选民生刚需品类:比如米面油、防疫物资、日常快消品,这类商品在疫情期间供需波动大,价格变化规律更有分析价值
    • 选价格波动大的商品:计算每个条码全周期的价格标准差,取排名靠前的商品,这些是价格变动最明显的样本
    • 选时间覆盖度高的商品:过滤掉只有零星几条记录的条码,优先选在售时间覆盖全分析周期80%以上的商品,保证走势连续可参考
  • 单商品多超市折线图参考代码:
# 替换成你要分析的目标条码
target_barcode = 5201263086618
item_df = df[df['BARCODE'] == target_barcode].sort_index()

plt.figure(figsize=(10, 5))
for market in price_columns:
    # 去掉空值再绘图,避免折线无意义断连
    plot_series = item_df[market].dropna()
    plt.plot(plot_series.index, plot_series, marker='o', markersize=3, label=market)
plt.title(f'条码{target_barcode}商品各超市售价走势')
plt.xlabel('日期')
plt.ylabel('售价')
plt.legend()
plt.grid(alpha=0.3)
plt.show()
  • 优化小技巧:
    • 可以在图上标注当地疫情关键节点,比如封控启动、保供政策发布、解封时间,直观看事件对价格的影响
    • 跨商品对比时,把价格换算成相对2020年1月基期的涨跌幅,代替绝对价格绘图,不会因为不同商品本身定价差太大影响可读性
    • 批量分析时可以用交互式绘图库做可筛选、可悬停看数值的折线图,不用每次改代码出静态图

内容的提问来源于stack exchange,提问作者Zoi K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:57:20