一、引言
在数据获取后,如何进行有效的存储和读取是数据分析的前提工作,我在最近的学习中进行了初步地了解。同时也对数据的简单处理所使用的常用函数有所认识。下面是我的学习收获想与大家分享一下。
二、数据存取(根据实际情况合理选择)
数据的CSV文件存取(利:CSV作为常见文件格式,可以用来存储批量数据,对于一维和二维数据非常好用;弊:只能有效存储一维和二维数据)
写入CSV文件
np.savetxt(frame,array,fmt=' ',delimiter=None)
备注:frame为文件、字符串、压缩文件;array为写入数组;fmt=' '填入数据类型;delimiter=‘ ’填入想要设定的分隔字符串
a = np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
读入CSV文件
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
备注:dtype=np.float表示设定数据类型为浮点型
a = np.arange(100).reshape(5,20)
np.loadtxt('a.csv',dtype=np.int,delimiter='a.csv')
多维数据的存取
存入
np.tofile(frame,sep=' ',format="%s")
备注:format=" "表示设置数据类型
a = np.arange(100).reshape(5,10,2)
np.tofile("b.dat",sep=',',format="%d")
写入(会丢失原来的维度)
np.fromfile(frame,dtype=float,count=-1,sep='')
备注:count= 表示读入元素个数,而-1表示整个文件
a = np.arange(100).reshape(5,10,2)
np.fromfile("b.dat",dtype=np.int,count=-1,sep=',',reshape(5,10,2))
简便(注意:必须基于ndarray自定义的文件格式,即以.npy或以.npz为扩展名的文件)
写入
np.save(fname,array)
a = np.arange(100).reshape(5,20)
np.save('a.csv',a)
读取
np.load(fname)
a = np.arange(100).reshape(5,20)
np.load('a.csv')
三、NumPy中随机数函数子库--random子库
基础函数
rand(d0,d1,…,dn)
根据维度形状生成类型为浮点数并且范围在[0,1)的均匀分布的随机数数组
randn(d0,d1,…,dn)
根据维度形状生成类型为浮点数并且范围在[0,1)的标准正态分布的随机数数组
randint(low,high,shape)
根据shape创建,范围为[low,high)的随机数数组
seed(s)
随机数种子,s是给定的种子值
高级函数
shuffle(a)
根据数组a的第0轴进行随机排列,会改变数组a
permutation(a)
根据数组a的第0轴进行随机排列,产生一个新的乱序数组,但不会改变数组a
choice(a,size,replace,p)
从一维数组a中以概率p抽取元素形成size形状的新数组
备注:replace指是否可以重用元素(默认为True)
补充函数
uniform(low,high,size) 产生具有均匀分布的数组
备注:low为起始数,high为结束数,size为形状
normal(loc,scale,size) 产生具有正态分布的数组
备注:loc为均值,scale为标准差
poisson(lam,size) 产生具有泊松分布的数组
备注:lam为随机事件发生率
四、统计函数
常用函数
sum(a,axis=None) 根据给定轴,计算数组a 的相关元素的和
备注:axis=None表示对整个数组的所有轴的相关元素求和,也可以对特定轴的相关元素求和,轴可以用整数或者元组来表示
a = np.arange(15).reshape(3,5)
np.sum(a)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
105
a = np.arange(15).reshape(3,5)
np.sum(a,axis=1)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[10 35 60]
mean(a,axis=None) 根据给定轴,计算数组a 的相关元素的期望
a = np.arange(15).reshape(3,5)
np.mean(a)
[[[ 0 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 26 27 28 29]]]
14.5
a = np.arange(30).reshape(2,3,5)
np.mean(a,axis=1)
[[[ 0 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 26 27 28 29]]]
[[ 5. 6. 7. 8. 9.]
[20. 21. 22. 23. 24.]]
average(a,axis=None,weights=None) 根据给定轴,计算数组a 的相关元素的加权平均值
举例:4.1875=(2*10+7*5+1*12)/(10+5+1)
a = np.arange(15).reshape(3,5)
np.average(a,axis=0,weights=[10,5,1])
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[2.1875 3.1875 4.1875 5.1875 6.1875]
std(a,axis=None) 根据给定轴,计算数组a 的相关元素的标准差
a = np.arange(30).reshape(2,3,5)
np.std(a)
[[[ 0 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 26 27 28 29]]]
8.65544144839919
var(a,axis=None) 根据给定轴,计算数组a 的相关元素的方差
a = np.arange(15).reshape(3,5)
np.var(a)
[[[ 0 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 26 27 28 29]]]
74.91666666666667
进阶函数
min(a) 求最小值
max(a) 求最大值
a=np.arange(15,0,-1),reshape(3,5)
np.max(a)
np.min(a)
[[15 14 13 12 11]
[10 9 8 7 6]
[ 5 4 3 2 1]]
15
1
argmin(a) 计算元素最大值的降一维后下标
argmax(a) 计算元素最大值的降一维后下标
a=np.arange(15,0,-1),reshape(3,5)
np.argmin(a)
np.argmax(a)
[[15 14 13 12 11]
[10 9 8 7 6]
[ 5 4 3 2 1]]
14
0
unravel_index(index,shape) 根据shape将一维下标index转换成多维下标
a=np.arange(15,0,-1),reshape(3,5)
np.unravel_index(np.argmax(a),a.shape)
[[15 14 13 12 11]
[10 9 8 7 6]
[ 5 4 3 2 1]]
(0, 0)
ptp(a) 计算最大值与最小值的差
a=np.arange(15,0,-1),reshape(3,5)
np.ptp(a)
[[15 14 13 12 11]
[10 9 8 7 6]
[ 5 4 3 2 1]]
14
median(a) 计算中位值
a=np.arange(15,0,-1),reshape(3,5)
np.median(a)
[[15 14 13 12 11]
[10 9 8 7 6]
[ 5 4 3 2 1]]
8.0
五、梯度函数
np.gradient(f)
计算数组f中元素的梯度(连续值之前的变化率,即斜率)
备注:当f为多维时,返回每个维度梯度
举例:1=(10-9)/1(一维边缘值梯度)
0.5=(11-10)/2(一维中间值梯度)
14=(18-4)/1(二维边缘值梯度)
a = np.random.randint(0,20,(5))
np.gradient(a)
[ 9 10 8 11 4]
[ 1. -0.5 0.5 -2. -7. ]
a = np.random.randint(0,20,(2,5))
np.gradient(a)
[[ 4 15 10 18 14]
[18 0 3 3 8]]
[array([[ 14., -15., -7., -15., -6.],
[ 14., -15., -7., -15., -6.]]), array([[ 11. , 3. , 1.5, 2. , -4. ],
[-18. , -7.5, 1.5, 2.5, 5. ]])]