案例:某公司,有2份数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的形式进行展示。

数据定义类
- """
- 数据定义的类
- """
- class Record:
-
- def __init__(self, date, order_id, money, province):
- self.date = date # 订单日期
- self.order_id = order_id # 订单ID
- self.money = money # 订单金额
- self.province = province # 销售省份
-
-
- def __str__(self):
- return f"{self.date}, {self.order_id}, {self.money}, {self.province}"
文件定义类
- """
- 和文件相关的类定义
- """
- import json
-
- from data_define import Record
-
- # 先定义一个抽象类用来做顶层设计,确定有哪些功能需要实现
- class FileReader:
-
- def read_data(self) -> list[Record]:
- """读取文件的数据,读到的每一条数据都转换为Record对象,将它们都封装到list内返回即可"""
- 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
-
- 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
-
-
- if __name__ == '__main__':
- text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
- json_file_reader = JsonFileReader("D:/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)
数据计算处理
- """
- 面向对象,数据分析案例,主业务逻辑代码
- 实现步骤:
- 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("D:/2011年1月销售数据.txt")
- json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt")
-
- jan_data: list[Record] = text_file_reader.read_data()
- feb_data: list[Record] = json_file_reader.read_data()
- # 将2个月份的数据合并为1个list来存储
- all_data: list[Record] = jan_data + feb_data
-
- # 开始进行数据计算
- # {"2011-01-01": 1534, "2011-01-02": 300, "2011-01-03": 650}
- data_dict = {}
- for record in all_data:
- 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())) # 添加x轴的数据
- bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False)) # 添加了y轴数据
- bar.set_global_opts(
- title_opts=TitleOpts(title="每日销售额")
- )
-
- bar.render("每日销售额柱状图.html")
-
实现效果
这篇文章先介绍到这里了!