文章目录 学习目标 数据案例分析 数据内容 需求分析 参考代码 `data_define.py` `file_define.py` `main.py`
学习目标
使用面向对象思想完成数据读取和处理 基于面向对象思想重新认知第三方库使用(PyEcharts)
数据案例分析
数据内容
1月份数据是普通文本,使用逗号分割数据记录,从前到后分别是(日期,订单id,销售额,销售省份) 2月份数据是JSON数据,同样包含(日期,订单id,销售额,销售省份)
需求分析
参考代码
data_define.py
"""
数据定义的类
""" class Record : def __init__ ( self, date, order_id, money, province) : self. date = date self. order_id = order_id self. money = money self. province = province def __str__ ( self) : return f" { self. date} , { self. order_id} , { self. money} , { self. province} "
file_define.py
"""
和文件相关的类定义
"""
import jsonfrom 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( ) 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_listclass 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_listif __name__ == '__main__' : text_file_reader = TextFileReader( "D:/2011年1月销售数据.txt" ) json_file_reader = JsonFileReader( "D:/2011年2月销售数据JSON.txt" ) list1 = text_file_reader. read_data( ) list2 = json_file_reader. read_data( )
main.py
"""
面向对象,数据分析案例,主业务逻辑代码
实现步骤:
1. 设计一个类,可以完成数据的封装
2. 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
3. 读取文件,生产数据对象
4. 进行数据需求的逻辑计算(计算每一天的销售额)
5. 通过PyEcharts进行图形绘制
"""
from file_define import TextFileReader, JsonFileReader
from data_define import Record
from pyecharts. charts import Bar
from pyecharts. options import *
from pyecharts. globals import ThemeTypetext_file_reader = TextFileReader( "D:/2011年1月销售数据.txt" )
json_file_reader = JsonFileReader( "D:/2011年2月销售数据JSON.txt" ) jan_data: list [ Record] = text_file_reader. read_data( )
feb_data: list [ Record] = json_file_reader. read_data( )
all_data: list [ Record] = jan_data + feb_data
"""
使用一个循环遍历all_data列表中的每个记录。对于每个记录,它检查该记录的日期是否已经存在于data_dict字典的键中。
如果是,则将该记录的销售金额累加到对应日期的值上。
如果不是,则将该记录的日期作为新的键,并将其销售金额作为值存储到data_dict字典中。
"""
data_dict = { }
for record in all_data: if record. date in data_dict. keys( ) : data_dict[ record. date] += record. moneyelse : data_dict[ record. date] = record. money
bar = Bar( init_opts= InitOpts( theme= ThemeType. LIGHT) ) bar. add_xaxis( list ( data_dict. keys( ) ) )
bar. add_yaxis( "销售额" , list ( data_dict. values( ) ) , label_opts= LabelOpts( is_show= False ) )
bar. set_global_opts( title_opts= TitleOpts( title= "每日销售额" )
) bar. render( "每日销售额柱状图.html" )