第二节 柱状图

文章目录

    • 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. 流程图如下:
    第二节 柱状图_第1张图片
  3. 使用matplotlib工具 实现数据图 表的显示.
    • 数据可视化阶段.
      第二节 柱状图_第2张图片

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:是一个多维数组.
      第二节 柱状图_第3张图片
    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. 将以下案例, 通过两种方式做出柱状图
    • 一种使用列表
    • 另一种使用数组
      第二节 柱状图_第4张图片

3. 坐标值

3.1 添加横纵坐标值

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

第二节 柱状图_第5张图片

  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 会 自动选择最佳位置 来放置标签,
    • 但这可能导致标签重叠或者遮挡部分图形。
    • 因此,了确保标签的可读性和美观性,通常需要手动指定标签位置
      第二节 柱状图_第6张图片

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. 知识点总结

第二节 柱状图_第7张图片

你可能感兴趣的:(python,matplotlib简单使用,python,数据分析,信息可视化)