处理数据,大数据甚至更大数据的 17 种策略
作者头像
  • 微型计算机杂志
  • 2020-09-25 14:20:31 8

如何高效处理大数据?

本文最初发布于 Towards Data Science 博客,并经原作者 Jeff Hale 授权,由 InfoQ 中文站翻译并分享。处理大数据可能会遇到不少挑战。没有人喜欢看到“内存不足”的错误提示,也没有人愿意长时间等待代码运行。甚至有些人可能不愿意使用 Python 来处理大数据问题。如果你面临这些问题,请不要气馁!本文将为你提供一些实用技巧,并介绍一些即将推出的库,帮助你更高效地处理大数据。同时,还将为你提供解决方案,解决那些无法适应内存限制的代码问题,所有这一切都会在 Python 中实现。

Python 是最流行的科学和数值计算编程语言。对于数据清洗和探索性数据分析而言,Pandas 是最受欢迎的工具。

利用 Python 和 Pandas,你可以处理比 Microsoft Excel 或 Google Sheets 更多的数据。虽然 SQL 数据库在数据存储方面非常流行,但 Python 生态系统在表达性、测试性、可再现性以及快速执行数据分析、统计和机器学习方面具有更多优势。

然而,如果你在本地工作,Pandas 能够处理的数据量将受到你机器的物理内存限制。而如果你在云端工作,更多的内存需求则意味着更高的成本。无论你的代码在哪里运行,你都希望操作尽可能快,以便高效完成任务。

基础技巧

首先,我们需要一些基础技巧,以确保代码既高效又简洁。以下是三个有助于编写干净、快速代码的良好实践:

  1. 避免嵌套循环:嵌套循环通常会导致多项式时间的计算。尽量使用列表推导或字典推导来替代循环,因为它们通常更快。
  2. 使用向量化操作:在 Pandas 中,利用内置函数进行向量化操作,比逐行调用函数要快得多。
  3. 合理使用 Pandas 方法:在处理数据时,避免使用 applymap、iterrows、itertuples 等可能导致性能下降的方法。优先使用 replace 方法来替换数据,因为它效率更高。

这些技巧不仅适用于小规模数据集,也能在大规模数据集中发挥作用。当然,对于非常庞大的数据集,这些技巧可能需要进一步调整。

处理大规模数据(约数百万行)

如果你处理的是数百万行的数据,以下几点可以帮助你更高效地操作数据:

  1. 数据预处理:在构建模型之前,先用数据子集进行探索和清理,建立基准模型。这可以节省大量时间和资源。
  2. 选择性加载数据:在读取 DataFrame 时,只加载你需要的列,以减少数据输入量。
  3. 优化数据类型:合理使用数据类型,将数值列转换为更小的 dtypes,将低基数列转换为分类类型。
  4. 并行化处理:利用 Scikit-learn 的并行化功能,充分利用多核处理器,提高模型训练速度。
  5. 数据持久化:将 Pandas DataFrame 保存为 Feather 或 Pickle 格式,以加快读写速度。
  6. 使用 pd.eval 加速操作:将常用代码以字符串形式传递给 pd.eval 函数,可以显著提高操作速度。

处理超大规模数据(约数千万行以上)

对于更大规模的数据集,以下方法可以进一步提升处理效率:

  1. 使用 Numba:Numba 是一个高性能的 Python 编译器,特别适合进行数学计算。通过 @numba.jit 装饰器,可以显著提高代码运行速度。
  2. 使用 Dask:Dask 可以将数据集分割成多个块,然后并行处理。它还支持跨多台机器进行并行化数据操作。
  3. 利用 SciPy 稀疏矩阵:当数据主要为零或缺失值时,可以将列转换为稀疏类型,从而节省内存。

未来展望

以下几种方法是截至 2020 年年中较为前沿的技术,尽管可能存在配置和早期 API 的问题,但对于本地 CPU 工作环境来说,它们可能还不太适用。但这些方法值得关注:

  1. Modin:它模拟了 Pandas 的一部分功能,通过 Apache Arrow 或 Dask 提高大型数据集的操作速度。
  2. Jax:这是一个由 Google 开发的前沿工具,可以在 CPU、GPU 或 TPU 上运行,并能显著提升操作速度。
  3. Rapids cuDF:这是一个由 NVIDIA 开发的开源 Python 包,能够在 GPU 上使用 Apache Arrow,并提供类似 Pandas 的 API,支持多 GPU 并行处理。

其他注意事项

在处理大数据时,还有一些额外的技巧可以帮助你优化代码性能和存储:

  1. 计时操作:使用 %time 或 %%timeit 命令来测量代码运行时间,以确保优化效果。
  2. 存储管理:注意存储大数据的方式,避免使用不适合大文件的存储服务,如 GitHub 和自动备份服务。

希望本文提供的技巧和工具能够帮助你更高效地处理大数据。

    本文来源:图灵汇
责任编辑: : 微型计算机杂志
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
数据甚至策略处理17
    下一篇