python数据分析案例

news2024/11/15 23:54:44

对订单的数据类型进行封装

# data_define.py
# 对数据进行封装 ORM
class Record:
    def __init__(self, date, order_id, money, province):
        self.date = date
        self.order_id = order_id
        self.money = money
        self.province = province

    # 魔术方法,print Record对象时,将对象转换的规则
    def __str__(self):
        return f"{self.date}, {self.order_id}, {self.money}, {self.province}"

对文件读取的功能进行封装

本案例实现从csv格式文件和json格式文件读取出每行数据组织成Record对象,放入一个list并返回:

# 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"], data_dict["money"], data_dict["province"])
            record_list.append(record)

        f.close()
        return record_list

# 测试代码,在作为包导入时不会执行
if __name__ == '__main__':
    text_file_reader = TextFileReader("./2011年1月销售数据.txt")
    json_file_reader = JsonFileReader("./2011年2月销售数据JSON.txt")
    list1 = text_file_reader.read_data()
    list2 = json_file_reader.read_data()

    for l in list1:
        print(l)

    for l in list2:
        print(l)

数据计算和绘图

读取销售数据计算出每日销售数据,并使用数据画出柱状图:

# main.py
"""
实现步骤
1. 设计一个类,完成数据封装
2. 设计抽象类,定义文件读取的相关功能,并用子类实现具体功能
3. 读取文件,产生数据对象
4. 进行数据需求的逻辑计算(计算每日销售额)
5. 通过PyEchars进行图形绘制
"""

from file_define import FileReader, 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("./2011年1月销售数据.txt")
json_file_reader = JsonFileReader("./2011年2月销售数据JSON.txt")

jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()

# 将两个月份数据合并为到一个list中
all_data: list[Record] = jan_data + feb_data

# 计算每天的销售额
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()))
# 不在柱上显示y轴的数字
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")
)

bar.render("每日销售额柱状图.html")

输出结果图

在这里插入图片描述

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

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

相关文章

LC-1483. 树节点的第 K 个祖先(树上倍增算法)

1483. 树节点的第 K 个祖先 难度困难134 给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上…

开发板安卓主板定制开发-基于MT6765的考核管理终端方案

Mediatek Genio系列平台以其安全、可扩展、强大且优质的解决方案,受到全球设备制造商的信任。这个系列的平台已经被广泛应用,为不同的应用提供了高效、安全、稳定的解决方案。 在Mediatek Genio系列平台中,Mediatek Helio P35 (MT6765)是一款…

企业提升客户体验,得先搭建在线帮助文档

在企业竞争日益激烈的市场中,客户体验成为企业获得成功的关键因素之一。企业需要不断提升客户体验,以增加客户的忠诚度和满意度。而搭建在线帮助文档是提升客户体验的一个重要手段。本文将介绍为什么企业需要搭建在线帮助文档,并提供一些实用…

【Java SE】一文详解next和nextLine的区别

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 引入 总结:next()和 nextLine()方法的区别 类…

DVWA-5.File upload

前提 1、在实验时,需要在 DVWA Security模块,设置需要实验的级别,对于不同的级别,php会调用不同的代码去执行用户操作。对于low level,系统的安全性低,容易受到攻击。impossible级别,系统的安全…

STM32——06-STM32电动车报警器

项目需求 点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警, 吓退小偷。 点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警&#xff…

SD va01/02 保存时,产生销售订单号后的增强

业务对接外围系统,在SAP下销售订单,要求实时传递到外围系统。要求先要有销售订单编号 策略 在销售订单保存后找一处增强,并做一个日志。 日志如下: 对象类型,凭证编号序列,外围系统编号,状态…

如何快速完成TensorRT模型生成和加速

0. 简介 之前作者在《深度学习之从Python到C》介绍了一些比较传统的方法,主要侧重介绍了如何将pth和pytorch传统形式文件转化为onnx的文件,这个部分的内容,也可以主要看一下《PyTorch模型部署:pth转onnx跨框架部署详解代码》这个…

江山变压器:以数据驱动决策,CRM铸就智能制造之「变」

浙江江山变压器股份有限公司(以下简称“江变”),创始于1969年,全国变压器行业协会理事单位、全国输配电“十三五”规划的5家起草单位之一,被列入国家千家名牌培育工程。 公司主要客户为国家电网、南方电网、五大发电集团,产品远销…

微信小程序设置 本地图片为背景图

微信小程序 通过wxss进行设置 背景图报错 经查询,发现微信小程序中,将网络图片或base64图片设置为背景图片可正常显示,将本地图片设置为背景图片则不能显示,解决方法有三种,个人采用的是第三种方法。 1. 本地图片转换…

私有云和公有云是什么?有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、私有云和公有云是什么? 1、私有云是什么? 2、公有云是什么? 二、举个例子 1、私有云 2、公…

内网渗透—Linux上线

内网渗透—Linux上线 1. 前言2. 下载插件3. CS配置3.1. 客户端配置3.1.1. 导入插件文件3.1.2. 配置监听 3.2. 服务端配置3.2.1. 导入配置文件 3.3. 生成木马3.3.1. 修改cna文件3.3.2. 修改后效果 3.4. 执行木马 1. 前言 默认情况下CS是不支持上线Linux的,只支持上线…

媒介易教你海外品牌推广:如何选择适合的新闻通稿发布平台?

在进行海外品牌推广时,选择合适的海外新闻通稿发布第三方平台是提高品牌曝光度和影响力的重要一环。这些平台可以帮助企业将新闻内容传播到全球范围内的媒体和受众,为品牌推广提供更广阔的机会。然而,选择合适的发布平台并不容易,…

乐盒开源盲盒uniapp源码系统

源码我也没测试过小白就不要尝试了 下载下来,之后,通过 node 安装如下依赖,即可查看效果: npm install uni-simple-router # 或者:yarn add uni-simple-router npm install uni-simple-router npm install uni-read…

图解数据结构--栈的实现-C语言版本--源码

目录-总 -分- 总结构 图片可视化 总源码1.头文件介绍---分2.节点的实现3.栈顶栈底4.函数的提前声明5. 栈 ---初始化栈6. 栈 ---进栈7.栈 --- 遍历8.栈 --- 是否为空9.栈 --- 出栈10总结 图片可视化 总 源码 /*time 2023年6月12日12:39:06auther yzmcntent stract 栈 */#inclu…

行业报告 | 企业AIGC商业落地应用研究报告

原创 | 文 BFT机器人 01 AIGC(生成式人工智能)定义 02 洞观:AIGC市场全貌与供应商的摩拳擦掌 生成式人工智能技术的落地已经远远超出了商业化的进程 在企业现有数字化作业体系中切入,成为AIGC率先落地的存量场景 和SaaS同根的生成…

破坏双亲委派机制(自定义类加载器)

jvm中讲过,一个类的创建是要经历类加载器的,那么我们来讲讲如何自定义类加载器。 jvm优先级最高的就是自定义类加载器,为什么这么说呢?我们来看看类加载器的源码: 首先我们解释一下这个方法做了什么,要求返…

网络套接字编程

之前我们粗浅的认识了一下网络的一些知识,比如OSI七层模型,TCP/IP四层模型,那么我们具体怎么实现两台主机的交互呢? 在学习这些之前,我们需要准备一些预备知识。 目录 预备知识 1:认识源IP地址和目的IP地址 2&…

matlab字符串的操作方法

一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符,字符串可以由0个或多个字符组成。下面是一些字符串的操作方法 (1)字符串的创建 MATLAB中创建字符串非常简单,将字符串中的字符放到一对…

Jmeter接口之间的动态关联(同一线程组和跨线程组)

目录 前言: 动态关联提取cookie 1.同一线程组里的请求之间进行动态关联 2.跨线程组之间的动态关联 前言: 在进行接口测试时,有时候需要将一个接口的返回值作为参数传递给另一个接口,这就需要用到动态关联。JMeter提供了丰富的…