Day13-Python基础学习之数据分析案例

数据分析案例

data_define.py

# 数据定义的类
class Record:def __init__(self, date, order_id, money, province):self.date = dateself.order_id = order_idself.money = moneyself.province = province
​def __str__(self):return f"{self.date}, {self.order_id}, {self.money}, {self.province}"

file_define.py

# 因为读取文件的格式不同,所以采取抽象类
# 和文件相关的类定义
# 先定义一个抽象类用于做顶层设计
import json
​
from 数据分析案例.data_define import Record
​
​
class FileReader:def read_data(self) -> list[Record]:"""将读到的数据转换为Record对象"""pass
​
​
class TextFileReader(FileReader):def __init__(self, path):self.path = path   # 定义文件变量的路径
​# 复写def read_data(self) ->list[Record]:f = open(self.path, "r", encoding="utf-8")record_list: list[Record] = []for line in f.readlines():line = line.strip()  # 消去回车换行符data_list = line.split(",")record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])record_list.append(record)f.close()return record_list
​
​
class JsonFileReader(FileReader):def __init__(self, path):self.path = path
​def read_data(self) -> list[Record]:f = open(self.path, "r", encoding="utf-8")record_list: list[Record] = []for line in f.readlines():data_dict = json.loads(line)record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])record_list.append(record)f.close()return record_list
​
​
if __name__ == '__main__':text_file_reader = TextFileReader("D:/BaiduNetdiskDownload/第13章资料/2011年1月销售数据.txt")json_file_reader = JsonFileReader("D:/BaiduNetdiskDownload/第13章资料/2011年2月销售数据JSON.txt")list1 = text_file_reader.read_data()list2 = json_file_reader.read_data()
​for l in list1:print(l)
​for l in list2:print(l)

main.py

from file_define import FileReader, TextFileReader, JsonFileReader
from data_define import Record
​
text_file_reader = TextFileReader("D:/BaiduNetdiskDownload/第13章资料/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:/BaiduNetdiskDownload/第13章资料/2011年2月销售数据JSON.txt")
​
# 获取月份数据
jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()
# 将两个月份的数据合成一个list
all_data: list[Record] = jan_data + feb_data
​
# 开始数据计算
data_dict = {}
for record in all_data:if record.date in data_dict.keys():"""和老记录做累加即可"""data_dict[record.date] += record.moneyelse:data_dict[record.date] = record.money
​
print(data_dict)
​
# 可视化开发
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType
​
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))
bar.set_global_opts(title_opts=TitleOpts(title="每日销售额")
)
​
bar.render("每日销售额柱状图.html")

结果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学基础:深度学习的语言

数学基础:深度学习的语言 概述 在深度学习的世界里,数学不仅仅是一套工具,它是构建、理解和优化深度学习模型的基石。从向量空间的概念到复杂的优化算法,数学的每一个分支都在深度学习的发展中扮演着关键角色。本文的目标是通过深…

【前端面试3+1】17 伪类和伪元素的区别、CSS权重、图片显示优化、【二叉树最大深度】

一、伪类和伪元素的区别 1、伪类: 伪类是用来描述元素的特定状态的选择器,比如:hover、:active、:first-child等。伪类在选择器中以冒号(:)开头,用于匹配处于特定状态的元素。伪类可以用于选择DOM元素的特定状态&#…

zabbix解析以及安装

目录 目录 zabbix 是什么? 监控主要功能 zabbix 监控原理: zabbix运行机制 Zabbix的监控方式 Zabbix监控系统监控对象 Zabbix的优缺点 Zabbix的缺点 zabbix主要特点 zabbix 监控部署在系统中,包含常见的五个程序: 监控的架构 3.maste…

vscode和pycharm等idea编写protobuf文件格式化

想在pycharm或者goland等idea中开发protobuf文件的话,可以安装一个插件:protocol-buffers 安装之后,proto文件就会支持高亮和格式化了。 如果是vscode想要编写proto文件,可以安装另外一个插件:vscode-proto3 安装后&a…

“资深主食冻干品鉴家”认证!希喂CPMR2.0鲜肉主食冻干值得入!

作为一名养猫长达十二年的资深铲屎官,自从20年起,我家便步入了全冻干喂养的新纪元。请别误会,我并非什么拆二代,而是因为我找到了一款既让猫咪爱不释手,又在我预算之内的优质主食冻干。市面上的主流品牌,我…

如何解决线程池引发的future性能问题?

背景 在我们的日常开发中肯定会遇到线程池的使用,那么随着jdk8的使用发现,future.get()这个API的使用也很普及了,当然重点不是这个api而是我们在设置线程池参数的时候如果使用自带的四种拒绝策略,那没什么…

网络安全赛事中开源威胁情报的妙用

写在前面 近期参与了一场网络安全赛事,一些题目的解法涉及到开源网络威胁情报,遂对相关题目及涉及到的知识点进行分析。 什么是OSCTI 开源网络威胁情报 (Open-Source Cyber Threat Intelligence,OSCTI)是详细描述针对某个组织网络安全威胁的数据。OSC…

【力扣 Hot100 | 第二天】4.11 无重复字符的最长子串

文章目录 2.无重复字符的最长子串2.1题目2.2解法一:滑动窗口2.2.1解题思路2.2.2代码实现 2.无重复字符的最长子串 2.1题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例一: 输入: s "abcabcbb" 输…

从零开始写一个RTSP服务器(三)RTP传输H.264

目录 一、RTP封装1.1 RTP数据结构1.2 源码 二、H.264的RTP打包2.1 H.264格式2.2 H.264的RTP打包方式2.3 H.264 RTP包的时间戳计算2.4 源码 三、H.264 RTP打包的sdp描述四、测试 本篇文章目标,使用vlc打开sdp文件后,可以观看到视频数据 一、RTP封装 1.1 …

2024 CKA 基础操作教程(十三)

题目内容 考点相关内容分析 日志架构 虽然 Kubernetes 没有为集群级日志记录提供原生的解决方案,但是提供了以下几种方式收集容器日志: 使用在每个节点上运行的节点级日志记录代理。 在每个节点上部署一个日志代理,该代理负责收集节点上所有…

传奇 mir2韩国2005年原版代码

传奇 mir2韩国2005年原版代码 参考资料;传奇 mir2韩国2005年原版代码-感谢网虫大神分享_98999NET源码资源网

批量重命名文件名,支持取原文件名中间文字来进行重命名,实现文件重命名自由

在信息爆炸的时代,文件管理和命名显得尤为重要。你是否曾为文件命名而烦恼?是否曾经因为文件名过长、格式不统一、无法快速识别内容而浪费大量时间?今天,我要为大家介绍一款强大而灵活的批量文件重命名工具,它能够帮助…

ardupilot开发 --- 视觉伺服基础理论 篇

TOC 0.参考文献 https://zhuanlan.zhihu.com/p/422634446 基础

JetBrains CLion 2024.1 发布 - C 和 C++ 跨平台 IDE

JetBrains CLion 2024.1 发布 - C 和 C 跨平台 IDE 请访问原文链接:JetBrains CLion 2024.1 (macOS, Linux, Windows) - C 和 C 跨平台 IDE,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org JetBrains CLion - C 和 …

[ROS 系列学习教程] 建模与仿真 - URDF 语法介绍

ROS 系列学习教程(总目录) 本文目录 一、robot标签二、link标签三、joint标签 URDF文件中使用XML格式描述的机器人模型,下面介绍URDF的XML标签。 一、robot标签 机器人描述文件中的根元素必须是robot,所有其他元素必须封装在其中。 属性 name&#x…

postman接口测试(入门到精通)

下载: postman官方地址 测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例即可) 测试内部接口: 1.内部接口只提供给内部系统使用。(只需要测试正例即可) 2.内部接口提供给外…

AI大模型探索之路-应用篇13:企业AI大模型选型指南

目录 前言 一、概述 二、有哪些主流模型? 三、模型参数怎么选? 四、参数有什么作用? 五、CPU和GPU怎么选? 六、GPU和显卡有什么关系? 七、GPU主流厂商有哪些? 1、NVIDIA芯片怎么选? 2、…

P8602蓝桥杯大臣找路

很久以前,T 王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。 为节省经费,T 国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接…

政安晨:【深度学习神经网络基础】(八)—— 神经网络评估回归与模拟退火训练

目录 简述 评估回归 模拟退火训练 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 简述 深度学习神经网…

全排列问题

日升时奋斗,日落时自省 目录 1、全排列 2、全排列II 3、子集 4、组合 1、全排列 首先要了解全排列是怎么样的 例如:数组[1,2,3]的全排列(全排列就是不同顺序排列方式) 例子所有的排列方式如:[1,2,3],[1,3,2],[2,1,3],[2,3…