当前位置: 首页 > news >正文

【Python】数据分析与可视化实践:收支日统计数据可视化的实现

Python数据分析与可视化实践:收支日统计数据可视化的实现

Author:萌狼蓝天

Date:2023-5-7

数据读入与基本处理

image-20230507225736946

上图是原始数据的一部分,存放于excel中,首先使用pd读入数据。读入数据后,删除不是收入,也不是支出的行。

# 读取数据
datas = pd.read_excel("账单.xlsx", sheet_name=0)
# 删除不是收入也不是支出
datas = datas.drop(datas[datas["收/支"]=="/"].index)

现在,剩下的数据,要么是支出,要么是收入。

折线图x轴标签准备

该折线图x轴,显示日期,因此,需要从原数据中取出日期,形成一个由不重复日期构成的列表(即这个列表中的日期不会重复)

x = datas["交易时间"].unique()

image-20230507230225174

这个数据太冗长了,作为标签的话放不下,因此需要处理一下,因为都是2022年的,所以取出月份和日就可以了。在此,使用了正则表达式的方式处理。

rule = r"2022-(.*?)T00" # 正则规则
x_label= ["{}".format(re.findall(rule,str(i))[0]) for i in x]
x_label

image-20230507230359210

到此,图表的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()根据日期统计金额,然后通过列名取出统计出来的金额

image-20230507231554009

处理支出同理

# 获取支出情况
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()

image-20230518085327955

http://www.lryc.cn/news/68851.html

相关文章:

  • Halcon 中_xld算子的概念与应用? select_shape_std 和 select_shape_xld区别?
  • [pgrx开发postgresql数据库扩展]7.返回序列的函数编写(3)多行表序列
  • 刚入职,就想跑路了...
  • 如何让技术架构师具有预知未来业务发展的能力
  • 卷麻了,新来的00后实在是太卷了...
  • 单片机--实战练习
  • Go Etcd 分布式锁实战
  • Windows环境下pcl点云库 安装配置教程
  • 岗位分析与可视化系统(三)
  • unity进阶学习笔记:json和xml
  • 数据结构之初识树与堆
  • 虚拟化技术 — VirtIO 虚拟设备接口标准
  • Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)
  • 高并发系统的三把利器
  • AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题
  • 渗透测试--6.1.aircrack-ng破解wifi密码
  • C++中的继承、以及赋值兼容转换。
  • js浏览器实现简单的实时扫一扫功能
  • unity愤怒的小鸟学习制作(二)
  • 干外包3年,彻底寄了...
  • 软考高项论文范文(三)
  • 浅谈谈谈OTA召回2023
  • 【GDI+】旋转文本/斜体字
  • python3 面试题总结
  • select poll epoll有什么区别
  • Java基础面试题突击系列1
  • go-zero和dtm分布式事务实现
  • Springboot +Flowable,会签、或签简单使用(一)
  • 银行面试中的即兴演讲技巧,你了解吗
  • 基于LT6911UXC的LVDS视频接口调试经验