马佳琪 滕国文
摘要:现如今的信息化社会,我们无时无刻不产生大量的数据。人类视觉具有迄今为止最大的处理带宽,使用表格,图片等元素可以帮助分析人员快速掌握数据集的特性。数据可视化(Data Visualization)就是一种将抽象概念形象化,抽象语言具象化的一个过程。本文主要基于Matplotlib绘图库的基础上,结合Python 3.6、Pandas、Seaborn、Sklearn,设计并实现根据不同切工等级、成色等级和纯净度钻石的分布绘制不同的可视化图像。
关键词:数据可视化;Matplotlib;Seaborn
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2019)17-0018-02
开放科学(资源服务)标识码(OSID):
在人人都谈及人工智能的今天,我们正在使用自动化取代人类的判断(例如自动驾驶)。但是,仍然有一个环节机器是无法取代人类的,那就是可视化。从计算机科学的角度来看,数据可视化是一种借助计算机技术和数字图像处理技术,将数据转换为图表展示并进行交互处理的方法和技术。在数据可视化方面有著名的3个Python绘图第三方包:Matplotlib,Seaborn以及gplot。本文使用的Matplotlib和Seaborn具有以下几个优点:Matplotlib是Python的拓展库,所以继承了Python语法的优点,面向对象、易读、易维护、代码简洁优美。Seaborn是一个基于Matplotlib的高级可视化效果库,偏向于统计作图。因此,针对的点主要是数据挖掘和机器学习中的变量特征选取。相比Matplotlib,它语法相对简化些,绘制出来的图不需要花很多功夫去修饰。
1 数据可视化
可视化分析[1]作为大数据分析领域的一个重要分支一直以来被广泛应用于科学计算研究以及商业智能领域。因此,大数据可视分析是大数据分析不可或缺的重要手段和工具。可视分析(Visual analytics)是科学可视化、信息可视化、人机交互、认知科学、数据挖掘、信息论、决策理论等研究领域的交叉融合所产生的新兴研究方向[2],是一种通过交互式可视化界面来辅助用户对大规模复杂数据集进行分析推理的科学与技术。分析过程在数据与知识的转化过程中不断循环。它将大数据分析挖掘方法与可视化信息处理过程相结合,综合计算机的处理能力和人的认知能力,最终挖掘出大规模、高维度的数据集中蕴含的值。
过去的十几年中,数据储存容器的容量已经发生了翻天覆地的变化,这让我们可以存储海量数据。然而,我们所储存的大部分数据都是原始数据,这些数据是毫无价值的。只有当从中提取信息后,才能发现其中的价值。人类处理视觉信息是十分迅速的,我們可以立刻捕获隐藏在数字中的关键信息。因此,数据可视化成为提取关键信息的最佳途径。
2 Matplotlib图形库
Matplotlib[3]是一个用 Python[4]语言编写的二维图形库, 它充分利用了Python数值计算软件包的快速精确的矩阵运算能力,具有良好的作图性能。Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形[5]。
2.1 Python中Pandas的应用
在进行数据分析时,绘图是必不可少的模式探索方式。用Python进行数据分析时,Matplotlib和Pandas是最常用到的两个库。Pandas是Python的一个数据分析包[5],是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具和大量能快速便捷地处理数据的函数和方法。
3 Matplotlib应用
Matplotlib是Python中最常用的可视化工具之一, 可以非常方便地创建高质量的不同类型的2D图表和一些基本的3D图表[6]。借助于Python语言的强大功能, 它不仅具有不亚于Matlab的作图能力,又具有胜于Matlab的编程能力。本文借助Matplotlib利用Seaborn,pandas和sklearn等工具进行数据探索和处理,以及建立预测模型,对钻石价格进行预测。
3.1设置特征参数
选择合适的钻石需要知道钻石的切工、成色、净度和克拉重量四个特性,它们是选购钻石时最值得留意的要点。当钻石以适当比例切工时,最大部分的光线从钻石的顶部反射出去。成色是指钻石的无色程度,越接近无色状态,级别越高。大多数钻石都有细小的、称为包含物的瑕疵。包含物越少,越不可见,净度级别越高。克拉是指钻石的重量。一般而言,随着克拉重量的增长,钻石价格将呈指数增长,因为克拉越大,钻石越罕见。
本文分析一个钻石数据集该数据集一共包含53940颗钻石样本。每一颗钻石记录了切割、成色、净度、克拉重量和价格等10个特征。
数据集中包含53940个样本,10个特征。我们进一步发现,切工,成色和净度三个特征为字符串类型表示的等级型离散型特征。其余特征为连续型特征。借助DataFrame提供的describe方法,我们可以统计每一个特征的取值分布。
对于连续型特征,直接使用默认参数,计算每一个特征非空值数量、最大值、最小值、平均值和分位数等统计量。
观察该数据发现,取值与样本数量一致,说明上述特征均不存在缺失值。观察第一列克拉重量特征,发现在五万多钻石样本中,最小的钻石重量为0.2克拉,最大的钻石重量为5.01克拉。钻石的平均重量为0.8克拉。观察price列,对于钻石价格,最便宜的为326美元,最贵的为18823美元,钻石的平均价格为3923.8美元。
对于离散型特征,首先感兴趣每一个特征唯一取值数量以及最频繁的取值及其数量。在Pandas中,依然可以使用DataFrame提供的describe()函数成。
4 价格预测模型
由于价格属于连续型特征,为了尝试找到钻石价格与其他特征之间的关系而使用回归模型。最简单的模型为线性回归。为了更好地评估预测效果。需要先将数据进行划分为训练集和测试集两部分。
4.1 线性模型
最简单的线性回归模型,通过以下三行代码建立线性回归模型。
由此可得预测钻石价格的线性回归模型为:
在训练集中绘制残差图展示模型的拟合效果。
4.2 非线性模型
为了探究钻石的价格与其他特征之间是否存在某种非线性关系,通过随机森林训练一个钻石价格预测模型。
训练集上的均方误差和决定系数分别为: 61045.1346019 0.996134371615
测试集上的均方误差和决定系数分别为: 330990.263428 0.978793607326
从均方误差和决定系数来看,随机森林提升了预测性能。决定系数超过了97%。
5研究结果
近年来可视分析技术越来越成熟,分析者可以直观地从图像中分离出自己想要的信息。从本案例的研究结果可见,分析者可以使用Python语言,并利用Python相关的各种科学计算和可视化库,从复杂繁多的数据中提取出有用的数据,用形象的图形、图像来表达,这是语言所远远不能達到的。
本文主要基于Matplotlib图形库结合Seaborn和sklearn的Linear Regression和Random Forest Regressor分别训练线性和非线性回归模型。实现了根据不同的参数预测钻石价格。
参考文献:
[1] 洪文学,王金甲.可视化和可视化分析学[J].燕山大学学报,2010,34(2):95-99.
[2] Ware C.Information visualization:perception for design[M].Elsevier,2012.
[3]Matplotlib.sourceforge.net. Using Matplotlib. http://matplotlib.sourceforge.net/tutorial.html,2005-11.
[4] M陈革, 冯大辉译.ark Lutz & David Ascber. Python 语言入门[M]. 北京: 中国电力出版社, 2001.
[5] 肖明魁.Python在数据可视化中的应用.电脑知识与技术,2018(11).
[6] Python plotting Matplotlib 2.0.2 documentation[EB/OL]. http://matplotlib.org/, 2017-05-11/2017/09-15.
[7] 段书勇.Python数据可视化(-)Seaborn介绍. https://www.jianshu.com/p/5ff47c7d0cc9.
【通联编辑:光文玲】