数据分析Numpy

时间:2019-12-03
本文章向大家介绍数据分析Numpy,主要包括数据分析Numpy使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Numpy

 

Numpy

  • 简介
  • ndarray
  • 通用函数
  • 其他

1、简介

Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

安装方法:

pip install numpy

引用方式:

import numpy as np

这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy当中有一些方法与Python中自带的一些方法,例如maxmin等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法

2、ndarray -多维数组对象

  1,ndarray的优点

  按照Python当中的方法

        第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率
        第二种:通过map方法和lambda函数映射

  2、创建ndarray对象

    np.array()

  3、ndarray是一个多维数组列表

  • 数组对象内的元素类型必须相同
  • 数组大小不可修改
4、常用属性
属性描述 
T 数组的转置(对高维数组而言)  
dtype 数组元素的数据类型  
size 数组元素的个数  
ndim 数组的维数  
shape 数组的维度大小(以元组形式)
T:转置
li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a.T
执行结果:
array([[1, 4],
       [2, 5],
       [3, 6]])
就相当于是将行变成列,列变成行,它也是一个比较常用的方法
View Code
5、数据类型
  • dtype
类型描述 
布尔型 bool_  
整型 int_ int8 int16 int32 int 64  
无符号整型 uint8 uint16 uint32 uint64  
浮点型 float_ float16 float32 float64  
复数型 complex_ complex64 complex128

 

6、ndarray-创建
方法描述 
array() 将列表转换为数组,可选择显式指定dtype  
arange() range的numpy版,支持浮点数  
linspace() 类似arange(),第三个参数为数组长度  
zeros() 根据指定形状和dtype创建全0数组  
ones() 根据指定形状和dtype创建全1数组  
empty() 根据指定形状和dtype创建空数组(随机值)  
eye() 根据指定边长和dtype创建单位矩阵

  

1、arange():
np.arange(1.2,10,0.4)
执行结果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
       6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在进行数据分析的时候通常我们遇到小数的机会远远大于遇到整数的机会,这个方法与Python内置的range的使用方法一样
-----------------------------------------------------------------
2、linspace()
np.linspace(1,10,20)
执行结果:
array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])
# 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等
----------------------------------------------------------------
3、zeros()
np.zeros((3,4))
执行结果:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
# 会用0生成三行四列的一个多维数组
---------------------------------------------------------------------
4、ones()
np.ones((3,4))
执行结果:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
# 会用1生成三行四列的一个多维数组
------------------------------------------------------------------------
5、empty()
np.empty(10)
执行结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 这个方法只申请内存,不给它赋值
-----------------------------------------------------------------------
6、eye()
np.eye(5)
执行结果:
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
View Code
7、索引和切片
  • 数组和标量(数字)之间运算
  • 索引
    li = [1,2,3,4,5]
      #   0 1 2 3 4   
    li[0]
    1
    [1,2,3,4]
    import numpy as np     # 导入numpy
    res = np.array([1,2,3,4])
    res[1]     # 一维数组索引取值与python一模一样
    2
    # 二维数组索引
    res1 = np.array([[1,2,3,4],[5,6,7,8]])
    res1      # 二维数组索引
    # res1[1,1]
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    第一种方法:
    res1[1,1]    # 第一种方法:二维数组索引,第一个参数代表行索引,逗号后面是列索引,不管是行索引还是列索引,都是从零开始
    6
    res1[1][1]  # 第二中方法:
    6
切片

li = [1,2,3,4,5]
li[1:4]   # python 切片取值,顾头不顾尾
[2, 3, 4]
一维数组与python切片取值一样
res = np.array([1,2,3,4,5])
res[1:4]    # 一维数组与python切片取值一样
array([2, 3, 4])
res = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
res
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
# res[1:2,1:2]
res[1:3]      # 多维数组
array([[ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
顾头不顾尾
res[1:3,1:3]  # 逗号前面的是行切片,逗号后面的是列切片  顾头不顾尾
array([[ 6,  7],
       [10, 11]])
布尔型索引
res
# 给一个数组,选出数组中大于5 的数
import random
li = [random.randint(1,10) for _ in range(20)]
res = np.array(li)
res
array([ 8,  8,  1,  9,  9,  6,  1,  7,  4,  1,  3,  4,  6, 10,  1,  8,  3,
        3,  2,  8])
可以直接进行比较,得到的值是布尔值
res > 5  # numpy可以直接进行比较,得到的值是布尔值
array([ True,  True, False,  True,  True,  True, False,  True, False,
       False, False, False,  True,  True, False,  True, False, False,
       False,  True])
res[res > 5]  # 外边的res会将布尔值为ture的索引传进来,再输出,非常简单
array([ 8,  8,  9,  9,  6,  7,  6, 10,  8,  8])
偶数,等都可以用此方法,整除有余,就为奇,
# 奇数,偶数,等都可以用此方法,整除有余,就为奇,
res = np.array([[1,2,3,4],[5,6,7,8]])
res 
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
用法
res[res>5]   # 二维数组的用法
array([6, 7, 8])
花式索引
res
res = np.array([1,2,3,4,5,6,7,8,9])
res
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 获取 2,4,7,9 这几个值的一个数组
res[[1,3,6,8]]    # 花式索引,即中括号中套中括号,哪层括号中的数据就是你要取的值的对应的索引
array([2, 4, 7, 9])

  res = np.array([1,2,3,4,5,6,7,8,9,10])
  res.reshape(2,5) # reshape,转置,前提是括号中的值的个数和不能是单数,括号中数的乘积必须与原数组中值的总个数一致

  array([[ 1, 2, 3, 4, 5],

      [ 6, 7, 8, 9, 10]])

3、通用函数

    常见通用函数:

      能够接受一个数组的叫做一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组

      •     一元函数:
函数功能 
abs、fabs 分别是计算整数和浮点数的绝对值  
sqrt 计算各元素的平方根  
square 计算各元素的平方  
exp 计算各元素的指数e**x  
log 计算自然对数  
sign 计算各元素的正负号  
ceil 计算各元素的ceiling值  
floor 计算各元素floor值,即小于等于该值的最大整数  
rint 计算各元素的值四舍五入到最接近的整数,保留dtype  
modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似  
isnan 计算各元素的正负号  
isinf 表示那些元素是无穷的布尔型数组  
cos,sin,tan 普通型和双曲型三角函数  
      •     二元函数:
函数功能 
add 将数组中对应的元素相加  
subtract 从第一个数组中减去第二个数组中的元素  
multiply 数组元素相乘  
divide、floor_divide 除法或向下圆整除法(舍弃余数)  
power 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B  
maximum,fmax 计算最大值,fmax忽略NAN  
miximum,fmix 计算最小值,fmin忽略NAN  
mod 元素的求模计算(除法的余数)  

            

补充内容:浮点数特殊值

浮点数:float
浮点数有两个特殊值:

1、nan(Not a Number):不等于任何浮点数(nan != nan)
---------------------------------------------
2、inf(infinity):比任何浮点数都大
---------------------------------------------
  • Numpy中创建特殊值:np.nan、np.inf
  • 数据分析中,nan常被用作表示数据缺失值

  3.1、数学统计方法

函数功能 
sum 求和  
cumsum 求前缀和  
mean 求平均数  
std 求标准差  
var 求方差  
min 求最小值  
max 求最大值  
argmin 求最小值索引  
argmax 求最大值索引  

  3.2、随机数

   随机数生成函数在np.random的子包当中

     常用函数

函数功能 
rand 给定形状产生随机数组(0到1之间的数)  
randint 给定形状产生随机整数  
chocie 给定形状产生随机选择  
shuffle 与random.shuffle相同  
uniform 给定形状产生随机数组

原文地址:https://www.cnblogs.com/Fzhiyuan/p/11978101.html