zoukankan      html  css  js  c++  java
  • 数据分析之numpy模块

    1.nunpy模块简介

    1.Numpy是高性能科学计算和数据分析的基础包
    2.也是pandas等其他数据分析的工具的基础
    3.NumPy具有多维数组功能,运算更加高效快速

    python安装方法

    # python安装
    pip install numpy
    # 引用方式:
    import numpy as np
    
    # anaconda环境下
    conda install numpy
    '''anaconda已经自动帮助我们下载好了数据分析相关的模块,其实无需我们再下载'''

    # 可以看下面计算bmi参数时间比较
    numpy计算比python计算快太多

     2.数组概念

      注意:nunpy中的数组,所有的元素必须是相同的数据类型

    #  主要是numpy封装的用于数学计算的数据结构
    # 一维数组:np.array(列表) np.array(元组)
    res = np.array([1,2,3,4])
    res1 = np.array((1,2,3,4))
    print(type(res),type(res1))
    # print(res.dtype)
    
    # 二维数组:np.array([列表,列表]) 使用最为频繁
    np.array([
        [1,2,3,4],
        [9,8,7,6]
    ])
    # 三维数组基本不用
    np.array([[
        [1,2,3,4],
        [9,8,7,6],
        [4,6,7,2]
    ]])
    1.基于嵌套列表创建二维数组
    arr1 = np.array([[1,3,5,7],
                    [2,4,6,8],
                    [11,13,15,17],
                    [12,14,16,18],
                    [100,101,102,103]])
    2.基于嵌套元组创建二维数组
    arr2 = np.array(((8.5,6,4.1,2,0.7),(1.5,3,5.4,7.3,9),
                     (3.2,3,3.8,3,3),(11.2,13.4,15.6,17.8,19)))

    3. 数据类型

    布尔型      bool_    
    整型       int_ int8 int16 int32 int64
             int32 只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
    无符号整型    uint8 uint16 uint32 uint64    
             u全称:unsigned
    浮点型      float_ float16 float32 float64    
    复数型      complex_ complex64 complex128

    # 数据类型

    import numpy as np
    res=np.array([1,1.1,2,3,4.2])
    res.dtype

    结果:dtype('float64') # 只要有一个浮点型,整个数组都是浮点型
    
    

     4.常用属性

    1)数组的转换(对高维数组而言)
    import numpy as np
    li1 = [
          [1,2,3],
          [4,5,6]
    ] 
    a = np.array(li1)
    a.T
    结果
    array([[1, 4],
           [2, 5],
           [3, 6]])
    就相当于是将行变成列,列变成行,它也是一个比较常用的方法

    参数:
    dtype    数组元素的数据类型    
    size    数组元素的个数    
    ndim    数组的维数    
    shape    数组的维度大小(以元组形式)
    reshape 修改数组大小

    import numpy as np
    a = np.array([[1,2,3],[4,5,6]])  # a.shape 3  结果:(2, 3)  2行3列

    b = a.reshape(3,2)
    print (b)
    [[1, 2]
    [3, 4]
    [5, 6]]

    5.numpy常用方法

    # 如何查看方法提示
    # 方式1:shift+tab tab按第二次的时候出现详细方法
    np.array
    
    #方式2:问号执行
    #np.array?
    
    # arange() ->range的numpy版,支持浮点数
    np.arange(1,10,2)
    结果:array([1, 3, 5, 7, 9])
    
    # linspace()    类似arange(),第三个参数为数组长度
    np.linspace(1,10,20)
    
    # 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等
    
    zeros()    根据指定形状和dtype创建全0数组    
        np.zeros((3,4)) # 创建3行4列的数组
    ones()    根据指定形状和dtype创建全1数组    
        np.ones((3,4))
    empty()    根据指定形状和dtype创建空数组(随机值)    
        np.empty(10)
    eye()    根据指定边长和dtype创建单位矩阵
        np.eye(5)

    6.索引与切片

    1、在一维数组中,列表的所有索引方法都可以使用在数组中,而且还可以使用间断索引(花式索引)和逻辑索引;
    2、在二维数组中,位置索引必须写成[rows,cols]的形式,方括号的前半部分用于锁定二 维数组的行索引,后半部分用于锁定数组的列索引;
    3、如果需要获取二维数组的所有行或列元素,那么,对应的行索引或列索引需要用英文 状态的冒号表示;
    
    '''一维数组'''
    # 一维数组与列表在索引取值和切片上一模一样
    age = np.array([13,19,22,14,19,11])
    age[-1] # 跟列表切片一致,结果:11
    age[:3] # 跟列表索引取值一致 结果:array([13, 19, 22])
    # 间断索引(花式索引),获取19,14,19
    # 数组[[索引值1,索引值2,索引值3]]
    age[[1,3,4]]
    # 逻辑索引(布尔索引)  使用较为频繁
    age < 18
    # array([ True, False, False,  True, False,  True])
    age[age < 18]
    # array([13, 14, 11])
    
    '''二维数组'''
    res = np.array([[  1,   3,   5,   7],
           [  2,   4,   6,   8],
           [ 11,  13,  15,  17],
           [ 12,  14,  16,  18],
           [100, 101, 102, 103]])
    res[1:3] # 行索引
    res[:,1:3] # 列索引
    """res[ 行索引,列索引] # 不写默认所有"""
    # 只拿4,6,13,15
    res[1:3,1:3]
    
    res[3,3]  # 18
    res[3,:]  # array([12, 14, 16, 18])
    res[:,1]  # array([  3,   4,  13,  14, 101])
    res[0:2,1:3]  # array([[3,5],[4,6]])

    7.运算符

    # 数学运算符
        +
            数组对应元素的加和
      -
          数组对应元素的差
      *
          数组对应元素的乘积
      /
          数组对应元素的商
      %
          数组对应元素商的余数
      //
          数组对应元素商的整除数
      ** 
          数组对应元素的幂指数
        
    # 比较运算符
        >
            等价np.greater(arr1,arr2)
            判断arr1的元素是否大于arr2的元素
        >=
            等价np.greater_equal(arr1,arr2)
            判断arr1的元素是否大于等于arr2的元素
        <
            等价np.less(arr1,arr2)
            判断arr1的元素是否小于arr2的元素
        <=
            等价np.less_equal(arr1,arr2)
            判断arr1的元素是否小于等于arr2的元素
        ==
            等价np.equal(arr1,arr2)
            判断arr1的元素是否等于arr2的元素
        !=
            等价np.not_equal(arr1,arr2)
            判断arr1的元素是否不等于arr2的元素

    8. 基本函数

    # 常用的数学函数
      np.round(arr)
            对各元素四舍五入
      np.sqrt(arr)
          计算各元素的算术平方根  
      np.square(arr)
          计算各元素的平方值
      np.exp(arr)
          计算以e为底的指数
      np.power(arr, α)
          计算各元素的指数
      np.log2(arr)
          计算以2为底各元素的对数
      np.log10(arr)
          计算以10为底各元素的对数
      np.log(arr)
          计算以e为底各元素的对数
        
    # 常用的统计函数(必会)
      np.min(arr,axis)
          按照轴的方向计算最小值
      np.max(arr,axis)
          按照轴的方向计算最大值
      np.mean(arr,axis)
          按照轴的方向计算平均值
      np.median(arr,axis )
          按照轴的方向计算中位数
      np.sum(arr,axis)
          按照轴的方向计算和
      np.std(arr,axis)
          按照轴的方向计算标准差
      np.var(arr,axis)
          按照轴的方向计算方差
      '''
      注意:
          axis=0时,计算数组各列的统计值 
          axis=1时,计算数组各行的统计值
      '''
    array([[ 80.5, 60., 40.1, 20., 90.7],
           [ 10.5, 30., 50.4, 70.3, 90.],
           [ 35.2, 35., 39.8, 39., 31.],
           [91.2, 83.4, 85.6, 67.8, 99.]])
    '''不使用axis参数'''
    # python计算每一行的和
    Sum = []
    for row in range(res.shape[0]):
        Sum.append(np.sum(arr2[row,:]))
    # 计算每一列的平均
    Avg = []
    for col in range(res.shape[1]):
        Avg.append(np.mean(arr2[:,col]))
        
    '''使用axis参数'''
    arr2.sum(axis = 1)  # 等价np.sum(arr2, axis = 1)
    np.mean(arr2, axis = 0)  # 等价arr2.mean(axis = 0)

    9.随机数

    numpy中的random子模块
    np.random
    
    rand        给定形状产生随机数组(0到1之间的数)    np.random.rand(3,3)
    randint    给定形状产生随机整数    np.random.randint(5,size=(2,4))
    choice    给定形状产生随机选择    
    shuffle    与random.shuffle相同    
    uniform    给定形状产生随机数组(随机均匀分布)  np.random.uniform((1,2))产生1,2之间的随机数
    normal  随机正态分布
    np.random.normal(10,size=(3,3)) # 以10位分隔符取值,靠近10取值多
    array([[10.07142027, 11.48868803, 11.53035586],
           [ 9.95786927, 10.79440548, 10.15130168],
           [10.94953714,  8.26487928,  9.43984842]])
     

    案例:正规赌场下的结局案例

    """有10000块钱,去某赌场嗨皮
    假设输赢概率都是50%(一般赢49%),并且赢一场赚100,输一场亏100
    jason总共玩了1500场,可能还剩下多少钱"""
    
    # 总钞票数
    money = 10000
    # 先利用uniform生成1500次0到1之间的随机均匀分布
    r = np.random.uniform(0,1,1500)
    # 判断输赢
    for time in r:
        if time < 0.5:
            money -= 100
        else:
            money += 100
    money
    赌场小案例
    # 进阶操作(模拟仿真)
    '''记录每一次赌局完成后的钞票数'''
    money = 10000
    pgs = [money]
    r = np.random.uniform(0,1,1500)
    for time in r:
        if time < 0.5:
            money -= 100
        else:
            money += 100
        pgs.append(money)  
    '''提前搂一眼后面会详细讲解的matplotlib模块'''
    import matplotlib.pyplot as plt
    plt.plot(range(1501),pgs)  # x轴与y轴坐标数据
    plt.show()
  • 相关阅读:
    浅谈大型网站的SEO策略及如何执行,互联网营销 狼人:
    需求为王,互联网营销 狼人:
    Google推出HTML 5练兵场 提供详尽代码示例,互联网营销 狼人:
    信息架构,互联网营销 狼人:
    产品的成功学,互联网营销 狼人:
    How Digg is Built:讲述Digg背后的技术,互联网营销 狼人:
    网站体验七武器,互联网营销 狼人:
    真正有价值的社交网络——微观下的Twitter,互联网营销 狼人:
    互联网革新的下一个受益者是谁?,互联网营销 狼人:
    Hibernate的hql常用语句整理汇总
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/14304308.html
Copyright © 2011-2022 走看看