学以致用:python面向对象和PyEcharts的完美混合技

文章目录

  • 学习目标
  • 数据案例分析
    • 数据内容
    • 需求分析
    • 参考代码
      • `data_define.py`
      • `file_define.py`
      • `main.py`

学习目标

  • 使用面向对象思想完成数据读取和处理
  • 基于面向对象思想重新认知第三方库使用(PyEcharts)

数据案例分析

在这里插入图片描述

数据内容

在这里插入图片描述

  • 1月份数据是普通文本,使用逗号分割数据记录,从前到后分别是(日期,订单id,销售额,销售省份)
  • 2月份数据是JSON数据,同样包含(日期,订单id,销售额,销售省份)

需求分析

在这里插入图片描述

参考代码

data_define.py

"""
数据定义的类
"""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}"

file_define.py

"""
和文件相关的类定义
"""
import jsonfrom data_define import Record# 先定义一个抽象类用来做顶层设计,确定有哪些功能需要实现
class FileReader:def read_data(self) -> list[Record]:"""读取文件的数据,读到的每一条数据都转换为Record对象,将它们都封装到list内返回即可"""passclass 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()     # 消除读取到的每一行数据中的\ndata_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_listclass 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"], int(data_dict["money"]), data_dict["province"])record_list.append(record)f.close()return record_listif __name__ == '__main__':text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt")list1 = text_file_reader.read_data()list2 = json_file_reader.read_data()

main.py

"""
面向对象,数据分析案例,主业务逻辑代码
实现步骤:
1. 设计一个类,可以完成数据的封装
2. 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
3. 读取文件,生产数据对象
4. 进行数据需求的逻辑计算(计算每一天的销售额)
5. 通过PyEcharts进行图形绘制
"""
from file_define import  TextFileReader, JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeTypetext_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt")jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()
# 将2个月份的数据合并为1个list来存储
all_data: list[Record] = jan_data + feb_data# 开始进行数据计算
# {"2011-01-01": 1534, "2011-01-02": 300, "2011-01-03": 650}"""
使用一个循环遍历all_data列表中的每个记录。对于每个记录,它检查该记录的日期是否已经存在于data_dict字典的键中。
如果是,则将该记录的销售金额累加到对应日期的值上。
如果不是,则将该记录的日期作为新的键,并将其销售金额作为值存储到data_dict字典中。
"""
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# 可视化图表开发
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))bar.add_xaxis(list(data_dict.keys()))       # 添加x轴的数据
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))      # 添加了y轴数据
bar.set_global_opts(title_opts=TitleOpts(title="每日销售额")
)bar.render("每日销售额柱状图.html")

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

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

相关文章

【力扣每日一题】2023.8.12 合并K个升序链表

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个链表数组,数组里的链表都是升序的,让我们合并这些链表,要求合并之后还是升序的。 最简…

【华为】IS-IS协议及配置

概念 中间系统到中间系统IS-IS(Intermediate System to Intermediate System)属于内部网关协议IGP (Interior Gateway Protocol),用于自治系统内部。为了支持大规模的路由网络,IS-IS在自治系统内采用骨干区域与非骨干区域两级的分…

华为机试_HJ27 查找兄弟单词【中等】

目录 描述 输入描述: 输出描述: 解题过程 提交代码 学习代码 代码一 收藏点 描述 定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字…

NR700 —基础知识

01 中国5G频段分布及700M频谱 中国运营商频段分布: 不同频段的无线电波的特征: 700M网络因其低频特性,有着极佳的覆盖能力和穿透能力,但同时相对运营商已有的高频网络有着明显的性能差距。因此700M网络更适合用于底层网络深度覆盖…

大数据Flink(六十一):Flink流处理程序流程和项目准备

文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程

又一款 IDEA 全家桶 神器 ja-netfilter-all 插件

又一款 IDEA 全家桶 神器 ja-netfilter-all 文章目录 许可证代码:许可证服务器:新的:idea vmoptions 配置验证 ja-netfilter 是否配置成功出现如下 日志信息 为 配置成功 提示 临时码总结 C站下载地址: https://download.csdn.net…

global::System.Runtime.Versioning.TargetFrameworkAttribute 特性重复

visual studio code 反编译 报错 global::System.Runtime.Versioning.TargetFrameworkAttribute”特性重复 在 .csproj文件内添加 <PropertyGroup><GenerateAssemblyInfo>false</GenerateAssemblyInfo><GenerateTargetFrameworkAttribute>false</G…

Load balancer does not have available server for client

com.netflix.client.ClientException: Load balancer does not have available server for client: ***** 在使用openfeign作为负载客户端调用时&#xff0c;抛出异常: 解决办法&#xff1a; 在application.yml配置文件中添加 ribbon:eureka:enabled: true

无法安装程序包“xx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.0”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。

打开一个之前的项目并重新启动时&#xff0c;无法正确生成&#xff0c;提示CefSharp没有安装&#xff1a; error CS0246: The type or namespace name CefSharp could not be found (are you missing a using directive or an assembly reference?) 于是乎卸载之前的版本重新…

系列二、idea启动springboot工程报错

一、报错信息 二、解决方法 2.1、打开工程.idea目录的workspace.xml文件 2.2、找到PropertiesComponent标签 2.3、添加一行 2.4、添加的内容 <property name"dynamic.classpath" value"true" />

关于SpringCloud-zuul 报错:Caused by: com.netflix.client.ClientException: Load balancer does not have ava

描述 最近在学习SpringCloud微服务&#xff0c;使用路由网关zuul;在使用过程中遇到问题报错了&#xff1b; Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: api1at com.netflix.loadbalancer.LoadBalancerContex…

Spring Cloud Eureka注册不成功

下面我介绍我总结的&#xff08;主要2点&#xff09; 1.启动类未加注解 服务注册中心 EnableEurekaServer 服务提供 EnableEurekaClient 2.检查自己pom依赖是否导入错误 <!--容易倒错依赖--> spring-cloud-netflix-eureka-server <!--正确依赖--> spring-cloud…

win10怎么安装 .net framework 3.5

复制链接&#xff1a;http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/11/microsoft-windows-netfx3-ondemand-package_421a25bf409692045d1cbfab0d99f8def8d95d3f.cab 将下载的文件复制到复制到 C 盘的 Windows 文件夹 后请在“命令提示符&#x…

如何安装.net framework?Win11安装net framework的方法

net framework是一个系统组件&#xff0c;给部分应用软件提供功能上的支持&#xff0c;因此如果没有安装该组件&#xff0c;那么将会出现无法正常运行的情况。那么应该如何安装.net framework呢&#xff1f;下面我们一起来看看小编带来的Win11安装net framework的方法吧。 ​还…

Error creating the Web Proxy specified in the ‘ system.net/defaultProxy‘ configuration section.

出现这种问题会有很多中原因。比较常见的有3中情况&#xff1a; 1. 权限问题。把用户名加入到管理员组试试。 2. 网络问题。重置网络连接&#xff1a;用管理员帐户登录CMD&#xff0c;然后输入netsh winsock reset重启试试看。 3. 系统问题。重装系统试下 可以试试下…

微服务8 Feign远程调用

目录 1.问题 2.使用 2.1导入依赖 2.2添加注解 2.3编写Feign客户端 2.4修改OrderService 2.3访问 java.lang.AbstractMethodError: Receiver class org.springframework.cloud.netflix.ribbon.RibbonLoadBal 3.自定义Feign的配置 3.1修改日志级别 3.1.1基于配置文件 …

springCloud之Netflix完整学习

SpringCloud 是一个生态&#xff0c;不是一门技术&#xff0c;用来解决下面的问题 微服务的4个核心问题&#xff1a; 服务很多&#xff0c;客户如何访问&#xff1f;这么多服务&#xff0c;服务之间怎么通信&#xff1f;服务太多了&#xff0c;如何治理&#xff1f;服务挂了…

Pandora

信息收集 使用nmap进行扫描&#xff0c;发现开放了ssh和web服务 访问web服务后&#xff0c;并且进行了目录扫描&#xff0c;并没有发现有价值的信息 切换一个思路&#xff0c;看看有没有子域名&#xff0c;结果也是落空 wfuzz -c -u "http://pandora.htb" -w /u…

springcloud -netflix学习总结

1&#xff1a;集中式架构&#xff1a;就是把所有的功能&#xff0c;模块都集中到一个项目中&#xff0c;部署在一台服务器上&#xff0c;从而对外提供服务(单体架构&#xff0c;单体应用&#xff0c;单体服务)&#xff0c;就是只有一个项目 只有一个war 2&#xff1a;分布式架…

vs2022 + .net core 3.1 创建 winform

此文献给像我一样的十多年前用.net framework开发过winform的老伙计们。 多说一句&#xff1a;需要创建一个winform小程序&#xff0c;又要使用阿里云的sdk&#xff0c;无奈阿里云已经不在提供*.dll格式的sdk&#xff0c;只提供包模式的SDK&#xff0c;所以只能采用如下技术栈…