Python 使用抽象类进行数据可视化

主文件main.py

from file_define import FileReader,TextFileReader,JsonFileReader
from data_define import Record
#导入柱状图的包
from pyecharts.charts import Bar
from pyecharts.options import *
#主题类型
from pyecharts.globals import ThemeType
#数据准备
text_file_reader=TextFileReader(“G:/2011年1月销售数据.txt”)
json_file_reader=JsonFileReader(“G:/2011年2月销售数据JSON.txt”)
#获取两个月的数据,list类型存放的Record对象
jan_data:list[Record]=text_file_reader.read_data()
feb_data:list[Record]=json_file_reader.read_data()
#将两个月份的数据合并为一个list来存储
all_data: list[Record]=jan_data+feb_data

#数据计算

使用字典 使用for循环进行把相同月份进行累加,不同月份则新建

#{“2011-01-01:1234”}
data_dict={}
for record in all_data:
#如果数据里面的keys在里面则表命当前记录已经有记录了
# 所以和老记录钱数进行累加
if record.date in data_dict.keys():
data_dict[record.date]+=record.money
else:
#否则新建一个新的记录
data_dict[record.date]=record.money

#可视表的开发
bar=Bar(
init_opts=InitOpts(theme=ThemeType.LIGHT)
)
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”)

data_define.py 构造方法

#数据定义的类,定义好成员变量,使用构造方法
class Record:
def init(self,date,order_id,money,province):
self.date=date #日期
self.order_id=order_id #订单号
self.money=money #销售额
self.province=province #省份
def str(self):
return f"{self.date},{self.order_id},{self.money},{self.province}"

file_define.py 抽象类读取数据

#和文件相关类的定义

先定义一个抽象类来做顶层设计,确定有哪些功能

import json

from data_define import Record
class FileReader:
#读取文件的数据,将读到的每一条数据都转会为Record对象,将他们都封装到list内返回即可
def read_data(self)-> list[Record]:
pass
class 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() #消除读取到的每一行的\n
data_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_list
#实现JSON数据
class 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_list
#文本读取路径和json数据
if name == ‘main’:
text_file_reader=TextFileReader(“G:/2011年1月销售数据.txt”)
json_file_reader=JsonFileReader(“G:/2011年2月销售数据JSON.txt”)
# list1=text_file_reader.read_data()
# list2=json_file_reader.read_data()
# for l in list1:
# print(l)
# for l in list2:
# print(l)

结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值