Python数据分析与展示

mac2022-06-30  21

一、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,:] #" m:n "表示从第(m+1)到第n个位置 Out[12]: array([[[ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[16, 17, 18, 19], [20, 21, 22, 23]]]) In [13]: a[:,:,::2] #" ::k "表示每个k个(步长跳跃切片) 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) # frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件 # array : 存入文件的数组 # fmt : 写入文件的格式,例如:%d %.2f %.18e # delimiter : 分割字符串,默认是任何空格 np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False) # frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件 # dtype : 数据类型,可选 # delimiter : 分割字符串,默认是任何空格 # unpack : 如果True,读入属性将分别写入不同变量

局限性: CSV只能有效存储一维和二维数组 np.savetxt() np.loadtxt()只能有效存取一维和二维数组

2.多维数据的存取

a.tofile(frame, sep='', format='%s') # frame : 文件、字符串 # sep : 数据分割字符串,如果是空串,写入文件为二进制 # format : 写入数据的格式 np.fromfile(frame, dtype=float, count=1, sep='') # frame : 文件、字符串 # dtype : 读取的数据类型 # count : 读入元素个数,‐1表示读入整个文件 # sep : 数据分割字符串,如果是空串,写入文件为二进制

注意:

该方法需要读取时知道存入文件时数组的维度和元素类型a.tofile()和np.fromfile()需要配合使用可以通过元数据文件来存储额外信息

3.Numpy的便捷文件存取

np.save(fname, array) or np.savez(fname, array) # fname : 文件名,以.npy为扩展名,压缩扩展名为.npz # array : 数组变量 np.load(fname) # fname : 文件名,以.npy为扩展名,压缩扩展名为.npz

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) # x : X轴数据,列表或数组,可选 # y : Y轴数据,列表或数组 # format_string: 控制曲线的格式字符串,可选 # **kwargs : 第二组或更多(x,y,format_string)

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' #'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) # by : axis轴上的某个索引或索引列表

数据的基本统计分析

方法(适用于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等系数
最新回复(0)