main.py
"""
面向对象数据分析案例
1、设计一个类可以完成数据的封装
2、设计一个抽象类,定义文件读取的相关功能,并使用类实现具体功能
3、读取文件,生产数据对象
4、进行数据需求的逻辑运算(计算每一天的销售额)
5、通过pyecharts进行图形绘制
"""
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("J:/2011年1月销售数据.txt")
josn_file_reader=JsonFileReader("J:/2011年2月销售数据JSON.txt")
jan_data=text_file_reader.read_data()
feb_data=josn_file_reader.read_data()
#将2个月份的数据合并为1个list存储
all_data=jan_data+feb_data
#使用字典进行数据计算
data_dict={}
for record in all_data:
if record.data in data_dict.keys():
#当前日期已经有记录了,和老记录做累加即可
data_dict[record.data]+=record.money
else:
data_dict[record.data]=record.money
#可视化图标开发
bar=Bar()
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("每日销售额")
)
bar.render("每日销售额柱状图.html")
file_define.py
"""
文件相关的类定义
"""
import json
from data_define import Record
class FileReader:
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=[]
for line in f.readlines():
line=line.strip() #消除读取到的换行符
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
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 = []
for line in f.readlines():
data_dict=json.loads(line)
record=Record(data_dict["date"],data_dict["order_id"],data_dict["money"],data_dict["province"])
record_list.append(record)
f.close()
return record_list
if __name__=='__main__':
text_file_reader=TextFileReader("J:/2011年1月销售数据.txt")
list1=text_file_reader.read_data()
json_file_reader=JsonFileReader("J:/2011年2月销售数据JSON.txt")
list2=json_file_reader.read_data()
for l in list1:
print(l)
for l in list2:
print(l)
data_define.py
"""
数据定义的类
"""
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}"