第二节 柱状图

news2024/11/17 15:41:29

文章目录

    • 1.数据分析流程图
    • 2. 列表与数组
      • 2.1 二者区别
      • 2.2 shape() 函数
      • 2.3 生成柱状图比较
        • 2.3.1 列表生成柱状图
        • 2.3.2 数组生成柱状图
        • 2.3.3 扩展案例练习
    • 3. 坐标值
      • 3.1 添加横纵坐标值
    • 4. 其他优化细节
      • 4.1 屏幕属性
      • 4.2 标题属性
      • 4.3 练习案例
    • 5. 知识点总结

1.数据分析流程图

  1. 数据分析 : 是指用,适当的统计分析方法 对收集来的 大量数据进行分析,为提取有用信息和形成结论 而对数据加以详细研究和概括 总结的过程。
  2. 流程图如下:
    在这里插入图片描述
  3. 使用matplotlib工具 实现数据图 表的显示.
    • 数据可视化阶段.
      在这里插入图片描述

2. 列表与数组

2.1 二者区别

  1. 在 python中 列表可以存储 相同的数据,也可以存储不同类型的数据.

    • python中list中保存的不是数据 ,是地址 ,即 指针.
    # 在python的列表
    #1. 存储相同类型数据
    
    list = [1,2,3,4,5]
    list_1 = ["你好","python"]
    
    #1.1 存储不同类型的数据 
    list_3 =[1,2,"String",True]
    print(list_1,list,list_3)
    
    
  2. 在python中, 是没有数组的概念 ,只能存 同一种数据类型.

    • 我们就拿 Java语言中的数组来举例子
    • 但是在numpy中也有array()数组, 其中ndarray:是一个多维数组.
      在这里插入图片描述
    public class Hello {
    //这是一个java的程序
        public static void main(String[] args){
            //定义一个数组
            String[] arr = {"你好","python"};
            int[] arr_1 = new int[5];
            arr_1[0]=1;
            arr_1[1]=2;
            arr_1[2] ="你好"; //这就会报错
        }
    }
    
  3. Numpy 是一个开源的python库,主要用户科学计算,用于快速处理数组.

    • 从列表转换为数组
    • 从数组转换为列表 注意: tolist()使用可以不导入numpy使用.
    # 随机生成
    import random
    #导入计算包
    import numpy as np
    
    #导入 time包
    import  time as t
    
    #生成 1~3的随机数
    # a= random.randint(1,3)
    # print(a)
    
    #a = random.random() #随机生成 [0,1)的浮点数.
    a = []  # 声明一个列表
    for i in range(1000):# 循环100次
        # print(random.random())
        #往列表中插入数据 append往列表的末尾插入数据.
        a.append(random.random())
    
    """
    1. 将列表转换为数组
            np.array(a)
            1.1 通过求和来查看数组执行时间.
    """
    _arr = np.array(a) #相当于使用numpy 将列表转换为数组
    print(type(_arr))
    # print(_arr)
    
    #使用time()方法可以统计时间 返回是一个时间戳
    #java中 long time = System.currentTimeMillis(); 毫秒
    
    #使用时需要导入包
    begin =t.time() #记录 起始时间
    sum_1 = np.sum(_arr) # 使用numpy中的sum求和方法,计算时间
    end = t.time() #记录 结束时间
    print(sum,f"转换数组,执行时间是{end-begin}")
    
    
    """
    2.  将数组转换为列表 
        2.1 通过求和来
    """
    _list =_arr.tolist() # 将数组转换为列表
    print(type(_list))
    begin_1 =t.time() #记录 起始时间
    # 2.使用python中的自己sum求和方法,计算时间
    sum_2 = sum(_list) #2.1也可以使用numpy中的 sum() np.sum()
    end_1 = t.time() #记录 结束时间
    print(sum_2,f"转换数组,执行时间是{end_1-begin_1}")
    
  4. 从而导致数组的操作是比列表有优势的.

    • 创建空间分配时:,数组就 分配好了空间, 而列表 可能是动态的.
    • 数据存储时: 数组存储是同一种类型, 列表可以是不同类型,增加了访问时间.

2.2 shape() 函数

  1. 该默认情况下Python中没有np.shape()函数

  2. np.shape()函数是NumPy库中的一个函数,用于返回给定数组的形状

    • 即维数和各个维度的长度, 所以, 在执行该代码之前, 需要先导入NumPy库。
    import numpy as np
    
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]]
    print(np.shape(a))  # (4, 3)
    
    • 结果表示给定的数组 a 是一个四行三列的二维数组,其中有4个元素(行),每行有3个元素(列)。第一个维度是4,第二个维度是3。
  3. 使用python 中的len()也能计算, 需要注意前提的.

    • 在计算列数时, 我们假设了二维列表中的 每个子列表都具有相同的长度,即使用了a[0]来计算列表中第一个子列表的长度,认为第一个子列表的长度即为整个列表中每个子列表的长度。
    • 如果二维列表中的各子列表长度不相同, 将会导致无法正确计算列数的问题。
    • 还是推荐是用numpy中的 shape()函数,效率高.
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]]
    
    # 使用len()函数计算二维列表的长度
    rows = len(a)          # 计算行数
    cols = len(a[0])       # 计算列数
    print(f"该二维列表的长度为:{rows}行 x {cols}列")
    

2.3 生成柱状图比较

  • 使用列表生成柱状图, 和使用数组生成柱状图.
    • 注意一下,二者生成有什么不同.

2.3.1 列表生成柱状图

  1. 列表生成柱状图

    • 需要使用子模块导入from matplotlib import pyplot as plt
    • 注意乱码问题.
    # 1. 导入 matplotlib 中 pyplot 子模块
    from matplotlib import pyplot as plt
    # x轴坐标
    x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"]
    
    # y轴坐标
    y = [1.21,1.28,1.34,1.38,1.48,1.58]
    
    #解决乱码
    plt.rcParams["font.sans-serif"]=["SimHei"]
    plt.rcParams["axes.unicode_minus"]=False
    
    #绘制图形
    plt.bar(x,y)
    
    #保存图片地址
    plt.savefig("D:1.png")
    
    #生成图片
    plt.show()
    
    

2.3.2 数组生成柱状图

  1. 需要使用 numpy中的 array()函数进行转换.

    # 1. 导入 matplotlib 中 pyplot 子模块
    from matplotlib import pyplot as plt
    #2. 导入 numpy 模块
    import numpy as np
    
    # x轴坐标
    x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"]
    np.array(x)
    # y轴坐标
    y = [1.21,1.28,1.34,1.38,1.48,1.58]
    np.array(y)
    #解决乱码
    plt.rcParams["font.sans-serif"]=["SimHei"]
    plt.rcParams["axes.unicode_minus"]=False
    
    #绘制图形
    plt.bar(x,y)
    
    #保存图片地址
    plt.savefig("D:1.png")
    
    #生成图片
    plt.show()
    
    
  • 总结: 尽管实际而言在绘制柱状图时,列表和Numpy数组之间的性能差异通常不太明显, 但如果处理的数据非常大,则使用Numpy数组可能会更快。

2.3.3 扩展案例练习

  1. 将以下案例, 通过两种方式做出柱状图
    • 一种使用列表
    • 另一种使用数组
      在这里插入图片描述

3. 坐标值

3.1 添加横纵坐标值

  1. 单独看一张柱状图需要知道它的需求是什么?
    • 下面的图, 如果我不说 是分析身高 你会知道么?

在这里插入图片描述

  1. 所以如何添加坐标值

    • 需要使用到 matplotlib中的 xlabel()和ylabel()两个函数.
    • xlabel(value,attributes), value 是坐标值, attributes 属性(可选)
    • 例如: left right center 等等.
    # 1. 导入 matplotlib 中 pyplot 子模块
    from matplotlib import pyplot as plt
    #2. 导入 numpy 模块
    import numpy as np
    
    # x轴坐标
    x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"]
    np.array(x)
    # y轴坐标
    y = [1.21,1.28,1.34,1.38,1.48,1.58]
    np.array(y)
    #解决乱码
    plt.rcParams["font.sans-serif"]=["SimHei"]
    plt.rcParams["axes.unicode_minus"]=False
    
    #使用添加横纵坐标 xlabel和 ylabel
    plt.xlabel("姓名",loc="rigth",fontsize=20) 
    plt.ylabel("身高",loc="top")
    #绘制图形
    plt.bar(x,y)
    
    #保存图片地址
    plt.savefig("D:1.png")
    
    #生成图片
    plt.show()
    
    
  • 在实际使用中,需要根据需要选择具体的标签位置或对齐方式。如果没有指定标签位置, 则 Matplotlib 会 自动选择最佳位置 来放置标签,
    • 但这可能导致标签重叠或者遮挡部分图形。
    • 因此,了确保标签的可读性和美观性,通常需要手动指定标签位置
      在这里插入图片描述

4. 其他优化细节

4.1 屏幕属性

  1. 屏幕的属性,屏幕大小 和 背景 颜色
    • plt.fgure() ,里面有可选属性.
    • 二者可以组合使用
# 设置屏幕生成大小  figsiz 默认无, 给元组(a,b) a是长度, b是宽度
plt.figure(figsize=(20,8)) 

#设置背景 facecolor 背景颜色
plt.figure(facecolor="yellow")

4.2 标题属性

  1. 设置标题的字体 ,或者背景颜色

    • 使用 plt.title(),里有可选属性
      • fontsize 参数指定了标题的字体大小,
      • fontweight 参数指定了标题的字体粗细例如: light
      • backgroundcolor 参数指定了标题的背景色
    # 添加标题,指定了标题的内容
    plt.title("学生身高")
    
    #围绕标题的可选属性, 字体大小,字体样式, 背景色,
    plt.title("学生身高",fontsize=30,fontweight='heavy',backgroundcolor='yellow')
    

4.3 练习案例

  1. 将坐标值和优化细节结合.

  2. 生成方向有横向和纵向,需要注意改坐标值.

    • plt.bar() 横向
    • plt.barh() 纵向
    # 1. 导入 matplotlib 中 pyplot 子模块
    from matplotlib import pyplot as plt
    #2. 导入 numpy 模块
    import numpy as np
    
    # x轴坐标
    x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"]
    np.array(x)
    # y轴坐标
    y = [1.21,1.28,1.34,1.38,1.48,1.58]
    np.array(y)
    #解决乱码
    plt.rcParams["font.sans-serif"]=["SimHei"]
    plt.rcParams["axes.unicode_minus"]=False
    
    #使用 xlabel和 ylabel
    plt.xlabel("姓名",loc="left",fontsize = 30)
    plt.ylabel("身高",loc="top")
    
    #设置屏幕大小和颜色
    plt.figure(figsize=(20,8),facecolor="yellow")
    
    #设置 标题大小
    plt.title("学生身高",fontsize=30,fontweight='light',backgroundcolor='red')
    #绘制图形
    plt.bar(x,y)
    # 也可以生成纵向
    # plt.barh(x,y)
    
    #保存图片地址
    #plt.savefig("D:1.png")
    
    #生成图片
    plt.show()
    
    

5. 知识点总结

在这里插入图片描述

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

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

相关文章

功率放大器的工作原理及特点是什么

功率放大器是一种电子设备,用于将输入信号放大到更大的电压、电流或功率级别,以便驱动更大的负载或产生更大的输出功率。这种类型的放大器常用于音频、无线电通信、雷达、声呐、医疗设备和其他应用中。下面安泰电子将为大家介绍功率放大器的工作原理及特…

糖基化修饰:130548-92-4,Fmoc-L-Thr(Ac4-D-Glcβ)-OH,糖肽按照氨基酸和糖的连接方式分为多种

Fmoc-L-Thr(Ac4-D-Glcβ)-OH,糖基化修饰,即糖肽可以按照氨基酸和糖的连接方式分为四类:O 位糖基化、N 位糖基化,糖肽的基本结构多肽链与糖链通过共价键相连蛋白链上连接糖链的位点称为糖基化位点。由于糖肽糖链的生物合成没有模板…

重磅再推 | 基于OpenSearch向量检索版+大模型,搭建对话式搜索

面向企业开发者的PaaS方案 一周前,阿里云OpenSearch发布的LLM智能问答版,面向行业搜索场景,提供企业专属问答搜索服务。作为一站式免运维的SaaS服务,智能问答版基于内置的LLM大模型提供问答能力,为企业快速搭建问答搜…

Linux系统安装mysql8完整无脑步骤

1:卸载原有REPO源 查询已经存在的mysql及相关依赖包 rpm -qa | grep mysql此时你会看到一堆列表,使用 yum 命令依次卸载 yum remove mysql-xxx-xxx-xxx接下来删除 mysql 的残留目录及文件,先用下面的命令找出所有mysql相关的文件夹 find …

报表工具Stimulsoft Reports用户手册:如何激活控件

Stimulsoft Reports.Net是一个基于.NET框架的报表生成器,能够帮助你创建结构、功能丰富的报表。StimulReport.Net 的报表设计器不仅界面友好,而且使用便捷,能够让你轻松创建所有报表;该报表设计器在报表设计过程中以及报表运行的过…

WhoNet报不是有效dbf解决

由于现在Web已经部署到Linux上了,以前在Windows上导出dbf通过oledb执行sql生成dbf的路径已经不可用了,加上需要安装dataaccess驱动也麻烦,为此换了fastdbf生成dbf文件。 首先还算顺利,开始就碰到中文乱码问题,下载源码…

Qt学习之旅 - QTableWidget控件其他控件设置图标

文章目录 设置列数设置水平表头设置行数设置正文设置QTableWidget表格不可被选中、不可编辑设置表格中某个单元格不可被选中 防止越界int转QString其他控件Scroll Area按键 添加UI设置图标主窗口图标状态栏上显示图标使用QtCreator //QTableWidget控件 //设置列数 ui->table…

人工智能和传统行业的思考

人工智能和传统行业的思考 转载:原文链接 — https://xiaowenz.com/blog/2023/04/decouple-your-time/ 传统之传统 传统产业之所以被称为传统,除了大部分并非依靠计算机技术驱动之外,同时也因为这些产业往往更贴近社会的基础架构或生产要素…

常见中间件

中间件简介 中间件运行在系统软件和应用软件之间,以便于各部件之间的沟通。他充当的功能是:将应用程序运行环境与操作系统隔离,从而让开发者不必为更多系统问题忧虑,直接关注该应用程序在解决问题上的能力。 提供解析网站代码的一…

STM32ARM体系结构(嵌入式学习)

STM32&ARM体系结构 1. STM321.1 简介1.2 STM32的优势1.3 命名规范 2. ARM体系结构2.1 ARM体系结构面试题:谈谈你对ARM的认识?1.ARM公司2.ARM处理器3.ARM技术 目前主流处理器架构?精简指令集RISC和复杂指令集CISC的区别?精简指…

第二类曲线积分

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第二类曲线积分一、向量场是什么?二、向量场可视化三、计算1. 计算方式一2. 计算方式二 第二类曲线积分 因为之前学习第二类曲线的时候,不是…

CarEye 视频平台解决方案

前言 随着4G,5G技术和互联网技术的普及,流媒体应用越来越广发应用到生活中。本文档主要介绍CarEye视频服务器的主要软件硬件构成,功能实现。 功能介绍 CarEye 媒体服务器主要实现以下基本功能: 遵照GB28181/GT1078协议实设备到…

SQL Server Roles 角色權限

SQL Server 提供服务器级角色以帮助你管理服务器上的权限。 这些角色是可组合其他主体的安全主体。 服务器级角色的权限作用域为服务器范围。 (“角色”类似于 Windows 操作系统中的“组”。) 下表显示了服务器级的固定角色及其权限。 服务器级的固定角…

NLP 学习笔记十-simple RNN+attention(注意力机制)

NLP 学习笔记十-simple RNNattention(注意力机制) 感兴趣的伙伴,看这个笔记,最好从头开始看哈,而且我的笔记,其实不面向零基础,最好有过一些实践经历的来看最好。 紧接上一回,我们谈…

为什么指针被誉为 C 语言灵魂?

是的,这一篇的文章主题是「指针与内存模型」 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。 不了解的对指针的理解就停留在“指针就是变量的地址”这句话,…

【数据结构与算法篇】手撕排序算法之插入排序与希尔排序

​👻内容专栏:《数据结构与算法篇》 🐨本文概括: 讲述排序的概念、直接插入排序、希尔排序、插入排序和希尔排序的区别。 🐼本文作者:花 碟 🐸发布时间:2023.6.13 一、排序的概念及其…

CSS差缺补漏之选择器

最近在复盘CSS基础知识,发现很多CSS选择器里面还是大有学问,需要详细总结一番,以备差缺补漏~ 作为CSS基础的一大类别,选择器又分为多种类别,本篇内容默认读者已了解并掌握基础选择器【通配符选择器】、【元素选择器】…

docker命令(查看容器状态stats、容器的导入导出、docker容器的详细信息inspect、docker cp命令的使用)

目录 查看docker容器状态: docker镜像的导入导出 第一种导入导出(是docker本地的静态) 第二种导出导入 (这种导出是正在运行的容器里的文件系统变成一个归档文件(可以包含已经下载好的软件)) docker容器的详细信息…

Java Stream流详解

本文目录 学习目标中间操作Filter(过滤)Map(转换)Sorted(排序)Distinct(去重)Limit(限制)Skip(跳过)Peek(展示) 终止操作forEach(循环)Collect(收集)Count(计数)Reduce(聚合)AnyMatch(任意匹配)AllMatch(全部匹配)NoneMatch(无匹配) 使用Stream流的优缺点:优点&…

linux常用查看服务器内存的命令

1.free free 命令用来显示系统内存状态,包括系统物理内存、虚拟内存(swap 交换分区)、共享内存和系统缓存的使用情况,其输出和 top 命令的内存部分非常相似。 free 命令的基本格式如下: [rootlocalhost ~]# free [选项…