所谓自由,不是随心而欲,而是自我主宰
前言:
因为Python中array模块只支持一维数组,不支持多维数组,也没有各种运算函数,不适合数值运算,所以numpy的出现弥补了不足
NUMPY库(简称np)是Python数据分析中必不可少的第三方库,np是Python其他科学计算包的基础包,是数据分析的基础,np是Scipy,Pandas等数据处理或科学计算库最基本的函数功能库。
因此,充分理解和应用np的数据类型对Python数据分析帮助很大,因为需求,所以最近要好好的学习一下有关数据分析的基本知识,那么就从numpy开始~
numpy的主要对象是由同种元素构成的多维数组(ndarray),简称“数组”
ndarray类型的维度(dimension)叫做轴(axes),轴的个数叫做秩(rank)。其中,一维数组的秩为1,二维数组的秩为2。
数组的属性:
np重点功能:
基本概念与基本操作:
1、什么是数据维度?
维度是一组数据的组织形式,不同数据维度可能表示不同的含义。
根据数据关系的不同分为:一维数据、二维数据、高维数据
一维数据由对等关系的有序和无序数据构成,采用线性方式组织,对应于数学中的数组和集合等概念。可以用数组表示,
通俗讲:
1,2,3,4,5,6
这一行数据可以称为一维数据,但这样折叠一下
1,2,3
4,5,6
那么这就是二维数据了,也可称为矩阵
高维数据由键值对类型的数据构成,采用对象方式组织,属于整合度更好的数据组织方式
2、秩的含义
矩阵秩的概念:任何矩阵都可以经过有限次初等行变换,形成行阶梯型矩阵,其中非零行的行数是唯一确定的,该行数称为矩形的秩
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)的数组
第三行:
其中CSV格式存储的文件一般采用.csv为扩展名,Windows记事本或者office Excel工具可以打开。
Python提供了CSV读写的标准库,可以通过import CSV使用
3.2、读取数据集
仍然使用np内置函数可以实现:
np.loadtxt(frame,dtype=np.float,delimiter=None,inpack=False)
如下:
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='')
4、存/取高纬度数据
save/load函数
np.save(frame,array)或者np.savez(frame,array)
np.load(fname)
import numpy as np
a=np.arange(20).reshape(4,5)
np.save('b.npy',a)
代码实现:
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()