
3.2 图形化数据处理——Matplotlib包的使用
对于单纯的数字来说,光从读数据的角度并不能直观反映数字的偏差和集中程度,因此需要采用另一种方法更好地分析数据。对于数据来说,没有什么能够比用图形来解释更为形象和直观了。
3.2.1 差异的可视化
继续回到表3-2的数据,第二列是各个房屋的价格,其价格并不相同,因此直观地查看价格的差异和偏移程度是较为困难的一件事。
研究数值差异和异常的方法是绘制数据的分布程度,相对于合适的直线或曲线,其差异程度如何,以便帮助确定数据的分布。
【程序3-4】

结果如图3-2所示。

图3-2 房屋价格的偏离展示
【程序3-4】展示了一个对价格的偏离程度的代码实现例子,col1集合是价格的合集,scipy是专门进行数据处理的数据处理包,probplot计算了col1数据集中数据在正态分布下的偏离程度。从图3-2可以看到,价格围绕一条直线上下波动,有一定的偏离,但是偏离情况不太明显。
其中,R为0.9579,指的是数据拟合的相关性,一般0.95以上就可以认为数据拟合程度比较好。
3.2.2 坐标图的展示
通过前面对回归的可视化处理可以看到,可视化能够让数据更加直观地展现出来。同时,可以对数据的误差表现得更为直观。
图3-3展示了一个横向坐标图,用以展示不同类别所占的比重。系列1、2、3分别代表不同的属性,而类别1~6可以看作是6个不同的特例。通过坐标图可以非常直观地看到不同的类别中不同的属性所占的比重。

图3-3 横向坐标图
可以看到,一个坐标图能够对数据进行展示,其最基本的要求是可以通过不同的行或者列表现出数据的某些具体值,不同的标签使用不同的颜色和样式用以展示不同的系统关系。【程序3-5】展示了对于不同目标的数据提取不同的行进行显示的代码。
【程序3-5】

从图3-4可以看到,通过选定不同目标行中不同的属性,可以对其进行较好的衡量,比较两个行之间的属性关系以及属性之间的相关性。不同的目标,即使属性千差万别,也可以构建相互关系图。

图3-4 不同目标属性之间的关系
顺带说一句,本例中采用的数据较少,随着数据增加,属性之间一般呈现一种正态分布,这点请读者自行验证。
提示
运行【程序3-5】后,会生成两幅不同的图,建议读者通过对比代码认真研究其不同。
3.2.3 大规模数据的可视化
对于大规模数据来说,由于涉及的目标比较多,属性特征值也比较多,对其查看更是一项非常复杂的工作,因此,为了更好地理解和掌握大数据的处理,将其转化成可视性较强的图形是更好的做法。
前面对小数据集进行了图形化查阅,现在对现实中的大规模数据进行处理。
数据来源于真实的信用贷款数据,从50 000个数据记录中随机选取200个数据进行计算,每个数据又有较多的属性值。大多数情况下,数据是以CSV格式进行存储的,pandas包同样提供了相关读取程序。具体代码见【程序3-6】。
【程序3-6】

从【程序3-6】可以看到,首先使用filePath创建了一个文件路径,用以建立数据地址。之后使用pandas自带的read_csv读取CSV格式的文件。dataFile是读取的数据集,之后使用iloc方法获取其中行的属性数据,scatter是做出分散图的方法,对属性进行画图。最终结果如图3-5所示。

图3-5 大数据集中不同目标属性之间的关系
可以看到,数据在(0,0)的位置有较大的集合,表明属性在此的偏离程度较小,而几个特定点是偏离程度较大的点。这可以帮助读者对离群值进行分析。
提示
在【程序3-6】出现了两幅图,请读者自行分析。
下面继续对数据集进行分析。【程序3-5】和【程序3-6】让读者看到了对数据的同一行中不同的属性进行处理的方法,如果要对不同目标行的同一种属性进行分析,那么如何做呢?请读者参阅【程序3-7】。
【程序3-7】

【程序3-7】中对数据进行处理,提取了200行数据中的第10个属性,并对其进行判定,单纯的判定规则是根据均值对其区分,之后计算判定结果,如图3-6所示。

图3-6 大数据集中不同行相同属性之间的关系
通过图3-6可以看到,属性被人为地分成两部分,数据集合的程度也显示了偏离程度。如果下一步需要对属性的离散情况进行反映,那么应该使用【程序3-8】。
【程序3-8】

此段程序中,离散的数据被人为地加入了离散变量,具体显示结果请读者自行完成。
提示
读者可以对程序的属性做出诸多的抽取,并尝试使用更多的方法和变量进行处理。