大数据分析与应用实战:统计机器学习之数据导向编程
上QQ阅读APP看书,第一时间看更新

1.4.1 Python语言原生数据对象处理

接下来介绍Python语言的原生数据对象与衍生数据对象,并与R语言数据对象作对比。如同前面所介绍的R语言原生数据对象,Python也是由内置的数据对象——列表(list)、元组(tuple)、字典(dict)与集合(set)等,再生成各套件(或模块)中所定义的衍生数据对象,例如,numpy模块中的n维数组ndarray结构对象,pandas模块中的一维序列Series对象,以及二维数据集DataFrame对象。

实际演练Python编程前,读者请注意Python语法的明显特征是运用句点(.)运算符,取用某类对象所具有的性质(或称属性)以及方法。有关类别、对象、属性与方法等定义,请参考1.6节编程范式与面向对象概念。

Python原生数据对象中列表可能是最基本的结构,它是长度不定、内容可以变更的(mutable)有序对象(ordered collection),用户可运用中括号[]或list()函数来创建列表对象,并以下列方式进行处理。

上面的程序代码也是直接输入在Python语言壳层(shell)中命令提示字符>>>,或者Python的交互式直译器IPython控制台In[x]:的后面(x是同一次对话输入指令的流水号),再按Enter键执行命令;或者输入在集成开发环境(Integrated Development Environment, IDE)Spyder的程序代码编辑区中,再往控制台(可选择配置原生壳层或IPython控制台)送出执行。

Python语言基本列表的许多应用场景类似R语言中的向量c(),不过进阶的嵌套列表(nested list)可以生成R语言中的矩阵与数组,而且Python的列表可以混放不同类型的元素,此点与R语言向量不同。总结来说,Python列表可以生成高维数据结构,且混合存放各类元素;而R语言的向量与列表均为一维结构,只有列表可以混合存放。

元组则是固定长度但内容不可变更的(immutable)有序对象,用户可运用小括号()或tuple()函数来创建元组对象,并可以进行以下的元组操作。

元组不可更改的特性相当重要,当Python衍生数据结构需要这一特性时,其底层的原生数据结构通常是元组,例如,pandas数据集的索引对象。

字典可能是Python最重要的数据对象,常称为哈希图(hash map)和关联矩阵(associative array)。字典有可长可短的键值对(key-value pairs),键与值均须为Python对象,我们可以用大括号{}或dict()函数来创建字典对象,大括号中以冒号:来分隔键与值,例如:

Python语言的字典结构类似R语言的列表,读者可将Python字典中的冒号:想象成R列表中的=。Python还有一种原生的数据对象称为集合,它是独一无二元素所形成的无序对象(unordered collection),因此可将集合视为无键的字典对象。创建集合对象有两种方式:set()函数与大括号{}运算符。

集合对象还有许多方法:a.add()、a.remove()、a.isdisjoint()、a.union()、a.intersection()、a.difference()与a.symmetric_difference()等,其中后四者等同于前面四个集合运算符(|,&,-,^),读者请自行演练。此外,Python语言的各种对象都有许多属性与方法,本书限于篇幅,无法详述。读者应注意开放源码的动态程序语言是会进化的(evolvable),不断有新的套件会与时俱进地出现,因此我们踏上的可能是一段无法终止的学习旅程,这是第四代程序语言的一大特点。