##本文内容为北京理工大学嵩天教授在中国大学MOOC上发布的课程《python数据分析与展示》的学习笔记##
2.1数据的csv文件存取
- 章节目录
- 2.21[数据的csv文件存取 ]
-将numpy中的数组写入csv文件np.savetxt
-将csv文件重新读入到numpy中的数组np.loadtxt - 2.22[多维数据的存取]
-将数据写入文件a.tofile
-从文件中读取数据np.fromfile
-2.23 [Numpy的随机函数]
-一般随机函数:rand/randn/randient/seed
-随机排列的乱序数组:shuffle/permutation/choice
-带有分布的随机函数:uniform/normal/possion
-2.24 [Numpy的统计函数]
-sum/mean/avergae/std/var
-min(max/argmin(argmax)/unravel-index/ptp/median
-2.25 [Numpy的梯度函数]
-gradient
2.11csv文件
csv只能有效存储一维和二维数组
np.savetxt和np.loadtxt只能有效存取一维和二维数组
- 将numpy中的数组写入csv文件
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None)
frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件,文件名要用" "括起。
array:存入文件的数组
fmt:希望写入文件的数据的格式,浮点型、整数型…,表示形式由savetxt定义,例如%d表示整数型;%.1f表示浮点数类型,一位小数点;
delimiter:分割字符串,默认是None,代表空格;也可使用逗号’,'分隔
- 将csv文件重新读入到numpy中的数组
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
dtype:数据类型,可选,不指定则默认转化为浮点数类型
delimiter:分割字符串,默认是None,代表空格;也可使用逗号’,'分隔
unpack:默认false,指读入数据写入一个数组,如果true,将读入属性分别写入不同变量
2.12多维数据的存取
方法一:
- 将数据写入文件a.tofile(frame,sep=’’,format=’%s’)
frame:文件、字符串
sep:数据分割字符串,如’,'则为用逗号隔开。如果是空串,写入文件为二进制
format:写入数据的格式
- 从文件中读取数据np.fromfile(frame,dtype,count=-1,sep=’’)
frame:文件、字符串
dtype:读取的数据类型,不指定则默认转化为浮点数类型
count:读入元素个数,-1代表读入整个文件
sep:数据分割字符串,如’,'则为用逗号隔开。如果是空串,写入文件为二进制
注意:使用该方法将数组写入文件后再将数组读出,会丢失数组的维度信息,需重新定义(.reshape)
如何得知原数组的维度和元素类型?
可以通过元数据文件来存储额外信息。
方法二:numpy的便捷文件存储
- 将数组存到文件中:
将数组存到一个文件中:np.save(fname,array)
将数组存到一个压缩文件中:np.savez(fname,array)
#此种方式必须需基于numpy自定义的文件格式.npy
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数组变量
- 将文件还原为数组,且保留数组原本维度:np.load(fname)
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
2.2numpy库的随机数函数
python中的random库,为一般标量参数提供随机数的相关运算
numpy中的random库,为数组提供随机数的相关运算
应用:np.random.函数名称()
函数 | 说明 |
---|---|
rand(d0,d1,…,dn) | 根据d0-dn创建随机数数组,浮点数,[0,1),均匀分布 |
randn(d0,d1,…,dn) | 根据d0-dn创建随机数数组,标准正态分布分布 |
randint(low[,high,shape]) | 根据shape创建随机整数或整数数组,范围为[low,high) |
seed(s) | 随机数种子,s是给定的种子值 |
np.random.rand(3),生成包含0~1之间的3个随机数的一维数组
np.random.rand(3,4,5) ,生成包含0~1之间的随机数的三个四行五列元素的数组
np.random.randint(0,10,(4.4)),创建起始数为0,终止数为10的,四行四列的二维整数数组
函数 | 说明 |
---|---|
shuffle(a) | 根据数组a的第1轴进行随机排列,改变原数组 |
permutation() | 根据数组a的第1轴产生一个新的乱序数组,不改变原数组,生成新数组 |
choice(a[,size,replace,p]) | 从一维数组a中以概率p抽取元素,形成size形状(n,m)的新数组,replace表示是否可以重用元素,默认为False。eg p=a/np.sum(a) |
函数 | 说明 |
---|---|
normal(loc,scale,size) | 产生具有均匀分布的数组,low为起始值,high为结束值,size形状 |
possion(lam,size) | 产生具有正态分布的数组,loc均值,scale标准差,size形状 |
uniform(low,high,size) | 产生具有泊松分布的数组,lam表随机事件发生概率,size形状 |
2.4numpy的统计函数
函数 | 说明 |
---|---|
sum(a,axis=None) | 根据给定轴axis计算数组a相关元素之和,axis整数或元组 |
mean(a,axis=None) | 根据给定轴axis计算数组a相关元素的期望,axis整数或元组 |
average(a,axis=None,weights=None) | 根据给定轴axis计算数组a相关元素的加权平均值。weights=[10,5,1],对元素赋重10、5、1 |
std(a,axis=None) | 根据给定轴axis计算数组a相关元素的标准差 |
var(a,axis=None) | 根据给定轴axis计算数组a相关元素的方差 |
#举例np.average函数In: a =np.arrange(15).rashape(3,5)
In: a
Out:array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14]])
In: np.average(a,axis=0,wights=[10,5,1])
Out:array([2.1875,3,1875,4,1875,5.1875])
#4.1875=2*10+7*5+12*1/(10+5+1),对应轴1的第三个维度
函数 | 说明 |
---|---|
min(a) max(a) | 计算数组a中元素的最小值、最大值 |
argmin(a) argmax(a) | 计算数组a中元素最小值、最大值的降一维(扁平化)后下标(位置) |
unravel_index(index,shape) | 根据shape将一维下标index转化为多维下标(多维位置表示,eg(0,1)… |
ptp(a) | 计算数组a中元素最大值与最小值的差 |
median(a) | 计算数组a中元素的中位数(中值) |
# argmin(a) argmax(a)常与unrave1_index(index,shape)搭配
# a=array([[15,14,13,12,11],
[10,9,8,7,6],
[5,4,3,2,1]])
In: np.argmax(a)
Out: 0
In: unravel_index(np.argmax(a),a.shape)
Out: (0,0)
2.5numpy的梯度函数
计算数组f中元素的梯度,即f为多维数组时,返回每个维度的梯度:
np.gradient(f)
(梯度:连续值之间的变化率,即斜率)
#举例:a 为array([15,3,12,13,14)]
In: np.gradient(a)
Out: array([-12.,-1.5,5.,1.,1.])
#有两侧值时:
(13-3)/2=5.
#只有一侧值时(后一减其本身除1):
(3-15)/1=-12.
(14-13)/1=1.
numpy中“轴”的定义
参考‘https://www.cnblogs.com/ElonJiang/p/11626851.html’
在numpy中,对于二维或多维数组,axis 0 是沿行(row)向下的轴,称为最外层维度。(一维数组是特例,只有一个轴(即axis=0)),axis 1 是沿列(columns)横穿的轴,称为第二层维度。