用面向对象的方法进行数据分析

在这里插入图片描述
项目从两个不同类型的文件(文本文件和 JSON 文件)读取销售数据,将其封装为 Record 对象,合并数据后,统计每天的销售总额,并通过 pyecharts 库生成一个包含每日销售额的柱状图(Bar chart)。接下来,我们逐步讲解每一部分的功能。

1. 数据定义类 (Record)

class Record:def __init__(self, date, order_id, money, province):self.date = date         # 订单日期self.order_id = order_id # 订单IDself.money = money       # 订单金额self.province = province # 订单所在省份def __str__(self):return f"{self.date} {self.order_id} {self.money} {self.province}"
  • Record 是用来封装每一条销售记录的数据类,包含四个属性:date(日期)、order_id(订单编号)、money(金额)和 province(省份)。
  • __str__ 方法定义了当打印对象时,显示的格式。

2. 文件读取的抽象类

class file_reader:def read_data(self):"""这是抽象方法,具体子类会实现读取数据并转换为 Record 对象列表的功能"""pass
  • file_reader 是一个抽象类,定义了 read_data 方法,但不提供具体实现。其子类将负责从不同格式的文件中读取数据。

3. 文本文件读取类 (TextFileReader)

class TextFileReader(file_reader):def __init__(self, path):self.path = path  # 保存文件路径def read_data(self):f = open(self.path, 'r', encoding='utf-8')record_list: list[Record] = []  # 用于存储 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 对象record_list.append(record)  # 将每个记录添加到列表f.close()return record_list  # 返回所有记录对象的列表
  • TextFileReader 读取文本文件并解析每一行。每一行数据按逗号分隔,生成 Record 对象,并将这些对象加入 record_list 列表。

4. JSON 文件读取类 (JsonFileReader)

class JsonFileReader(file_reader):def __init__(self, path):self.path = pathdef read_data(self):f = open(self.path, 'r', encoding='utf-8')record_list: list[Record] = []for line in f.readlines():data_dict = json.loads(line)  # 解析每行的 JSON 数据record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])  # 创建 Record 对象record_list.append(record)f.close()return record_list
  • JsonFileReader 解析 JSON 文件,每一行数据都是一个 JSON 字符串,将其转换为 Python 的字典,然后生成 Record 对象。

5. 主函数:读取数据并处理

if __name__ == '__main__':textfilereader = TextFileReader('D:\study python\code\python实践\\19.数据分析案例\\2011年1月销售数据.txt')jsonfilereader = JsonFileReader('D:\study python\code\python实践\\19.数据分析案例\\2011年2月销售数据JSON.txt')list1 = textfilereader.read_data()  # 从文本文件读取数据list2 = jsonfilereader.read_data()  # 从 JSON 文件读取数据# 打印读取到的记录for record in list1:print(record)for record in list2:print(record)
  • 这里是从两个文件中读取数据,并打印每一条 Record 记录,确保读取到的数据正确。

6. 数据处理和可视化

a. 合并数据并计算每日销售额
text_data = textfilereader.read_data()
jan_data = jsonfilereader.read_data()all_data = text_data + jan_data  # 合并两个文件的数据# 字典存储每天的销售额
data_dict = {}
for record in all_data:if record.date in data_dict.keys():data_dict[record.date] += record.money  # 累加相同日期的销售额else:data_dict[record.date] = record.money   # 新日期,初始化销售额
  • 这段代码将 text_datajan_data 数据合并,并计算每一天的销售总额,结果存储在 data_dict 中,字典的键是日期,值是该日期的总销售额。
b. 生成柱状图
# 创建一个Bar类对象
bar = Bar(init_opts=InitOpts(theme=ThemeType.DARK))  # 使用暗黑主题# 添加x轴数据(日期)
bar.add_xaxis(list(data_dict.keys()))# 添加y轴数据(销售额),并隐藏数据标签
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))# 设置全局配置,添加图表标题
bar.set_global_opts(title_opts=TitleOpts(title="每日销售额")
)# 渲染生成HTML文件
bar.render("每日销售额.html")
  • Bar 类用于生成柱状图。
  • add_xaxis() 用于设置 X 轴的标签,这里是日期列表。
  • add_yaxis() 用于设置 Y 轴的数值,这里是每天的销售总额。
  • set_global_opts() 设置全局的图表选项,如图表的标题。
  • 最后使用 render() 方法生成一个 HTML 文件,包含柱状图。

7. 输出文件

生成的 HTML 文件可以在浏览器中打开,显示每日销售额的柱状图。

总结:

  • 数据从文本文件和 JSON 文件中读取,并封装为 Record 对象。
  • 使用 Python 的字典进行每日销售额的汇总。
  • 利用 pyecharts 库将销售数据可视化为柱状图,并输出为 HTML 文件进行展示。

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

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

相关文章

无线感知会议系列【1】【增强无线感知应用的鲁棒性】

前言: 这个是2021年 泛在可信智能感知论坛,汤战勇 (西北大学物联网研究院 )教授的 一个讲座《wireless signals like WiFi, RFID and (ultra) sound as a powerful modality for ubiquitous sensing》 参考连接: 4.见微知萌—…

ollama 本地部署

ollama 本地模型部署 下载安装: [link](https://ollama.com/download)下载说明 部署使用在终端查看ollama是否安装完成终端查看ollama 命令说明查看当前支持下载的模型启动对话模式默认情况下,ollama启动了server 的api访问功能 外部 api访问使用postman网页版本for…

什么是Aware注入?

Spring容器可以在Bean初始化的时候,自动注入一些特定信息(如beanfactory),使得bean可以轻松的访问其他Bean的实例,简化代码,避免了显式的注入。 Spring提供了很多Aware的接口,如下: 拿其中的BeanFactoryAwa…

全频段覆盖的卫星通信模块-灵活应对多应用场景

LoRa1121是采用SEMTECH的LR1121芯片,这是一款超低功耗、远程LoRa收发器,支持Sub-GHz和全球2.4GHz频谱中的地面ISM频段通信,且支持用于卫星连接的S频段。LoRa1121支持LoRa,(G)FSK调制,Sigfox协议,以及&#…

SRS流媒体服务器从入门到精通(其一,环境搭建)

欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力! 江山如画,客心如若,欢迎到访,一展风采 文章目录 一、SRS简介二、SRS的应用场景三、环境搭建…

Leetcode - 周赛414

目录 一,3280. 将日期转换为二进制表示 二,3281. 范围内整数的最大得分 三,3282. 到达数组末尾的最大得分 四,3283. 吃掉所有兵需要的最多移动次数 一,3280. 将日期转换为二进制表示 本题就是简单的字符串和整数之…

爆改YOLOv8|利用yolov9的ADown改进卷积Conv-轻量化

1,本文介绍 本文将利用YOLOv9的ADown模块改进卷积。 关于ADown的详细介绍可以看论文:https://arxiv.org/abs/2402.13616 本文将讲解如何将ADown融合进yolov8 话不多说,上代码! 2, 将ADown融合进yolov8 2.1 步骤一…

【高中物理】用代码缩写胡克定律公式原理图

用代码缩写胡克定律公式原理图 代码实现了以下功能: 交互式滑块:用户可以通过滑块调整弹簧的弹性系数(k)、拉力大小(F)和弹簧的原长(l0),实时观察弹簧的伸长和受力变化。…

在VB.net中,TimeSpan有什么属性与方法

标题 在VB.net中,TimeSpan有什么属性与方法 正文 在 VB.NET 中,TimeSpan 结构表示时间间隔,即一段时间,而不表示特定的时间点。TimeSpan 提供了多种属性来获取时间间隔的各个组成部分,以及一些方法来操作这些时间间隔。…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中,我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时,我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式,它定义…

基于vue框架的城市交通管理系统的设计与实现9fcck(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,区域,车站信息,公交线路 开题报告内容 基于Vue框架的城市交通管理系统的设计与实现开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速,城市交通问题日益严峻,包括交通拥堵、交通事故频发、…

“CSDN独家揭秘:AIGC技术在AI绘画领域的应用与学习攻略”

导语:人工智能的发展正推动着内容创作的革新,AIGC(AI Generated Content)技术便是其中的佼佼者。本文将带您领略AIGC在AI绘画领域的魅力,并分享一些学习资源和路径,助您在艺术与技术交汇的旅途中更进一步。…

山东省行政执法证照片要求及图像处理方法

在山东省,行政执法证是执法人员身份的重要标识,其照片的规范性对于证件的有效性至关重要。本文将详细介绍山东省行政执法证照片的要求,并提供使用手机相机拍照的实用方法,以确保照片符合标准。 一、山东省行政人员执法证照片拍摄要…

表情迁移大法,LivePortrait 帮你快速处理图片!

LivePortrait 由快手可灵大模型团队开源,主要功能包括从单一图像生成生动动画、精确控制眼睛和嘴唇的动作、处理多个人物肖像的无缝拼接、支持多风格肖像、生成高分辨率动画等。该项目使用的是基于隐式关键点框架的 AI 肖像动画生成框架。它能够将驱动视频的表情和姿…

sql语句的训练2024/9/9

1题 需要看清思路:不是将数据库中的device_id的名字改为user_infors_example,而是在查找的时候,需要将device_id看成user_infors_example来进行查找。 答案 select device_id AS user_infos_example FROM user_profile limit 2 2 当固定查找…

Leangoo敏捷工具在缺陷跟踪(BUG)管理中的高效应用

在开发过程中,缺陷(BUG)管理一直是项目管理中的一个关键环节。及时发现并修复BUG,不仅能够提高产品质量,还能有效提升团队的工作效率和用户满意度。 在敏捷开发中,快速迭代和频繁交付的特点使得缺陷管理的…

2024.09.04【读书笔记】|如何使用Tombo进行Nanopore Direct RNA-seq(DRS)分析

文章目录 Tombo快速使用介绍模型介绍RNA修饰分析步骤特异性替代碱基检测(推荐)De novo canonical model comparison ONT全长转录组分析步骤疑难解答Minimap2在比对nanopore直接RNA-seq数据时的最佳实践和参数设置有哪些?featureCounts在进行R…

红米K60U/K50/Note11TPro澎湃OS无法绑定账号解锁BL-不能激活小米账号

小米澎湃OS对于解锁BL,新增了各种限制,早前我们还能使用bypass脚本来实现澎湃OS上绑 定账号成功,但随着澎湃OS七月系统上的推送,旧版的bypass已经彻底失效,并且无法安装 旧版的设置APK来解决问题。此次涉及的机型有红米…

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例,现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类,专门用来处理Dog类里面的数据。 解析: 要把…

即时零售,电商平台们的「新战场」?

【潮汐商业评论/原创】 周末宅家的Cindy心血来潮要重启减肥计划,“第一步就是需要一个体脂秤,我要看看现在到底多少斤,以及其他的指标,不知道有没有一两个小时就能送到的?”Cindy边说边打开手机搜了起来。“还真有哎&…