数据读入与基本处理
上图是原始数据的一部分,存放于excel中,首先使用pd读入数据。读入数据后,删除不是收入,也不是支出的行。
# 读取数据datas=pd.read_excel("账单.xlsx", sheet_name=0) # 删除不是收入也不是支出datas=datas.drop(datas[datas["收/支"]=="/"].index)
折线图x轴标签准备
该折线图x轴,显示日期,因此,需要从原数据中取出日期,形成一个由不重复日期构成的列表(即这个列表中的日期不会重复)
x=datas["交易时间"].unique()
这个数据太冗长了,作为标签的话放不下,因此需要处理一下,因为都是2022年的,所以取出月份和日就可以了。在此,使用了正则表达式的方式处理。
rule=r"2022-(.*?)T00"# 正则规则x_label= ["{}".format(re.findall(rule,str(i))[0]) foriinx] x_label
到此,图表的x轴准备完毕。
问:为什么要在这里准备好x轴标签呢?
答:
我们可能今天只有收入,没有支出,
可能昨天没有支出,只有收入,
可能前天支出收入都没有。
这里准备的x轴标签,包含了支出,收入的日期(只要你一天中有支出,或者有收入,这一天都要被作为标签)。
接下来就是数据了。
收入与支出数据的准备
# 获取收入情况data_shouru=datas[datas["收/支"]=="收入"] data_shouru_x=data_shouru["交易时间"].unique() data_shouru_y=data_shouru.groupby(["交易时间"]).sum()["金额(元)"] data_shouru_y
data_shouru_x
是 有收入的日期 构成的列表,data_shouru_y
是日期对应金额构成的列表。
data_shouru_x
的列表长度<=x
一天之中可能有多个收入,要统计起来,因此需要使用groupby
结合sum()
根据日期统计金额,然后通过列名取出统计出来的金额
处理支出同理
# 获取支出情况data_zhichu=datas[datas["收/支"]=="支出"] data_zhichu_x=data_zhichu["交易时间"].unique() data_zhichu_y=data_zhichu.groupby(["交易时间"]).sum()["金额(元)"] data_zhichu_y
画图
plt.figure(figsize=(10,5),dpi=100) # 创建画布plt.grid(True, linestyle="--", alpha=0.5) # 添加网格# 添加描述plt.title("支出情况", fontsize=24) plt.xlabel("日期") plt.ylabel("金额") # 显示图例plt.plot(data_shouru_x,data_shouru_y, color="r", linestyle="-", label="收入") # 绘画plt.plot(data_zhichu_x, data_zhichu_y, color="b", linestyle="--", label="支出") # 绘画plt.xticks(x,x_label,rotation=45) plt.legend(loc="upper right") # 显示图例必须在绘制时设置好plt.savefig("折线图") plt.show()