数据框(Data Frame)是机器学习中用得最多的一种数据结构,数据框由多行多列组成,每列是同一种数据类型,但不同列的数据类型可以不同(与矩阵类型的区别),类似JDBC编程中数据集对象RecordSet。机器学习很多算法和数据预处理函数都是围绕Data Frame展开,R语言和Python Pandas有深入的支持,就如同MATLAB等科学计算软件以向量/矩阵为中心。在R语言中,既支持向量、矩阵、字符串、列表(List)等常见数据类型,也提供了因子(Factor)数据类型,解决名义变量(例如性别)和有序变量(例如报警等级)在机器学习中的特别处理要求,例如,因子量不能像连续变量那样参与四则运算,在存储效率上Factor比原始的变量类型(特别是字符串)更高。
数据框的基本操作包括:数据框创建、维度信息查看、排序、子集选择/查询、数据集修改、数据集统计/整合等单数据框操作,以及两个数据框的合并,见表2-1。详细的函数列表可以参阅R语言的dplyr包 [1] 和Python Pandas [2] 的备忘清单(Cheat Sheet)。
这些操作函数是数据分析的基础,需要熟练灵活掌握。关于R语言和Python Pandas,已经有很多优秀的图书,例如《R语言实战》 [3] 《R语言核心技术手册》 [4] 《R数据科学》 [5] 和《Python数据科学手册》 [6] ,对于一些高级用法,可以参阅《高级R语言编程指南》 [7] 和《R的极客理想:工具篇》 [8] 。
表2-1 数据框的基本操作
除了base、stats等基础包外,R还提供了dplyr、tidyr、tidyverse、magrittr等包方便数据框的处理。具体函数本节不做重复性的介绍。但有些常用函数需要特别注意,例如,is.na研判NA数值、complete.cases用来判断每行记录数据是否完整、pmax常用来在矩阵求每行的多列的最大值、cumsum是向量的累积求和(可以用来算累积时长)。另外,各种apply函数简洁表达一些循环计算。reshape2包的melt、各种cast函数在一些数据框的处理中经常采用(例如ggplot2包画图时不同类别用不同颜色,通常在数据框中做加工)。
画图是数据分析的一个重要部分。R的基础画图本身就比较丰富,语法结构与经典科学计算软件类似,是一种命令式(Imperative)方式,不同的函数对应不同的图形形式,图形的坐标数据向量作为参数传给函数。ggplot画图体系是一种语法声明式(Declarative)的形式,以数据框为数据源,将不同图形元素或表现与数据框的列关联,实现不同的可视化。Python里面的matplotlib、seaborn包也是命令式的,plotnine是最近发展的一个类似ggplot的包。
《R语言实战》 [3] 对R的基础图形做了详细的介绍,ggplot的介绍可参阅《R数据可视化手册 第2版》 [9] 。无论是基础图形系统还是ggplot2,都可以完成很多复杂或漂亮的图形,中间需要的是技巧、想象力和基础审美观。ggplot的很多配色在《R语言数据可视化之美:专业图表绘制指南》 [10] 中有很好的介绍,在线资源 [11] 有更多的例子。基础图形中有图形边距、坐标轴/坐标刻度显示形式等丰富的属性,巧妙组合可以实现很多可视化效果,唯一的限制只是我们的想象力。