《人工智能基础及应用(Python 微课版)》课件 第3章数据可视化_第1页
《人工智能基础及应用(Python 微课版)》课件 第3章数据可视化_第2页
《人工智能基础及应用(Python 微课版)》课件 第3章数据可视化_第3页
《人工智能基础及应用(Python 微课版)》课件 第3章数据可视化_第4页
《人工智能基础及应用(Python 微课版)》课件 第3章数据可视化_第5页
已阅读5页,还剩57页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

数据可视化周元哲西安邮电大学数据可视化是将数据以图形、图表、地图等视觉形式表现出来的过程,旨在帮助人们更直观地理解数据中的模式、趋势和异常。它是数据分析、商业智能、科研、金融、医疗等多个领域的重要工具。目的说明简化复杂性将大量复杂数据转化为易懂的图形发现趋势识别时间序列中的上升、下降或周期性变化识别异常快速发现离群点或异常值支持决策为管理层提供直观依据,辅助战略制定讲故事用数据讲述一个清晰、有说服力的故事维度MatplotlibSeaborn层级最底层高层封装代码量多(5-10行)少(1-3行)默认颜值朴素好看(配色、网格、字体)适用出版级微调、3D、动画EDA、统计图(箱线、小提琴、回归线)中文/负号手动

rcParams继承Matplotlib,同一套设置与Pandas只接受NumPy数组原生支持

DataFrame

列名自定义无限有限表类型适用场景示例折线图时间序列趋势股票价格、销售额变化柱状图类别比较各部门销售额对比饼图占比分析市场份额、预算分配散点图变量相关性身高与体重关系热力图密度或强度分布网站点击热图、地理犯罪率箱线图数据分布与异常值学生成绩分布大类核心目的常用几张图一句话记忆口诀

趋势随时间变折线图、面积图、瀑布图“折面瀑布看涨跌”

比较谁大谁小柱状图、条形图、雷达图“柱条雷达比高低”

分布数据散在哪直方图、散点图、箱线图“直散箱线看分布”

构成占比多少饼图、环形图、堆叠柱“饼环堆叠看整体”项目内容场合看“随时间变化”的趋势、序列、走向优势时间趋势一眼到底劣势类别多于10条就成“意大利面”口诀“线往上走好消息,往下走拉警报;多点交叉看拐点。”折线图面积图项目内容场合看「总量」随时间变化优势总量趋势一眼可见劣势系列过多层层叠,底层难精读口诀“时序总量选面积,系列别超五;零基线,莫乱改,颜色透明层层露。”柱状图项目内容场合对比不同类别的数值大小优势谁高谁低,长度即大小,零门槛劣势类别>20根柱子挤成“条形码”;Y轴截断会误导口诀“柱长即量,一眼排序;横着看叫条形,竖着看叫柱。”条形图项目内容场合类别对比(国家、产品、品牌等)优势一眼看出谁高谁低劣势太多条→视觉疲劳口诀“类别多,先排序,零基线,莫乱移;横条长,标签亮,一眼高低全亮相!”箱线图元素含义计算方式箱体下沿(Q1)第25%分位数np.percentile(x,25)箱体中线(Q2)中位数np.percentile(x,50)箱体上沿(Q3)第75%分位数np.percentile(x,75)IQR四分位距IQR=Q3−Q1上须末端非异常最大值min(Q3+1.5·IQR,数据最大值)下须末端非异常最小值max(Q1−1.5·IQR,数据最小值)离群点(Outliers)超出须的点单独描红箱线图项目内容场合多组连续数据“中心-离散-偏态-异常”四连体检优势五数概括+异常值一张图搞定,不假定分布劣势看不出双峰、多峰;类别太多胡须打架口诀“箱体胖则波动大,中线贴底右偏;点出须即异常。”散点图项目内容场合找两连续变量关系:相关、聚类、离群优势相关强弱+离群点一次性暴露劣势点>10k会糊成“黑毯”;只能同时看两变量(第三变量用颜色/大小)口诀“点云斜向上正相关,向下负相关;远离团簇是异常。”饼图项目内容场合只关心整体内占比,类别≤5片优势百分比直觉,像切蛋糕劣势人眼对角度不敏感;>5片或差异<5%基本看不清口诀“饼图不过五,角度难比大小;把25%当直角,其余靠估。”环形图项目内容场合1.展示整体与构成比例(仅一个总体)优势1.中心留白可放总计或标题,一眼看整体劣势1.分类过多→角度差异难辨口诀“分类少,比例昭,中心留白写总指标;环莫多,角莫小,一眼看懂才最好!”03MatplotlibMatplotlibMatplotlib发布于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()03Seaborn

SeabornSeaborn是基于matplotlib的图形可视化python包,便于做出各种统计图表。Pandas与Seaborn都是使用matplotlib作图,但是两者区别较大,如下所示:(1)Pandas善于简单绘图,而更丰富的图使用Seaborn绘制。(2)Pandas没有太多的参数优化图形,Seaborn提供大量参数调整图形。安装Seaborn绘图特色Matplotlib绘图Seaborn绘图importmatplotlib.pyplotaspltx=[1,3,5,7,9,11,13,15,17,19]y_bar=[3,4,6,8,9,10,9,11,7,8]y_line=[2,3,5,7,8,9,8,10,6,7]plt.bar(x,y_bar)plt.plot(x,y_line,'-o',color='y‘)importmatplotlib.pyplotaspltx=[1,3,5,7,9,11,13,15,17,19]y_bar=[3,4,6,8,9,10,9,11,7,8]y_line=[2,3,5,7,8,9,8,10,6,7]importseabornassnssns.set()#声明使用Seaborn样式plt.bar(x,y_bar)plt.plot(x,y_line,'-o',color='y‘)相比于Matplotlib默认的纯白色背景,Seaborn默认的浅灰色网格背景看起来的确要细腻舒适一些。而柱状图的色调、坐标轴的字体大小也都有一些变化。图表分类(1)矩阵图(2)回归图(3)关联图(4)类别图(5)分布图数据集seaborn内置数据集,包括常见的泰坦尼克、鸢尾花等经典数据集。

使用load_dataset函数调用数据集。绘图设置绘图元素主题设置调色板设置绘图元素

seaborn通过set_context方法设置绘图元素参数,主要影响标签、线条和其他元素的效果,与style有点区别,不会影响整体的风格。语法如下所示:seaborn.set_context(context=None,font_scale=1,rc=None)主题设置Seaborn通过set_style设置darkgrid,whitegrid,dark,white,ticks5种主题风格。其中,white和ticks包含没有必要的上边框和右边框。另外,sns.despine()用于去掉图形右边和上面的边线。调色板颜色不但代表各种特征,而且提高整个图的观赏性。Seaborn使用color_palette函数实现分类色板。绘图seaborn共有5个大类21种图。(1)关系类图表(Relationalplots)(2)分类图表(Categoricalplots)(3)分布图(Distributionplot)(4)回归图(Regressionplots)(5)矩阵图(Matrixplots)直方图Seaborn提供distplot函数实现importnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns#生成100个成标准正态分布的随机数x=np.random.normal(size=100)

#kde=True,进行核密度估计sns.distplot(x,kde=True)#密度曲线KDEplt.show()核密度图

核密度图一般与直方图搭配使用,显示数据的分布的“疏密程度”,核密度图显示为拟合后的曲线,“峰”越高表示数据越“密集”。Seaborn提供kdeplot函数实现。importnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsnp.random.seed(4)#设置随机数种子Gaussian=np.random.normal(0,1,1000)#创建一组平均数为0,标准差为1,总个数为1000的符合标准正态分布的数据ax.hist(Gaussian,bins=25,histtype="stepfilled",normed=True,alpha=0.6)sns.kdeplot(Gaussian,shade=True)plt.show()散点图Seaborn提供stripplot函数实现。importseabornassnsimportmatplotlib.pyplotaspltsns.set(style="whitegrid",color_codes=True)tips=sns.load_dataset("tips")#“小费”数据集sns.stripplot(data=tips)plt.show()箱型图Seaborn提供boxplot函数实现。importseabornassnsimportmatplotlib.pyplotasplt

sns.set_style("whitegrid")tips=sns.load_dataset("tips")#载入自带数据集“tips”,研究三个变量关系,是否抽烟与日期为分类变量,消费是连续变量#结论发现吸烟者在周末消费明显大于不吸烟的人ax=sns.boxplot(x="day",y="total_bill",hue="smoker",data=tips,palette="Set3")plt.show()小提琴图

小提琴图其实是箱线图与核密度图的结合,箱线图展示了分位数的位置,小提琴图用于展示任意位置的密度。通过小提琴图可以知道哪些位置的密度较高。在小提琴图中,白点是中位数,黑色盒形的范围是上四分位点和下四分位点,细黑线表示须,表示离群点的离群程度,越长表示离群点越远。鸢尾花(Iris)数据集每类50个数据,每个数据包含花萼长度(sepallength)、花萼宽度(sepalwidth)、花瓣长度(petallength)、花瓣宽度(petalwidth)4个属性条形图Seaborn提供barplot函数实现。importseabornassnsimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltx=np.arange(8)y=np.a

温馨提示

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

评论

0/150

提交评论