数据分析numpy总结

讨论 藤蔓绕竹
Lv2 初级炼丹师
发布在 NumPy   1553   0
讨论 藤蔓绕竹   1553   0

    Numpy(Numerical python)是基于Python的高性能的开源数据计算与数据分析基础包,支持大量的数据与矩阵运算,此外也针对数组运算提供大量的数学函数库,Numpy本身没有提供高级的数据分析功能,但理解numpy数组的概念以及面向数组的运算设计有助于高效实用pandas等更加高级的工具。

    一、ndarray:一种多维数组对象

    Numpy最重要的一个特点就是N维数组对象(即ndarray),该对象是一个快速而灵活的同构数据多维容器,可以利用这种数组对整块数据执行一些数学运算,通常叫做矢量化运算,即大小相等的数组之间的任何算数运算都会将运算应用到元素级,该部分是ndarray相关操作总结

    # 举例说明数组的优点  计算A**2 + B**3
    a = [0,1,2,3,4]
    b = [9,8,7,6,5]
    
    ### 一般Python循环方法
    def pysum():
        c = []
        for i in range (len(a)):
            c.append(a[i]**2 + b[i]**3)
        return c
    print (pysum())
    
    ### numpy 算法
    """
    - 去掉循环,使一维数据更像单个数据,优化算法,提高运算速度
    - 数组对象采用相同的数据类型,有助于节省运算和存储空间
    """
    import numpy as np
    def npsum():
        a = np.array([1,2,3,4])
        b = np.array([8,7,6,5]) 
        c = a**2 + b**3
        return c
    print(npsum())

    1.1ndarray的生成函数

    注意:由于Numpy关注的是数值运算,所以,如果没有特别指定,数据类型基本上是“float64”,因为标准的双精度浮点值(即Python中的float对象)需要占用8个字节,即64位,而且如果没有显式说明,在创建数组时,若有多种数据类型存在,Numpy将会推断出一个较为合适的数据类型。当然Numpy也提供其他的数据类型,以便在操作中自由使用。

    x = [1,2,3,4]
    a = np.array(x)
    print(a)
    
    c = np.array(x,float)
    print(c)
    
    d = np.ones((2,3))# 注意此处的括号:一维单括号,多维双括号
    print(d)
    
    e = np.ones_like(d)
    print(e)
    
    i = np.eye(3,3)
    print (i)
    
    h = np.arange(10)
    print(h)

    1.2.ndarray的数据类型

    dtype是一种特殊的对象,它含有ndarray将一块内存解释存为特定数据类型所需要的的信息。提供多种元素类型,优化存储和运算性能。

    注意:可以使用astype方法显式转换其dtype,而且会创建一个新的数组,若浮点数转换为小数,小数部分截断。

    #将a 的数据类型转换成float64,并生成新的数据
    b = a.astype(np.float64)
    print(b)

    1.3.ndarray的属性查看

    #创建数组
    a = np.arange(100).reshape(10,10)
    print(a)
    #查看属性
    print(a.dtype,a.shape,a.size,a.ndim)

    1.4ndarray的运算与数学函数

    数组的运算时整体化矢量运算,每一种算术都应用到元素级。即矢量化运算

    x = [2,3,4,5,3,4,5,6,7,9]
    a = np.array((x))
    print (a)
    
    d = a ** 2
    print (d)
    
    c = a.reshape(2,5)
    print (c + c)

    1.5.基本索引和切片

    注意:切片和索引不复制数据

    两个概念:

    轴(axis):数据的维度

    秩(rank):轴的数量

    以二维数组为例,有行和列两个轴,一般用axis=0表示行轴,axis=1表示列轴,其秩为2。

    一维数组与Python列表的索引和切片相似,区别在于数据不会被复制,切片上的修改会直接反应到源数据上。二维数据的索引各索引及切片位置上的元素不再是标量,而是一维数组。高维数组的切片是按顺序轴依次进行的。

    a = np.arange(10)
    print(a[5],a[5:8])
    #赋值
    a[5:8] = 12
    print(a)
    
    b = np.arange(100).reshape(10,10)
    print(b)
    print(b[1],b[2:4])
    
    b[6] = 6
    print(b)

    1.6.布尔型

    布尔型索引对于数据处理十分重要,可以通过布尔索引进行数据筛选与分组

    • 选择型 “==”“>”“<”
    • 排除型 “!=”“-(布尔索引)”
    • 多条件型 布尔索引以“&”“|”连接
    • 混合切片 布尔索引与切片相结合,也可以进行赋值。
    x = np.arange(10)
    y = np.arange(70).reshape(10,7)
    print(x,y)
    
    print (x == 3)
    
    print(y[x == 3,4])
    print(y[x != 3])
    
    print(y[(x == 3)|(x == 4)])# 注意括号的使用

    1.7.转置

    • 转置是数组重塑的特殊形式,返回源数组的视图,不会复制数据。
    • 函数:A.T
    a = np.random.randn(6,3)# 创建随机正态分布数组
    print(np.dot(a.T,a))#矩阵内积

    二、数据处理:矢量化高级数据处理

    numpy数组可以使许多数据处理任务表述为简洁的数组表达式,代替循环的做法,这比纯python实现数值计算快一两个数量级,这对于处理大佬数据极为有利

    2.1np.where(condition,x,y)

    • 第二,三个参数可以不是数组,而是一个标量值,也可以进行替换。
    • np.where(condition,x,y)是x if condition else y 的矢量化表达式,速度快,适用于高维数据,可结合布尔型切片进行操作。
    # 创建数组
    import numpy as np
    x = np.array([1.1,1.2,1.3,1.4,1.5])
    y = np.array([2.1,2.2,2.3,2.4,2.5])
    c = np.array([True,False,True,True,False])
    # 两种方式执行
    result1 = [(x if c else y) for x,y,c in zip(x,y,c)]
    result2 = np.where(c,x,y)
    #打印结果,应该相同
    print (result1,result2)

    2.2统计学方法

    a = np.random.randn(5,4)
    
    print(a,a.mean(),a.sum(1),(a>0).sum())

    2.3排序

    • a.sort(axis) 不复制,修改数据本身。

    2.4线性代数相关

    线性代数是任何数组库重要的组成部分,Numpy依据行业标准Fortran(MALTLAB,R同样适用),在numpy.lingla模块中有一组标准的矩阵分解运算以及其他矩阵操作相关的程序。

    from numpy.linalg import det,inv,svd,solve,eig
    a = np.arange(9).reshape(3,3)
    print(a)
    
    print(np.dot(a,a),a.T*a)
    
    c = det(a)
    e = svd(a)
    g = eig(a)
    
    print(c,e,g)

    2.5随机数生成

    numpy.random对python中内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。

    -------------------------------------结束----------------------------------------------

    版权声明:作者保留权利,不代表意本站立场。如需转载请联系本站以及作者。

    参与讨论

    回复《 数据分析numpy总结

    EditorJs 编辑器

    沙发,很寂寞~
    反馈
    to-top--btn