Python程序设计课件第15章-数据分析与可视化基础_第1页
Python程序设计课件第15章-数据分析与可视化基础_第2页
Python程序设计课件第15章-数据分析与可视化基础_第3页
Python程序设计课件第15章-数据分析与可视化基础_第4页
Python程序设计课件第15章-数据分析与可视化基础_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据分析基础与NumPy数据统计分析与Pandas数据可视化与Matplotlib第15章数据分析与可视化基础参考书目《Python程序设计》目录数据分析基础与NumPy数据统计分析与Pandas数据可视化与Matplotlib这里说明图片内容用来存储和处理大型矩阵NumPy提供了大量的库和标准数据模型,以及高效、便捷地处理大型数据集所需的函数和方法PandasMatplotlib绘图库数据分析基础与NumPy数据统计分析与Pandas数据可视化与Matplotlib目录这里说明图片内容数据分析基础与NumPy1NumPy概述NumPy:开源的Python科学计算库,包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。部分功能如下:1)ndarray:一个具有矢量算术运算且节省空间的多维数组。2)用于对整组数据进行快速运算的标准数学函数(无须编写循环)。3)用于读/写磁盘数据的工具以及用于操作内存映射文件的工具。4)线性代数、随机数生成以及傅里叶变换功能。5)用于集成C、C++、Fortran等语言的代码编写工具。数据分析基础与NumPy2NumPy的对象ndarrayNumPy提供了两种基本对象:ndarray和ufunc。多维数组对象该对象由两个部分组成,即实际的数据和描述这些数据的元数据。大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据。ndarray能够对数组进行处理的函数ufunc数据分析基础与NumPy2NumPy的对象ndarrayndarray对象是用于存放同类型元素的多维数组。以0下标为开始进行集合中元素的索引,每个元素在内存中都有相同存储大小的区域。ndarray内部由以下内容组成:指向数据的指针数据类型表示数组形状的元组一个跨度元组数据分析基础与NumPy2NumPy的对象ndarrayndarray的内部结构:数据分析基础与NumPy2NumPy的对象ndarray1.ndarray(数组)的属性NumPy数组的维数称为秩(rank),秩就是轴的数量,即数组的维度。axis=0,表示沿着第0轴进行操作。数据分析基础与NumPy2NumPy的对象ndarray【例】ndarray(数组)的常用属性应用演示。importnumpyasnpdata=[6,2,3,1,4]arr1=np.array(data)print("数组维度的元组:",arr1.shape)print("数组维数:",arr1.ndim)print("数组元素的类型:",arr1.dtype)运行结果:数组维度的元组:(5,)数组维数:1数组元素的类型:int32数据分析基础与NumPy3NumPy的基本操作1.NumPy.array创建一个ndarray只需调用NumPy的array函数即可:numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)object:数组或嵌套的数列dtype:数组元素的数据类型,可选copy:对象是否需要复制,可选order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)subok:默认返回一个与基类类型一致的数组ndmin:指定生成数组的最小维度数据分析基础与NumPy3NumPy的基本操作2.NumPy.emptyNumPy.empty用于创建指定形状和dtype的未初始化数组:NumPy.empty(shape,dtype=float,order='C')shape:空数组的形状,整数或整数元组dtype:所需的输出数组类型,可选order:'C'为按行的C风格数组,'F'为按列的Fortran风格数组x=np.empty([3,2],dtype=int)数据分析基础与NumPy3NumPy的基本操作3.NumPy.zerosNumPy.zeros函数用于返回特定大小,以0填充的新数组。NumPy.zeros(shape,dtype=float,order='C')shape:空数组的形状,整数或整数元组dtype:所需的输出数组类型,可选order:'C'为按行的C风格数组,'F'为按列的Fortran风格数组x=np.zeros(5)数据分析基础与NumPy3NumPy的基本操作4.NumPy.onesNumPy.ones函数用于返回特定大小,以1填充的新数组。NumPy.ones(shape,dtype=None,order='C')shape:空数组的形状,整数或整数元组dtype:所需的输出数组类型,可选order:'C'为按行的C风格数组,'F'为按列的Fortran风格数组x=np.ones(5)[1.1.1.1.1.]数据分析基础与NumPy3NumPy的基本操作5.NumPy.asarray此函数类似于NumPy.array,除了它有较少的参数。对于将Python序列转换为ndarray非常有用。NumPy.asarray(a,dtype=None,order=None)a:任意形式的输入参数,比如列表、列表的元组、元组、元组的元组、元组的列表dtype:通常,输入数据的类型会应用到返回的ndarrayorder:'C'为按行的C风格数组,'F'为按列的Fortran风格数组x=[1,2,3]a=np.asarray(x)[123]数据分析基础与NumPy3NumPy的基本操作6.NumPy.arange该函数返回ndarray对象,包含给定范围内的等间隔值。NumPy.arange(start,stop,step,dtype)start:范围的起始值,默认为0stop:范围的终止值(不包含)step:两个值的间隔,默认为1dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。x=np.arange(5)[01234]数据分析基础与NumPy3NumPy的基本操作7.ndarray的随机创建NumPy.random用于生成随机数据。arr=np.random.rand(3,4)数据分析基础与NumPy4NumPy统计函数NumPy提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。1.numpy.amin和numpy.amax计算数组中的元素沿指定轴的最小值numpy.amax(a[,axis=None,out=None))a:输入数据。axis:指定沿着某个轴来计算最大值,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组。out:替代输出数组,用于放置结果,默认值为None。x=np.arange(5)[01234]计算数组中的元素沿指定轴的最大值numpy.max(a[,axis=None,out=None])数据分析基础与NumPy4NumPy统计函数2.numpy.ptp函数numpy.ptp函数返回沿某轴(axis)方向上的最大值与最小值的差值即maximum-minimum的值形成的数组。numpy.ptp(a[,axis=None,out=None])a:输入数据。axis:指定沿着某个轴来计算最大值,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组。out:替代输出数组,用于放置结果,默认值为None。print('每行元素最大值和最小值之差:',np.ptp(a,axis=1))print('每列元素最大值和最小值之差:',np.ptp(a,axis=0))数据分析基础与NumPy4NumPy统计函数3.numpy.percentile函数numpy.percentile函数用于计算数组中元素的百分位数。numpy.percentile(a,q,axis)a:输入数组;q:要计算的百分位数,在0~100之间;axis:沿着它计算百分位数的轴。print("在纵列上求50%的分位数:",np.percentile(a,50,axis=0))print("在横列上求50%的分位数:",np.percentile(a,50,axis=1))数据分析基础与NumPy4NumPy统计函数4.numpy.median函数沿某轴(axis)方向计算数组中的中位数。numpy.median(a[,axis=None])a:数组或可以转化成数组的对象;axis:指定沿着某个轴来计算中位数,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组。print('所有数组元素的中位数:',np.median(a))print('在纵列上元素的中位数:',np.median(a,axis=0))print('在横列列上元素的中位数:',np.median(a,axis=1))数据分析基础与NumPy4NumPy统计函数5.numpy.mean函数计算数组或者轴方向的算术平均数。numpy.mean(a[,axis=None])a:数组或可以转化成数组的对象;axis:指定沿着某个轴来计算中位数,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组。数据分析基础与NumPy4NumPy统计函数6.numpy.average函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。numpy.average(a[,axis=None,weights=None])a:输入数组;axis:指定沿着某个轴来计算平均值,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组;weights:表示权重值。当权重值为—维数组时,其长度必须与沿指定轴方向的长度一致。另外,权重值数组也可以与a数组的形状相同。average()函数除了a参数外,其余参数为可选项。wts=np.array([4,3,2,1])print('指定权重,求平均值:',np.average(a,weights=wts))数据分析基础与NumPy4NumPy统计函数7.标准差与标准差(1)标准差计算标准差的公式如下:std=sqrt(mean((x-x.mean())**2))a:输入数组;axis:指定沿着某个轴来计算平均值,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组。numpy.std(a[,axis=None])数据分析基础与NumPy4NumPy统计函数(2)方差方差是每个样本值与全体样本值的平均数之差的平方值的平均数。mean((x-x.mean())**2)a:输入数组;axis:指定沿着某个轴来计算平均值,axis=0表示按列,axis=l表示按行,默认值None表示对整个数组;dtype:数据类型。numpy.var(a[,axis=None,dtype=None])数据分析基础与NumPy数据统计分析与Pandas数据可视化与Matplotlib目录这里说明图片内容数据统计分析与PandasPandas的核心是Series和DataFrame两大数据结构Series数据结构用于存储—个序列的—维数组DataFrame数据结构用于存储复杂数据的二维数据结构数据统计分析与Pandas1Series对象及常用操作Series由一组数据以及—组与之相关的数据标签组成的。数据(即值)存放在value主数组标签(即索引)存储在index数组中Series的表现形式为:索引在左边,值在右边。例如,Series对象[1,3,5,2]的内部结构数据统计分析与Pandas1Series对象及常用操作1.创建Series对象(1)通过Series构造函数创建。pandas.Series(data=None[,index=None,dtype=None,name=None,copy=False])data:传递给序列的数据,可以是ndarray、list或字典。index:设置轴的索引,索引值的个数与data参数的长度相同。如果没有设置index参数,那么默认值是np.arange(n),或者RangeIndex(0,1,2,…,n)。dtype:设置序列元素的数据类型,如果没有设置,那么将推断数据类型。name:序列是一个多行的结构,name是序列的名称。copy:复制数据,默认值是false。数据统计分析与Pandas1Series对象及常用操作2.查看Series值和标签通过Series的属性values和index可查看值和标签。print("查看Series对象的值:",m1.values)print("查看Series对象的标签:",m1.index)数据统计分析与Pandas1Series对象及常用操作3.选择内部元素与赋值Series索引的工作方式类似于NumPy数组的索引,但Series的索引值不只是整数。(1)选择单个元素看成普通的NumPy数组,指定索引即可。如,m1[1]获取元素是-3。(2)选择多个元素切片“[起始值:终止值:步长]”来选择多个元素时,所指定的元素是不包含终止值位置的元素,如没有指定终止值,则终止值是包含Series最后索引的元素。(3)给元素赋值数据统计分析与Pandas1Series对象及常用操作4.统计Series对象的组成元素(1)统计元素重复出现的次数unique()函数返回一个由Series去重后的元素所组成的数组value_counts()函数返回各个不同的元素,而且还能计算每个元素在Series中的出现次数。运行结果中左边是元素,右边是元素出现的次数。(2)判断元素是否存在使用isin()函数可以判断给定的一列元素是否包含在Series数据结构中。在则返回True,否则返回Falseimportnumpyasnpm1=pd.Series([2,-3,4,5,2,4,2])print("对Series各个元素的值去重:",m1.unique())print("返回Series各个元素以及重复出现的次数:\n",m1.value_counts())print("判断5是否在Series中间:\n",m1.isin([5]))数据统计分析与Pandas2DataFrame对象及常用操作DataFrame是一个类似于二维数组或表格型的数据结构,既有行索引,又有列索引。行索引,表明不同行,横向索引,叫index,0轴,axis=0列索引,表名不同列,纵向索引,叫columns,1轴,axis=1数据统计分析与Pandas2DataFrame对象及常用操作1.创建DataFrame对象使用DataFrame构造函数:pandas.DataFrame(data=None,index=None,columns=None)data:为ndarray、list或dict类型数据。index:行标签。如果没有传入参数,默认自动创建一个从0-N的整数索引。columns:列名列表列标签。如果没有传入参数,默认自动创建一个从0-N的整数索引。数据统计分析与Pandas2DataFrame对象及常用操作通常情况下,我们使用pd.DataFrame函数来创建DataFrame,当然也可以根据需要使用pd.DataFrame.from_dict函数来创建DataFrame。(1)使用字典来创建DataFrameimportpandasaspddata={'name':['Tom','Jhon','Strong','Sea','Sun'],'birthyear':[2000,2001,2002,2001,2002],'height':[150,170,165,185,175]}row_index=['1','2','3','4','5']col_names=['birthyear','name','height']df=pd.DataFrame(data,columns=col_names,index=row_index)print(df)birthyearnameheight12000Tom15022001Jhon17032002Strong16542001Sea18552002Sun175数据统计分析与Pandas2DataFrame对象及常用操作(2)使用列表(列表项是List)来创建DataFrameimportpandasaspdstudents=[['jack',34,'CAU'],['Tom',30,'Tsinghua'],['Aadi',16,'PKU']]df=pd.DataFrame(students)print(df)importpandasaspdstudents=[('jack',34,'CAU'),('Tom',30,'Tsinghua'),('Aadi',16,'PKU')]df=pd.DataFrame(students)print(df)(3)使用列表(列表项是元组)来创建DataFrame对象数据统计分析与Pandas2DataFrame对象及常用操作(4)使用from_dict创建DataFramepd.DataFrame.from_dict(data)中,data是一个字典结构,字典的Key是列名,Value是一个列表,通过这种格式创建DataFrame。importpandasaspddata={'col_1':[3,2,1,0],'col_2':['a','b','c','d']}df=pd.DataFrame.from_dict(data)print(df)数据统计分析与Pandas2DataFrame对象及常用操作2.DataFrame的属性DataFrame的属性主要是索引、数据类型、值和形状。(1)DataFrame的索引通过index属性来访问DataFrame的行标签,通过columns属性访问DataFrame的列标签。(2)数据类型:df.dtypes(3)DataFrame的值:df.values(4)DataFrame的轴和形状:df.axes和df.shape数据统计分析与Pandas2DataFrame对象及常用操作2.DataFrame的属性DataFrame的属性主要是索引、数据类型、值和形状。(1)DataFrame的索引通过index属性来访问DataFrame的行标签,通过columns属性访问DataFrame的列标签。(2)数据类型:df.dtypes(3)DataFrame的值:df.values(4)DataFrame的轴和形状:df.axes和df.shape数据统计分析与Pandas2DataFrame对象及常用操作3.列操作和行操作(1)追加列通过为一个新列赋值来向DataFrame中追加新列,新列始终处于列名序列的末尾:df['new']='a'(2)插入列insert()函数,该函数向DataFrame中插入一列,并制定新列的位置:DataFrame.insert(self,loc,column,value)loc:插入列的位置column:插入列的名称value:插入列的值数据统计分析与Pandas2DataFrame对象及常用操作(3)删除列或行使用drop函数来删除行或列:DataFrame.drop(self,labels=None,axis=0,index=None,columns=None,level=None,inplace=False,errors='raise')labels和axis:labels参数指定要删除的标签,如果axis=0或'index',表示行标签;如果axis=1或'columns',表示列标签。axis的默认值是0;index:设置index等价于设置labels和axis=0;columns:设置columns等价于设置labels和axis=1。数据统计分析与Pandas2DataFrame对象及常用操作(4)追加数据行DataFrame.append(self,other,ignore_index=False,verify_integrity=False,sort=None)就是把一个结构相同的DataFrame追加到另一个DataFrame的后面,把两个DataFrame合并为一个。数据统计分析与Pandas2DataFrame对象及常用操作4.列数据类型转换df['col_name'].astype(str)df['col_name'].astype('object')astype(dtype)函数用于把DataFrame的列转换为特定的类型,dtype可以是pandas支持的类型,也可以是NumPy.dtype,也可以是Python类型:数据分析基础与NumPy数据统计分析与Pandas数据可视化与Matplotlib目录这里说明图片内容数据可视化与Matplotlib数据可视化是以图形或图表的形式展示数据。数据可视化后,可以更加直观地帮助人们快速地理解数据,发现数据的关键点。数据可视化与Matplotlib1常用的数据可视化工具在Python中已经有很多数据可视化方面的第三方库:专门用于开发2D图表提供多样化的输出格式优点:使用起来极其简单;以渐进、交互式方式实现数据可视化;表达式和文本使用LaTeX排版;对图像元素控制力更强;可输出PNG、PDF、SVG和EPS等多种格式。Matplotlib基于Matplotlib产生的一个模块,专攻于统计可视化,可以和Pandas进行无缝链接相对于Matplotlib,Seaborn语法更简洁SeabornHoloViews开源的Python库,可用非常少的代码行完成数据分析和可视化适合于数据的交互式探索数据可视化与Matplotlib1常用的数据可视化工具在Python中已经有很多数据可视化方面的第三方库:它的API简单、友好、一致,并建立在强大的vega-lite(交互式图形语法)之上AltairAPI不包含实际的可视化呈现代码,而是按照vega-lite规范发出JSON数据结构。由此产生的数据可以在用户界面中呈现Altair提供了交互式的、公开的,高质量的图表集,可与R、Python、Matlab等软件对接。拥有在别的库中很难找到的几种图表类型,如等值线图,树形图和三维图表等,图标类型丰富,申请了API密钥后,可以一键将统计图形同步到云端。Plotly数据统计分析与Pandas2Matplotlib绘图的基本流程1.创建简单图表通过pipinstallmatplotlib命令进行自动安装Matplotlib库后,用Matplotlib画图一般需要如下5个流程:绘图流程:导入模块、创建画布、制作图形、美化图片(添加各类标签和图例)、保存并显示图表。1)导入matplotlib.pyplot模块。importmatplotlib.pyplotasplt数据统计分析与Pandas2Matplotlib绘图的基本流程2)利用figure函数创建画布。由于Matplotlib的图像均位于绘图对象中,在绘图前,先要创建绘图对象。deffigure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True,FigureClass=Figure,clear=False,**kwargs)数据统计分析与Pandas2Matplotlib绘图的基本流程3)绘制图表。通过调用plot函数可实现在当前绘图对象中绘制图表plt.plot(x,y,label,color,linewidth,linestyle)或plt.plot(x,y,fmt,label)4)添加各类标签和图例在调用plot函数完成绘图后,还需要为图表添加各类标签和图例。数据统计分析与Pandas2Matplotlib绘图的基本流程pyplot中添加各类标签和图例的函数包括:1)plt.xlabel:指定x轴的名称,可以指定位置、颜色、字体大小等参数。2)plt.ylabel:指定y轴的名称,可以指定位置、颜色、字体大小等参数。3)plt.title:指定图表的标题,可以指定标题名称、位置、颜色、字体大小等参数。4)plt.xlim:指定图形x轴的范围,只能输入一个数值区间,不能使用字符串。5)plt.ylim:指定图形y轴的范围,只能输入一个数值区间,不能使用字符串。6)plt.xticks:指定x轴刻度的数目与取值。7)plt.yticks:指定y轴刻度的数目与取值。8)plt.legend:指定当前图形的图例,可以指定图例的大小、位置和标签。数据统计分析与Pandas2Matplotlib绘图的基本流程5)保存和显示图表plt.savefig:保存绘制的图表为图片,可以指定图表的分辨率、边缘和颜色等参数。plt.show:在本机显示图表。【例】利用Matplotlib绘制折线图,展现北京一周的天气,比如从星期一到星期日的天气温度:8,7,8,9,11,7,5。#1.导入模块importmatplotlib.pyplotasplt#2.创建画布plt.figure(figsize=(10,10),dpi=100)#3.绘制折线图plt.plot([1,2,3,4,5,6,7],[8,7,8,9,11,7,5])#4.添加标签plt.xlabel("Week")plt.ylabel("Temperature")#5.显示图像plt.show()数据统计分析与Pandas2Matplotlib绘图的基本流程2.创建子图在Matplotlib中,可以将—个绘图对象分为几个绘图区域,在每个绘图区域中可以绘制不同的图像,这种绘图形式称为创建子图。创建子图可以使用subplot()函数subplot(numRows,numCols,plotNum)numRows:表示将整个绘图区域等分为numRows行;numCols:表示将整个绘图区域等分为numCols列;plotNum:表示当前选中要操作的区域。数据统计分析与Pandas2Matplotlib绘图的基本流程【例】创建3个子图,分别绘制正弦函数、余弦函数和线性函数。#1.导入模块importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,10,80)y=np.sin(x)z=np.cos(x)k=x#第一行的左图plt.subplot(221)plt.plot(x,z,"r--",label="$cos(x)$")#第一行的右图plt.subplot(222)plt.plot(x,y,label="$sin(x)$",color="blue",linewidth=2)#第二整行plt.subplot(212)plt.plot(x,k,"g--",label="$x$")plt.legend()plt.savefig("image.png",dpi=100)plt.show()数据统计分析与Pandas3Matplotlib的基础绘图功能1.完善原始折线图:给图形添加辅助功能(1)准备数据并画出初始折线图y_hangzhou=[random.uniform(15,18)foriinx](2)添加自定义x,y刻度1)plt.xticks(x,**kwargs)x:要显示的刻度值2)plt.yticks(y,**kwargs)y:要显示的刻度值#构造x轴刻度标签x_ticks_label=["11点{}分".format(i)foriinx]#构造y轴刻度y_ticks=range(40)#修改x,y轴坐标的刻度显示plt.xticks(x[::5],x_ticks_label[::5])plt.yticks(y_ticks[::5])数据统计分析与Pandas3Matplotlib的基础绘图功能(3)解决中文显示问题在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦frompylabimportmpl#设置显示中文字体mpl.rcParams["font.sans-serif"]=["SimHei"]有时候字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数。#设置正常显示符号mpl.rcParams["axes.unicode_minus"]=False(4)添加网格显示plt.grid(True,linestyle='--',alpha=0.5)数据统计分析与Pandas3Matplotlib的基础绘图功能(5)添加描述信息添加x轴、y轴描述信息及标题,通过fontsize参数修改图像中字体大小。plt.xlabel("时间")plt.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论