• 数据分析 numpy


    主要内容:

    1 数据分析

      a 概念:  是把隐藏在一些看似杂乱无章的数据背后信息提炼出来,总结出所研究对象的内在规律.

      b 三剑客: Numpy  Pandas  Matplotlib

    2 Numpy 是Python语言的一个扩展程序库, 支持大量的纬度数组与矩阵运算,此外也针对数组运算提供大量的数字函数库.

      a ndarray的概念:  ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。

      b  ndarray的创建:

        1) 使用np.array()创建: 最简单的方法是使用 numpy 提供的 array() 函数直接将 Python 数组转换为 ndarray 数组,array() 接受一切序列类型的对象,例如将一个列表转换成 ndarray 数组.

    import numpy as np
    #一维数组的创建
    np.array([1,2,3,4,5])
    
    # 二维数组的创建
    np.array([[1,2,3], [3, 4, 5]])
    np.array([[1, 2, 3], ['a', 4, 5]])
    
    #注意: 1 numpy默认ndarray的所有元素的类型是相同的
    #      2 如果传过来的列表包含不同的类型,则统一为
    # 统一类型,优先级: str > float > int
    

        2) 使用matplotlib.pyplot获取一个numpy数组, 数据来源于同一张图片

    import matplotlib.pyplot as plt
    img_arr = plt.imread('1.jpg')
    plt.imshow(img_arr)
    img_arr.shape
    

        3) 使用np.ones方法创建  :np.ones(shape, dtype=None, order='C')

          np.ones(shape=(20, 30))

        4)  使用np.full方法创建:   np.full(shape, fill_value, dtype=None, order='C')

          np.full(shape=(5,6), fill_value=100)

        5)  使用np.linspace方法创建: np.linspace(start, stop, num=50, endpoint=True, retstep=False,dtype=None)等差数列

          np.linspace(1, 100, num=20)

        6)  使用np.arange方法创建: np.arange([start, ]stop, [step, ]dtype=None)

          np.arange(0,100, step=2)

        7) 使用np.random.randint(low, high=None, size=None, dtype='I')

    np.random.seed(14)  #固定时间种子,产生的随机数就固定下来了
    np.random.randint(0,100,size=(5,7))
    

        8)  使用np.random.randn(d0,d1,d2....dn) 标准正态分布

          arr = np.random.randn(4,4)

        9)  使用np.random.random(size=None) 生成0到1的随机数, 左闭右开

          np.random.random(size=(3, 4))

      c : ndarray属性

        1)  4个必记的参数:  ndim  维度;  shape  形状 ; size  总长度  ; dtype 元素类型

      d : ndarray基本操作

        1) 索引:  一维与列表完全一致,多维时同理

        2) 切片: 一维与列表完全一致,多维时同理

    # 左边是行,右边是列
    arr = np.random.randint(60,120,size=(6,4))
    # 获取前两行的数据
        # arr[0:2]
    # 获取二维数组的前2列
        # arr[:, 0:2]
    # 获取前两行和前两列的数据
        # arr[0:2,0:2]
    # 将数据反转   ::进行切片
    # 将数组的行倒序
        # arr[::-1]
    # 将数组的列倒序
        # arr[:, ::-1]
    # 全部倒序
    arr[::-1, ::-1]
    

       3) 变形 : 使用arr.reshape()函数, 注意参数是一个tuple!基本使用: 

          将一维数组转变为多维数组

    arr2 = np.random.randint(20,30, size=(6,4))
    arr2
    # 转变为一维数组
    arr12 = arr2.reshape(24)
    arr12
    # 转变成三维数组
    arr32 = arr2.reshape(2,4,3)
    arr32
    # 自动计算行和列
    arr4 = arr2.reshape(3,-1)
    arr4
    arr5 = arr2.reshape(-1,6)
    arr5
    

          4) 级联   一维数组 二维数组  多维数组的级联, 实际操作中级联多为二维数组

          np.concatenate()  axis=0表示的是竖直方向  1水平方向

    arr1 = np.random.randint(0,100, size=(3,4))
    
    arr2 = np.random.randint(0,100, size=(3,4))
    
    np.concatenate((arr1,arr2), axis=1)       水平方向
    
    np.concatenate((arr1,arr2), axis=0)       竖直方向
    

       5)  切分: 与级联类似, 三个函数完成切分工作: np.split(arr,行/列,轴): 参数2是一个列表类型 np.vsplit np.hsplit

    import matplotlib.pyplot as plt
    img_arr = plt.imread('./1.jpg')
    plt.imshow(img_arr)
    
    imgs = np.split(img_arr,[100,300],axis=0)
    plt.imshow(imgs[1])
    

       6)  副本:  所有赋值操作不会为ndarray的任何元素创建副本, 对赋值后的对象的操作也会对原来的对象生效.

    可使用copy创建副本.

    arr = np.array([1,2,3,4,5])
    a = arr
    a[1] = 10
    print(arr)
    
    arr1 = arr.copy()
    arr1[0] = 20
    

      e : ndarray的聚合操作

    arr.sum()
    arr.std()
    arr.mean()
    

      f: 广播机制

        ndarray广播机制的三条规则:

          缺失维度的数组, 则维度补充为进行运算的数组的维度.缺失的数组元素使用已有元素进行补充.

          规则一:  为缺失的维度补1

          规则二: 缺失元素用已用值补充

          规则三: 缺失维度的数组只能有一行或者是一列

    例一: m = np.ones((2,3)) a = np.arange(3) 求m + a
    # 两行三列的矩阵1
    m = np.ones((2,3))
    # 一维数组0,1,2
    a = np.arange(3)
    m+a
    
    a = np.arange(3).reshape(3,1)
    b = np.arange(3)
    a+b
    
    习题3 : a = np.ones((4,1)) b = np.arange(4) 求a+b
    a = np.ones((4,1))
    b = np.arange(4)
    a+b
    

      h : ndarray排序

    # 1  快速排序np.sort()与ndarray.sort()都可以, 但有区别:
    #         np.sort()不改变输入
    #         ndarray.sort()本地处理, 不占用空间, 但改变输入.
    arr = np.array([3,8,5,7,6])
    arr
    
    # 排序
    np.sort(arr)
    

      部分排序

    2 部分排序 np.partition(a,k) 有的时候我们不会对全部的数据感兴趣, 我们可能对最小的或者最大的一部分感兴趣. 当k为正时, 我们想得到最小的k个数 当k为负时, 我们想得到最大的k个数
    
    arr = np.array([1,2,3,4,5])
    np.partition(arr, kth=4)
    

      

  • 相关阅读:
    MSSQL数据库 事务隔离级别
    CSS(Cascading Style Shee)
    Winform MD5
    Winform 基础
    ASP.NET 设置DropDownList的当前选项
    如何彻底关闭退出vmware虚拟机
    Winform GDI+
    SQL优化
    登录
    Spring AOP的应用
  • 原文地址:https://www.cnblogs.com/gyh412724/p/10313145.html
Copyright © 2020-2023  润新知