用python实现不同格式文件的可视化综合案例逐步手撕解析

目录

1、需求描述

2、需求实现

3、代码实现

自定义包:data_define.py

自定义包:file_difine.py

自定义包测试效果

主函数

主函数测试效果:

 4、代码手撕解析:

data_define.py包逐步手撕:

file_difine.py包逐步手撕:

main.py逐步手撕:


1、需求描述

根据提供的txt文件和json文件进行数据处理并实现柱状图的可视化

2、需求实现

读取数据->封装数据对象->计算数据对象->pyecharts绘图

3、代码实现

自定义包:data_define.py

class record:
    def __init__(self,date,order_id,money,privince):
        self.date=date
        self.order_id=order_id
        self.money=money
        self.province=privince
    def __str__(self):
        return f'销售日期为{self.date},销售金额为{self.money}元'

自定义包:file_difine.py

import json
from data_define import record
class filereader:
    def read_data(self)->list[record]:
        pass
class txtreader(filereader):
    def __init__(self,path):
        self.path=path
    def read_data(self) ->list[record]:
        f=open(self.path,'r',encoding='UTF-8')
        lines=f.readlines()
        record_list=[]
        for line in lines:
            line=line.strip('\n')  # 去除换行回车符(\n)
            #或者可以直接用 line=line.strip()  也可以去掉换行符
            Record=record(
            line.split(',')[0],
            line.split(',')[1],
            int(line.split(',')[2]),
            line.split(',')[3],)
            record_list.append(Record)
        f.close()
        return record_list


class jsonreader(filereader):

    def __init__(self,path):
        self.path=path

    def read_data(self) ->list[record]:
        f=open(self.path,'r',encoding='UTF-8')
        record_list=[]
        lines = f.readlines()
        for line in lines:
           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__':
    txt_file_reader_test=txtreader(r'C:/Users\Administrator\Desktop\txt\2011年1月销售数据.txt')
    l1=txt_file_reader_test.read_data()
    json_file_reader_test=jsonreader(r'C:/Users\Administrator\Desktop\txt\2011年2月销售数据JSON.txt')
    l2=json_file_reader_test.read_data()
    for l in l1:
        print(l)
    for l in l2:
        print(l)

自定义包测试效果

 

主函数

from data_define import record
from file_difine import filereader,txtreader,jsonreader
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType
txt=txtreader(r'C:/Users\Administrator\Desktop\txt\2011年1月销售数据.txt')
jso=jsonreader(r'C:/Users\Administrator\Desktop\txt\2011年2月销售数据JSON.txt')
jan=txt.read_data()
feb=jso.read_data()
all_data=jan+feb
datadict={}
for record in all_data:
    if record.date in datadict.keys():
        datadict[record.date]+=record.money
    else:
        datadict[record.date]=record.money
bar=Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
bar.add_xaxis(list(datadict.keys()))
bar.add_yaxis('销售数额',list(datadict.values()),label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=TitleOpts(title='每日销售额')
)
bar.render('每日销售额柱状图.html')


主函数测试效果:

 4、代码手撕解析:

  • data_define.py包逐步手撕:

定义一个类,用于对读取的数据进行临时的存储以便存入后续数据处理所需的列表中,并通过__str__方式重写print的输出格式

  • file_difine.py包逐步手撕:

定义一个父类,通过继承得到两个子类以便对两种不同的文件格式进行数据的读取和存储

class txtreader:
打开文件读取获得一个存储每行数据的列表,创建一个新的列表用于后续暂存数据,通过遍历先除去文本中的换行符,通过split将逗号分割得到四个不同的数据,将每行的四个数据封装到record类中,再将得到的record分别存进上面创建的心列表中,得到一个存储record元素的列表,关闭文件并返回该列表。
class jsonreader:
打开文件读取获得一个存储每行数据的列表,创建一个新的列表用于后续暂存数据,通过遍历将json格式转化为字典格式,遍历的每行为一个单独的字典,将每行字典内的数据封装到record类中,再将得到的record分别存进上面创建的心列表中,得到一个存储record元素的列表,关闭文件并返回该列表。
  • main.py逐步手撕:

创建两个对象,传入文件的地址,通过成员函数得到两个处理好的列表,把两个列表合并,创建一个空字典用于对列表的元素数据(record类)进行筛选存储(取出类的日期作为key,类的金额作为value),通过遍历,首先判断recor记录的日期是否在字典内,若是字典内已经有了该日期,则对该日期对应的值进行相加,否则用新日期创建一个新的key,将该日期对应的金额作为value,遍历完成得到一个完整的字典。创建一个柱状图对象bar,设置主题为“LIGHT”,x轴导入列表化后的字典key值,y轴导入列表化后的value值,并设置不显示具体数值在柱状图上,设置好柱状图标题,完成绘制。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coleak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值