《Python和HDF 5大数据应用》——2.2 设置

2.2 设置

背景就介绍到这里。现在让我们开始使用Python!不过,用哪个Python?

2.2.1 Python2还是Python3

Python社区正在经历一场大变。多年以来Python已经积攒了一大堆功能和错误,比如不遵守命名规范的模块或者字符串处理上的缺陷等。为了解决这些问题,人们决定启动Python 3,从Python 2过去的错误中释放出一个全新的Python主版本。

Python 2.7将是最后一个2.X的发行版。虽然为了修理bug,对它的更新还会继续持续一段时间,但是新的Python代码开发工作将只在3.X上进行。NumPy、h5py、PyTables以及其他很多模块现在都支持Python 3。虽然(我认为)对新手直接推荐Python 3还有些操之过急,但未来的趋势却是已经十分明显。

目前来说,两大版本的Python还将同时存在一段时间。因为Python社区的大多数用户都已经习惯了Python 2,本书中的例子也都是以Python 2写就。两大版本在大多数地方都仅有细微差别。比如,Python 3中print的格式是print(foo),而不是print foo。在本书的任何地方,只要出现由于Python版本差异导致的不一致(主要是有关字符串类型和某些字典形式的方法),都会在文本中加以标明。

将Python 2代码“移植”到Python 3并不难,毕竟都是Python。Python 3中一些最有价值的功能其实已经存在于Python 2.7中了。有一个免费工具(2to3)可以自动完成大部分改动,比如将print语句转换成print()函数调用。你可以在http://www.python.org 查阅移植手册(以及2to3 工具)。

2.2.2 代码示例

大多数代码示例都将遵循下面的形式:

或者是下面这样更加简单的形式(得益于Python会默认打印出对象):

以>>>开头的行代表Python的输入(>>>是Python的默认提示符),其余行代表输出。在某些较长的代码样例中,如果没有显示程序的输出,那么为了清晰起见,我们会略去>>>。

需要在命令行执行的样例会以Unix风格的“$”提示符开头:

最后,为了避免样例过于冗杂,大多数代码都默认你已经导入了下面的模块:

2.2.3 NumPy

“NumPy”是世界公认的Python数值型数组模块。本书默认你已经有一定的NumPy经验(当然也包括Python的经验),包括如何使用数组对象。

就算你以前用过NumPy,复习一下NumPy数组的一些基本概念还是有必要的。首先,所有的NumPy数组都有一个固定数据类型“dtype”,由dtype对象表示。下面的例子会创建一个具有10个整型元素的简单数组:

我们可以通过arr.dtype获得数组中数据的类型:

NumPy通过这些dtype对象来获取内存中数据的类型这种底层信息。本例中我们的10元素数组内的数据是4字节(32位)的整型,NumPy称其为int32。在内存的某处有一个40字节长度的区域保存了0到9这10个值。接收这个arr对象的代码可以根据其dtype属性解析这块内存中的实际内容。

提示

上例在你的系统可能打印出dtype(int64)。这意味着你系统中的Python默认的整型长度是64位而非32位。

HDF5使用了类似的类型系统。HDF5文件中每一个“数组”,也就是数据集,都有一个固定的类型对象表示其类型。h5py模块会自动将HDF5类型系统映射为NumPy的dtype,这使得两者之间的数据交换变得简便。第3章会详细介绍这一过程。

数组切片是NumPy的另一核心功能。这意味着可以对NumPy数组的局部进行访问。下例会抽取arr数组的前4个元素:

 

你还可以指定切片中每两个点之间的距离:

在使用HDF5时,我们也会借用这样的“切片”格式来读取一个数据集的部分数据。

在NumPy的世界里,切片以一种高明的方式实现:新创建的数组引用原始数组中的数据而不是另外复制一份。比如,下面的out对象就是原始数组arr的一个视图,我们可以做这样的测试:

这意味着切片操作将会非常迅速。但如果你需要修改切片数组而又不希望这个修改影响原始数组时,就必须显式进行复制:

警告

忘记在修改切片数组前进行复制是一个常见的错误,尤其是对于那些习惯了IDL的人来说。如果你是NumPy新手,你需要特别小心!

幸好HDF5数据集的“切片”并不是这样。当你读取文件时,由于数据保存在磁盘上,你得到的始终是一个复制。

2.2.4 HDF5和h5py

我们将会通过“h5py”模块来使用HDF5。该模块包含了文件、组、数据集以及特征等HDF对象的上层封装类,同时还包含了HDF5的C语言数据结构和函数的底层封装类。本书中的样例假定h5py的版本是2.2.0或更高,你可以从http://www.h5py.org 获取。

值得注意的是h5py并不是唯一一个跟HDF5打交道的常用模块。PyTables(http://www.pytables.org )是一个基于HDF5的科学数据库模块并增加了数据集索引和额外的类型系统。不过我们这里只关注原生HDF5,所以我们将只讨论h5py,但我强烈推荐你去调查一下PyTables,看看它有没有什么吸引你的功能。

如果你使用Linux,最好用包管理器安装HDF5标准库。Windows上,你可以从http://www.h5py.org 下载安装程序或下载某个自带HDF5/h5py的Python安装包,如PythonXY,Continuum Analytics公司提供的Anaconda,或者Enthought公司提供的Python安装包等。

2.2.5 IPython

如果你想用Python进行大规模分析或开发,那么除了NumPy和h5py/HDF5以外,IPython也是一个必需的组件。IPython最基本的功能是一个可以增添如命令历史和TAB补全等特性的解释器shell,可用于替换Python。除此之外它还具有如并发处理、MATLAB风格的记事本等很多额外的功能。

想要了解本书中所提到的特性最好的方法就是打开IPython提示符,然后输入本书的样例。光TAB补全这一个功能就很不错了,因为它能够让你快速查阅模块和对象的特征。h5py模块在设计上就充分考虑了这种可查阅能力。比如,如果你需要查看File对象上具有哪些属性和方法(2.4节),输入h5py.File,然后按TAB键:

如果需要获得某个属性或方法更多的信息,只需要在其名字后面使用“?”即可:

提示

IPython默认会在一个特殊的隐藏变量中记录你语句的输出。一般来说这没什么问题,但是如果它记录了某个你认为已经丢弃的HDF5对象,或者一个耗费大量内存的大数组,那它也许就会让你大吃一惊。你可以将IPython的配置项cache_size设置为0来关闭这一功能。详情请见http://ipython.org中的文档。

2.2.6 时间和优化

我们用Python内置的timeit模块来进行性能测试。相关样例会默认你已经导入了timeit模块,如下所示:

timeit函数需要一个可执行命令(字符串或可执行对象)和一个可选参数指定其运行次数。然后它会打印出执行该命令花费的总时间。在下面的例子里,我们将执行5次time.sleep:

IPython有一个类似的内建“魔法”函数%timeit,它可以多次执行给定的语句并报告最短执行时间:

考虑到普通的timeit函数是由Python标准库提供的,我们在本书中将只使用普通的timeit函数。

既然人们用HDF5处理的一般都是大数据集,那么性能就是一个不得不考虑的问题。不过你会注意到本书对于性能优化和性能测试的讨论将不会深入到缓存命中、数据转换率等细节。h5py模块的设计将所有这些细节都交给HDF5掌管。开发者们在HDF5性能调优上凝结了上千人几年的心血,已经达到了可能的极致。

作为一个应用程序开发者,在性能上你能做的最好的事就是明智地使用API并让HDF5来做背后的工作。下面是一些建议:

1.不要优化任何东西,除非存在可以验证的性能问题。在改变任何东西之前先仔细隔离可能导致错误行为的代码部分。

2.先从简单直观的代码开始,充分利用API提供的功能。比如,当你需要遍历一个文件中所有的对象时,应该使用HDF5的Visitor功能(63页,用Visitor模式多级遍历)而不是用你自己粗制滥造的方法。

3.首先考虑算法上的改进。比如,在写入一个数据集(见第3章)时,每次写入一个合理大小的块而不是一个值一个值地写。这使得HDF5可以充分利用文件系统。

4.确保你使用了正确的数据类型。比如你正在运行一个计算密集型程序,它的功能是从文件中读取浮点数,如果计算只要求单精度,那么你最好使用双精度浮点。

5.最后,勇于在h5py邮件列表、NumPy/Scipy邮件列表、Stack Overflow或别的社区网站上提问。这些年来已经有无数人在使用NumPy和HDF5,大多数的性能问题都有一个已知的解决方案。Python社区欢迎你。

时间: 2024-09-08 17:40:35

《Python和HDF 5大数据应用》——2.2 设置的相关文章

《Python和HDF 5大数据应用》——第1章 简介 1.1 Python和HDF5

第1章 简介 我刚毕业那会遇到过一个严重的问题--一部国家公认的等离子体研究设备花了整整一周时间收集的上千万个数据的值不太对劲. 比正常情况小了约40个数量级. 我跟我的咨询师挤在他的办公室,在一台崭新的G5 Mac Pro上运行我们的可视化软件,试图搞明白哪里出了问题.从机器中获得的数据是正确的,实验所使用的数字转换器提交的原始数据看上去没有问题.我在Thinkpad笔记本上用IDL语言编写了一个巨大的脚本将原始数据转换成可视化软件能够识别的文件.这些文件的格式十分简单:一个简短的定长头部后面

《Python和HDF 5大数据应用》——1.2 HDF5到底是什么

1.2 HDF5到底是什么 HDF5是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型. 它跟SQL风格的关系型数据库区别相当大,HDF5在组织结构方面有一些特殊的技巧(第8章中有一个例子).如果你需要在多个表上保持关系,或者想要在数据上进行JOIN,那么一个关系型数据库可能更适合你.又或者你需要在一台没有安装HDF5的机器上读取一个小型的1维数据集,那么CSV这样的文本格式是更合理的选择. 但如果你需要处理多维数组,对性能有非常高的要求,需要在数据集上

《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件

2.4 你的第一个HDF5文件 在我们研究组和数据集之前,让我们先看一下File对象能做些什么,来作为你进入HDF5世界的起点. 这里有一个最简单的使用HDF5的程序: File对象是你的起点.它提供方法使你能够在文件内创建新的数据集或组,另外还有一些一目了然的属性如.filename和.mode等. 说到.mode,HDF5文件支持Python对普通文件的读写模式: 还有一个额外的HDF5专有模式用于保护你不会意外覆盖某个已存在的文件: 如果一个同名文件已经存在则该函数会失败,否则会创建一个新

《Python和HDF 5大数据应用》——第2章 开始使用 2.1 HDF基本原理

第2章 开始使用 2.1 HDF基本原理 在迫不及待跳进Python代码样例之前,我们有必要花几分钟时间着重关注一下HDF5自身是如何组织的.图2-1展示了HDF5的各种逻辑层.蓝色表示该层处于HDF5标准库内部:绿色则代表使用HDF5的客户软件. 大多数客户代码,包括Python模块h5py和PyTables都使用C API(HDF5自己就是用C写成的).在简介里我们已经知道HDF5的数据模型包含三大公开抽象:数据集(第3章).组(第5章)和特征(第6章).C API(以及其上的Python代

谷歌开源 Python Fire;一张图读懂 Python、R 的大数据应用等 | AI 开发者头条

▲ 内容预览: 谷歌开源 Python Fire NASA 发布 2017-2018 软件目录,供开发者免费使用 一张图看懂大数据中 R 语言的应用 一张图看懂大数据中 Python 的应用 每日推荐阅读 谷歌搜索技术分析,如何一步步实现"不止于关键词"? █ 谷歌开源 Python Fire 昨晚谷歌公布了新的 Python 工具包--Python Fire.它的功能很简单:能从任何 Python 代码生成命令行接口(CLI).开发者面对任意一个 Python 程序,仅需调用 Pyt

详解Python实现服务器之间大数据P2P文件传输效率实例

应用场景介绍 服务器越来越多,需要大规模的部署同一个文件,例如因为方便使用systemtap这个工具定位问题,需要把手上几百台服务器同时安装kernel-debuginfo这个包,原有的方式采用一个源服务器,采用rsync或者scp之类的文件传输方式只能做到一个点往下分发这个文件,这个时候下发的速度就会比较的慢,基于以上原因,我写了一个基于bt协议传输文件的小工具,实际测试,传输到10个机房,70多台机器传输一个240M的这个内核文件,到所有的机器,源采用限速2m/s的上传速度,测试的结果大概只

大数据创新生态体系,引燃新的产业突破与高校转型

理解大数据创新生态体系的战略布局,首先要从数据中国"百校工程"开始. 按照国家<促进大数据发展行动纲要>和<"十三五"国家战略性新兴产业发展规划>决策部署,不难看出,大数据的出发点是数据强国,通过数据整合分析和深度挖掘,发现规律.创造价值,进而推动国家创新驱动发展战略.创造性的落实大数据产业发展战略,高校责无旁贷.只有在探索校企合作新模式和新机制,加快培养大数据产业人才的基础上,才可能真正理解大数据创新生态体系的战略意图. 大数据时代,线上与

大数据如何影响社交媒体指标和Facebook广告策略

如今,社交媒体和大数据之间是如此相互关联,以至于几乎已成为某些圈子的同义词.事实是,大多数专家认为,如今全球90%以上的数据是在过去几年中创建的,其中很大一部分与社交媒体有关. 在这信息的海洋中,超过80%的信息来自非结构化格式,这种格式可能以某种方式与社交媒体联系在一起.由于大数据处理不能以传统方式将大量数据进行排序和分析,因此这种方法已被应用于尝试和了解所有的信息,这是很自然的. 随着从大数据分析获得的知识,营销人员和业务分析师可以更深入地了解他们的目标受众的行为和预期.事实上,大数据和社交

DCon 2015 中国大数据技术嘉年华大会圆满结束

DCon2015中国大数据技术嘉年华11月7日在北京圆满落下帷幕.本届大会由国内最活跃的大数据技术社区--小象社区主办,分为"大数据平台技术"和"大数据行业应用"两个专题,为参会者奉献了10多场精彩的主题演讲. DCon2015大数据技术嘉年华 DCon2015大数据技术嘉年华四大亮点 第一,作为国内首届由技术社区(小象社区)举办,一线大数据技术专家主讲的技术分享大会,DCon2015大数据技术嘉年华在组织形式上有所创新.为了把最前沿的大数据技术和发展趋势分享出来,