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

news2024/11/25 4:26:48

在这里插入图片描述
项目从两个不同类型的文件(文本文件和 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 # 订单ID
        self.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 = path

    def 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.coloradmin.cn/o/2122716.html

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

相关文章

day10-配置文件日志多线程

一、配置文件 1.1 properties配置文件 properties配置文件 特点:1、都只能是键值对2、键不能重复3、文件后缀一般是.properties结尾的 ​ Properties这是一个Map集合(键值对集合),但是我们一般不会当集合使用主要用来代表属性文件&#xff0…

基于UDP的简易网络通信程序

目录 0.前言 1.前置知识 网络通信的大致流程 IP地址 端口号(port) 客户端如何得知服务器端的IP地址和端口号? 服务器端如何得知客户端的IP地址和端口号? 2.实现代码 代码模块的设计 服务器端代码 成员说明 成员实现 U…

今天讲点简单的:进制1

啊,哈喽,小伙伴们,大家好。我是#Y清墨,今天呐,我要介绍的是二进制。 导语 好久不见,今天来玩些简单的——二进制。 一.初步认识 十进制是逢十进一,那么,顾名思义,二进制…

完整的数仓能力,ByConity 1.0 版本发布!

文章来源|ByConity 开源社区 项目地址|https://github.com/ByConity/ByConity 2024年8月,ByConity 1.0 正式发布,翻开了 ByConity 新的一页。1.0 版本有哪些不同,以及 1.x 版本会重点迭代哪些能力,下面为大…

【NVMe SSD寄存器、数据结构】NVMe Controller 重要寄存器、SSD内部跟NVMe相关的重要数据结构解析

前言 NVMe Controller会将一些重要的信息(NVMe控制器的能力,状态,Admin SQ, CQ地址等)直接放在NVMe寄存器中,另一部分(跟SSD比较相关的)信息会放置在SSD内部,并最终通过Admin NVMe …

C:题目介绍

一、算天数 1.题目: kiki向获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 输入描述: 多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 输出…

Python 从入门到实战13(字符串简介)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了流程控制语句中的循环语句。今天继续讨…

【机器学习】--- 逻辑回归算法

目录 逻辑回归基础1. 概述2.优点与缺点 逻辑回归的理论解释1.问题背景2. S i g m o i d Sigmoid Sigmoid函数3.决策边界4.损失函数 正则化1.L1正则化2.L2正则化 逻辑回归基础 1. 概述 逻辑回归是机器学习的一种分类算法,主要运用于二分类问题。将线性回归的结果&a…

day-52 三数之和

思路 双指针&#xff1a;确定最小的那个数&#xff08;i0<i<nums.length-2&#xff09;&#xff0c;剩下两个数可以利用双指针的思想。当最小的那个数大于零时&#xff0c;可以直接返回&#xff0c;因为后面的不可能还有满足题意的组合。 解题过程 为了所有满足题意的组…

async、await、promise异步操作详解

一、async、await、Promise使用介绍 当然&#xff01;在 TypeScript 中&#xff0c;Promise 的使用可以涉及多个方面&#xff0c;包括基础用法、类型系统、异步操作的错误处理以及高级用法等。下面我会详细讲解这些内容。 1. Promise 的基本概念 Promise 是一种用于处理异步操…

StorageSync数据缓存API

uni.setStorageSyncs参数:将 data 存储在本地缓存中指定的 key 中&#xff0c;会覆盖掉原来该 key 对应的内容&#xff0c;这是一个同步接口。 uni.setStorageSync函数里面写两个参数,分别是key和值,两个参数名称可以随便取,如果有同名的key,那么后面key的值会覆盖掉前面key的值…

git cz 规范化 git commit 格式

git cz 规范化 git commit 格式 npm install git-cz --save-devnpm install commitizen --save-devnpm install cz-customizable --save-dev // 这是package.json自动生成的 "config": {"commitizen": {"path": "./node_modules/cz-custo…

《OpenCV计算机视觉》—— 图像金字塔

文章目录 什么是图像金字塔&#xff1f;一、定义与基本原理二、主要类型三、构建过程四、应用领域 图像金字塔中的下采样和上采样一、下采样&#xff08;Downsampling&#xff09;二、上采样&#xff08;Upsampling&#xff09;三、总结 代码实现 什么是图像金字塔&#xff1f;…

[进阶]面向对象之多态(二)

文章目录 多态调用成员的特点多态的优势和弊端 多态调用成员的特点 变量调用:编译看左边,运行也看左边方法调用:编译看左边,运行看右边 多态的优势和弊端 优势&#xff1a; 在多态形式下&#xff0c;右边对象可以实现解耦合&#xff0c;便于扩展和维护定义方法的时候&…

【MySQL】查询表中重复数据、模糊查询列信息、快速copy表数据(1)

一、SQL查询重复的数据&#xff1a; 1、SQL格式&#xff1a; Select * From 数据表 Where 重复记录字段 in ( select 重复记录字段 From 数据表 Group By 重复记录字段 Having Count(重复记录字段)>1) 2、举例&#xff1a; 在这个patient_member_info表中&#xff0c;我们…

kkFileView PDF Image Mode Preview BUG

kkFileView PDF & Image Mode Preview BUG lazyload.js officePicture.ftl pdf.ftl kkFileView getCorsFile?urlPath 会触发SSRF漏洞 kkFileView SSRF-CSDN博客 commonHeader.ftl initWaterMark() 修改代码的工作量&#xff0c;主要是先部署项目&#xff0c;解…

2023年408真题计算机网络篇

https://zhuanlan.zhihu.com/p/6954228062023年网络规划设计师上午真题解析TCP流量计算_哔哩哔哩_bilibili 1 1在下图所示的分组交换网络中&#xff0c;主机H1和H2通过路由器互联&#xff0c;2段链路的数据传输速率为100 Mb/s、时延带宽积 &#xff08;即单向传播时延带宽&am…

计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【Linux实践】实验一:Linux系统安装与启动

【Linux实践】实验一&#xff1a;Linux系统安装与启动 实验目的实验内容实验步骤及结果1. 下载VMware2. 下载 Linux 操作系统3. 在VMware中安装Ubuntu系统4. 配置Ubuntu系统5. 关机 实验目的 1.掌握Linux系统的安装过程和简单配置方法。 2.掌握与Linux相关的多操作系统的安装方…

centos挂载fat32和ntfs文件系统u盘

centos挂载u盘 一、 挂载fat32文件系统u盘1. 查看u盘的文件系统2. 查看系统是否识别到u盘3. 挂载fat32文件系统u盘 二、挂载ntfs文件系统u盘1. 检查u盘文件系统&#xff08;忽略&#xff09;2. 查看系统是否识别到u盘3. 挂载ntfs文件系统3.1. 下载ntfs-3g组件3.2. 挂载u盘 一、…