如何使用 Python 分析笔记本电脑上的 100 GB 数据

许多组织正试图收集和利用尽可能多的数据,以改进其业务运营方式、增加收入或对周围世界产生更大的影响。因此,数据科学家面对 50GB 甚至 500GB 大小的数据集的情况变得越来越普遍。

但是现在,这些数据集使用起来并不方便。它们可能小到可以装进你日常笔记本电脑的硬盘,也可能大到和 RAM 匹配。因此,它们已经很难被打开和检查,更不用说探索或分析了。

在处理这些数据集时,通常使用 3 种策略。第一个是对数据进行子抽样。它的缺点是显而易见的:可能会错过关键的部分,或者更糟的是,不看全部内容可能会对数据和它表达的事实有所曲解。还有一个策略是使用分布式计算。虽然在某些情况下这是一种有效的方法,但它会带来管理和维护集群的巨大开销。想象一下,必须为一个不在 RAM 范围内的数据集(比如在 30-50GB 范围内)设置一个集群会是什么样子的。对我来说,这似乎难以承受。或者,你可以租用一个强大的云实例,该实例具有处理相关数据所需的足够内存。例如,AWS 提供了具有兆字节 RAM 的实例。在这种情况下,你仍然需要管理云数据存储桶,在每次实例启动时等待从存储桶到实例的数据传输,处理将数据放到云上带来的遵从性问题,并处理在远程计算机上工作带来的所有不便。当然,成本就更不用说了,虽然起价很低,但随着时间的推移,成本往往会越来越高。

在本文中,我将向你展示一种新的方法:只要数据可以被存进笔记本电脑、台式机或服务器的硬盘上,那么这种方法可以让使用几乎任意大小的数据进行数据科学研究更快、更安全、更方便。

    Vaex

Vaex 是一个开源的数据框架库,它可以在与硬盘大小相同的表格数据集上进行可视化、探索、分析甚至机器学习。为此,Vaex 采用了一些概念,如内存映射、高效的核心外算法和延后计算。所有这些都被一个和 pandas 类似的 API 类绑定起来,任何人都可以马上开始使用它。

    十亿出租车分析

为了说明这个概念,让我们在一个数据集上做一个简单的探索性数据分析,这个数据集非常大,可以放入一个典型的笔记本电脑的 RAM 中。在这篇文章中,我们将使用纽约(NYC)出租车数据集,其中包含 2009 至 2015 年之间的超过 10 亿个标志性黄色出租车。数据可以从这个网站下载(https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page),并以 CSV 格式提供。完整的分析可以在这个 Jupyter notebook (https://nbviewer.jupyter.org/github/vaexio/vaex-examples/blob/master/medium-nyc-taxi-data-eda/vaex-taxi-article.ipynb)中单独查看。

    清理街道

第一步是将数据转换为内存可映射文件格式,如 Apache Arrow、Apache Parquet 或 HDF5。将 CSV 数据转换为 HDF5 的示例可以在这里找到(https://nbviewer.jupyter.org/github/vaexio/vaex-examples/blob/master/medium-airline-data-eda/airline-original-data-conversion.ipynb)。一旦数据是内存可映射格式,用 Vaex 打开它是即时的(0.052 秒!),尽管磁盘上的数据超过 100GB:

使用 Vaex 打开内存映射文件只需要 0.052 秒,即使它们超过 100 GB

为什么这么快?使用 Vaex 打开内存映射文件时,实际上没有数据读取。Vaex 只读取文件元数据,如磁盘上数据的位置、数据结构(行数、列数、列名和类型)、文件描述等。那么,如果我们想检查数据或与数据交互呢?打开一个数据集会生成一个标准数据框,检查它的速度是否也很快:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值