微信
支付宝
# 8. Python数据分析案例 \*\*学习目标:\*\* \* 使用面向对象思想完成数据读取和处理 \* 基于面向对象思想重新认知第三方库使用(PyEcharts) \*\*数据分析案例\*\* 某公司,有2份数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的形式进行展示。 \* 1月份数据是普通文本,使用逗号分割数据记录,从前到后分别是(日期,订单id,销售额,销售省份) \* 2月份数据是JSON数据,同样包含(日期,订单id,销售额,销售省份) \*\*需求分析\*\*  \*\*代码实现:\*\* 1.数据定义类(data_define) \`\`\`python """ 数据定义的类 """ 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}" \`\`\` 2.文件操作的类定义(file_define) \`\`\`python """ 和文件相关的类定义 """ 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:/TyporaNote/note/资料/销售数据/2011年1月销售数据.txt") json_file_reader = JsonFileReader("D:/TyporaNote/note/资料/销售数据/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) \`\`\` 3.主函数(main) \`\`\`python """ 面向对象,数据分析案例,主业务逻辑代码 实现步骤: 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:/TyporaNote/note/资料/销售数据/2011年1月销售数据.txt") json_file_reader = JsonFileReader("D:/TyporaNote/note/资料/销售数据/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来存储(即将两个list拼接成一个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") \`\`\`
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Veylor
最近发布
常用SQL