Python面向对象实现数据分析的实例详解
阳862 人气:0案例
某公司,有2份数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的形式进行展示。
需求分析
实现步骤
- 设计一个类,可以完成数据的封装
- 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
- 读取文件,生产数据对象
- 进行数据需求的逻辑计算(计算每一天的销售额)
- 通过PyEcharts进行图形绘制
代码
实例1
""" 数据定义的类 """ 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}"
实例2
""" 和文件相关的类定义 """ import json from data_define import Record class FileReader: def read_data(self): #读取文件的数据,读取到的每一条数据都转换为Record对象,将它们都封装到list内返回即可 pass class TextFileReader(FileReader): def __init__(self,path): self.path=path #复写(实现抽象方法)父类的方法 def read_data(self): f=open(self.path,"r",encoding="utf-8") record_list=[] 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 class JsonFileReader(FileReader): def __init__(self,path): self.path=path #复写(实现抽象方法)父类的方法 def read_data(self): 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"],int(data_dict["money"]),data_dict["province"]) record_list.append(record) f.close() return record_list if __name__ == '__main__': text_file_reader=TextFileReader("D:/2011年1月销售数据.txt") list1=text_file_reader.read_data() for l in list1: print(l) print("========================================================================") json_file_reader=JsonFileReader("D:/2011年2月销售数据JSON.txt") list2=json_file_reader.read_data() for l in list2: print(l)
实例3
from pyecharts.charts import Bar from pyecharts.options import * from pyecharts.globals import * from file_define import FileReader,TextFileReader,JsonFileReader from data_define import Record text_file_reader=TextFileReader("D:/2011年1月销售数据.txt") json_file_reader=JsonFileReader("D:/2011年2月销售数据JSON.txt") jan_data=text_file_reader.read_data() feb_data=json_file_reader.read_data() all_data:list[Record]=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(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")
可视化
数据集
链接:http://pan.baidu.com/s/1P3n-gvooVvmHEPak-xmkKg
提取码:hxvn
加载全部内容