Python数据分析与应用 课件 第9、10章 matplotlib;pandas_第1页
Python数据分析与应用 课件 第9、10章 matplotlib;pandas_第2页
Python数据分析与应用 课件 第9、10章 matplotlib;pandas_第3页
Python数据分析与应用 课件 第9、10章 matplotlib;pandas_第4页
Python数据分析与应用 课件 第9、10章 matplotlib;pandas_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第9章

Matplotlib

《Python数据分析与应用》MatplotlibMatplotlib发布于2007年,在其函数设计时参考MATLAB相关函数,故命名以“Mat”开头,“Plot”表示绘图,“Lib”为集合。Matplotlib可以绘制线图、直方图、饼图、散点图以及误差线图等各种图形,主要用于将NumPy统计计算结果可视化。Matplotlib官方网址为:/Matplotlib绘图步骤Matplotlib画图流程大致分为如下步骤:步骤1:figure函数创建画布,决定是否创建子图。步骤2:使用plot函数绘制图形。步骤3:设置绘图对象的各种属性。importmatplotlib.pyplotaspltfig=plt.figure()ax=fig.add_subplot(111)ax.set(xlim=[0.5,4.5],ylim=[-2,8],title='AnExample Axes‘,ylabel='Y-Axis',xlabel='X-Axis')plt.show()

绘图函数Matplotlib中绘图函数为plot,使用语法如下:plt.plot(x,y,color,marker,linestyle,**kwargs)参数接收值说明默认值x,yarray表示

x轴与

y轴对应的数据;无colorstring表示折线的颜色;Nonemarkerstring表示折线上数据点处的类型;Nonelinestylestring表示折线的类型;-linewidth数值线条粗细:linewidth=1.=5.=0.31alpha

0~1之间的小数表示点的透明度;Nonelabelstring数据图例内容:label=‘实际数据’None子图Matplotlib提供如下三种方式绘制子图:(1)通过plt的subplot;(2)通过figure的add_subplot;(3)通过plt的subplots。子图subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域,选择在第3个位置绘制子图二维图函数名称描述函数名称描述Bar绘制条形图Polar绘制极坐标图Barh绘制水平条形图Scatter绘制x与y的散点图Boxplot绘制箱型图Stackplot绘制堆叠图Hist绘制直方图Stem绘制二维离散数据(“火柴图”)his2d绘制2D直方图Step绘制阶梯图Pie绘制饼状图Quiver绘制一个二维按箭头线性图使用plot函数实现画线。plot函数的第一个数组是横轴的值,第二个数组是纵轴的值,最后一个参数表示线的颜色。importmatplotlib.pyplotaspltplt.plot([1,2,3],[3,6,9],'-r')plt.plot([1,2,3],[2,4,9],':g')plt.show()

散点图

scatter函数用来绘制散点图。scatter函数也需要两组配对的数据指定x和y轴的坐标。importmatplotlib.pyplotaspltimportnumpyasnp

N=20

plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='r',s=100,alpha=0.5)plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='g',s=200,alpha=0.5)plt.scatter(np.random.rand(N)*100,np.random.rand(N)*100,c='b',s=300,alpha=0.5)

plt.show()饼状图pie函数用来绘制饼状图,用来表达集合中各个部分的百分比。importnumpyasnplabels=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']data=np.random.rand(7)*100plt.pie(data,labels=labels,autopct='%1.1f%%')plt.axis('equal')plt.legend()plt.show()条形图bar函数用来绘制条形图,用来描述一组数据的对比情况,例如:一周七天,每天的城市车流量。直方图直方图用hist函数用来绘制,看起来与条形图有些类似。但它们的含义是不一样,直方图描述了某个范围内数据出现的频度。箱线图importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltnp.random.seed(2)df=pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])#生成0~1的5*4维度数据并存入4列DataFrame中

df.boxplot()plt.show()#显示图像三维图三维图创建主要有如下两种方式:(1)利用关键字projection='3d’来实现(2)通过从mpl_toolkits.mplot3d导入对象Axes3D来实现三维曲线图frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp

ax=plt.axes(projection='3d')

#三维线的数据zline=np.linspace(0,15,1000)xline=np.sin(zline)yline=np.cos(zline)ax.plot3D(xline,yline,zline,'gray')三维散点图importmatplotlib.pyplotaspltimportnumpyasnp

ax=plt.axes(projection='3d')

zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')三维等高线图frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp

deff(x,y):returnnp.sin(np.sqrt(x**2+y**2))x=np.linspace(-6,6,30)y=np.linspace(-6,6,30)X,Y=np.meshgrid(x,y)Z=f(X,Y)

fig=plt.figure()ax=plt.axes(projection='3d')ax.contour3D(X,Y,Z,50,cmap='binary')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')#俯仰角设为60度,把方位角调整为35度ax.view_init(60,35)动态图matplotlib画图有阻塞和交互两种显示模式:(1)阻塞模式:采用plt.show显示图片,且图片关闭之前代码将阻塞在该行(2)交互模式:采用plt.plot显示图片,且不阻塞代码的继续运行。Matplotlib中默认是使用阻塞模式。

matplotlib的animation模块实现动态图较为繁琐。而交互式绘图和暂停功能较为简单,通过“画图-->清理-->画图”的循环实现动态效果。相关函数如下所示:plt.ion():打开交互模式plt.ioff():关闭交互模式plt.clf():清除当前的Figure对象plt.cla():清除当前的Axes对象plt.pause():暂停功能概率分布泊松分布正态分布均匀分布二项分布泊松分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.poisson(9,10000)plt.hist(list,bins=8,color='b',alpha=0.4,edgecolor='r')plt.show()正态分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.normal(0,1,10000)plt.hist(list,bins=8,color='r',alpha=0.5,edgecolor='r')plt.show()均匀分布importnumpyasnpimportmatplotlib.pyplotasplt

list=np.random.uniform(0,10,10000)plt.hist(list,bins=7,color='g',alpha=0.4,edgecolor='b')plt.show()二项分布importnumpyasnpimportmatplotlib.pyplotaspltlist=np.random.binomial(n=10,p=0.5,size=10000)plt.hist(list,bins=8,color='g',alpha=0.4,edgecolor='b')plt.show()三维图三维图创建主要有如下两种方式利用关键字projection='3d’来实现通过从mpl_toolkits.mplot3d导入对象Axes3D来实现三维曲线图frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnp

ax=plt.axes(projection='3d')

#三维线的数据zline=np.linspace(0,15,1000)xline=np.sin(zline)yline=np.cos(zline)ax.plot3D(xline,yline,zline,'gray')三维散点图importmatplotlib.pyplotaspltimportnumpyasnp

ax=plt.axes(projection='3d')

zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')三维等高线图importmatplotlib.pyplotaspltimportnumpyasnp

ax=plt.axes(projection='3d')

zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')第10章Pandas

《Python数据分析与应用》pandaspandas是基于NumPy的数据分析工具,官方网址是。pandas提供了快速,灵活和富有表现力的数据结构,目的是使“关系”或“标记”数据的工作既简单又直观。Pandas用于数据清洗,对噪音等数据进行处理,从而便于机器学习和数据分析。pandaspandas常用6个类Series:基本数据结构,一维标签数组,能够保存任何数据类型DataFrame:基本数据结构,一般为二维数组,是一组有序的列Index:索引对象,负责管理轴标签和其他元数据(比如轴名称)groupby:分组对象,通过传入需要分组的参数实现对数据分组Timestamp:时间戳对象,表示时间轴上的一个时刻Timedelta:时间差对象,用来计算两个时间点的差值Pandas2个重要类创建Series

创建Series对象的函数是Series,它的主要参数是data和index,其基本语法格式如下。pandas.Series(data=None,

index=None,

name=None)

参数说明如下:data:接收array或dict。表示接收的数据。默认为None。index:接收array或list。表示索引,必须与数据长度相同name:接收string或list。表示Series对象的名称。默认为None。通过ndarray创建Seriesimportpandasaspdimportnumpyasnpprint('通过ndarray创建的Series为:\n',pd.Series(np.arange(5),index=['a','b','c','d','e'],name='ndarray'))通过dict创建Seriesdict的键作为Series的索引,dict的值作为Series的值,无须传入index参数。通过dict创建Series对象,代码如下所示:importpandasaspddict={'a':0,'b':1,'c':5,'d':3,'e':4}print('通过dict创建的Series为:\n',pd.Series(dict))通过list创建Seriesimportpandasaspdlist1=[0,1,5,3,4]print('通过list创建的Series为:\n',pd.Series(list1,index=['a','b','c','d','e'],name='list'))Series属性Series拥有8个常用属性,如下所示。values:以ndarray的格式返回Series对象的所有元素index:返回Series对象的索引dtype:返回Series对象的数据类型shape:返回Series对象的形状nbytes:返回Series对象的字节数ndim:返回Series对象的维度size:返回Series对象的个数T:返回Series对象的转置访问Series的属性importpandasaspdseries1=pd.Series([1,5,3,4])print("series1:\n{}\n".format(series1))print("series1.values:{}\n".format(series1.values))#数据print("series1.index:{}\n".format(series1.index))#索引print("series1.shape:{}\n".format(series1.shape))#形状print("series1.ndim:{}\n".format(series1.ndim))#维度访问Series数据通过索引位置访问Series的数据与ndarray相同,importpandasaspdseries5=pd.Series([1,5,3,4,5,6,7],index=["C","D","E","F","G","A","B"])#通过索引位置访问Series数据子集print("series5位于第1位置的数据为:",series5[0])#通过索引名称(标签)也可以访问Series数据print("Eis{}\n".format(series5["E"]))更新Seriesimportpandasaspdseries1=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series1:\n{}\n".format(series1))#更新元素series1['a']=3print('更新后的Series1为:\n',series1)追加Series和插入单个值importpandasaspdseries1=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series1:\n{}\n".format(series1))series1=pd.Series([4,5],index=['f','g'])#追加Seriesprint('在series插入series1后为:\n',series.append(series1))删除Series元素importpandasaspdseries=pd.Series(list1,index=['a','b','c','d','e'],name='list')print("series:\n{}\n".format(series))#删除数据series.drop('e',inplace=True)print('删除索引e对应数据后的series为:\n',series)。DataFrameDataFrame是pandas基本数据结构,类似数据库中的表。DataFrame既有行索引,也有列索引,可以看作是Series组成的dict,每个Series是DataFrame的一列

创建DataFrameDataFrame函数用于创建DataFrame对象,其基本语法格式如下pandas.DataFrame(data=None,

index=None,

columns=None,

dtype=None,

copy=False)参数说明如下所示:data:接收ndarray、dict、list或DataFrame。表示输入数据。默认为None。index:接收Index,ndarray。表示索引。默认为None。columns:接收Index,ndarray。表示列标签(列名)。默认为None。通过dict创建DataFrameimportpandasaspddict1={'col1':[0,1,5,3,4],'col5':[5,6,7,8,9]}print('通过dict创建的DataFrame为:\n',pd.DataFrame(dict1,index=['a','b','c','d','e']))通过list创建DataFrameimportpandasaspdlist5=[[0,5],[1,6],[5,7],[3,8],[4,9]]print('通过list创建的DataFrame为:\n',pd.DataFrame(list5,index=['a','b','c','d','e'],columns=['col1','col5']))通过Series创建DataFrameimportpandasaspdnoteSeries

=

pd.Series(["C",

"D",

"E",

"F",

"G",

"A",

"B"],

index=[1,

5,

3,

4,

5,

6,

7])weekdaySeries

=

pd.Series(["Mon",

"Tue",

"Wed",

"Thu","Fri",

"Sat",

"Sun"],

index=[1,

5,

3,

4,

5,

6,

7])df4

=

pd.DataFrame([noteSeries,

weekdaySeries])print("df4:\n{}\n".format(df4))DataFrame属性values:以ndarray的格式返回DataFrame对象的所有元素index:返回DataFrame对象的Indexcolumns:返回DataFrame对象的列标签dtypes:返回DataFrame对象的数据类型axes:返回DataFrame对象的轴标签ndim:返回DataFrame对象的轴尺寸数size:返回DataFrame对象的个数shape:返回DataFrame对象的形状更新DataFrameimportpandasaspddf=pd.DataFrame({'col1':[0,1,5,3,4],'col5':[5,6,7,8,9]},index=['a','b','c','d','e'])print('DataFrame为:\n',df)#更新列df['col1']=[10,11,15,13,14]print('更新列后的DataFrame为:\n',df)插入和删除DataFrameimportpandasaspddf3=pd.DataFrame({"note":["C","D","E","F","G","A","B"],"weekday":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]})print("df3:\n{}\n".format(df3))df3["No."]=pd.Series([1,5,3,4,5,6,7])#采用赋值的方法插入列print("df3:\n{}\n".format(df3))deldf3["weekday"]#删除列的方法有多种,如del、pop、dropprint("df3:\n{}\n".format(df3))Index

(1)

隐式创建

创建Series或DataFrame等对象时,索引会转换为Index对象

(2)显式创建

Index对象可以通过pandas.Index()函数创建

plotMatplotlib绘制一张图表需要各个基础组件对象,工作量较大。而pandas中使用行标签和列标签以及分组信息,较为简便的完成图表的制作。散点图

importnumpyasnpimportpandasaspdwdf=pd.DataFrame(np.arange(20),columns=['W'])wdf['Y']=wdf['W']*1.5+2wdf.iloc[3,1]=128wdf.iloc[18,1]=150wdf.plot(kind='scatter',x='W',y='Y')

条形图importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltdf2=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])df2.plot.bar()plt.show()

直方图与密度图importpandasas

温馨提示

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

评论

0/150

提交评论