一、Numpy库入门
1.NumPy的数组对象:ndarray
意义:
Python已有列表类型,为什么需要一个数组对象(类型)?
数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据设置专门的数组对象,经过优化,可以提升这类应用的运算速度数组对象采用相同的数据类型,有助于节省运算和存储空间
特征:
ndarray是一个多维数组对象,由两部分构成:
实际的数据描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
ndarray对象的属性
属性说明
.ndim秩,即轴的数量或维度的数量.shapendarray对象的尺度,对于矩阵,n行m列.sizendarray对象元素的个数,相当于.shape中n*m的值.dtypendarray对象的元素类型.itemsizendarray对象中每个元素的大小,以字节为单位
2. ndarray的元素类型
数据类型说明
bool布尔类型,True或Falseintc与C语言中的int类型一致,一般是int32或int64intp用于索引的整数,与C语言中ssize_t一致,int32或int64int8字节长度的整数,取值:[‐128, 127]int1616位长度的整数,取值:[‐32768, 32767]int3232位长度的整数,取值:[‐231, 231‐1]int6464位长度的整数,取值:[‐263, 263‐1]uint88位无符号整数,取值:[0, 255]uint1616位无符号整数,取值:[0, 65535]uint3232位无符号整数,取值:[0, 232‐1]uint6432位无符号整数,取值:[0, 264‐1]float1616位半精度浮点数:1位符号位,5位指数,10位尾数float3232位半精度浮点数:1位符号位,8位指数,23位尾数float6464位半精度浮点数:1位符号位,11位指数,52位尾数complex64复数类型,实部和虚部都是32位浮点数complex128复数类型,实部和虚部都是64位浮点数
3.ndarray数组的创建方法
方法一:从Python中的列表、元组等类型创建ndarray数组
x
= np
.array
(list/tuple, dtype
=np
.float32
)
注 :当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
方法二:使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n‐1np.ones(shape)根据shape生成一个全1数组,shape是元组类型np.zeros(shape)根据shape生成一个全0数组,shape是元组类型np.full(shape,val)根据shape生成一个数组,每个元素值都是valnp.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0np.ones_like(a)根据数组a的形状生成一个全1数组np.zeros_like(a)根据数组a的形状生成一个全0数组np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
方法三:使用NumPy中其他函数创建ndarray数组
函数说明
np.linspace()根据起止数据等间距地填充数据,形成数组np.concatenate()将两个或多个数组合并成一个新的数组
方法四:ndarray数组的变换
维度变换
方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变.resize(shape)与.reshape()功能一致,但修改原数组.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
类型变换
new_a
= a
.astype
(new_type
)
转换为列表
ls
= a
.tolist
()
4.ndarray数组的操作
操作一:索引
In
[3]: a
= np
.arange
(24).reshape
((2,3,4))
In
[4]:a
Out
[4]:
array
([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In
[5]:a
[1,2,3]
Out
[5]:23
In
[7]:a
[-1,-2,-3]
Out
[7]:17
操作二:切片
In
[3]: a
= np
.arange
(24).reshape
((2,3,4))
In
[4]:a
Out
[4]:
array
([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In
[8]:a
[:,1,-3]
Out
[8]:array
([ 5, 17])
In
[12]:a
[:,1:3,:]
Out
[12]:
array
([[[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[16, 17, 18, 19],
[20, 21, 22, 23]]])
In
[13]: a
[:,:,::2]
Out
[13]:
array
([[[ 0, 2],
[ 4, 6],
[ 8, 10]],
[[12, 14],
[16, 18],
[20, 22]]])
5.ndarray数组的运算
NumPy一元函数
函数说明
np.abs(x) np.fabs(x)计算数组各元素的绝对值np.sqrt(x)计算数组各元素的平方根np.square(x)计算数组各元素的平方np.log(x) np.log10(x) np.log2(x)计算数组各元素的自然对数、10底对数和2底对数np.ceil(x) np.floor(x)计算数组各元素的ceiling值 或 floor值np.rint(x)计算数组各元素的四舍五入值np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x)计算数组各元素的普通型和双曲型三角函数np.exp(x)计算数组各元素的指数值np.sign(x)计算数组各元素的符号值,1(+), 0, ‐1(‐)
NumPy二元函数
函数说明
+ ‐ * / **两个数组各元素进行对应运算np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin()元素级的最大值/最小值计算np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素> < >= <= == !=算术比较,产生布尔型数组
二、数据存取与函数
1.数据的CSV文件存取
np
.savetxt
(frame
, array
, fmt
='%.18e', delimiter
=None)
np
.loadtxt
(frame
, dtype
=np
.float, delimiter
=None, unpack
=False)
局限性: CSV只能有效存储一维和二维数组 np.savetxt() np.loadtxt()只能有效存取一维和二维数组
2.多维数据的存取
a
.tofile
(frame
, sep
='', format='%s')
np
.fromfile
(frame
, dtype
=float, count
=‐
1, sep
='')
注意:
该方法需要读取时知道存入文件时数组的维度和元素类型a.tofile()和np.fromfile()需要配合使用可以通过元数据文件来存储额外信息
3.Numpy的便捷文件存取
np
.save
(fname
, array
) or np
.savez
(fname
, array
)
np
.load
(fname
)
4.Numpy的随机函数
函数说明
rand(d0,d1,…,dn)根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布randn(d0,d1,…,dn)根据d0‐dn创建随机数数组,标准正态分布randint(low[,high,shape])根据shape创建随机整数或整数数组,范围是[low, high)seed(s)随机数种子,s是给定的种子值shuffle(a)根据数组a的第1轴进行随排列,改变数组xpermutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变数组xchoice(a[,size,replace,p])从一维数组a中以概率p抽取元素,形成size形状新数组 replace表示是否可以重用元素,默认为Falseuniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状normal(loc,scale,size)产生具有正态分布的数组,loc均值,scale标准差,size形状poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率,size形状
5.Numpy的统计函数
函数说明
sum(a, axis=None)根据给定轴axis计算数组a相关元素之和,axis整数或元组mean(a, axis=None)根据给定轴axis计算数组a相关元素的期望,axis整数或元组average(a,axis=None,weights=None)根据给定轴axis计算数组a相关元素的加权平均值std(a, axis=None)根据给定轴axis计算数组a相关元素的标准差var(a, axis=None)根据给定轴axis计算数组a相关元素的方差min(a) max(a)计算数组a中元素的最小值、最大值argmin(a) argmax(a)计算数组a中元素最小值、最大值的降一维后下标unravel_index(index, shape)根据shape将一维下标index转换成多维下标ptp(a)计算数组a中元素最大值与最小值的差median(a)计算数组a中元素的中位数(中值)
axis=None 是统计函数的标配参数
6.Numpy的梯度函数
函数说明
np.gradient(f)计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
梯度:连续值之间的变化率,即斜率XY坐标轴连续三个X坐标对应的Y轴值:a, b, c,其中,b的梯度是: (c‐a)/2
三、Matplotlib库入门
1.pyplot的plot()函数
plt
.plot
(x
, y
, format_string
, **kwargs
)
format_string:由颜色字符、风格字符和标记字符组成:
颜色字符说明
‘b’蓝色‘m’洋红色( magenta)‘g’绿色‘y’黄色‘r’红色‘k’黑色‘c’青绿色( cyan )‘w’白色‘#008000’RGB某颜色‘0.8’灰度值字符串
风格字符说明
‘‐’实线‘‐‐’破折线‘‐.’点划线‘:’虚线‘’ ’ ’无线条
标记字符说明
‘.’点标记‘,’像素标记(极小点)‘o’实心圈标记‘v’倒三角标记‘^’上三角标记‘>’右三角标记‘<’左三角标记‘1’下花三角标记‘2’上花三角标记‘3’左花三角标记‘4’右花三角标记‘s’实心方形标记‘p’实心五角标记‘*’星形标记‘h’竖六边形标记‘H’横六边形标记‘+’十字标记‘x’x标记‘D’菱形标记‘d’瘦菱形标记‘|’垂直线标记
**kwargs : 第二组或更多(x,y,format_string)
linestyle :线条风格, linestyle=‘dashed’color :控制颜色, color=‘green’marker :标记风格, marker=‘o’markerfacecolor:标记颜色, markerfacecolor=‘blue’markersize :标记尺寸, markersize=20
2.pyplot的中文显示
方法一:rcParams修改字体实现
import matplotlib
matplotlib
.rcParams
['font.family']='SimHei'
rcParams的属性:
属性说明
‘font.family’用于显示字体的名字‘font.style’字体风格,正常’normal’或 斜体’italic’‘font.size’字体大小,整数字号或者’large’、‘x‐small’
中文字体的种类:
中文字体说明
‘SimHei’中文黑体‘Kaiti’中文楷体'LiSu‘中文隶书‘FangSong’中文仿宋‘YouYuan’中文幼圆‘STSong’华文宋体
方法二: 增加一个fontproperties属性
a
= np
.arange
(0.0,5.0,0.02)
plt
.xlabel
('横轴:时间',fontproperties
='SimHei',fontsize
=20)
plt
.ylabel
('纵轴:振幅',fontproperties
='SimHei',fontsize
=20)
plt
.plot
(a
,np
.cos
(2*np
.pi
*a
),'r--')
plt
.show
()
pyplot的文本显示
函数说明
plt.xlabel()对X轴增加文本标签plt.ylabel()对Y轴增加文本标签plt.title()对图形整体增加文本标签plt.text()在任意位置增加文本plt.annotate()在图形中增加带箭头的注解
注:
格式:
plt
.annotate
(s
, xy
=arrow_crd
, xytext
=text_crd
, arrowprops
=dict)
pyplot的子绘图区域
plt.subplot2grid()
格式: plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始
plt
.subplot2grid
((3,3),(0,0),colspan
=3)
plt
.subplot2grid
((3,3),(1,0),colspan
=2)
plt
.subplot2grid
((3,3),(1,2),rowspan
=2)
plt
.subplot2grid
((3,3),(2,0))
plt
.subplot2grid
((3,3),(2,1))
GridSpec类
import matplotlib
.gridspec
as gridspec
gs
= gridspec
.GridSpec
(3,3)
ax1
= plt
.subplot
(gs
[0,:])
ax2
= plt
.subplot
(gs
[1,:-1])
ax3
= plt
.subplot
(gs
[1,-1])
ax4
= plt
.subplot
(gs
[2,0])
ax5
= plt
.subplot
(gs
[2,1])
Matplotlib基础绘图函数
pyplot基础图表函数
函数说明
plt.plot(x,y,fmt,…)绘制一个坐标图plt.boxplot(data,notch,position)绘制一个箱形图plt.bar(left,height,width,bottom)绘制一个条形图plt.barh(width,bottom,left,height)绘制一个横向条形图plt.polar(theta, r)绘制极坐标图plt.pie(data, explode)绘制饼图plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图plt.specgram(x,NFFT=256,pad_to,F)绘制谱图plt.cohere(x,y,NFFT=256,Fs)绘制X‐Y的相关性函数plt.scatter(x,y)绘制散点图,其中,x和y长度相同plt.step(x,y,where)绘制步阶图plt.hist(x,bins,normed)绘制直方图plt.contour(X,Y,Z,N)绘制等值图plt.vlines()绘制垂直图plt.stem(x,y,linefmt,markerfmt)绘制柴火图plt.plot_date()绘制数据日期
pyplot饼图的绘制
import matplotlib
.pyplot
as plt
import numpy
as np
labels
= 'a','b','c','d'
sizes
= [15,30,45,10]
explode
= (0,0.1,0,0)
plt
.pie
(sizes
,explode
= explode
,labels
= labels
,autopct
= '%1.1f%%',shadow
= False,startangle
= 90)
plt
.axis
('equal')
plt
.show
()
pyplot直方图的绘制
import numpy
as np
import matplotlib
.pyplot
as plt
np
.random
.seed
(0)
mu
, sigma
=100,20
a
= np
.random
.normal
(mu
, sigma
, size
=100)
plt
.hist
(a
, 20, normed
=1, histtypes
='stepfilled', facecolor
='b', alpha
=0.75)
plt
.title
('Histogram')
plt
.show
()
pyplot极坐标图的绘制
pyplot散点图的绘制
Pandas库入门
1.Pandas库的Series类型
Series类型由一组数据及与之相关的数据索引组成
Series类型的创建:
• Python列表,index与列表元素个数一致 • 标量值,index表达Series类型的尺寸 • Python字典,键值对中的“键”是索引,index从字典中进行选择操作 • ndarray,索引和数据都可以通过ndarray类型创建 • 其他函数,range()函数等
Series类型的基本操作
类似ndarray类型: • 索引方法相同,采用[] • NumPy中运算和操作可用于Series类型 • 可以通过自定义索引的列表进行切片 • 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片 类似Python字典类型: • 通过自定义索引访问 • 保留字in操作 • 使用.get()方法 对齐操作 Series + Series:Series类型在运算中会自动对齐不同索引的数据 name属性 Series对象和索引都可以有一个名字,存储在属性.name中
可随时修改并即刻生效
Pandas库的DataFrame类型
DataFrame是二维带“标签”数组DataFrame基本操作类似Series,依据行列索引
Pandas库的数据类型操作
如何改变Series和DataFrame对象?
重新索引:
.reindex()能够改变或重排Series和DataFrame索引
reindex()的参数:
参数说明
index, columns新的行列自定义索引fill_value重新索引中,用于填充缺失位置的值method填充方法, ffill当前值向前填充,bfill向后填充limit最大填充量copy默认True,生成新的对象,False时,新旧相等不复制
索引类型
Series和DataFrame的索引是Index类型Index对象是不可修改类型
常用方法:
方法说明
.append(idx)连接另一个Index对象,产生新的Index对象.diff(idx)计算差集,产生新的Index对象.intersection(idx)计算交集.union(idx)计算并集.delete(loc)删除loc位置处的元素.insert(loc,e)在loc位置增加一个元素e
删除指定索引类型
.drop()能够删除Series和DataFrame指定行或列索引
pandas库的数据类型运算
算术运算法则
算术运算根据行列索引,补齐后运算,运算默认产生浮点数补齐时缺项填充NaN (空值)二维和一维、一维和零维间为广播运算采用+ ‐ * /符号进行的二元运算产生新的对象
方法形式的运算
方法说明
.add(d, **argws)类型间加法运算,可选参数.sub(d, **argws)类型间减法运算,可选参数.mul(d, **argws)类型间乘法运算,可选参数.div(d, **argws)类型间除法运算,可选参数
比较运算法则
比较运算只能比较相同索引的元素,不进行补齐二维和一维、一维和零维间为广播运算采用> < >= <= == !=等符号进行的二元运算产生布尔对象
Pandas数据特征分析
数据的排序
.sort_index()方法在指定轴上根据索引进行排序,默认升序
.sort_index
(axis
=0, ascending
=True)
.sort_values()方法在指定轴上根据数值进行排序,默认升序
Series
.sort_values
(axis
=0, ascending
=True)
DataFrame
.sort_values
(by
, axis
=0, ascending
=True)
数据的基本统计分析
方法(适用于Series和DataFrame类型)说明
.sum()计算数据的总和,按0轴计算,下同.count()非NaN值的数量.mean() .median()计算数据的算术平均值、算术中位数.var() .std()计算数据的方差、标准差.min() .max()计算数据的最小值、最大值.describe()针对0轴(各列)的统计汇总
方法说明
.argmin() .argmax()计算数据最大值、最小值所在位置的索引位置(自动索引).idxmin() .idxmax()计算数据最大值、最小值所在位置的索引(自定义索引)
数据的累计统计分析
方法(适用于Series和DataFrame类型,累计计算)说明
.cumsum()依次给出前1、2、…、n个数的和.cumprod()依次给出前1、2、…、n个数的积.cummax()依次给出前1、2、…、n个数的最大值.cummin()依次给出前1、2、…、n个数的最小值方法(适用于Series和DataFrame类型,滚动计算(窗口计算))说明––.rolling(w).sum()依次计算相邻w个元素的和.rolling(w).mean()依次计算相邻w个元素的算术平均值.rolling(w).var()依次计算相邻w个元素的方差.rolling(w).std()依次计算相邻w个元素的标准差.rolling(w).min() .max()依次计算相邻w个元素的最小值和最大值
数据的相关分析
协方差(判断两个事物的相关性)
• 协方差>0, X和Y正相关 • 协方差<0, X和Y负相关 • 协方差=0, X和Y独立无关
Pearson相关系数
• 0.6‐0.8 强相关 • 0.4‐0.6 中等程度相关 • 0.2‐0.4 弱相关 • 0.0‐0.2 极弱相关或无相关
方法说明
.cov()计算协方差矩阵.corr()计算相关系数矩阵, Pearson、Spearman、Kendall等系数