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}")

运行方式

  1. 将上述数据保存为cashflow_monthly.csv,代码保存为trend_analysis.py,置于同一目录。
  2. 安装依赖:pip install matplotlib
  3. 运行: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月)现金流均高于该季度内其他月份,呈现明显的季末集中回款特征。该结论可直接用于后续预测模型中的季节性分解与特征工程。