使用类class实现数据读取和数据的柱状图显示(练习记录)-python3.9

class的使用

1.数据

在这里插入图片描述
展开为:
在这里插入图片描述
在这里插入图片描述
需要绘制的柱状图为每年的每一个月的money总和对比

2.实现代码

import  json                                 # 导入json将json数据转化为字典
from pyecharts.charts import Bar             # 导入绘制柱状图的包
from  pyecharts.options import *             # 导入绘制设置
from pyecharts.globals import ThemeType      # 导入主题类型
# 创建数据,从上图中可以看到,有四类数据,data,order_id,money,province
class Record:

    def __init__(self,data,order_id,money,province):# 构造方法,在创建类对象时,自动执行,赋予四个变量数值
        self.data=data
        self.order_id=order_id
        self.money=money
        self.province=province
    def __str__(self): # 获取到变量数值,可以使用该魔术方法进行显示,否则显示的是地址
        return f'{self.data},{self.order_id},{self.money},{self.province}'

class FileReader: #创建一个父类,用于子类的继承和复写

    def read_data(self)-> list[Record]:#定义一个数据读取的空函数
        pass

class TextFileReader(FileReader): # 创建一个2011年1月销售数据的类,继承父类filereader

    def __init__(self,path): # 复写输入路径的函数
        self.path=path

    def read_data(self) -> list[Record]: # 获取数据
        record_list: list[Record]=[] # 创建一个空列表,用于存放柱状图使用的数据

        f=open(self.path,'r',encoding='UTF-8')# 打开文件
        for line in f.readlines():# 循环取出每一行所需要的数据,放入record_list
            line=line.strip() # 删除字符串左右空格和\n
            data_list=line.split(',') #字符串的切分操作,用,进行切分
            record=Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])#用到了record类,获得四种数据,data,order_id,money,province
            record_list.append(record) #放入列表中
        f.close()
        return record_list

class JisonFileReader(FileReader):创建一个20112月销售数据JSON的类,继承父类filereader

    def __init__(self,path):
        self.path=path

    def read_data(self) -> list[Record]:
        record_list: list[Record]= []

        f = open(self.path, 'r', encoding='UTF-8')
        for line in f.readlines():
            line=json.loads(line)
            record=Record(line['date'],line['order_id'],line['money'],line['province'])
            record_list.append(record)
        f.close()
        return record_list

a=TextFileReader(r'C:\Users\Administrator\Desktop\1\2011年1月销售数据.txt')#创建对象,得到文件路径
b=JisonFileReader(r'C:\Users\Administrator\Desktop\1\2011年2月销售数据JSON.txt')
list_a=a.read_data()#调用read_data(),获得文件1数据
list_b=b.read_data()# 调用read.data(),获得文件2的数据
list_all=list_a+list_b#合并
data_dict={} # 创建一个空字典
for record in list_all: # 循环list_all列表
    if record.data in data_dict.keys():# 如果data在字典中
        data_dict[record.data]+=record.money# 钱数相加,添加到字典
    else: # 直接在字典中添加money
        data_dict[record.data] = 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轴数据添加,label不显示
#设置标题
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")
)
bar.render()

3.实现结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值