所谓自由,不是随心而欲,而是自我主宰
numpy介绍:
前言:
因为Python中array模块只支持一维数组,不支持多维数组,也没有各种运算函数,不适合数值运算,所以numpy的出现弥补了不足
NUMPY库(简称np)是Python数据分析中必不可少的第三方库,np是Python其他科学计算包的基础包,是数据分析的基础,np是Scipy,Pandas等数据处理或科学计算库最基本的函数功能库。
因此,充分理解和应用np的数据类型对Python数据分析帮助很大,因为需求,所以最近要好好的学习一下有关数据分析的基本知识,那么就从numpy开始~
numpy的主要对象是由同种元素构成的多维数组(ndarray),简称“数组”
ndarray类型的维度(dimension)叫做轴(axes),轴的个数叫做秩(rank)。其中,一维数组的秩为1,二维数组的秩为2。
数组的属性:
np重点功能:
- 强大的多维数组对象ndarray
- 广功能函数
- 提供了线性代数、傅里叶变换、随机数生成的相关功能
基本概念与基本操作:
1、什么是数据维度?
维度是一组数据的组织形式,不同数据维度可能表示不同的含义。
根据数据关系的不同分为:一维数据、二维数据、高维数据
一维数据由对等关系的有序和无序数据构成,采用线性方式组织,对应于数学中的数组和集合等概念。可以用数组表示,
通俗讲:
1,2,3,4,5,6
这一行数据可以称为一维数据,但这样折叠一下
1,2,3
4,5,6
那么这就是二维数据了,也可称为矩阵
高维数据由键值对类型的数据构成,采用对象方式组织,属于整合度更好的数据组织方式
2、秩的含义
矩阵秩的概念:任何矩阵都可以经过有限次初等行变换,形成行阶梯型矩阵,其中非零行的行数是唯一确定的,该行数称为矩形的秩
求矩阵的秩需先将矩阵化为阶梯型矩阵
如下秩=3,即满秩矩阵
3、数据集
顾名思义是数据的集合,用来训练程序的数据集合,多指二维、多维数表。只要有数据都可以直接手工创建一个数据集。
其中,用逗号分割数值的数据集叫做CSV(Comma-Separated Values,逗号分隔值)数据集,csv是一种通用的文件格式,用来存储批量的数据,就像一张Excel表。
形如:
城市,环比,同比,定基
北京,101.5,120.7,121.4
上海,101.1,111.2,111.3
南京,133.0,133.2,133.4
3.1、生成数据集
可以借助np内置函数生成数据集:
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
例如:
代码实现:
import numpy as np
a=np.arange(20).reshape(4,5)
np.savetxt('test.csv',a,fmt='%d',delimiter=',')
代码说明:
第二行:
np.arange(n).reshape(x,y)
数组n不变,返回维度为(x,y)的数组
第三行:
- frame:名字,文件、字符串的名字等
- array:存入文件的np数组,可以是压缩文件(.gz,.bz2)
- fmt(format):写入文件的格式,默认的是%.18e(科学计数法保留18位),除此之外还有,%d, %2f
- delemiter:分割字符串,默认是空格
其中CSV格式存储的文件一般采用.csv为扩展名,Windows记事本或者office Excel工具可以打开。
Python提供了CSV读写的标准库,可以通过import CSV使用
3.2、读取数据集
仍然使用np内置函数可以实现:
np.loadtxt(frame,dtype=np.float,delimiter=None,inpack=False)
如下:
- frame:文件来源
- dtype:数据类型
- unpack:默认false,读入文件,写入一个数组;若True,读入属性(列)将分别存储
3.3、csv文件的局限
CSV文件的局限:只能对一维数据和二维数据进行有效的操作,高维数据无法将文本更直观的显示出来
除了savetxt()和loadtxt()可以存储读取数组外
对于ndarray数组,np中的tofile方法也可以存储和读取数组,但是知识将数组的元素列出而没有维度信息
例如:
存储:
import numpy as np
a=np.arange(20).reshape(4,5)
a.tofile('a.dat',sep=',',format='%d')
读取:
np.fromfile(frame,dtype=float,count=-1,sep='')
- count:读文件的个数,默认-1,读取全部
- sep:数据分割字符串,如果为空,写入文件为二进制
4、存/取高纬度数据
save/load函数
np.save(frame,array)或者np.savez(frame,array)
np.load(fname)
- frame:文件名,以.npy为扩展名,压缩为.npz
- array:数组变量
import numpy as np
a=np.arange(20).reshape(4,5)
np.save('b.npy',a)
5、np例子
正态分布实例:
公式
代码实现:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('Book1.csv') #载入数据文件
time = data["t"] #文档数据’t'赋值给time
mean = time.mean() #数据的均值
standard = time.std() #数据的标准差σ sigma
def normal(x,m,s): #正态分布的概率密度函数,其中x:x;m:μ;s:σ
pdf = np.exp(-((x-m)**2)/(2*(s**2)))/(s*(np.sqrt(2*np.pi)))
return pdf
x = np.arange(80,100,0.1) #数据,以0.1为步长更平滑
y = normal(x,mean,standard) #载入公式
plt.plot(x,y)
plt.title('normal distribution')
plt.xlabel('time')
plt.ylabel('probaility')
plt.hist(time,bins=10,rwidth=0.9,normed=True) #画出直方图,normed=True或1表示出现的概率
plt.show()
csv数据:
输出效果图: