Pyhton基础知识:整理18 -> 基于面向对象的知识完成数据分析的案例开发

本文主要是介绍Pyhton基础知识:整理18 -> 基于面向对象的知识完成数据分析的案例开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据准备:两份数据,一份是是字符串的形式,一份是json格式,之后对数据处理后,需要合并为一份的数据,进而进行图表的开发

 

 

1 设计一个类,完成对数据的封装

"""数据定义的类
"""
class Record:date = None   # 订单日期order_id = None   # 订单idmoney = None    # 订单金额province = None   # 销售地区def __init__(self, date, order_id, money, province):self.date = dateself.order_id = order_idself.money = moneyself.province = provincedef __str__(self):return f"date: {self.date}, order_id: {self.order_id}, money: {self.money}, province: {self.province}"

2 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体的功能

"""
和文件相关的类定义
"""from data_defined import Record
import json# 先定义一个抽象类来做顶层设计,确定有哪些功能需要实现
class FileReader:def read_data(self):"""读取文件的数据,读到的每一条数据都转换为Record对象,将它们都封装到list内,返回即可"""pass# 子类1
class TextFileReader(FileReader):def __init__(self, path):self.path = path  # 定义成员变量,记录文件的路径# 复写父类的方法(实现抽象方法)def read_data(self):"""读取文本文件的数据"""fr1 = open(self.path, 'r', encoding="UTF-8")lines = fr1.readlines()fr1.close()record_list: list[Record] = []for line in lines:line = line.strip("\n")  # 去掉换行符data_ls = line.split(",")# print(data_ls)record = Record(data_ls[0], data_ls[1], int(data_ls[2]), data_ls[3])record_list.append(record)return record_list# 子类2
class JsonFileReader(FileReader):def __init__(self, path):self.path = path  # 定义成员变量,记录文件的路径# 复写父类的方法(实现抽象方法)def read_data(self):"""读取json文件的数据"""fr2 = open(self.path, "r", encoding="UTF-8")lines = fr2.readlines()fr2.close()record_list: list[Record] = []for line in lines: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)return record_list

3 数据处理

from file_defined import FileReader, TextFileReader, JsonFileReader
from data_defined import Recordtext_file_reader = TextFileReader("D:/PyCharm_projects/python_study_projects/text/2011年1月销售数据.txt")
data1 = text_file_reader.read_data()json_file_reader = JsonFileReader("D:/PyCharm_projects/python_study_projects/text/2011年2月销售数据JSON.txt")
data2 = json_file_reader.read_data()
# print(type(data2))   # list
print(data2)# 将2个月份的数据合并为1个list
all_data = data1 + data2data_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)

 

4 可视化图表开发

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()))  # 添加 x 轴的数据
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))   # 添加 y 轴的数据, is_show=False表示不展示数据bar.set_global_opts(title_opts=TitleOpts(title="2011年1月-2月销售数据", pos_left="center", pos_top="5%")
)bar.render("D:/PyCharm_projects/python_study_projects/modules/bar_sale_chart.html")

这篇关于Pyhton基础知识:整理18 -> 基于面向对象的知识完成数据分析的案例开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614846

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio