【案例】

        某公司有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")

 【运行效果】

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: