Python数据分析-numpy

目录

一、创建数组

1.1 从列表传入:array()

1.2 生成全0数组:zeros()

1.3 生成全1数组:ones()

 1.4 fill(x)函数将数组设定为x:

1.5 类型转换:astype()

1.6 生成整数序列:arange()

1.7 生成等差数列:linspace()

1.8 生成随机数:random.rand(),random.randn(),random.randint()

1.9 查看变量类型:type()

1.10 查看数据的类型:dtype()

1.11 查看变量的形状:shape,size,ndim

二、索引和切片

2.1 常规索引

2.2 省略参数

2.3 案例:计算一部电影的累计票房

三、多维数组及其属性

3.1 查看数组属性

3.2 多维数组索引:

3.3 多维数组切片:

四、花式索引

4.1 一维花式索引

4.2 二维花式索引

4.3 不完全索引

4.4 where语句

五、数组类型

六、数组操作(以豆瓣10部高分电影为例)

6.1 数组排序:

6.2 其他常见函数:

七、多维数组操作

7.1 数组形状,shape和reshape,reshape不会修改原有的数组,而会返回一个新的数组

7.2 转置

7.3 数组连接

 7.4 numpy内置函数(部分函数)


Numpy 是Python 的⼀种开源的数值计算拓展,这种⼯具可⽤来存储和处理⼤型矩阵。
Numpy的⼀个重要特性是数组计算。


导入numpy包的几种方法:

import numpy             
import numpy as np       #导入numpy包并重命名为np
import numpy import *    #导入numpy的所有函数,但若是大工程函数可能相同,会报错

一、创建数组

1.1 从列表传入:array()

import numpy as np
# list = [1,2,3,4]
# a = np.ayyay(list)
a = np.array([1,2,3,4]) 

b = np.array([5,6,7,8])

print(a)
print(a+1)    # a里的所有元素+1
print(a*2)    # a里的所有元素*2
print(a+b)    # a里的元素和b里的元素一一对应相加
[1 2 3 4]
[2 3 4 5]
[2 4 6 8]
[ 6  8 10 12]

1.2 生成全0数组:zeros()

a = np.zeros(5)    # 生成5个元素为0的数组(默认为浮点型)

1.3 生成全1数组:ones()

a = np.ones(5)                    # 生成5个元素为1的数组
a = np.ones(5,dtype = 'bool')     #类型改为布尔类型
a = np.ones(5,dtype = 'int')      

 1.4 fill(x)函数将数组设定为x:

a = np.ones(5)    # 生成5个元素为1的数组
a.fill(5) 
print(a)

1.5 类型转换:astype()

a=np.ones(5,dtype = 'int')
print(a)

a=a.astype('float') # 若不进行类型转换,当填充的值为小数时,最终结果会默认为整数(舍去小数)
print(a)

a.fill(2.5)
print(a)

1.6 生成整数序列:arange()

a = np.arange(1,10)    # 左闭右开
print(a)    # [1 2 3 4 5 6 7 8 9]

a = np.arange(1,10,2)
print(a)    # [1, 3, 5, 7, 9]

1.7 生成等差数列:linspace()

# 生成范围为1-12,数量为12的等差数列
a = np.linspace(1,12,20)    
print(a) 

'''
[ 1.          1.57894737  2.15789474  2.73684211  3.31578947  3.89473684
  4.47368421  5.05263158  5.63157895  6.21052632  6.78947368  7.36842105
  7.94736842  8.52631579  9.10526316  9.68421053 10.26315789 10.84210526
 11.42105263 12.        ]
'''

1.8 生成随机数:random.rand(),random.randn(),random.randint()

#生成10个0-1(不包括1)的随机数
a = np.random.rand(10)
print(a)
#生成10个服从标准正态分布的随机数
a = np.random.randn(10)  
print(a) 
#生成10个范围在1-100间的随机数
a = np.random.randint(1,100,10)  
print(a) 

1.9 查看变量类型:type()

np.random.randint(1,100,10)     #生成随机整数
print( type(a) )    # numpy.ndarray

1.10 查看数据的类型:dtype()

a = np.random.randint(1,100,10)     #生成随机整数
print(a.dtype)    # dtype('int32')

1.11 查看变量的形状:shape,size,ndim

a = np.random.randint(1,100,10)  #生成随机整数
print(a)
print(a.shape)   # (10,)   查看形状 行*列,该数据只有行没有列
print(a.size)    # 10      查看元素的数目
print(a.ndim)    # 1       查看维度

二、索引和切片

2.1 常规索引

a=np.array([0,1,2,3])
print(a[0]) # 0

a[0]=10  #修改第一个元素的值
print(a) # [10,1,2,3]

a=np.array([11,12,13,14,15])
a[1:3]  #取索引号1-2的数,左闭右开   [12,13] 

a[1:-2]  #负索引,正数第一个到倒数第二个    [12,13]

a[-4:3]  #倒数第四个到正数第三个    [12,13]

2.2 省略参数

print(a[-2:]) #倒数第二个到最后   [14,15]

print(a[::2])  #间隔为2,取所有   [11,13,15]

2.3 案例:计算一部电影的累计票房

ob=np.array([21000,21800,22100,23450])

#计算每一天的票房
ob2=ob[1:]-ob[:-1]
print(ob2)    # [ 800,  300, 1350]

三、多维数组及其属性

3.1 查看数组属性

a=np.array([[0,1,2,3],[10,11,12,13]])
print(a)    

a.shape #查看形状     (2,4)

a.size  #查看数量      8

a.ndim  #查看维度      2

3.2 多维数组索引:

a=np.array([[0,1,2,3],[10,11,12,13]])
print(a[1,3])  #a[行,列],第二行第四列 注意:索引是从0开始的   

a[0,1]=15 #更改
print(a)

print(a[0]) #索引第一行

print(a[:,3]) #索引列,注意前面有冒号,所有行第四列
13
[[ 0 15  2  3]
 [10 11 12 13]]
[ 0 15  2  3]
[ 3 13]

3.3 多维数组切片:

a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45]])
print(a)
print(a[0,3:5])   # 取第一行第四个和第五个元素,即[0,4][0,5]元素
print(a[-2:,-2:]) # 最后两行的最后两列
print(a[:,2])     # 得到第三列
print(a[2::2,::2])# 取第三行到最后一行,间隔一行的行数,所有列中间隔一列的列数
[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]]
[3 4]
[[34 35]
 [44 45]]
[ 2 12 22 32 42]
[[20 22 24]
 [40 42 44]]

切片在numpy数组中是引用,当引用的变量的元素改变时,被引用的变量中的元素也会变

a=np.array([0,1,2,3,4])
b=a[0:2] # b = [0,1]
b[0]=10
print(a)     # [10  1  2  3  4]

解决情况:copy()

a=np.array([0,1,2,3,4])
b=a[0:2].copy() # b = [0,1]
b[0]=10
print(a)    

四、花式索引

4.1 一维花式索引

a=np.arange(0,100,10)
index=[1,2,-3]
y=a[index]
print(y)    # [10 20 70]

 布尔数组索引:

a=np.arange(0,100,10)
#mask必须是布尔数组,长度必须和数组长度相同
mask=np.array([0,2,2,3,0,1,2,0,1,1],dtype=bool)
#在mask定义的位置上为true的进行索引。索引位置:1,2,3,5,6,8,9
print(a[mask])   # [10, 20, 30, 50, 60, 80, 90])

4.2 二维花式索引

a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],
[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
print(a)
# 返回第一列第一行,第二列第二行,第三列第三行,第四列第四行,第五列第五行的元素
print(a[(0,1,2,3,4),(0,1,2,3,4)])  
# 返回第四行到最后一行,奇数列的元素  
print(a[3:,::2])
[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]
[ 0 11 22 33 44]
[[30 32 34]
 [40 42 44]
 [50 52 54]]
​
a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],
[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
print(a)
mask=np.array([1,0,1,0,0,1],dtype=bool)
print(a[mask,2])   #第一行,第三行,最后一行,第三列的元素    [ 2, 22, 52]
​

4.3 不完全索引

a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],
[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
print(a)

y=a[:3] # 前三行所有列的元素
[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]]
a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],
[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
print(a)

con=np.array([0,1,1,0,1,0],dtype=bool)
print(a[con])    # #取2,3,5,行,所有列的元素
[[10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [40 41 42 43 44 45]]

4.4 where语句

where函数会返回所有非零元素的索引

a=np.array([0,12,5,20])
print(a>10)              # 返回元素里大于10的布尔值

print(np.where(a>10))    # 返回>10的元素的索引的元组

print(a[a>10])           # 返回>10的元素

print(a[np.where(a>10)]) # a[a里>10的索引]
[False  True False  True]
(array([1, 3], dtype=int64),)
[12 20]
[12 20]

五、数组类型

#类型转换
a=np.array([1,5,-3],dtype=float)
print(a)

#asarray函数 (个人认为不如用上面那个)
a=np.array([1,2,3])
b = np.asarray(a,dtype=float)
print(a)
print(b)

#astype
a=np.array([4,5,6])
b = a.astype(float)
print(a)
print(b)
[ 1.  5. -3.]
[1 2 3]
[1. 2. 3.]
[4 5 6]
[4. 5. 6.]

六、数组操作(以豆瓣10部高分电影为例)

mv_name=['肖申克的救赎','控方证人','美丽人生','阿甘正传','霸王别姬','泰坦尼克号','辛德勒的名单','这个杀手不太冷','疯狂动物城','海豚湾']
#电影名称
mv_num=np.array([692795,42995,327855,580897,478523,157074,306904,662552,284652,159302])#评分人数
mv_score=np.array([9.6,9.5,9.5,9.4,9.4,9.4,9.4,9.3,9.3,9.3])#评分
mv_length=np.array([142,116,116,142,171,194,195,133,109,92])#电影时长(分钟)

6.1 数组排序:

#sort函数
print(np.sort(mv_num))    #未改变原有数组
print(mv_num)             

#argsort函数,返回从小到大的排列数组中的索引位置
order=np.argsort(mv_num)
print(order)

print(mv_name[order[0]])   #找到观影人数最少的电影的名字
print(mv_name[order[-1]])   #找到观影人数最多的电影的名字
[ 42995 157074 159302 284652 306904 327855 478523 580897 662552 692795]
[692795  42995 327855 580897 478523 157074 306904 662552 284652 159302]
[1 5 9 8 6 2 4 3 7 0]
控方证人
肖申克的救赎

6.2 其他常见函数:

#评分人数求和
print(np.sum(mv_num))    #两个函数都行,下面是一样的
mv_num.sum()

#时长最长
print(np.max(mv_length))
mv_length.max()

#时长最短
print(np.min(mv_length))
mv_length.min()

#得分平均值
print(np.mean(mv_score))
mv_score.mean()

#得分标准差
print(np.std(mv_score))
mv_score.std()

#得分和时长的协方差矩阵
print(np.cov(mv_score,mv_length))

#得分和时长的相关系数
print(np.corrcoef(mv_score,mv_length))
3693549
195
92
9.41
0.09433981132056571
[[9.88888889e-03 4.55555556e-01]
 [4.55555556e-01 1.26288889e+03]]
[[1.         0.12890953]
 [0.12890953 1.        ]]

七、多维数组操作

7.1 数组形状,shape和reshape,reshape不会修改原有的数组,而会返回一个新的数组

a=np.arange(6)
print(a)
a.shape=2,3       #转为2维3列
print(a.shape)    #查看a的形状
print(a)          #可以看出原来的数组已经被修改了
[0 1 2 3 4 5]
(2, 3)
[[0 1 2]
 [3 4 5]]
a=np.arange(6)
print(a)
a.reshape(2,3)       #转为2维3列
print(a.shape)    #查看a的形状
print(a)          #可以看出还是原来的数组
[0 1 2 3 4 5]
(6,)
[0 1 2 3 4 5]

注意:shape和reshape的格式不一样

7.2 转置

a=np.arange(6)
a=a.reshape(2,3)
print(a)
print(a.T )
print(a.transpose())
[[0 1 2]
 [3 4 5]]
[[0 3]
 [1 4]
 [2 5]]
[[0 3]
 [1 4]
 [2 5]]

7.3 数组连接

第一种方法:

x=np.array([[0,1,2],[10,11,12]])
y=np.array([[90,91,92],[100,101,102]])
print(x)
print(y)

z=np.concatenate((x,y),axis=0)  #按照列
print(z)

m=np.concatenate((x,y),axis=1)  #按照行
print(m)

n=np.array((x,y))#生成三维数组
print(n)
[[ 0  1  2]
 [10 11 12]]
[[ 90  91  92]
 [100 101 102]]
[[  0   1   2]
 [ 10  11  12]
 [ 90  91  92]
 [100 101 102]]
[[  0   1   2  90  91  92]
 [ 10  11  12 100 101 102]]
[[[  0   1   2]
  [ 10  11  12]]

 [[ 90  91  92]
  [100 101 102]]]

 第二种方法:

x=np.array([[0,1,2],[10,11,12]])
y=np.array([[90,91,92],[100,101,102]])
print(x)
print(y)

#vstack(按照行)
print( np.vstack((x,y)) )

#hstack(按照列)
print( np.hstack((x,y)) )

#dstack(生成三维数组)
print( np.dstack((x,y)) )

 7.4 numpy内置函数(部分函数)

a=np.array([-1,0,-10,5,7])

print( np.abs(a) )    #计算绝对值
print( np.median(a) ) #计算中位数
print( np.exp(a) )    #求指数
print( np.cumsum(a) ) #累计和
[ 1  0 10  5  7]
0.0
[3.67879441e-01 1.00000000e+00 4.53999298e-05 1.48413159e+02
 1.09663316e+03]
[ -1  -1 -11  -6   1]

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值