欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 用面向对象的方法进行数据分析

用面向对象的方法进行数据分析

2024/11/30 9:31:51 来源:https://blog.csdn.net/2301_79271343/article/details/142109439  浏览:    关键词:用面向对象的方法进行数据分析

在这里插入图片描述
项目从两个不同类型的文件(文本文件和 JSON 文件)读取销售数据,将其封装为 Record 对象,合并数据后,统计每天的销售总额,并通过 pyecharts 库生成一个包含每日销售额的柱状图(Bar chart)。接下来,我们逐步讲解每一部分的功能。

1. 数据定义类 (Record)

class Record:def __init__(self, date, order_id, money, province):self.date = date         # 订单日期self.order_id = order_id # 订单IDself.money = money       # 订单金额self.province = province # 订单所在省份def __str__(self):return f"{self.date} {self.order_id} {self.money} {self.province}"
  • Record 是用来封装每一条销售记录的数据类,包含四个属性:date(日期)、order_id(订单编号)、money(金额)和 province(省份)。
  • __str__ 方法定义了当打印对象时,显示的格式。

2. 文件读取的抽象类

class file_reader:def read_data(self):"""这是抽象方法,具体子类会实现读取数据并转换为 Record 对象列表的功能"""pass
  • file_reader 是一个抽象类,定义了 read_data 方法,但不提供具体实现。其子类将负责从不同格式的文件中读取数据。

3. 文本文件读取类 (TextFileReader)

class TextFileReader(file_reader):def __init__(self, path):self.path = path  # 保存文件路径def read_data(self):f = open(self.path, 'r', encoding='utf-8')record_list: list[Record] = []  # 用于存储 Record 对象的列表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 对象record_list.append(record)  # 将每个记录添加到列表f.close()return record_list  # 返回所有记录对象的列表
  • TextFileReader 读取文本文件并解析每一行。每一行数据按逗号分隔,生成 Record 对象,并将这些对象加入 record_list 列表。

4. JSON 文件读取类 (JsonFileReader)

class JsonFileReader(file_reader):def __init__(self, path):self.path = pathdef read_data(self):f = open(self.path, 'r', encoding='utf-8')record_list: list[Record] = []for line in f.readlines():data_dict = json.loads(line)  # 解析每行的 JSON 数据record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])  # 创建 Record 对象record_list.append(record)f.close()return record_list
  • JsonFileReader 解析 JSON 文件,每一行数据都是一个 JSON 字符串,将其转换为 Python 的字典,然后生成 Record 对象。

5. 主函数:读取数据并处理

if __name__ == '__main__':textfilereader = TextFileReader('D:\study python\code\python实践\\19.数据分析案例\\2011年1月销售数据.txt')jsonfilereader = JsonFileReader('D:\study python\code\python实践\\19.数据分析案例\\2011年2月销售数据JSON.txt')list1 = textfilereader.read_data()  # 从文本文件读取数据list2 = jsonfilereader.read_data()  # 从 JSON 文件读取数据# 打印读取到的记录for record in list1:print(record)for record in list2:print(record)
  • 这里是从两个文件中读取数据,并打印每一条 Record 记录,确保读取到的数据正确。

6. 数据处理和可视化

a. 合并数据并计算每日销售额
text_data = textfilereader.read_data()
jan_data = jsonfilereader.read_data()all_data = text_data + jan_data  # 合并两个文件的数据# 字典存储每天的销售额
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   # 新日期,初始化销售额
  • 这段代码将 text_datajan_data 数据合并,并计算每一天的销售总额,结果存储在 data_dict 中,字典的键是日期,值是该日期的总销售额。
b. 生成柱状图
# 创建一个Bar类对象
bar = Bar(init_opts=InitOpts(theme=ThemeType.DARK))  # 使用暗黑主题# 添加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="每日销售额")
)# 渲染生成HTML文件
bar.render("每日销售额.html")
  • Bar 类用于生成柱状图。
  • add_xaxis() 用于设置 X 轴的标签,这里是日期列表。
  • add_yaxis() 用于设置 Y 轴的数值,这里是每天的销售总额。
  • set_global_opts() 设置全局的图表选项,如图表的标题。
  • 最后使用 render() 方法生成一个 HTML 文件,包含柱状图。

7. 输出文件

生成的 HTML 文件可以在浏览器中打开,显示每日销售额的柱状图。

总结:

  • 数据从文本文件和 JSON 文件中读取,并封装为 Record 对象。
  • 使用 Python 的字典进行每日销售额的汇总。
  • 利用 pyecharts 库将销售数据可视化为柱状图,并输出为 HTML 文件进行展示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com