核外数据分析选项

机器算法验证 r sas 大数据
2022-02-14 12:50:00

我已经专业使用 SAS 将近 5 年了。我将它安装在我的笔记本电脑上,并且经常需要分析包含 1,000-2,000 个变量和数十万个观察值的数据集。

我一直在寻找 SAS 的替代品,让我能够对类似大小的数据集进行分析。我很好奇其他人在这种情况下使用什么。这当然不是今天使用的“大数据”。我的数据集也不够小,无法保存在内存中。我需要一个可以将算法应用于存储在硬盘驱动器上的数据的解决方案。这些是我调查无济于事的事情:

  1. R - BigMemory 可以创建存储在内存之外的矩阵,但元素必须是相同的模式。我处理字符和数字之间几乎 50/50 的数据。FF包越来越接近我的需要,但我不太明白哪些程序与之兼容。我认为支持有点有限。
  2. Pandas - 我对 R 的 Pythonic 替代方案感到非常兴奋。但是,它也必须将所有数据保存在内存中。
  3. 革命 R - 这个显示了相当多的希望。我的家用电脑上有一份副本(如果您注册 Kaggle,则免费),但尚未将其作为 SAS 的可行替代品进行测试。对作为 SAS 替代品的 Revolution R 的评论非常受欢迎。

谢谢

更新 1

编辑补充说,我正在寻找人们成功使用的现实生活中的实用解决方案。在大多数情况下,SAS 让我可以浏览大文件,而不必担心内存限制。然而,SAS 是如何实现的,他们想出了如何使内存管理对用户透明。但是,我怀着沉重的心情使用 SAS 来完成我的工作(我必须这样做),并且会喜欢一个 FOSS 替代方案,它允许我处理“大”数据,而不必过分考虑数据的位置特定时间(在内存或磁盘上)。

我遇到的最接近的东西是 R 的 FF 包和 Python 即将推出的名为Blaze的东西。然而,这些问题已经存在多年,那么分析师们在此期间都在做什么呢?他们如何处理与内存限制相同的问题?提供的大多数解决方案似乎是:

  • 获得更多内存——这不是一个好的解决方案,imo。很容易找到可以超过 RAM 但仍适合硬盘驱动器的数据集。此外,工作流程必须适应探索性数据分析期间创建的所有结构。
  • 对数据进行子集化——这适用于探索,但不适用于最终确定结果和报告。最终,在子集上开发的任何过程都必须应用于整个数据集(无论如何,在我的情况下)。
  • 对数据进行分块——这是我想从实际实施此工作流程的人那里了解更多信息。它是如何完成的?用什么工具?能否以对用户透明的方式完成?(即,创建一些磁盘上的数据结构,框架负责后台的分块)。
4个回答

如果您的最大记录数为 500,000 x 2,000 个变量,我会在笔记本电脑的 RAM 上多花一点钱,然后就可以完成了。如果您有 16GB,您可能可以直接将您描述的数据集读入 R。到那时,您将能够做得更多-而且非常快..但是您说这不是一个选择,所以:

查看 R 的基于 SQL 的包。这些允许您连接到外部数据库并通过 SQL 访问这些表。由于 SQL 非常通用(并且由于 R 是开源的),因此如果您更换工作或失去对 SAS 的访问权限,您的代码不会丢失。最容易设置的外部数据库是,RSQLite但迄今为止最快的是MonetDB.R速度测试

您所说的问题可能有一些很好的解决方案,我猜几乎所有这些都涉及 R ;)

也许这与您针对的应用程序/问题及其特征无关,而更多地与您正在使用的算法和变体有关。更具体地说,为了处理大数据,出现了许多基于流行算法的随机梯度下降的变体,例如 SVM,它们能够处理大数据。

Scikit 支持其中一些算法(SVM、kNN、kmeans,...)。我想这个漂亮的图表可以帮助你快速弄清楚scikit是否对你有意义。

希望有帮助

注意:以下是对zelazny7评论的回复

现在我明白你了。您正在寻找的是pandas看看谈话部分。有一个简报比较了 Panda 的工作流程和 panda 的工作流程。Panda 允许您导入不同格式的数据并通过HDF5表集成处理 bgu 文件。此外,您可以连接 Scikit。

您似乎已经对 SAS 感到满意,并且您的数据集小到可以放入 RAM,但您的笔记本电脑可能无法放入足够的 RAM。如果您不介意坚持使用 SAS,那么您可以连接到在具有大量 RAM 的计算机上远程运行的 SAS 吗?我不知道它是如何工作的,但这些链接可能会让你开始。

使用 Pandas 或 R 还有其他重要原因,但我认为您不必担心内存限制。如果您的笔记本电脑无法容纳足够的内存,请在其他地方运行 Python 或 R 实例并使用 SSH、iPython Notebook 或 RStudio 连接。

Graphchi非常出色,可以处理庞大的数据集。使用起来有点麻烦,但它可以处理图形和非图形数据。