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

文章目录

  • 数据分析案例
    • 目的
    • 需求
    • 数据准备
    • 实践
      • 数据记录类
    • 文件解析
      • 解析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 = dateself.order_id = order_idself.money = moneyself.province = provincedef __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 = Nonedef __init__(self, path):self.path = pathdef 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 = Nonedef __init__(self, path):self.path = pathdef 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.mzph.cn/news/751748.shtml

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

相关文章

设计模式之外观模式(Facade Pattern)【结构性模式】

为什么用结构性模式? 结构性模式关注点“怎样组合对象/类?”所以我们关注下类的组合关系类结构型模式关心类的组合,由多个类可以组合成一个更大的(继承)对象结构型模式关心类与对象的组合,通过关联关系在一…

Hadoop大数据应用:HDFS 集群节点缩容

目录 一、实验 1.环境 2.HDFS 集群节点缩容 二、问题 1.数据迁移有哪些状态 2.数据迁移失败 一、实验 1.环境 (1)主机 表1 主机 主机架构软件版本IP备注hadoop NameNode (已部署) SecondaryNameNode (已部署…

异常随笔xx1

关于过滤器和拦截器 看一下过滤器,过滤器我们可以分两步: 1.配置自定义过滤器 2.过滤器注册 这样它才会生效,拦截器也如此 先配置: RequiredArgsConstructor public class UserTransmitFilter implements Filter {private f…

裁员潮下,打工人的自我修养

法律规定的 裁员补偿: 1、平等协商解除的,底线是N1,上限能谈多少法律都支持 2、有客观原因解除的,是N1 3、强制违法辞退的,是2N Tips:基数是每月的全额税前工资,包括奖金绩效等&#xff0c…

strstr的模拟实现

一:strstr函数的定义: strstr函数功能的解释: 在一个字符串里面寻找另一个字符串的首次出现位置,返回值为该位置。 strstr函数要点: 1,如果 str2 是 str1 的一部分,它返回一个指向 str1 中 …

2024.3.15

1.单向循环链表 代码: #include"loop.h" //创建单向循环链表 loop_p create_loop_list() {loop_p H (loop_p)malloc(sizeof(loop));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; } //创建节点 loop_p…

【C语言】打印用*组成的X形图案

代码如下&#xff1a; #include<stdio.h> int main() { int n 0; int i 0; int j 0; while (scanf("%d", &n) ! EOF) for (i 0; i < n; i) { for (j 0; j < n; j) { if (…

拼多多根据关键词取商品列表 API 返回值说明

一、应用场景 拼多多根据关键词取商品列表的API应用场景非常广泛&#xff0c;主要集中在电商领域&#xff0c;包括但不限于以下几个方面&#xff1a; 1、商品搜索与推荐&#xff1a;商家可以通过API接口&#xff0c;根据用户输入的关键词&#xff0c;实时获取拼多多平台上的相…

什么是布隆过滤器?

1、什么是布隆过滤器 ​ 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多&#xff0c;缺…

Java习题中 哈希表的理论 有效的字母异位词 快乐数 两数之和

关于 哈希表的理论 今天最大的疑惑好像就是map的复杂度怎么算哈哈,一般n个元素map的复杂度就是On哦,不需要想得太复杂了,冲突的空间并不会造成一个量级,改变n前面的常数不会影响空间复杂度哈提醒&#xff01;熟悉好map,set的API哦 关于 有效的字母异位词 为什么遍历第二个字符…

小白必看的Python基础之函数篇

函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数&#xff0c;以后你想实现相同的操作的时候&#xff0c;只用调用函数名就可以&#xff0c;而不需要重复敲所有的语句。 函数的定义 首先&#xff0c;我们要定义一个函数, 以说明这个函数的功能…

BufferedOutputStream类讲解

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java IO相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

代码学习记录21--回溯算法第二天

随想录日记part21 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.16 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1&#xff1a;组合总和&#xff1b;2&#xff1a;电话号码的字母组合 216.组合总和III17.电话号码的字母…

【Redis知识点总结】(五)——Redis实现分布式锁

Redis知识点总结&#xff08;五&#xff09;——Redis实现分布式锁 setnxsetnx expiresetnx expire lua脚本set nx exset nx ex 随机值set nx ex 随机值 lua脚本set ex nx 随机值 lua脚本 锁续期RedissonRedLock 在Redis的众多应用场景中&#xff0c;分布式锁是Redis比…

解决分布式事务,Seata真香!

年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验等…

纯 CSS 实现文字换行环绕效果

实现效果 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><…

Windows10中配置并使用nvidia-smi

1. 问题 当在window10系统中使用nvidia-smi命令时&#xff1a; 会得到提示&#xff1a;nvidia-smi不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 注&#xff1a;其实安装NVIDIA控制面板时&#xff0c;软件已内置安装了nvidia-smi.exe&#xff0c;我们只需…

如何彻底删除Windows10系统D盘文件夹中的DeliveryOptimization

DeliveryOptimization是传递优化创建的文件夹。Windows 10的Delivery Optimization&#xff08;传递优化&#xff09;功能是用于加快下载Windows更新及其他Microsoft Store应用程序的速度的一种技术。Delivery Optimization使用了一个名为“DeliveryOptimization”&#xff08;…

zookeeper快速入门五:用zookeeper实现服务注册与发现中心

系列&#xff1a; zookeeper快速入门一&#xff1a;zookeeper安装与启动-CSDN博客 zookeeper快速入门二&#xff1a;zookeeper基本概念-CSDN博客 zookeeper快速入门三&#xff1a;zookeeper的基本操作 zookeeper快速入门四&#xff1a;在java客户端中操作zookeeper-CSDN博客…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:TabContent)

仅在Tabs中使用&#xff0c;对应一个切换页签的内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明&#xff1a; 可内置系统组件和自定义组件&#xff0c;支…