文章目录
学习目标 数据案例分析 数据内容 需求分析 参考代码 `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 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( )
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:/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 ThemeType
text_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. money
else :
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" )