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):创建一个2011年2月销售数据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()