【黑马程序员】Python综合案例

news2025/1/12 10:51:17

文章目录

  • 数据分析案例
    • 目的
    • 需求
    • 数据准备
    • 实践
      • 数据记录类
    • 文件解析
      • 解析csv格式
      • 解析json文件
    • 进行数据计算
      • 读取文件数据
      • 按日期累加数据
    • 图表展示
      • 图标绘制
      • 最终效果展示

数据分析案例

目的

  • 文件操作实践
  • json库使用
  • 三方库pyecharts使用
  • 面向对象实践
  • 数据容器使用

需求

  • 给定一个csv内容和json内容文件,展示对应日期的销售额到柱状图

数据准备

  • csv格式数据新建text_csv.txt

    2024-01-01,dvhvhdsvad,123,bj
    2024-01-01,dfgdsgds,543,bj
    2024-01-01,dfgdy23sgds,553,hb
    2024-01-01,dfgdsgdsasads,144,hb
    2024-01-02,dv43dsadshvhdsvad,775,bj
    2024-01-02,dvhgrsfdvhdsvad,143,bj
    2024-01-02,dv43dsadshvhdsvad,643,hb
    2024-01-02,dvhgrsfdvhdsvad,532,hb
    
  • 新建text_json.txt

    {"date":"2024-01-03","order_id":"dvhvhdsvad","money":54,"province":"bj"}
    {"date":"2024-01-03","order_id":"dfgdsgds","money":543,"province":"bj"}
    {"date":"2024-01-03","order_id":"dfgdy23sgds","money":43,"province":"hb"}
    {"date":"2024-01-03","order_id":"dfgdsgdsasads","money":32,"province":"hb"}
    {"date":"2024-01-04","order_id":"dv43dsa4dshvhdsvad","money":456,"province":"bj"}
    {"date":"2024-01-04","order_id":"dvhgrsfdvhdsvad","money":865,"province":"bj"}
    {"date":"2024-01-04","order_id":"dv43dsaddshvhdsvad","money":321,"province":"hb"}
    {"date":"2024-01-04","order_id":"dvhgrsfdvhdsvad","money":23,"province":"hb"}
    

实践

数据记录类

  • 分析给定数据,可以看出两个文件中都是有4列数据,据此定义记录类
  • 新建data_define.py
# *_*coding:utf-8 *_*
# 记录类
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) -> str:
        return f'{self.date}, {self.order_id}, {self.money}, {self.province}'

文件解析

  • 根据需求可知需要解析的文件格式有两种
    • csv格式的数据是字符串使用逗号分隔
    • json数据是每一条记录使用标准的json格式定义
  • 根据面向对象的思想,我们设计抽象类然后分别使用具体的格式去重写抽象类的方法
  • 代码示例:新建file_define.py文件
# 抽象文件阅读类
class FileReader:
    def read_file(self) -> list[Record]:
        pass

解析csv格式

  • 使用继承的方式,继承抽象类FileReader,并重写read_file方法

  • 主要逻辑

    • 打开文件
    • 挨个读取文件的每一行
    • 去除每一行的换行符,根据逗号获取每一行的每一个数据
    • 调用数据记录构造记录,并将其追加到记录列表中
    • 关闭文件,返回记录列表
  • 代码示例

    class CsvFileReader(FileReader):
    path = None
    
    def __init__(self, path):
      self.path = path
    
    def read_file(self) -> list[Record]:
      f = open(self.path, "r", encoding="UTF-8")
      list_record: list[Record] = []
      for line in f.readlines():
        # 去除换行
        line = line.strip()
        line = line.split(",")
        record = Record(line[0], line[1], line[2], line[3])
        list_record.append(record)
      f.close()
      return list_record
    

解析json文件

  • 使用继承的方式,继承抽象类FileReader,并重写read_file方法

  • 主要逻辑

    • 打开文件
    • 挨个读取文件的每一行
    • 去除每一行的换行符
    • 调用json.loads方法将当前行字符串转化为字典类型
    • 调用数据记录构造记录,并将其追加到记录列表中
    • 关闭文件,返回记录列表
  • 代码示例

class JsonFileReader(FileReader):
    path = None

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

    def read_file(self) -> list[Record]:
        f = open(self.path, "r", encoding="UTF-8")
        list_record: list[Record] = []
        for line in f.readlines():
            # 去除换行
            line = line.strip()
            line = json.loads(line)
            record = Record(line['date'], line['order_id'], line['money'], line['province'])
            list_record.append(record)
        f.close()
        return list_record

进行数据计算

读取文件数据

  • 分别读取csv和json格式的数据,并将数据累加到列表中
# 分别获取csv和json文件数据
csv_data = CsvFileReader("./text_csv.txt").read_file()
json_data = JsonFileReader("./text_json.txt").read_file()
all_data: list[Record] = csv_data + json_data

按日期累加数据

  • 日期粗在则累加销售额,日期不存在则添加销售额

  • 代码示例

# 进行数据计算
data_dict = {}
for record in all_data:
    if record.date in data_dict.keys():
        # 存在,累加销售额
        data_dict[record.date] += int(record.money)
    else:
        # 不存在,添加销售额
        data_dict[record.date] = int(record.money)

图表展示

图标绘制

  • 调用pyecharms库将数据绘制成图标

  • 代码示例

# 图形渲染
bar = Bar()
bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis("1-4日销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))

# 渲染
bar.render("销售额数据.html")

最终效果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.1_10 段页式管理方式

3.1_10 段页式管理方式 (一)分页、分段的优缺点分析 基于分页、分段的优缺点,人们想出了将分页、分段结合,就产生了段页式管理。段页式管理具备了分页、分段各自的优点。 (二)分段分页段页式管理 将进程按逻…

JavaScript 中实现请求并发控制

文章目录 浏览器并发请求限制数(图)实现代码三方插件 假设有 30 个待办任务要执行,而我们希望限制同时执行的任务个数,即最多只有 3 个任务能同时执行。当正在执行任务列表 中的任何 1 个任务完成后,程序会自动从 待办…

Flink程序员开发利器本地化WebUI生成

前言 在flink程序开发或者调试过程中,每次部署到集群上都需要不断打包部署,其实是比较麻烦的事情,其实flink一直就提供了一种比较好的方式使得开发同学不用部署就可以观察到flink执行情况。 上代码 第一步:开发之前需要引入在本…

【C/C++】C语言开发者必读:迈向C++的高效编程之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方…

虚拟机 VMware下载及安装

centos官网:CentOS Mirror 虚拟机vmware官网:VMware 官网 一直点下一步就好了,有些配置按需修改即可 创建新的虚拟机 处理内核总数不能大于自己主机的逻辑处理器 安装操作系统:引入centos镜像 然后就可以点击开启此虚拟机&#xf…

操作系统(OS)

文章目录 前言一、操作系统是什么?二、用户对资源的访问三、操作系统是怎么做到管理的? 前言 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。冯诺依曼体系结构中的硬件单元提供的功能,这些硬件由操作系统来控制与管…

Rocket MQ 从入门到实践

为什么要使用消息队列,解决什么问题?(消峰、解藕、异步) 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。(主题、消费组、队列,游标?) 主题&…

C++向函数传递函数

函数指针的定义格式为&#xff1a; <函数返回类型> (*指针变量)(<函数形参列表>) 例如&#xff1a; 下面定义了一个函数指针变量fp: double (*fp)(int);这意味着fp可以指向返回类型为double,参数类型为int的任何函数 比如&#xff1a; double func(int x){...}获…

基于springboot的购物商城管理系统

1.项目简介 1.1 用户简介 用户主要分为管理员和用户端&#xff1a; 管理员&#xff1a; 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行首页轮播图的配置管理、商品的配置、新品家具商城的配置管理、、家具商城分类管理配置、家具商城详情商品管理、用户…

【Rockchip 安10.1 默认给第三方apk默认开启所有权限】

Rockchip 安10.1 默认给第三方apk默认开启所有权限 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip 3229 OS:Android 10.1 Kernel: 4.19 问题描述 有些第三方或者主界面&…

openEuler学习总结1(仅供学习参考)

华为的openEuler内核是源于Linux。 openEuler操作系统安装流程 第一步&#xff1a;开启虚拟化 第二步&#xff1a;安装一个虚拟化软件virtualbox 第三步&#xff1a;镜像 第四步&#xff1a;配置 设置虚拟机所在的目录 把网卡类型选择成桥接网卡 挂载镜像 设置完成&#xff0…

Git——修改历史记录详解

目录 Git1、修改历史信息1.1、启动互动模式1.2、修改Commit信息的影响1.3、取消Rebase 2、多个Commit合并位一个Commit3、一个Commit拆解成多个Commit4、在某些Commit之间插入新的Commit5、删除Commit6、调整Commit的顺序7、Revert指令7.1、取消Commit7.2、取消Revert1、再开一…

9. 综合案例-ATM系统 (1~7节知识综合练习)

ATM系统_综合大练习 今天的任务是对之前所有的学习的知识, 进行一个综合性的大练习. 老师说的好, 键盘敲烂 这个项目我写了大量的注释给大家参考, 如果有同学是跟着我的系列学习的, 一定动手练一练. 下面的代码只要按着敲是可以直接运行起来的, 我也把完整代码上传到了CSDN上…

17.WEB渗透测试--Kali Linux(五)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;16.WEB渗透测试--Kali Linux&#xff08;四&#xff09;-CSDN博客 1.ettercap简介与使用…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示&#xff1a; 背景需求&#xff1a; 把python实现docx表格文字和段落文字的“手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符&#xff08;软回车&a…

C语言 数据在内存中的存储

目录 前言 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1.练习一 2.2 练习二 2.3 练习三 2.4 练习四 2.5 练习五 2.6 练习六 三、浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 总结 前言 数据在内存中根据数据类型有不同的存储方式&#xff0c;今…

ElasticSearch常见用法,看这一篇就够了(文末送书)

2024送书福利正式起航 关注「哪吒编程」&#xff0c;提升Java技能 文末送3本《一本书讲透Elasticsearch&#xff1a;原理、进阶与工程实践》 大家好&#xff0c;我是哪吒。 ElasticSearch是一款由Java开发的开源搜索引擎&#xff0c;它以其出色的实时搜索、稳定可靠、快速安…

PCIE问题定位000:PCIe需要的定位手段

1、PCIe debug环境说明 本文将以PCIe EP用户逻辑举例&#xff0c;描述PCIe可以添加哪些定位手段。 如图所示&#xff0c;PCIe IP作为endpoint与RC对接&#xff0c;用户实现了应用逻辑&#xff0c;与PCIe IP进行交互&#xff0c;交互信号中data格式为TLP报文格式&#xff0c;且…

单链表-合并两个集合的数

bb都在代码里哈哈哈哈 对了这里有个要求&#xff0c;不能破坏原来的链表 #include<iostream> #include<cstring> using namespace std;typedef struct LNode {int data;struct LNode* next; }LinkNode; void Create(LinkNode*& L, int a[], int l)//首先建链…

mongodb查询大全mongo语句-MongoDB语句与MySQL语句对比

mongodb查询大全mongo语句 以前版本官网:https://www.mongodb.com/ 现在版本2021年12月7日官网:https://www.mongodb.com 直通车:https://docs.mongodb.com 一、前言 虽然这些语句在开发当中不会使用,因为springdataMongoDB封装的非常完美了。但是这里的语句思想和关系型…