前提说明:在学习了一定的python基础后,方可继续学习这方面的内容。如果没有python基础语法的学习,可以浏览python基础语法笔记总结。这里主要是讲解numpy、matplotlib、pandas这些第三方库。对于数据处理和分析展示用这几个库函数会特别的便捷。
文章目录
一、数据分析及表示1、NumPy入门1.1、数据的维度1.2、NumPy的数组对象:ndarray1.3、NumPy数组的创建和变换1.4、ndarray数组的操作1.5、ndarray数组的运算 2、NumPy数据存储与函数2.1、一维、二维数组的存取2.2、多维数据的存取2.3、Numpy的随机数函数子库2.4、Numpy的统计函数2.5、Numpy的梯度函数 3、实例:图像手绘4、补充知识 二、数据分析及展示1、Matplotlib库入门1.1、介绍1.2、plot()函数1.3、pyplot中文显示方法1.4、pyplot文本显示1.5、子绘图区域 2、Matplotlib基础绘图函数示例2.1、基本图表函数2.2、饼图的绘制2.3、绘制散点图 三、数据分析及概要1、Pandas库入门1.1、Series类型1.2、DataFrame类型1.3、数据类型操作1.4、数据类型运算 2、Pandas数据特征分析2.1、数据的排序2.2、数据的基本统计分析2.3、数据的累计统计分析2.4、相关分析函数IPythond %魔术命令
一、数据分析及表示
1、NumPy入门
Numpy是Python科学计算的基础包。
提供的功能:
快速高效的多维数组对象ndarray。
用于数组执行元素级计算以及直接对数组执行数学运算的函数
用于读写硬盘上基于数组的数据集的工具。
线性代数运算、傅里叶变换,以及随机数生成。
用于将C、C++、Fortran代码集成到Python的工具
1.1、数据的维度
维度:一组数据的表示形式
一维数据:由对等关系的有序或无需数据构成,采用线性方式组织。对应列表、集合等
二维数据:由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据
多维数据:由一维或二维数据在新维度上扩展形成
高维数据:利用最基本的二元关系展示数据间的复杂结构。利用字典类型或数据表示格式。
1.2、NumPy的数组对象:ndarray
NumPy是一个开源的Python科学计算基础库
一个强大的N维数组对象:ndarray,广播功能函数,线性代数、傅里叶变换、随机数生成等功能。
NumPy是SciPy、Pandas等数据处理或科学计算库的基础。
N维数组对象:ndarray,由两部分构成:实际的数据,描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同,数组下标从0开始
#计算A²+B³,A和B均为一维数组import numpy as np #俗称npdef npSum():a = np.array([0,1,2,3,4])b = np.array([9,8,7,6,5])c = a**2 + b**3return cprint(npSum())
ndarray对象的属性:轴:保存数据的维度 秩:轴的数量
ndarray的元素类型:科学计算设计数据较多,对存储和性能都有较高要求。对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能。对元素类型精细定义,有助于程序员对程序规模有合理评估。
ndarray的元素类型(一)
ndarray的元素类型(二)
1.3、NumPy数组的创建和变换
1.3.1、NumPy数组的创建
(1)从python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple) #根据数据确定一个类型x = np.array(list/tuple,dtype=np.float32) #指定元素的类型
(2)使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
(3)使用Numpy中其他函数创建ndarray数组
np.concatenate([a, b], axis=0)#将数组a,和数组b垂直方向上叠加np.concatenate([a, b], axis=1)#将数组a,和数组b水平方向上叠加
np.vstack((a, b)) #使用numpy中vstack()方法,将数组a,和数组b垂直方向上叠加
np.hstack([a, b]) #使用numpy中hstack()方法,将数组a,和数组b水平方向上叠加
np.dstack() #沿第三个维度进行拼接
np.r_[a, b]#将数组a,和数组b垂直方向上叠加np.c_[a, b]#将数组a,和数组b水平方向上叠加
1.3.2、NumPy数组的维度变换
astype()方法进行类型变换,会创建一个新的数组(原始数据的一个拷贝),即使两个类型一致。
tolist()方法向列表进行转换
a.T 转置操作
tanspose()函数,二维时不设置参数时,则为转置。高维时,传入一个轴,进行变换。需要借助图形去理解
1.4、ndarray数组的操作
数组的索引和切片
索引:获取数组中特定位置元素的过程
切片:获取数组元组子集的过程
一维数组的索引和切片:与python的列表类似
多维数组的索引:a[1,2,3]分别代表维度,行数,列数
多维数组的切片:a[::,::,::]冒号分别控制一个,每个维度与一维思维方式一样
split(),hsplit(),vsplit()切分函数
1.5、ndarray数组的运算
数组与标量之间的运算作用于数组的每一个元素
NumPy一元函数:对ndarray中的数据执行元素级运算的函数。均生成新的元素,不改变原来的数组。
NumPy二元函数
np.dot(arr.T,arr) #矩阵内积计算。矩阵乘法的函数
np.intersect1d() #求两个数组的交集
np.setdiff1d(a,b) #求两个数组的差集,在a中不在b中,一维数组
np.where() #用法一:类似于三元表达式,用法二:返回符合条件的下标
2、NumPy数据存储与函数
2.1、一维、二维数组的存取
CSV文件:是一种存储一维、二维的标准存储文件格式
np.savetxt(frame,array,fmt='%.18e',delimiter=None) #写入文件
frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array:存入文件的数组。
fmt:写入文件的格式,例如:%d %.2f %.18e
delimiter:分隔字符串,默认是任何空格
import numpy as npa = np.arange(100).reshape((5,20))np.savetxt('a.csv',a,fmt='%d',delimiter=',')
np.loadtxt(frame,dtype='np.float',delimiter=None,unpack=False)#读出文件
dtype:数据类型,可选
unpack:如果True,读入属性将分别写入不同变量
2.2、多维数据的存取
a.tofile(frame,sep=',',formate='%s') #逐一写入文件,不区分维度
frame:文件、字符串。
sep:数据分隔字符串,如果是空串,写入文件为二进制
format:写入数据的格式。
a.fromfile(frame,dtype=float,count=-1,sep=',')#从文件读出
count:选择读出的个数
NumPy的便捷文件存取
np.save(fname,array) 或 np.svaez(fname,array)
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数组变量
np.load(fname)
2.3、Numpy的随机数函数子库
np.random的随机数函数
2.4、Numpy的统计函数
1、统计记录的个数:np.count_nonzero()
# 统计小于6的个数:x = np.array([1,2,3,4,5,6,7,8,9])np.count_nonzero(x<6)#方法一np.sum(x<6)#方法二下面这些方法都可以使用:axis属性np.any(x<6)#是否存在小于6的数np.all(x<6)#是否所有都小于6
2、布尔运算符: & | ^ ~ and or
and 和 or 判断整个对象是真或假,而 & 和 | 是指每个对象中的比特位
np.sum((inches > 0.5) & (inches < 1))
3、掩码操作
x[x<6]
2.5、Numpy的梯度函数
np.gradient(f)#计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
梯度:连续值之间的变化率,即斜率。
XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,其中,b的梯度是:(c-a)/2
3、实例:图像手绘
PIL库:强大图像处理能力
from PIL import Image#Image是PIL库中代表一个图像的类(对象)
from PIL import Imageimport numpy as npim = np.array(Image.open("C:\\Users\\珂爸爸\\Pictures\\Camera Roll\\珂.jpg"))print(im.shape,im.dtype)#(3417, 2441, 3) uint8
读入图像后,获得像素RGB值,修改后保存为新的文件
a = [255,255,255] - immi = Image.fromarray(a.astype('uint8'))mi = mi.save("C:\\Users\\珂爸爸\\Pictures\\Camera Roll\\珂1.jpg")
4、补充知识
1、np.set_printoptions()用于控制Python中小数的显示精度
np.set_printoptions(precision=None, threshold=None, linewidth=None, suppress=None, formatter=None)
precision:控制输出结果的精度(即小数点后的位数),默认值为8
threshold:当数组元素总数过大时,设置显示的数字位数,其余用省略号代替(当数组元素总数大于设置值,控制输出值得个数为6个,当数组元素小于或者等于设置值得时候,全部显示),当设置值为sys.maxsize(需要导入sys库),则会输出所有元素
linewidth:每行字符的数目,其余的数值会换到下一行
suppress:小数是否需要以科学计数法的形式输出
formatter:自定义输出规则
2、np.nonzero()
找出非0元素的位置索引:np.nonzero([1, 2, 0, 0, 4, 0])
3、np.pad()
返回填充后的数组:pad(array, pad_width, mode, **kwargs)
二、数据分析及展示
1、Matplotlib库入门
matplotlib用于绘制数据图表的python库
1.1、介绍
由各种可视化类构成,内部结构复杂,受matlab启发。
matplotlib.pyplot是绘制各类可视化图形的命令子库。
import matplotlib.pyplot as pltplt.plot([1,1,4,5,2])plt.ylabel('greade')plt.savefig('test',dpi=600) #默认png文件,输出图形存储文件plt.show()
pyplot的绘图区域
plt.subplot(nrows,ncols,plot_number) plt.subplot(3,2,4) #划分为三行二列,在第四位置进行绘制图形。
1.2、plot()函数
plt.plot(x,y,format_string,**kwargs)
x:x轴数据,列表或数组,可选。
y:y轴数据,列表或数组。
format_string:控制曲线的格式字符串,可选。由颜色字符、风格字符和标记字符组成
**kwargs:第二组或更多(x,y,format_string)。
1.3、pyplot中文显示方法
方法一:需要rcParams修改字体实现。
rcParams的属性
rcParams[‘font.family’]
import numpy as npimport matplotlibimport matplotlib.pyplot as pltmatplotlib.rcParams['font.family'] = 'STSong'matplotlib.rcParams['font.size']=20a = np.arange(0.0,5.0,0.02)plt.xlabel('横轴:时间')plt.ylabel('纵轴:振幅')plt.plot(a,np.cos(2*np.pi*a),'r--')plt.show()
方法二:在有中文输出的地方,增加一个属性:fontproperties
import numpy as npimport matplotlib.pyplot as plta = 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()
1.4、pyplot文本显示
pyplot的文本显示函数
import numpy as npimport matplotlib.pyplot as plta = np.arange(0.0,5.0,0.02)plt.plot(a,np.cos(2*np.pi*a),'r--')plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontsize=15)plt.text(2,1,r'$\mu=100',fontsize=15)plt.axis([-1,6,-2,2]) #修改坐标取值范围plt.grid(True) #设置为网格状plt.show()
1.5、子绘图区域
plt.subplot2grid()
plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始
GridSpec类
import matplotlib.gridspec as gridspecimport matplotlib.pyplot as pltgs = gridspec.GridSpec(3,3) #将图形划分为三行三列ax1 = plt.subplot(gs[0,:])ax2 = plt.subplot(gs[1,0:2])ax3 = plt.subplot(gs[1:,2])ax4 = plt.subplot(gs[2,0])ax5 = plt.subplot(gs[2,1])
2、Matplotlib基础绘图函数示例
2.1、基本图表函数
2.2、饼图的绘制
import matplotlib.pyplot as pltlabels = 'Frogs','Hogs','Dogs','Logs'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.show()
2.3、绘制散点图
import matplotlib.pyplot as pltimport numpy as npfig,ax = plt.subplots()ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')ax.set_title('Simple Scatter')plt.show()
三、数据分析及概要
1、Pandas库入门
pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
import pandas as pdd = pd.Series([9,8,7,6],index=['a','b','c','d'])
两个数据类型:Series,DataFrame
基于上述数据类型的各类操作:基本操作、运算操作、特征类操作、关联类操作
1.1、Series类型
由一组数据及与之相关的数据索引组成。
标量值创建
d = pd.Series(25,index=['a','b','c','d'])
字典类型创建
d = pd.Series({'a':1,'b':2,'c':3})
ndarray类型创建
d = pd.Series(np.arange(5))
1.2、DataFrame类型
一个表格型的数据类型,每列值类型不同,既有行索引、也有列索引。
二维ndarray对象创建
d = pd.DataFrame(np.arange(10).reshape(2,5))
1.3、数据类型操作
重新索引
.reindex()能够改变或重排Series和DataFrame索引
索引类型
1.4、数据类型运算
算术运算法则
算术运算根据行列索引,补齐后运算,运算默认产生浮点数。
补齐时缺项填充NaN(空值)
二维和一维、一维和零维间为广播运算。
采用+ - * / 符合进行的二元运算产生新的对象
比较运算法则
比较运算只能比较相同索引的元素,不进行补齐。
二维和一维、一维和零维间为广播运算。
采用> < >= <= == != 等符号进行的二元运算产生布尔对象。
2、Pandas数据特征分析
2.1、数据的排序
.sort_index()方法在指定轴上根据索引进行排序,默认升序
arr.sort_index(axis=0,ascending=True)
.sort_values()方法在指定轴上根据数值进行排序,默认升序
Series.sort_valued(axis=0,ascending=True)DataFrame.sort_values(by,axis=0,ascending=True) #by是axis轴上某个索引,某个索引列表
NaN统一放在末尾
2.2、数据的基本统计分析
适用于Series和DataFrame类型
适用于Series类型