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

简介:

本节书摘来自异步社区《Python和HDF 5大数据应用》一书中的第1章,第1.1节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 简介

我刚毕业那会遇到过一个严重的问题——一部国家公认的等离子体研究设备花了整整一周时间收集的上千万个数据的值不太对劲。

比正常情况小了约40个数量级。

我跟我的咨询师挤在他的办公室,在一台崭新的G5 Mac Pro上运行我们的可视化软件,试图搞明白哪里出了问题。从机器中获得的数据是正确的,实验所使用的数字转换器提交的原始数据看上去没有问题。我在Thinkpad笔记本上用IDL语言编写了一个巨大的脚本将原始数据转换成可视化软件能够识别的文件。这些文件的格式十分简单:一个简短的定长头部后面加上一堆二进制浮点数据。我还另外又花了一个小时写了一个程序来验证这些文件,它们也没问题。但当我将所有这些在IDL中看上去如此优雅的数据导入可视化软件以后,它们看上去就像是一锅粥,毫无特色、杂乱无章,所有的值大约都只有10−41左右。

最后我们发现了问题所在:数字转换器和我的Thinkpad使用了“little-endian”格式,而G5 Mac使用了“big-endian”格式。一台机器输出的原始数据值无法被另一台机器正确地读入,反过来也一样。当时我所有想法中最有礼貌的一句是:这也太笨了。哪怕最后发现此类问题是如此司空见惯以至于IDL专门提供了一个SWAP_ENDIAN函数来处理也并没有令我的情绪变得更好。

在此之前我从不关心数据是如何存储的。这个事件以及其他一些类似事件改变了我的想法。作为一名科学家,我最终意识到,我们不仅需要选择数据的组织和存储,同时也需要选择数据的通信方式。设计优雅的标准格式不仅让每个人的生活变得简单(消除了上面愚蠢而又浪费时间的“endian”问题),而且也使得全世界都能共享这些数据。

1.1 Python和HDF5

在Python的世界里,人们在数值类型大数据的存储机制上进行选择时,迅速对层次性数据格式第5版(Hierarchical Data Format version 5,HDF5)达成了共识。当数据量越来越大的时候,数据的组织就变得越来越重要。命名数据集(第3章)、层次性分组(第5章)和用户自定义元数据“特征”(第6章)等HDF5特性对于数据分析的过程极为必要。

HDF5这种结构化的自我描述格式跟Python相辅相成。目前HDF5已经有两大开发成熟、功能丰富的Python接口模块h5py和PyTables,在两者之上还有许多为特定用途开发的小型封装模块。

1.1.1 数据和元数据的组织

这是一个利用HDF5的结构化能力帮助应用程序的简单例子。不要太担心文件结构和HDF5使用API等方面的细节,后续章节自会一一解释。就把这个当成是一次HDF5尝鲜。如果你想要运行这个例子,你需要Python 2并安装NumPy(第2章)。

假设我们有一个NumPy数组,它代表了某次实验获取的一些数据:

  

screenshot

假设这些数据来自某个气象站十秒一次的温度采样。为了让这些数据有意义,我们还需要记录采样的时间间隔“delta-T”。目前我们把它放到一个Python变量中。

  

screenshot

同时我们还需要记录第一个数据获取的时间起点,以及这些数据来自15号气象站:

  

screenshot

我们可以用一个简单的NumPy内建函数np.savez来将这些数据存入磁盘,该函数将每个数据以NumPy数组的格式保存并打包进一个指定名字的zip文件:

  

screenshot

我们可以用np.load从文件中获取这些数据:

  

screenshot

目前为止一切顺利。但如果每个气象站的数据不止一组怎么办?比如说还要记录一组风速数据?

 

screenshot

再假设我们有不止一个气象站。也许我们可以引入某种命名规范,比如“wind_15”作为15号气象站的风速数据,“dt_wind_15”作为采样时间间隔。又或许我们可以使用多个文件……

作为对比,让我们看看如果用HDF5来存储会是怎样:


screenshot

这个例子演示了HDF5的两个杀手级特性:层次性分组和特征。组就像文件系统里的目录,使你可以将相关的数据集保存在一起。本例将来自同一个气象站的温度和风速分别保存在名为“/15”和“/20”的组里。特征允许你在数据上直接附加描述性的元数据。一旦你将这个文件给其他同事,他们可以轻易发现这些信息并明白这些数据的意义:

screenshot

1.1.2 大数据复制

人们正在越来越多地将Python用于大数据集的快速可视化项目,在大规模计算中将Python作为一种高层粘合性语言来协助那些编译型语言如C和FORTRAN。现在一个数据集动不动就是上千GB甚至TB的数据需要处理,HDF5自身最大可以支持EB的规模。

大多数的机器不可能将如此大规模的数据集直接导入内存。HDF5最大的优点之一在于支持子集分片和部分I/O。让我们看一下之前创建的拥有1024个元素的“temperature”数据集:

  

screenshot

这里的dataset对象是一个HDF5数据集的代理对象。它支持数组切片操作,NumPy用户可能会觉得很熟悉:

  

screenshot

记住,真正的数据保存在磁盘上,切片操作会去寻找合适的数据并读入内存。这种形式的切片利用了HDF5底层的子集分片功能,所以非常迅速。

HDF5另一个伟大之处在于你可以控制存储的分配。当你创建了一个全新的数据集,除了一些元数据以外它不会占用任何空间,默认情况下仅当你真的需要写入数据时才会占用磁盘上的空间。

比如下面这个2TB的数据集,你可以在几乎任何计算机上创建出来:

 

 .screenshot

虽然还没有为其真正分配任何存储,但整个数据集的空间对我们都是可用的。我们可以在数据集的任何地方写入,而磁盘上只会占用必要的字节:

 

 screenshot

在存储非常昂贵的情况下,你甚至可以对数据集进行透明压缩(第4章):

 

 screenshot

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2天前
|
消息中间件 分布式计算 大数据
大数据组件之storm简介
大数据组件之storm简介
20 2
|
2天前
|
数据可视化 大数据 Python
python大数据分析处理
python大数据分析处理
7 0
|
2天前
|
程序员 Python
python lambda表达式表达式详解及应用
python lambda表达式表达式详解及应用
20 0
|
2天前
|
机器学习/深度学习 人工智能 大数据
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
|
2天前
|
中间件 Python
中间件应用Django Middleware(Python)
中间件应用Django Middleware(Python)
28 6
|
3天前
|
分布式计算 监控 数据挖掘
MaxCompute的应用
【5月更文挑战第7天】MaxCompute的应用
23 8
|
4天前
|
人工智能 Python
Python中的反对称矩阵:理论、应用与代码实践
Python中的反对称矩阵:理论、应用与代码实践
22 1
|
4天前
|
算法 Python
打造高效生产排程:Python在APS解决方案中的应用
打造高效生产排程:Python在APS解决方案中的应用
15 2
|
4天前
|
数据采集 机器学习/深度学习 人工智能
Python可以应用于多个领域
Python广泛应用于Web开发(Django, Flask)、数据科学(NumPy, pandas, scikit-learn)、人工智能&机器学习、自动化运维测试、游戏(Pygame, Panda3D)、网络爬虫、数据挖掘及科学工程计算。其丰富的库支持使其在各领域都表现出强大功能。
15 0
|
5天前
|
数据采集 数据可视化 数据挖掘
Python在数据分析中的强大应用
【5月更文挑战第5天】Python在数据驱动时代成为数据分析师首选工具,得益于其丰富的数据科学库(如NumPy、Pandas、Matplotlib、Seaborn和SciPy)。这些库支持数据清洗、探索、建模和可视化。Python在数据清洗、文本分析、Web数据抓取和大数据处理等方面有广泛应用,并因其易学性、强大社区和广泛适用性而备受青睐。未来,Python在数据分析领域的角色将更加重要。

热门文章

最新文章