3. 现金流趋势可视化
任务说明
本案例基于一份包含24个月(2023年1月至2024年12月)的经营现金流数据,完成两项工作:绘制月度与季度现金流趋势图,并识别数据中存在的季节性模式。最终输出两张趋势图及一份季节性判断结论。
数据与依赖
使用Python标准库csv读取数据,绘图使用matplotlib。数据文件cashflow_monthly.csv包含两列:month(格式YYYY-MM)与amount(单位:万元)。
month,amount
2023-01,320
2023-02,285
2023-03,410
2023-04,365
2023-05,390
2023-06,520
2023-07,468
2023-08,445
2023-09,610
2023-10,530
2023-11,575
2023-12,720
2024-01,355
2024-02,310
2024-03,445
2024-04,398
2024-05,425
2024-06,565
2024-07,505
2024-08,480
2024-09,655
2024-10,570
2024-11,620
2024-12,775
完整实现
import csv
import matplotlib.pyplot as plt
from datetime import datetime
# 读取数据
months, amounts = [], []
with open('cashflow_monthly.csv', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
months.append(datetime.strptime(row['month'], '%Y-%m'))
amounts.append(float(row['amount']))
# 按季度聚合
quarterly = {}
for dt, amt in zip(months, amounts):
key = (dt.year, (dt.month - 1) // 3 + 1)
quarterly[key] = quarterly.get(key, 0) + amt
q_labels = [f"{y}Q{q}" for y, q in quarterly.keys()]
q_values = list(quarterly.values())
# 图1:月度趋势
plt.figure(figsize=(10, 4))
plt.plot(months, amounts, marker='o', linewidth=1.5)
plt.title('Monthly Operating Cash Flow')
plt.xlabel('Month')
plt.ylabel('Amount (10k CNY)')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('monthly_trend.png', dpi=150)
plt.show()
# 图2:季度趋势
plt.figure(figsize=(8, 4))
plt.bar(q_labels, q_values, color='steelblue')
plt.title('Quarterly Operating Cash Flow')
plt.xlabel('Quarter')
plt.ylabel('Total Amount (10k CNY)')
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.savefig('quarterly_trend.png', dpi=150)
plt.show()
# 季节性分析:计算各月份多年均值
monthly_avg = {}
for dt, amt in zip(months, amounts):
monthly_avg[dt.month] = monthly_avg.get(dt.month, []) + [amt]
print("各月份平均现金流(万元):")
for m in range(1, 13):
avg = sum(monthly_avg[m]) / len(monthly_avg[m])
print(f"{m:2d}月: {avg:.1f}")
运行方式
- 将上述数据保存为
cashflow_monthly.csv,代码保存为trend_analysis.py,置于同一目录。 - 安装依赖:
pip install matplotlib - 运行:
python trend_analysis.py
验证方法与判定标准
运行后应生成monthly_trend.png与quarterly_trend.png两张图片,并在控制台输出各月份平均现金流。判定通过的观察要点:
- 月度图中可见每年3月、6月、9月、12月出现明显波峰,2月、4月、8月相对走低,且2024年整体高于2023年同期。
- 季度图中Q4最高、Q1最低,Q2与Q3居中,两年趋势一致。
- 控制台输出的各月均值中,12月均值最高(约747.5),2月最低(约297.5),6月(约542.5)与9月(约632.5)显著高于相邻月份。
以上特征共同表明该现金流序列存在年末冲高、季末翘尾、年初回落的季节性规律,且该规律在两年中稳定复现。
季节性模式结论
根据各月均值与图形走势,可识别出以下固定季节性模式:每年12月为全年峰值,Q4贡献最大;每年2月为全年低谷,Q1整体偏弱;每季度末月份(3月、6月、9月、12月)现金流均高于该季度内其他月份,呈现明显的季末集中回款特征。该结论可直接用于后续预测模型中的季节性分解与特征工程。