1.测试数据准备
2011年1月销售数据.txt
bash
2011-01-01,4b34218c-9f37-4e66-b33e-327ecd5fb897,1689,湖南省
2011-01-01,5b6a6417-9a16-4243-9704-255719074bff,2353,河北省
2011-01-01,ae240260-68a9-4e59-b4c9-206be4c08a8d,2565,湖北省
2011-01-02,c833e851-880f-4e05-9de5-b547fsffc5e1,2877,山东省
2011-01-02,dd27e822-884c-4d20-a309-986f6a90e2b9,9476,安徽省
2011-01-03,b6882f5f-fb10-4210-9e45-288dd2239594,1363,广东省
2011-01-04,fd5056a8-8223-4d02-9988-04e1b41a57e8,2149,江苏省
2011-01-04,d022df35-3c0e-4753-bccb-37e125a5922b,1739,福建省
2011-01-04,a480686a-77ff-497e-9e32-0f6d9ba3eadd,2999,江苏省
2011年2月销售数据JSON.txt
bash
{"date":"2011-02-02","order_id":"3dea6f83 a9b2-4197-ba9f-2b25704c530b","money":2547,"province":"广东省"}
{"date":"2011-02-03","order_id":"93cf7a56-3f90-4df9-af76-de7233c1dddb","money":1216,"province":"福建省"}
{"date":"2011-02-04","order_id":"0fbe1745-ac65-48f4-985b-b71875fcfbf7","money":2310,"province":"云南省"}
2.data_define.py
python
"""
数据定义的类
"""
class Recort:
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}"
3. file_define.py
python
"""
和文件相关的定义类
"""
from data_define import Recort
import json
# 先定义一个抽象类,用来做顶层设计,确定有哪些功能需要实现
class FileReader:
def read_data(self):
"读取文件的数据,督导的每一条数据转换未Record对象,将它们都封装到list内返回即可"
pass
class TextFilReader(FileReader):
def __init__(self, path):
self.path = path # 定义成员变量记录文件的路径
def read_data(self):
f = open(self.path, 'r', encoding='utf-8')
record_list = []
for line in f.readlines():
line = line.strip() # 消除读取到的每一行数据中的\n
data_list = line.split(',')
record = Recort(data_list[0], data_list[1], int(data_list[2]), data_list[3])
record_list.append(record)
f.close()
return record_list
class JosnFileReader(FileReader):
def __init__(self, path):
self.path = path
def read_data(self):
f = open(self.path, 'r', encoding='utf-8')
record_list = []
for line in f.readlines():
data_dict = json.loads(line)
record = Recort(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 = TextFilReader('./2011年1月销售数据.txt')
json_file_reader = JosnFileReader('./2011年2月销售数据JSON.txt')
list1 = text_file_reader.read_data()
list2 = json_file_reader.read_data()
for i in list1:
print(i)
for i in list2:
print(i)
4. main.py
python
"""
面相对象,数据分析案例,主业务逻辑代码
实现步骤:
1. 设计一个类,可以完成数据的封装
2. 设计一个抽象类,定义文件读取的相关功能,病使用子类实现具体功能
3. 读取文件,生产数据对象
4. 进行数据的需求的逻辑计算(计算每一天的销售额)
5. 通过PyEcharts 进行图形的绘制
"""
from pyecharts.charts import Bar
from pyecharts.options import *
from file_define import TextFilReader, JosnFileReader
text_file_reader = TextFilReader("./2011年1月销售数据.txt")
json_file_reader = JosnFileReader("./2011年2月销售数据JSON.txt")
jan_data = text_file_reader.read_data()
feb_data = json_file_reader.read_data()
all_data = jan_data + feb_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
# 可视化图表开发
bar = Bar()
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")
5.html展示
学习链接
【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】https://www.bilibili.com/video/BV1qW4y1a7fU?p=126\&vd_source=2d34fd2352ae451c4f6d4cb20707e169