数据分析-numby属性

数据分析 @python挖掘者

什么是数据分析:

数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用的信息形成结论,并对数据加以

详细研究和概括总结的过程.

使用python做数据分析的常用库

1 . numpy 处理基础数值算法

  1. scipy 处理科学计算

  2. matplotlib 实现数据可视化

  3. pandas 提供了序列高级函数
    Numpy概述
    1 .Numerical Python(数值的python),补充了python语言欠缺的数值运算能力
    2.Numpy是其他数据分析和机器学习库的底层库
    3.Numpy完全标准c语言实现,运行效率充分优化
    4.Numpy开源免费
    Numpy历史
    1.1995年,Numeric,用于完成python语言数值运算的扩充
    2.2001年,Scipy -> Numarray,用于完成多维数组运算
    3.2005年,Numeric + Numarray --> Numpy
    4.2006年,Numpy脱离了Scrpy成为一个独立项目
    Numpy基础
    Numpy的核心:ndarray对象
    使用numpy.ndarray对象表示一个数组 demoo1.py
    import numpy as np
    ary = np.array([1,2,3,4,5])
    print(ary)
    ary = ary*10
    print(ary)
    内存中的ndarray对象
    元数据(metadata)
    存储对目标数组的描述信息,如dim count , dimensions,dtype,data等
    实际数据
    完整的数组数据
    将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面
    减少了对实际数据的访问频率,提高性能
    ndarray数组对象的创建
    np.array(可以被解释为Numpy数组的序列)
    np.arange(起始值(0),终止值,步长(1))
    np.zeros(数组元素的个数,dtype=‘数组元素类型’)
    np.ones(数组元素的个数,dtype=‘数组元素类型’)
    案例:测试ndarray对象的创建 demo02.py
    import numpy as np

    #创建二维数组
    a = np.array([[1,2,3,4],[5,6,7,8],[9,1,2,3]])
    print(a)
    
    # np.arange(起始值,结束值,步长)
    b = np.arange(1,10,1)
    print(b)
    
    #np.zeros(数组元素个数,dtype='')
    c = np.zeros(10)
    print(c, 'c; c.dtype:',c.dtype)
    
    #np.ones(数组元素个数,dtype='')
    d = np.ones(10,dtype='int64')
    print(d,';d.dtype:',d.dtype)
    

    ndarray对象数组的基本操作
    数组的维度: array.shape
    元素的类型:array.dtype
    数组元素的个数:array.size
    数组的索引(维度):array[0]
    案例:测试数组的基本属性 demo03.py
    import numpy as np

    #测试数组的基本属性
    a = np.array([[1,2,3,],[4,5,6]])
    print(a)
    print('a.shape:',a.shape)
    a.shape = (6,)
    print(a,'a.shape:',a.shape)
    print('a.size:',a.size)
    
    #数组元素的索引
    ary = np.arange(1,28)
    ary.shape = (3,3,3)
    print(ary,';ary.shape:',ary.shape)
    print('array[0][0][0]:',ary[0][0][0])
    print('array[0,0,0]:',ary[0,0,0])
    
    for i in range(ary.shape[0]):
        for j in range(ary.shape[1]):
            for k in range(ary.shape[2]):
                print(ary[i,j,k],end=' ')
    

    ndarray对象属性操作详解
    Numpy内置的基本数据类型
    类型名 类型表示符
    布尔型 bool
    有符号整形 int8/int16/int32/int64
    无符号整形 uinit8/uinit16/uinit32/uinit64
    浮点型 float16/float32/float64
    复数型 complex64/complex128
    字符串型 str_(每个字符串用32位的Unicode编码表示)
    numpy自定义复合类型
    ‘’’
    测试numpy自定义复合类型
    在ndarray数组中存储3位学生信息
    ‘’’
    import numpy as np
    data = [(‘zs’,[10,15,2],3),
    (‘ls’,[12,13,96],8),
    (‘fz’,[14,12,96],12),
    ]
    #第一种设置dtype的方式
    a = np.array(data,dtype=“U2,3int32,int32”)
    print(a,’;zs.age:’,a[0][‘f2’])

    #第二种设置dtype的方式
    b = np.array(data,dtype=[
        ('name','str_',2),
        ('score','int32',3),
        ('age','int32',1),
    ])
    print(b,'; zs.age:',b[0]['age'])
    
    #第三种设置dtype的方式
    c = np.array(data,dtype={
        'names':['name','scores','age'],
        'formats':['U2','3int32','int32']
    })
    print(c,'; ls.name:',c[1]['name'])
    
    #第四种设置dtype的方式
    #例如scores字段钻存储时候会从第16各个字节开始输出分数列表数据,3int32将会占用12字节
    # 那么age字段将会从第28个字节开始向后输出
    #U2占用了8字节,与scores字段中间会空出8个字节,虽然浪费了空间,但是这种数据存储对齐的做法在数据
    #访问时将提高效率
    d = np.array(data,dtype={
        'name': ('U2',0),
        'scores':('3int32',16),
        'age':('int32',28)
    })
    
    #第五种设置dtype的方式
    e = np.array([0x1234,0x5678],dtype=('u2',{
        'lowc':('u1',0),
        'highc':('u1',1)
    }))
    print('%x' % e[0])
    print('%x' % e['lowc'][0])
    print('%x' % e['highc'][0])
    
    # ndarray对象处理日期类型元素
    f = np.array(['2018','2019-01-01','2019-02-01','2019-01-02 01:01:01'])
    #把f数组的元素类型改为日期类型
    g = f.astype('M8[s]')
    print(g,g.dtype)
    
    h = g.astype('int32')
    print(h,h.dtype)
    print(h[2] - h[1])
    

    类型的简写字符码
    类型 字符码
    bool ?
    int8/int16/int32/int64 i1/i2/i3/i4
    unit8/unit16/unit32/unit64 u1/u2/u3/u4
    float16/float32/float64 f2/f4/f8
    complex64/complex128 c8/c16
    str_ U<字符数>
    datetime64 M8[Y]/M8[M]/M8[D]/M8[h]/M8[m]/M8[s]
    ndarray 数组对象的维度操作
    视图变维: array.reshape() array.ravel()
    import numpy as np

    a = np.arange(1,9)
    # 视图变维使用的还是原始数组中的数据,如果修改了原始数组中的数据,那么新数组读到的数据也会
    # 发生变化
    b = a.reshape((2,4))
    print(a,b)
    print('***********')
    a[0] = 999
    print(b)
    print('***********')
    c = b.ravel()
    print(c)
    

    复制变维: flatten()
    d = b.flatten()
    d[0] = 110
    print(b)
    print(d)
    就地变维:直接修改数组维度,不返回新数组
    d.shape = (2,4)
    print(d)
    d.resize(2,2,2)
    print(d)
    ndarray数组的切片操作
    数组的切片与列表参数类似
    步长+ : 默认从前往后切
    步长- : 默认从后往前切
    array[起始位置:终止位置:步长]

      1. import numpy np
        a = np.arange(1,10)
        print(a)
        print(a[:3])
        print(a[3:6])
        print(a[6:])
        print(a[::-1])
        print(a[:-4:-1])
        print(a[-4:-7:-1])
        print(a[-7::-1])
        print(a[::])
        print(a[::3])
        print(a[1::3])
        print(a[2::3])
        #a变为2维数组
        # 切出1/2行与1/2/3列
        a.resize(3,3)
        print(a[1:,:])
        

ndarray数组的掩码操作

'''
演示ndarray对象的掩码操作
'''
import numpy as np 

a = np.array([1,2,3,4,5,6,7,8])
f = np.array([True,False,True,False,True,False,True,False,])
print(a[f])

# 找到1~100中3的倍数或7的倍数都打印出来
a = np.arange(1,100)
flag_a = a % 3 == 0
flag_b = a % 7 == 0
print(flag_a)
print(flag_b)
flag = np.any([flag_a,flag_b],axis=0)
print(a[flag])

多维数组的组合与拆分

垂直方向的操作: vstack() vsplit()

水平方向的操作:hstack() hsplit()

深度方向的操作: dstack() dsplit()

import numpy as np 

a = np.arange(1,7).reshape(2,3)
b = np.arange(7,13).reshape(2,3)

#垂直方向操作
c = np.vstack((a,b))
print(c)
a,b = np.vsplit(c,2)
print(a,'\n',b)

print('=====水平方向======')
#水平方向操作
d = np.hstack((a,b))
a, b = np.hsplit(d,2)
print(a,'\n',b)

print('=====深度方向======')
e = np.dstack((a,b))
print(e)
a,b = np.dsplit(e,2)
print(a,'\n',b)

多维数组组合与拆分的相关函数

#根据axis所指定的轴向(0,1,2)进行多维数组的组合
#如果待组合的两个数组都是二维数组
#axis = 0: 垂直方向
#axis = 1; 水平方向
#如果待组合的两个数组都是三维数组
#axis = 0: 垂直方向
#axis = 1; 水平方向
#axis = 2: 深度方向
c = np.concatenate((a,b),axis=0)
#通过给定的axis轴向与拆分的份数对c数组进行拆分
np.split(c,2,axis=0)

长度不等的两个数组的组合操作

np.pad(ary,  #原始数组
       pad_width=(0,1), #补全方式(头补0个,尾补1个)
       mode='constant', #设置补全模式为constant
       constant_values=-1)  #设置补全的默认值为-1
print('===========测试不同长度的数组的组合===========')
a = np.arange(1,7)
b = np.arange(10,16)
c = np.pad(b,pad_width=(2,2),mode='constant',constant_values=-1)
print(a)
print(b)
print(c)

简单的一维数组的组合方案

np.row_stack((1,10))
np.column_stack((11,20))
#把a与b摞在一起成为两行
np.row_stack((a,b))
#把a与b并在一起成为两列
np.column_stack((a,b))

numpy数组的其他属性

属性 含义
shape 维度 维度
dtype 元素类型 元素类型
size 数组元素个数
ndim 维数
itemsize 元素字节数
nbytes 数组总字节数
real 复数数组的实部
imag 复数数组的虚部
T 数组对象的转置视图
flat 返回数组的扁平迭代器

你可能感兴趣的:(IT,数据分析-numby属性)