- 阿里云月度账单
- 根据月份、消费金额(可开票)生成一个柱状图表
import pandas as pd
import matplotlib.pyplot as plt
import os
plt.rcParams['font.sans-serif'] = ['SimHei']
csv_files = [file for file in os.listdir() if file.endswith('.csv')]
fig, ax = plt.subplots(figsize=(12, 6))
bar_width = 0.2
for idx, file in enumerate(csv_files):
df = pd.read_csv(file)
df['账期'] = pd.to_datetime(df['账期'].str.strip(), format='%Y-%m')
df = df[df['消费(可开票)'] != 0]
if not df.empty:
df['消费(可开票)'] = df['消费(可开票)'].fillna(0)
table_name = file[:-4]
x_positions = [i + idx * bar_width for i in range(len(df))]
bars = ax.bar(x_positions, df['消费(可开票)'], width=bar_width, label=table_name, alpha=0.7)
for bar in bars:
height = bar.get_height()
ax.annotate(f'{
height:.2f}', xy=(bar.get_x() + bar.get_width() / 2, height),
textcoords="offset points", xytext=(0, 5), ha='center', va='bottom', rotation=75)
ax.set_title('年度账单消费情况(阿里云)')
ax.set_xlabel('月份')
ax.set_ylabel('消费金额(可开票)')
ax.set_xticks([i + (len(csv_files) - 1) * bar_width / 2 for i in range(len(df))])
ax.set_xticklabels(df['账期'].dt.strftime('%Y-%m'))
ax.legend()
plt.savefig('bar_chart.png')
plt.show()