《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
本节书摘来异步社区《数据驱动安全:数据安全分析、可视化和仪表盘》一书中的第3章 ,第3.1节,[美]杰·雅克布(Jay Jacobs)鲍布·鲁迪斯(Bob Rudis) 着 薛杰 王占一 张卓 胡开勇 蒋梦飏 赵爽 译, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.3 读入数据
R语言和Python(特别是pandas)在读取和解析数据结构进行处理时能够处理复杂的数据。R的read.table()、read.csv()、read.delim()函数以及pandas的read_csv()函数几乎覆盖了所有的分隔文件读取的需求,并且为各类劣质的输入文件提供了强大的配置选项。在后续章节将会看到,两种工具都提供了从SQL和NoSQL数据库中提取数据、初始化HDFS大数据和处理非结构数据的良好方法。
合理的分隔是革命性技术
Base R和Python的pandas能阅读包含分隔符的文件,虽然它们不知道分隔符会在什么时候出现,以及分隔符具体是什么,但是,数据科学社区的共识是分隔符应该是逗号分隔值(CSV)或者制表符(tab)分隔值(TSV),绝大多数样本数据集都可以使用其中一种分隔符。CSV格式的完整定义在RFC 4180(https://www.rfc-editor.org/rfc/rfc4180.txt)中,具有以下高级属性:
每行应只有一个记录。
数据文件可以包含一个可选的标题行。
报头和数据行有用逗号(或制表符)分隔的字段。
每行应该有相同的字段数。
字段中的空格被视为显着标识。
虽然RFC 4180明确规定逗号是一种分隔符,制表符也可以作为分隔符(没有相关的RFC专门说明制表符分隔值)。
安全领域的很多工具都能够导入和导出CSV格式文件。如果打算在类似Hadoop的环境中完成任何工作,你需要熟悉CSV/TSV。
另一种构建格式是JSON(JavaScript Object Notation),该格式广泛应用在服务器和浏览器之间传输数据。正如你将在第8章看到的,JSON格式也是很多NoSQL数据库环境/工具的基础数据格式。JSON格式定义在https://www.rfc-editor.org/rfc/rfc4627.txt,有两个主要结构:
成对的名称/数值集合(一个“字典”)。
一个有顺序的数值列表(一个“数组”)。
相较于CSV和TSV格式,JSON格式保证了更丰富、更复杂的数据表示,而且,JSON正在迅速取代另一种流行的、结构化的数据格式—可扩展标记语言(the Extensible Markup Language,XML)。这是因为JSON更简洁的语法,更易于解析,以及(通常)更强的可读性。虽然XML已经并将继续作为文档表示格式,但你现在应该考虑使用JSON作为你的结构化数据处理格式。
从下载文件的粗略检查中你能看到AlienVault数据有一个相当简单的记录格式,该格式包含使用#作为分隔符的八个字段:
注意,信誉数据文件缺少可选报头,所以上述示例代码手动指定了更有意义的列名称。这是一个可选的步骤,但是它可以在扩展分析时避免混淆,同时,你在后续章节会看到,它可以在你添加额外数据集时建立整个数据帧的一致性。
记录格式的一致性使每种语言的数据有相同的消耗。在每种语言/环境中,我们遵循下面的模式:
读取数据。
分配有意义的列名(如果需要的话)。
使用内置函数来获取数据的结构概述。
阅读前几行数据,通常使用head()函数。
我们会在第4章介绍更多细节。
后续的代码(程序清单3-4和程序清单3-5)是基于前一节的代码,不能保证它们在其他地方正常工作。我们将在本书中延续这种模式,所以你应该按顺序装载和运行每一章的代码。
程序清单3-4
在Canopy内,IPython有一系列函数将数据输出到一个HTML视图格式(见程序清单3-6),该格式可以使程序清单3-5中的head()输出更易阅读(见图3-1)。
最后更新:2017-06-21 18:02:22