赞
踩
【案例】
某公司有2份数据文件,现在需要对其进行数据分析,计算每日的销售额并以柱状图表的形式进行展现。
数据如下:
一月份数据:
二月份数据:
需求分析
根据题目要求我们要得到每日销售额,分析文本数据可以知道,我们只需要将对应的相同的时间提取出来,并找到相应的销售额相加得到结果即可,然后使用pyecharts画图即可。
使用面向对象思想来实现,思路图如下:
订单
设计一个订单的类类中要包含订单的基本信息。
""" 数据定义的类 """ class Record: def __init__(self,data,order_id,money,province): self.data = data # 订单日期 self.order_id = order_id # 订单id self.money = money # 订单金额 self.province = province # 销售省份 def __str__(self): return f"{self.data},{self.order_id},{self.money},{self.province}"
数据处理
我们手中的文本数据有两种,一个是基本的txt文件,一个是JSON类型的txt文件,因此我们设计一个读取文件的操作方法,并且这个方法要是抽象的方法,用子类来实现不同文件的数据读取。
""" 和文件相关的定义 """ from data_define import * import json # 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能 class FileReader: def read_data(self) -> list[Record]: """ 读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可 :return: """ 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(): # readlines()一次性读取文件的每一行内容返回的是列表 line = line.strip() # 消除读取到的每一行的换行符 data_list = line.split(",") record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) # 构建为Order对象 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(): # readlines()一次性读取文件的每一行内容返回的是列表 data_dict = json.loads(line) record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],) # 构建为Order对象 record_list.append(record) f.close() return record_list if __name__ == '__main__': text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt") jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt") list1 = text_file_reader.read_data() list2 = jison_file_reader.read_data() for l1 in list1: print(l1) for l2 in list2: print(l2)
计算数据
通过上述的处理我们设置好了处理数据的方法。接下来,我们通过打开文件获取数据,将对应的日期的金额加起来即可。
# 创建文件对象获取文件 text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt") jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt") jen_data:list[Record] = text_file_reader.read_data() # 一月份的数据 feb_data:list[Record] = jison_file_reader.read_data() # 二月份的数据 # 将两个月份的数据合并 all_data:list[Record] = jen_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我们可以运用字典将每天的时间与金额形成key与value对应的关系。
绘制图像
使用Pyecharts提供的方法来绘制柱状图。
# 可视化图表开发 bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT)) # 添加x轴的数据 bar.add_xaxis(list(data_dict.keys())) # 添加y轴的数据 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,data,order_id,money,province):
- self.data = data # 订单日期
- self.order_id = order_id # 订单id
- self.money = money # 订单金额
- self.province = province # 销售省份
-
- def __str__(self):
- return f"{self.data},{self.order_id},{self.money},{self.province}"
-
-
- file_define.py
-
- """
- 和文件相关的定义
- """
- from data_define import *
- import json
- # 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
- class FileReader:
- def read_data(self) -> list[Record]:
- """
- 读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可
- :return:
- """
- 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(): # readlines()一次性读取文件的每一行内容返回的是列表
- line = line.strip() # 消除读取到的每一行的换行符
- data_list = line.split(",")
- record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) # 构建为Order对象
- record_list.append(record)
-
- f.close()
- return record_list
-
-
- class JsonFileReader(FileReader): # 用来读取JSON文件数据的方法
-
- 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(): # readlines()一次性读取文件的每一行内容返回的是列表
- data_dict = json.loads(line)
- record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],) # 构建为Order对象
- record_list.append(record)
- f.close()
- return record_list
-
-
- if __name__ == '__main__':
- text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
- jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
- list1 = text_file_reader.read_data()
- list2 = jison_file_reader.read_data()
- for l1 in list1:
- print(l1)
- for l2 in list2:
- print(l2)
-
-
- main.py
- """
- 1.设计一个类,可以完成数据封装
- 2.设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
- 3.读取文件,生产数据对象
- 4.进行数据需求的逻辑计算(计算每一天的销售额)
- 5.通过PyEcharts进行绘图
- """
- # 导包
- from file_define import *
- from data_define import *
- from pyecharts.charts import *
- from pyecharts.options import *
- from pyecharts.globals import *
- # 创建文件对象获取文件
- text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
- jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
-
- jen_data:list[Record] = text_file_reader.read_data() # 一月份的数据
- feb_data:list[Record] = jison_file_reader.read_data() # 二月份的数据
-
- # 将两个月份的数据合并
- all_data:list[Record] = jen_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))
- # 添加x轴的数据
- bar.add_xaxis(list(data_dict.keys()))
- # 添加y轴的数据
- bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
- bar.set_global_opts(
- title_opts=TitleOpts(title="每日销售额")
- )
- bar.render("每日销售额.html")
【运行效果】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。