如何动态获取过去12个月销售数据以生成柱状图?
动态获取过去12个月销售数据并生成柱状图方案
核心思路
放弃固定日期过滤,基于当前日期动态计算过去12个月的时间区间,这样每日更新数据时,过滤逻辑会自动适配最新的时间范围。以下以Python pandas(数据处理)+ matplotlib(绘图)为例,给出完整实现步骤:
步骤1:数据预处理与时间转换
首先确保日期字段是可识别的datetime类型,否则无法进行时间过滤:
import pandas as pd import matplotlib.pyplot as plt from datetime import datetime # 读取数据集(根据实际格式调整,比如Excel用pd.read_excel) df = pd.read_csv('sales_data.csv') # 将Order Date转换为datetime类型 df['Order Date'] = pd.to_datetime(df['Order Date'], format='%Y-%m-%d')
步骤2:动态计算时间范围
用当前日期往前推12个月,生成动态的起始日期:
# 获取当前日期,计算12个月前的日期(用pd.DateOffset处理闰年/不同月份天数更严谨) current_date = datetime.today() one_year_ago = current_date - pd.DateOffset(years=1)
步骤3:过滤数据并聚合统计
筛选出过去12个月的数据,再按Sub-Category分组统计销售数量:
# 过滤时间范围内的数据 filtered_df = df[df['Order Date'] >= one_year_ago] # 按Sub-Category分组,统计销售数量(若需统计销售额总和,替换为sum('Sales')) sales_stats = filtered_df.groupby('Sub-Category')['Order Date'].count().reset_index(name='Sales Quantity')
步骤4:生成自动更新的柱状图
基于统计结果绘制柱状图:
plt.figure(figsize=(10, 6)) plt.bar(sales_stats['Sub-Category'], sales_stats['Sales Quantity'], color='#2ecc71') plt.title('过去12个月各Sub-Category销售数量') plt.xlabel('产品子类别') plt.ylabel('销售数量') plt.xticks(rotation=45, ha='right') # 旋转x轴标签避免重叠 plt.tight_layout() plt.show()
数据库直接查询方案(如果数据存在数据库中)
如果你的数据存储在SQL数据库中,可以直接在查询语句中实现动态过滤,避免在代码中处理:
-- MySQL示例 SELECT `Sub-Category`, COUNT(*) AS `Sales Quantity` FROM sales_table WHERE `Order Date` >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) GROUP BY `Sub-Category`;
关键注意事项
- 确保
Order Date字段是标准日期格式,否则时间过滤会失效; - 使用
pd.DateOffset(years=1)比timedelta(days=365)更准确,能自动处理闰年、2月等特殊情况; - 若需统计销售额而非销售数量,将聚合逻辑从
count()改为sum('Sales')即可。
内容的提问来源于stack exchange,提问作者JShec
相关产品推荐
相关产品推荐

