Python数据分析与展示
2. NumPy进阶使用单元
2.1.数据的csv格式文件存取
- csv文件
- csv (Comma-Separater Value,逗号分隔值)
- csv是一种常见的文件格式,用来存储批量数据
-
NumPy读写csv文件的方法:
1
np.savetext(fname,array,fmt = '%.18e',delimiter = None)
fname
:文件、字符串或者产生器,也可以是.gz或.bz2.的压缩文件array
:存入文件的数组fmt
:写入文案激动呢格式,例如:%d
、%.2f
、%.18e
delimiter
:分割字符串,默认是任何空格
1
np.loadtxt(fname,dtype = np.float,delimiter = None,unpack = False)
fname
:文件、字符串或者产生器,也可以是.gz或.bz2.的压缩文件dtype
:数据类型,可选delimiter
:分割字符串,默认是任何空格unpack
:如果True,读入属性将分别写入不同变量
- csv文件的局限性:
- csv只能有效存储一维和二维数组
2.2.多维数据的存取
tofile()
和fromfile()
存取方法:-
tofile()
写入方法:1
a.tofile(fname,sep = '',format = '%s')
fname
:文件、字符串sep
:数据分割字符串,如果是空串,写入文件为二进制format
:写入文件的格式
-
fromfile()
读取方法:1
np.fromfile(fname,dtype = float,count = -1,sep = '')
fname
:文件、字符串dtype
:数据类型count
:读入元素个数,-1表示读入整个文件sep
:数据分割字符串,如果是空串,读入文件为二进制- 注意事项:
- 该方法需要读取时知道存入文件时数组的维度和元素类型
tofile()
和fromfile()
需要配合使用- 可以通过元数据文件存储文件的元信息
-
- NumPy的便捷文件存取:
-
np.save
或np.savez
1 2
np.save(fname,array) np.savez(fname,array)
fname
:文件名,以.npy为扩展名,压缩扩展名为.npzarray
:数组变量
-
npload
1
np.load(fname)
-
npy文件将文件以二进制方式保存,将文件元信息写入文件第一行,从而保存了源文件维度和元素类型
-
2.3.NumPy库的随机数函数
-
NumPy的random子库
- 一般随机数函数
函数 说明 rand(d0,d1,...,dn)
根据$d_0\text{~}d_n$创建随机数数组,浮点数,$[0,1)$,均匀分布 randn(d0,d1,...,dn)
根据$d_0\text{~}d_n$创建随机数数组,标准正态分布 randint(low[,high,shape])
根据shape创建随机数数组或整数数组,范围是$[low,high)$ seed(s)
随机数种子,s是给定的种子值 - 高级随机数函数
函数 说明 shuffle(a)
根据数组啊、的第1轴进行随排列,改变数组a permutation(a)
根据数组a的第1轴产生一个新的乱序数组,不改变数组a choice(a[,size,replace,p])
从一位数组a中以概率 p
抽取元素,形成size
形状新数组replace
表示是否可以重用元素,默认为False- 生成有特定分布数组的函数
函数 说明 uniform(low,high,size)
产生具有均匀分布的数组,low为起始值,high结束值,size形状 normal(loc,scale,size)
产生正态分布的数组,loc均值,scale标准差,size形状 poisson(lam,size)
产生泊松分布的数组,lam随机事件发生率,size形状
2.4. 统计函数
- NumPy库直接提供统计类函数
函数 | 说明 |
---|---|
sum(a,axis = None) |
根据给定轴axis计算数组a相关元素之和,axis整数或元组 |
mean(a,axis = None) |
根据给定轴axis计算数组a相关元素的期望,axis整数或元组 |
average(a,axis = None,wights = None) |
根据给定轴axis计算数组a相关元素的加权平均值 |
std(a,axis = None) |
根据给定轴axis计算数组a相关元素的标准差 |
var(a,axis = None) |
根据给定轴axis计算数组a相关元素的方差 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
In [129]: a=np.arange(15).reshape(3,5)
In [130]: a
Out[130]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [131]: np.sum(a)
Out[131]: 105
In [132]: np.mean(a,axis=1)
Out[132]: array([ 2., 7., 12.])
In [133]: np.mean(a,axis=0)
Out[133]: array([ 5., 6., 7., 8., 9.])
In [134]: np.average(a,axis=0,weights=[10,5,1])
Out[134]: array([ 2.1875, 3.1875, 4.1875, 5.1875, 6.1875]) #第三个轴4.185=2*10+7*5+12*1/(10+5+1)
In [135]: np.std(a)
Out[135]: 4.3204937989385739
In [136]: np.var(a)
Out[136]: 18.666666666666668
函数 | 说明 |
---|---|
min(a) ,max(a) |
计算数组a中元素的最小值、最大值 |
argmin(a) ,argmax(a) |
计算数组a中元素最小值、最大值的降一维后下标 |
unravel_index(index, shape) |
根据shape将一维下标index转换成多维下标 |
ptp(a) |
计算数组a中元素最大值与最小值的差 |
median(a) |
计算数组a中元素的中位数(中值) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
In [137]: b=np.arange(15,0,-1).reshape(3,5)
In [138]: b
Out[138]:
array([[15, 14, 13, 12, 11],
[10, 9, 8, 7, 6],
[ 5, 4, 3, 2, 1]])
In [139]: np.max(b)
Out[139]: 15
In [140]: np.argmax(b)
Out[140]: 0
In [141]: np.unravel_index(np.argmax(b),b.shape)
Out[141]: (0, 0)
In [142]: np.ptp(b)
Out[142]: 14
In [143]: np.median(b)
Out[143]: 8.0#通过公式求得,结果为浮点数
2.5. NumPy的梯度函数
函数 | 说明 |
---|---|
np.gradient(f) |
计算数组f中元素的梯度,当f为多维是,返回每个维度梯度 |
- 梯度:连续值之间的变化率,即斜率 XY坐标轴连续是三个X坐标对应的Y轴值:a,b,c,其中,b的梯度是:$\frac{c-a}{2}$