Python基础(七)——PyEcharts数据分析(面向对象版)

news2024/9/20 12:45:54

四、使用PyEcharts数据分析案例(面向对象版)

【前言:为了巩固之前的Python基础知识(一)到(五),并为后续使用Python作为数据处理的好帮手,我们一起来用面向对象的思想来理解代码】

1.文件读取与数据处理(面向对象版)
# main.py
"""
文本数据格式如下:
订单编号,下单日期,下单金额,下单账户
json数据格式如下:
{id:编号,data:日期,money:金额,account:账户}
"""
import json
# 设计一个类完成数据封装
class data_record:

    def __init__(self, id, data, money, account):
        self.id = id            # 订单编号
        self.data = data        # 下单日期
        self.money = money      # 下单金额
        self.account = account  # 下单账户

    """
    当类对象需要被转换为字符串之前,会输出内存地址
    需要使用魔术方法__str__控制类转换为字符串的行为
    详情请看到最后
    """
    def __str__(self):
        return f"{self.id}, {self.data}, {self.money}, {self.account}"


# 设计一个抽象类定义文件读取相关功能
class file_reader:

    # 读取文件数据,将读到的每条数据转换成list,返回data_record类
    def read_data(self) -> list[data_record]:
        pass

# 读取文本数据子类
class txt_file_reader(file_reader):

    # 使用构造方法定义文件路径
    def __init__(self, path):
        self.path = path

    # 复写抽象方法
    def read_data(self) -> list[data_record]:
        f = open(self.path, 'r', encoding="UTF-8")

        data_record_list: list[data_record] = []
        for line in f.readlines():
            # 注意此处去除读取到的line中的换行符
            line = line.strip()
            # 注意split方法得到一个列表,要将字符串表示的money转换成int
            data_list = line.split(",")
            data = data_record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
            data_record_list.append(data)

        f.close()
        return data_record_list

# 读取json类型数据子类
class json_file_reader(file_reader):
    # 使用构造方法定义文件路径
    def __init__(self, path):
        self.path = path

    # 复写抽象方法
    def read_data(self) -> list[data_record]:
        f = open(self.path, 'r', encoding="UTF-8")

        data_record_list: list[data_record] = []
        for line in f.readlines():
            # 将读取到的每一行json类型转换成python数据类型——字典类型
            data_dict = json.loads(line)
            data = data_record(
                data_dict["id"],
                data_dict["data"],
                int(data_dict["money"]),
                data_dict["account"])
            data_record_list.append(data)

        f.close()
        return data_record_list

txt_file = txt_file_reader("D:/txt_file.txt")
json_file = json_file_reader("D:/json_file.txt")
txt_list: list[data_record] = txt_file.read_data()
json_list: list[data_record] = json_file.read_data()

"""
运行:
for line in txt_list:
    print(line)

for line in json_list:
    print(line)
当类对象需要被转换为字符串之前,会输出内存地址
故此时仅打印数据的地址
需要使用魔术方法__str__控制类转换为字符串的行为
"""

# 将两个列表数据内容合并
all_list: list[data_record] = txt_list + json_list
# 将同一天的销售金额累加,使用字典存储
data_dict = {}
for record in all_list:
    # 当前日期已经存在,直接累加money即可
    if record.data in data_dict.keys():
        data_dict[record.data] += record.money
    # 当前日期不存在,需要添加该日期且将money存入
    else:
        data_dict[record.data] = record.money
        
print(data_dict)

"""
输出结果:
{'07-01': 5081, '07-02': 5360, '07-03': 2096, '07-04': 5174, '07-05': 5344, '07-06': 3162, '07-07': 2141, '07-08': 1701, '07-09': 3180}

"""
2.可视化开发
# 在main.py中导入包
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType

# 在1.文件读取与数据处理(面向对象版)代码基础上添加:

# 得到柱状图类对象
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
# 将字典中所有日期作为x轴参数,所有金额作为y轴参数
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.coloradmin.cn/o/2146161.html

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

相关文章

并发编程 - 锁(@synchronized)

引言 在前面的博客中,我们已经讨论了锁在多线程编程中的重要性,主要是为了解决多线程同时访问同一片共享数据时发生的竞争条件(race conditions),导致数据不一致和崩溃问题。 并且介绍了一个在Objective-C中&#xf…

mysql笔记7(单表查询)

文章目录 1. select① 从伪表里查数据(可以结合第3点dual理解数据来源)select 文字 ;做计算:select 算式;select 文字( 或算式) as 别名;(as 用于起别名,可省略) ② 从真实表里查数据select * from 表名;select 字段名,字段名 from 表名; 2. …

centos远程桌面连接windows

CentOS是一款广泛使用的Linux发行版,特别是在服务器领域。很多企业和个人用户会选择远程连接到CentOS进行操作和维护。虽然CentOS自带了一些远程桌面解决方案,但它们在使用上存在一些局限性。接下来,我将介绍如何实现CentOS的远程桌面连接&am…

关于wordPress中的用户登录注册等问题

前言 大家在做类似的功能的时候,有没有相关的疑问。那就是我都已经选择好了相应的主题和模版,但是为什么都没有用户注册和用户登录的页面存在呢? WordPress默认情况下不提供用户注册和登录功能的原因是它最初是作为一个博客平台开发的&…

OCR两篇革命之作

DocOwl2 参考 阿里8B模型拿下多页文档理解新SOTA,324个视觉token表示一页,缩减80% mPLUG-DocOwl 2聚焦多页文档理解,兼顾效果和效率,在大幅缩减单页视觉token的前提下实现了多页文档理解的SOTA效果。 仅用324个token表示文档图…

离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用

使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…

使用雷达速度因子进行越野导航的鲁棒高速状态估计

使用雷达速度因子进行越野导航的鲁棒高速状态估计 Morten Nissov 1 , 2 ^{1,2} 1,2, Jeffrey A. Edlund 1 ^{1} 1, Patrick Spieler 1 ^{1} 1, Curtis Padgett 1 ^{1} 1, Kostas Alexis 2 ^{2} 2 和 Shehryar Khattak 1 ^{1} 1 摘要 在复杂环境中实现机器人自主性以用于关键…

【限流算法】

文章目录 介绍算法原理适用场景令牌通算法实现限流算法 介绍 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目&a…

第6天:趋势轮动策略开发(年化18.8%,大小盘轮动加择时)

原创内容第655篇,专注量化投资、个人成长与财富自由。 轮动策略是一种投资策略,它涉及在不同的资产类别、行业或市场之间进行切换,以捕捉市场机会并优化投资组合的表现。 这种策略的核心在于识别并利用不同资产或市场的相对强弱&#xff0c…

[数据集][目标检测]智慧养殖场肉鸡目标检测数据集VOC+YOLO格式3548张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3548 标注数量(xml文件个数):3548 标注数量(txt文件个数):3548 标注…

医学数据分析实训 项目九 糖尿病风险预测

文章目录 综合实践二 糖尿病遗传风险预测一、分析目标二、实现步骤三、数据准备四、特征工程五、模型构建六、性能度量七、提交要求 综合实践任务二 糖尿病遗传风险预测代码(一)数据准备(二)特征工程(三)模…

Selenium通过ActionBuilder模拟鼠标操作直接移动到指定坐标的注意事项

在目前(2024-09-18)得Selenium官方手册中,模拟鼠标操作基本上都是通过ActionChains完成的,唯独有一动作,是通过ActionBuilder完成的。 而前者ActionChains,主要是通过offset,也就是坐标偏移量来…

【Prometheus】jmx_prometheus_javaagent监控java应用

目录 一、概述 1.1 promethues简介 1.2 JMX Exporter简介 二、监控SparkHistoryServer实现 一、概述 1.1 promethues简介 promethues采集数据的方法很多,常用的是通过各种exporter去主机采集,然后有些程序是没有相关的exporter,所以有些时候会通过脚…

信息学奥赛报考指南

近年来,信息学奥林匹克竞赛(NOI)越来越受到家长和学生的重视。这项竞赛不仅能培养孩子的编程与算法思维,还为优秀的选手提供了进入国内顶尖大学的保送资格,并有机会参加国际级赛事。因此,许多家长都希望了解…

设计图纸加密方法知多少?小编给你讲清楚

一、对称加密 使用对称加密算法,对设计图纸进行加密。对称加密使用相同的密钥进行加密和解密,确保只有持有正确密钥的人能够解密文件。 二、非对称加密 使用非对称加密算法,进行设计图纸的加密。非对称加密使用公钥加密、私钥解密的方式&a…

机械设备产品资料方案介绍小程序系统开发制作

设备产品资料介绍小程序系统,是一家工业机械设备生产厂家为了更好的服务客户而定制开发的一套小程序系统,让用户通过小程序就可以了解公司产品介绍的详细参数、售后服务和产品操作手持等。 该小程序系统里面主要开发的功能模块有: 1、产品目…

如何在算家云搭建DynamiCrafter(图生视频)

一、模型简介 DynamiCrafter 是一种(文本-)图像到视频/图像动画的方法,旨在从条件图像和文本提示中生成短视频片段(约 2 秒),可以将静止图像转换为动画。它使用了一种称为视频扩散先验的技术,可…

探索Facebook的黑暗面:数字化社交的双面剑

Facebook作为全球最大的社交平台,改变了我们的沟通和互动方式。虽然它带来了便利,但也存在不少隐忧。本文将探讨Facebook的负面影响,包括隐私问题、信息操控、心理健康危机及社交表面化等。 一、隐私问题:数据收集的隐忧 Facebo…

优思学院|如何从零开始自己学习六西格玛?

优思学院为学习六西格玛管理的学员,精心推荐了几本由浅入深、系统全面的书籍,帮助大家从入门到精通,逐步掌握六西格玛这一强大的管理工具。无论你是刚接触六西格玛的初学者,还是想在专业领域提升的高级学员,这几本书都…

硬件(驱动开发概念)

驱动程序开发 裸机驱动(无操作系统) Linux驱动 以计算机技术为基础,在软件和硬件层间可以被剪裁的专业硬件计算机系统 SOC:片上系统 Kernel:内核 x86 (CISC:complex instruction set computer 复杂指令…