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

20251202马思钊 2025-2026-2 实验四 Python综合实践

20251202马思钊 实验四 Python综合实践实验报告

课程:《Python程序设计》

班级: 2512

姓名: 马思钊

学号:20251202

实验教师:王志强

实验日期:2026年6月15日

必修/选修: 公选课

代码更新在gitee中:https://gitee.com/w20251202-ma-sizhao/427shiyan/blob/master/251202终实验

一、设计概述

  1. 实验出发点

    移动支付已经这么普及,群众每天花钱、收钱的记录越来越多,但很多记账软件只是简单记录,没有适合观看的可视化图表。于是我用Python做个较智能的系统,既能处理本地数据,又能通过图表看懂自己的消费习惯,以及预测未来的花销。同时运用Python在数据处理、做图形界面(GUI)和用算法预测方面的能力。所以设计了智能个人财务与消费行为分析系统,希望能把零散的账单变成有用的信息,帮助用户更好地理财。
    注:实验数据均为虚构,于自己及周围人群的实际生活经历无关。

  2. 实验分析
    · 学习GUI编程: 使用 tkinter 库构建用户交互界面。
    · 数据处理能力:运用 pandas 库进行复杂的数据分组与统计分析。
    · 数据可视化:使用 matplotlib 将抽象的财务数据转化为直观的图表(饼图、折线图)。
    · 算法应用:结合简单的数学模型思想(如线性回归)进行趋势预测。
    · 实践从需求分析、代码实现到版本控制(Git/Gitee)的完整软件开发流程。

  3. 实验设计
    功能模块主要包含以下五项
    1.数据管理(Data Management):
    支持手动录入收支明细(日期、类别、金额、备注)。
    支持批量导入 CSV/Excel 历史数据。
    提供数据的增删改查(CRUD)功能。
    2.统计分析(Statistical Analysis):
    按“支出类别”统计占比(如餐饮、交通、娱乐)。
    按“时间维度”(月/周)统计收支趋势。
    3.可视化展示(Visualization):
    动态生成饼状图展示消费结构。
    生成折线图展示资金流动趋势。
    4.智能预测(Smart Prediction):
    设定月度预算阈值,超支自动预警。
    基于历史数据,利用简单线性回归算法预测下月支出趋势。
    5.报表导出(Export):
    将当前分析结果一键导出为 Excel 报表,便于存档。

二、关键代码的实现与说明

这份代码是一个完整的 "智能个人财务分析系统" 桌面应用。它结合了 tkinter(界面)、pandas(数据处理)和 matplotlib(可视化)

  1. 基础配置

image

这里导入了所有必要的库。
os, json, csv:用于文件和路径操作。
random, datetime:用于生成模拟数据。
tkinter 及其子模块:构建图形用户界面(GUI)。
pandas:核心数据处理引擎。
matplotlib 及 FigureCanvasTkAgg:用于在 Tkinter 窗口中嵌入图表。

image

这是 Matplotlib 绘图的前置代码。
SimHei (黑体) 是 Windows 下常用的中文字体,Arial Unicode MS 是 Mac/通用备选。
axes.unicode_minus=False 用于解决负号显示为方框的问题。

  1. 核心数据管理类
    这个类负责所有数据的逻辑运算。

image

构造函数初始化了一个空的 DataFrame,并尝试加载数据。

image

检查文件是否存在,不存在则调用 save_data 创建新文件。
读取 CSV 后,强制将“日期”列转换为 datetime 类型,确保后续排序和图表 X 轴显示正确。

image

完成数据写入与添加
save_data:保存时不保存索引 (index=False),保持 CSV 整洁。
add_record:将新数据包装成一个 DataFrame,然后与原数据纵向拼接。

image

这段是核心的分析方法
get_summary_by_category:使用 groupby 按“分类”聚合,计算每类支出的总和。
get_trend_data:按“日期”分组,计算每日总支出,并按日期排序,用于画折线图。

image

这是一个纯手工实现的简单线性回归(未使用 sklearn)。
将日期映射为数字索引 (day_index)。
手动编写公式计算斜率 m 和截距 b。
利用 y = mx + b 预测下一点的值。

image
image

这是类似于随机数函数的,用于生成50条随机的收支记录,涵盖了常见的消费和收入场景。
用以迅速测试该程序能否正常运行。

  1. 图形用户界面
    这个类负责将数据展示给用户,并接收用户输入。

image

标准的 Tkinter 初始化,窗口大小设为 900x650,并实例化了 FinanceManager。

image

通过 ttk.Style 统一设置了按钮和标题的字体(微软雅黑)和大小,提升了界面的美观度。

image

创建并放置顶部容器框架,添加左侧标题标签,创建右侧按钮组容器,依次添加功能按钮

image

创建了输入框和下拉框,用于左侧录入。insert(0, ...) 让日期默认显示当天

image

预设数据类型的五项的分别接收。

image

右侧展示区,使用了 Notebook 实现了多标签页切换。
Tab 1:使用 ttk.Treeview 创建表格,显示所有明细。
Tab 2:使用 matplotlib 嵌入图表。

image

嵌入图表,
FigureCanvasTkAgg 是连接 Matplotlib 和 Tkinter 的桥梁。
subplots(1, 2) 创建了一行两列的子图(左边饼图,右边折线图)

image
image

处理事件,获取视图数据,调用模型 (manager) 处理,处理成功后更新视图 (refresh, update)。
3. 主函数的入口
image

临门一脚。
三、运行结果
运行视频如下:https://www.bilibili.com/video/BV1Hsj36CE5Z/?spm_id_from=333.337.search-card.all.click

  1. 50条随机信息的实验情况
    明细列表局部如下:
    image

可视化图表如下:
image

预测结果如下
image

  1. 自行输入数据情况
    image
    败家子情况:
    image
    image

四、项目的亮点与特色
1.桌面GUI应用开发能力
摒弃了简单的命令行交互,使用 tkinter 构建了完整的图形用户界面。
实现了多窗口管理(主窗口+子窗口)、事件驱动编程(按钮点击回调)、以及复杂的布局管理(Grid/Pack 混合布局)。这证明了你具备开发独立桌面软件的思维。
2.嵌入数据可视化技术
解决了 Matplotlib 图表无法直接在 Tkinter 中显示的问题。
使用了 FigureCanvasTkAgg 适配器,将 Matplotlib 的绘图对象“嵌入”到 Tkinter 的 Canvas 组件中。这是 Python GUI 开发中的一个经典难点,掌握它说明你对底层绘图机制有深入理解。
3.结构化的数据处理流程
不仅仅是读写文件,而是引入了 Pandas 进行内存级数据分析。
利用 DataFrame 进行数据的分组聚合(GroupBy)、透视表分析(Pivot Table)和时间序列处理。这种“数据加载 -> 内存计算 -> 结果渲染”的模式是标准的数据工程范式。
4. 异常处理与用户体验优化
代码中包含了较为完善的容错机制。
设置了中文字体防乱码配置,使用了 messagebox 进行错误提示(如文件格式错误、空数据警告),防止程序因用户误操作而崩溃(Crash)。
五、遇到的问题和不足
1.中文乱码问题:
问题描述: 在使用 Matplotlib 绘图时,标题和标签中的中文显示为方框。
解决方案: 在代码开头添加了字体配置代码 plt.rcParams['font.sans-serif'] = ['SimHei'],成功解决了中文显示问题。
2.GUI 卡顿问题:
问题描述: 当数据量较大时,点击“分析”按钮会导致界面短暂假死。
解决方案: 初步分析了原因,是因为数据处理在主线程中进行。虽然改后未引入多线程,但通过优化 Pandas 的查询语句减少了计算耗时。
不足之处:仍存在不少的代码严谨性纰漏,pycharm给出了不少的警告。
image

该程序在运行过程中最大的不适应在于无法删除已录入信息,以及无法录入多个用户的不同信息。
可扩展方向

  1. 引入机器学习/预测算法
    预算预警: 根据过去 3 个月的平均支出,利用线性回归预测本月总支出。如果预测值超过设定预算,自动弹出红色警告。
    异常检测: 识别异常消费行为(例如:某笔支出远超历史平均值),并在界面上高亮标记。
  2. 数据持久化升级
    CSV 文件适合小数据,但容易出错且效率低。
    SQLite 集成: 使用 Python 内置的 sqlite3 库替换 CSV 存储。实现真正的关系型数据库查询(SQL),支持更复杂的多表关联(如:用户表、账单表、分类表)。
    ORM 框架: 尝试使用 SQLAlchemy,体验工业级的数据库开发模式。
  3. 智能化与自动化
    OCR 票据识别: 接入百度 AI 或腾讯云 API,实现“拍照记账”。用户上传发票截图,系统自动提取金额、日期和商家信息填入表格。
    定时任务: 使用 schedule 库,实现每周五下午 5 点自动生成周报并发送邮件给自己。
  4. 界面现代化改造
    Tkinter 原生界面略显老旧,可以尝试以下升级:
    换肤框架: 引入 ttkbootstrap 或 CustomTkinter 库,只需修改几行代码,就能获得类似 Windows 11 或 macOS 风格的现代化 UI(圆角按钮、深色模式)。
    Web 化转型: 如果觉得 Tkinter 上限太低,可以尝试用 Streamlit 或 Flask 重写前端,将其变成一个可以在浏览器访问的 Web 应用。
  5. 增加数据导出功能
    生成 PDF 报告: 使用 reportlab 库,一键生成包含图表和分析结论的月度财务报告。
    Excel 格式化导出: 导出的 Excel 不再是纯数据,而是带有颜色标记、自动求和公式的专业报表。

六、结课感悟
python课结束的好快,或许是拜时间流速过快所赐吧。当初选python一是为了在C语言之外想再探探新思路,二是学长学姐们的强力推荐。既想要学习这个知名度极高的编程语言,又想看看老师究竟有多好。老师肯定是非常好,听课听的几乎没有紧张感,甚为平易。
我记得最深的点就是开课讲到的“python是面向对象的语言”“python是高级语言”,以及那些列表元组字典集合的异同点,还有从切片遍历到正则爬虫之流。学习python课肯定首先带给我的编程技术的提升,能让我在C语言之外看到不同的语法,不同的思考方式,开辟并学习了一项全新的技术,不论学艺是否十分精湛,也肯定不枉这一个学期的周一晚上了。
这门课最与众不同两个点就是英语单词打卡和奇怪的手势签到吧。可惜我没能坚持打卡,断掉许多天数。又经历了一遍时间跨度较长的“三分钟热度”,我只坚持了一个多月,就开始间歇性的忘记这件事情。最后零零散散凑了60天,远远被其他同学甩开了。课上的手势签到倒是解起来特别顺溜,自第一次见个新鲜,第二次及之后就找到了思路,也算是梦回小学奥数了,再做做脑筋急转弯。
王老师自身的实力也肯定是高强,同时居然还有一批眼线,我认为这令无数老师望尘莫及。老师选的这个教室也是十分有眼光,能让众人被从外面监管上,甚至依然有不少作死的同学。王老师在最后一节课也为我们灌了该灌的鸡汤,听这份鸡汤的舒适感尤其浓厚,真的感觉到老师朴素挚切的愿望(或许是朴素吧)。可惜倒数第二节的抢问题环节,我的手速实在是望尘莫及,多次擦边有希望却也从来没有被叫到过,实在是令我痛心。
这一个学期下来确实没什么意见。建议嘛,既然老师说学长们都建议多给下一届留作业,那么臣附议。可以适时挑选一个良辰吉日来一个不扣分只加分的集体小测之类的活动,这样或多或少也能调动一部分有余力的同学主动去复习python相关的内容,或多或少也能减少一些同学们玩不知名小游戏的时长,只是我不确定这会不会对老师的名声之根基产生动摇,望老师斟酌。
最后祝王老师工作顺利,身体健康,长生不老,桃李满电科院。

http://www.jsqmd.com/news/1025311/

相关文章:

  • 深度盘点当贝Air1S,看看这款新品耳机都有哪些配置
  • 新手在无锡买猫狗 哪家宠物门店值得信赖? - 园友3800037
  • DeepSeek-V4:低成本高精度推理如何重塑AI算力经济
  • Steam Deck控制器Windows驱动完全指南:SWICD让你的游戏体验无缝衔接
  • CoaXPress 与 CoaXPress over Fiber 技术对比 - Hello
  • 武汉黄金回收哪家靠谱?2026 本地正规机构综合排行榜 - 奢侈品回收测评
  • 2026 粘结钕铁硼厂家推荐|高精度异形磁体定制,新能源电机磁瓦生产厂商 - 商业新知
  • 《超标量处理器设计》---Cache
  • BallonTranslator:让漫画翻译变得像聊天一样简单的AI工具
  • 2026 好用的素颜霜早八通勤实测|100 人 28 天横评榜单 黄皮自然抗暗沉优选 - 速递信息
  • 杭州购宠避坑指南:4家靠谱实体门店实测推荐 - 园友3800037
  • 2026银行秋招面试技巧班深度评测:4家头部机构对比,谁能帮你突破最后一关 - 互联网科技品牌测评
  • 2026年合肥留学机构怎么选?八家优选硬核测评行业头部梯队前五强 - 速递信息
  • 2026年北京刑事辩护律师避坑指南:5位经验丰富值得推荐 - 本地品牌推荐
  • 第29章:部署与服务化——Docker、K8s 与模型网关
  • 3步彻底改造:让Windows 11轻装上阵的终极方案
  • 猫抓浏览器插件:智能化资源嗅探与自动化下载解决方案
  • 2026银行网申修改机构横向评测:精准适配不同考生,破解网申死难题 - 互联网科技品牌测评
  • 合肥买猫狗靠谱推荐:萌宠宠园 宠物售卖,十年老牌资质齐全 - 园友3800037
  • 从零到爆款:3分钟让AI帮你搞定专业短视频创作
  • 无锡购宠避坑指南 7家正规实体繁育门店实测推荐 - 园友3800037
  • 使用MC工具同步MinIO
  • 6.16
  • AI漫剧AI短剧培训机构哪家好?首选莫瑶教育-12天AI漫剧+AI短剧全能实战集训班完整教学方案 - 教育信息网
  • 苏州靠谱宠物店实地测评,买猫买狗优选门店参考 - 园友3800037
  • matlab中的for特征
  • 横岗眼镜城有保障店铺核心维度解读 配镜前实用参考指南 - 速递信息
  • 北京卖表必看!全网高口碑奢侈品名表回收门店测评|本地6大商家客观排名 - 名奢变现站
  • Everspin的32Mb异步MRAM型号推荐
  • 智能体RAG客服系统4——middleware部分开发与agent主体开发