「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析( 二 )


  • 可视化:直接支持 , 单线通常就足够了 。
  • 用户友好的API:只需处理一个数据集对象 , 制表符补全和docstring可以帮助你:ds.mean , 类似于Pandas 。
  • 精益:分成多个包
  • Jupyter集成:vaex-jupyter将在Jupyter笔记本和Jupyter实验室中提供交互式可视化和选择 。

  • 「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    打开100GB数据集只需0.052秒
    第一步是将数据转换为内存可映射文件格式 , 例如Apache Arrow , Apache Parquet或HDF5 。 在此处也可以找到如何将CSV数据转换为HDF5的示例 。 数据变为内存可映射格式后 , 即使在磁盘上的大小超过100GB , 也可以使用Vaex即时打开(只需0.052秒!):
    「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    为什么这么快?当使用Vaex打开内存映射文件时 , 实际上没有进行任何数据读取 。 Vaex仅读取文件的元数据 , 例如磁盘上数据的位置 , 数据结构(行数、列数、列名和类型) , 文件说明等 。 那么 , 如果我们要检查数据或与数据交互怎么办?打开数据集会生成一个标准的DataFrame并对其进行快速检查:
    「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    注意 , 单元执行时间太短了 。 这是因为显示Vaex DataFrame或列仅需要从磁盘读取前后5行数据 。 这将我们引向另一个重点:Vaex只会在需要时遍历整个数据集 , 并且会尝试通过尽可能少的数据传递来做到这一点 。
    无论如何 , 让我们从极端异常值或错误数据输入值开始清除此数据集 。 一个很好的方法是使用describe方法对数据进行高级概述 , 其中显示了样本数、缺失值数和每一列的数据类型 。 如果列的数据类型为数字 , 则还将显示平均值、标准偏差以及最小值和最大值 。 所有这些统计信息都是通过对数据的一次传递来计算的 。
    「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    使用describe方法获得 DataFrame 的高级概览 , 注意这个 DataFrame 包含 18 列数据 , 不过截图只展示了前 7 列 。
    该describe方法很好地体现了Vaex的功能和效率:所有这些统计数据都是在我的MacBook Pro(2018款15英寸 , 2.6GHz Intel Core i7 , 32GB RAM)上用不到3分钟的时间计算出来的 。 其他库或方法都需要分布式计算或拥有超过100GB的云实例来执行相同的计算 。 而使用Vaex , 你所需要的只是数据 , 以及只有几GB RAM的笔记本电脑 。
    查看describe的输出 , 很容易注意到数据包含一些严重的异常值 。
    首先开始检查上车地点 。 消除异常值的最简单方法是简单地绘制上下车地点的位置 , 并直观地定义我们要集中分析的NYC区域 。 由于我们正在使用如此大的数据集 , 因此直方图是最有效的可视化效果 。 使用Vaex创建和显示直方图和热力图的速度很快 , 而且图表可以交互!
    「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    一旦我们通过交互决定要关注的NYC区域 , 就可以简单地创建一个筛选后的DataFrame:

    「Python」0.052秒打开100GB数据?这个Python开源库这样做数据分析
    本文插图
    关于上面的代码 , 最酷的事情是它需要执行的内存量可以忽略不计!在筛选Vaex DataFrame时不会复制数据 , 而是仅创建对原始对象的引用 , 在该引用上应用二进制掩码 。 用掩码选择要显示的行 , 并将其用于将来的计算 。 这将为我们节省100GB的RAM , 而像今天许多标准数据科学工具却要复制数据 。


    推荐阅读