核外数据分析选项


18

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

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

  1. R-BigMemory可以创建存储在内存之外的矩阵,但是元素必须处于相同模式。我处理的字符和数字之间几乎是50/50的数据。FF软件包越来越接近我的需求,但是我不太了解哪些程序与之兼容。我认为支持程度有限。
  2. 熊猫-对于R的Python替代方案,我感到非常兴奋。但是,它也必须将所有数据保存在内存中。
  3. Revolution R-这个显示出很大的希望。我的家用计算机上有一份副本(如果您注册Kaggle,则可以免费获得),但尚未对其进行测试以作为SAS的可行替代方案。人们非常赞赏对Revolution R作为SAS替代产品的评论。

谢谢

更新1

编辑时要补充一点,我正在寻找人们成功使用的现实可行的解决方案。在大多数情况下,SAS使我可以浏览大文件,而不必担心内存限制。无论采用哪种SAS,他们都想出了使内存管理对用户透明的方法。但是,我怀着一颗沉重的胸怀使用SAS来完成我的工作(我必须这样做),并且会喜欢使用FOSS替代方案,该方案使我能够处理“大型”数据,而不必太费力地考虑数据在哪里的位置。特定时间(在内存或磁盘上)。

我遇到的最接近的东西是R的FF包,以及Python即将出现的称为Blaze的东西。但是,这些问题已经存在了很多年,因此分析师在此期间一直在做什么?他们如何处理内存限制中的这些相同问题?提供的大多数解决方案似乎是:

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

1
64位计算机上较新版本的Stata对该大小的数据集没有问题(因为现在这些数据很容易在RAM中容纳5GB),但是您对SAS的商业替代产品是否有兴趣,或者您只关注FOSS?
Whuber

1
是的,我正在寻找FOSS解决方案。我同意一个数据集可以容纳5 GB的RAM,但是它还必须处理在探索性数据分析过程中创建的操作和其他数据结构。再加上配备4GB RAM的商用笔记本电脑,操作系统和内存错误所消耗的开销就会很快显示出来。
Zelazny13年

2
@ Zelazny7:现在,在笔记本电脑上添加另一个4Gig应该很便宜。:)
curious_cat

3
另一种选择是将数据存储在数据库中(SQL或其他方式)。通常,分析将只需要一个适合内存的数据子集(变量1:10,而不是1:1000)。如果子集仍大于内存,则可以分块进行分析(一次从数据库1000个观测值中加载数据,最后将结果适当地整理在一起)。
jthetzel

1
如果还没有讨论的话,请务必查看SO上的大数据问题以及CRAN上的高性能计算任务视图,以进行进一步的相关讨论。
jthetzel

Answers:


3

如果您要达到500,000条记录x 2,000个变量的最大值,那么我会在笔记本电脑的RAM上花费更多的钱,并用它来完成。如果您有16GB,则可能可以直接将要描述的数据集读入R。到那时,您将能够做得更多-并且很快。.但是您说那不是一个选择,所以:

查看R的基于SQL的程序包。这些程序包使您可以连接到外部数据库并通过SQL访问这些表。由于SQL非常通用(并且R是开放源代码),所以如果您换工作或失去对SAS的访问权限,您的代码不会丢失。最容易建立的外部数据库是,RSQLite但到目前为止最快的是MonetDB.R速度测试

您提出的问题可能有一些好的解决方案,我想几乎所有的解决方案都涉及R;)


2

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

Scikit支持其中一些算法(SVM,kNN,kmeans等)。我猜想,如果scikit对您完全有意义,那么这张漂亮的图表可以帮助您快速确定。

希望能有所帮助

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

现在我了解你了。您正在寻找的是熊猫。看看会谈部分。有一个演示文稿比较了熊猫的工作流程和熊猫的工作流程。通过Panda,您可以通过HDF5表集成以不同的格式导入数据并处理bgu文件。此外,您可以连接Scikit。


谢谢!这些算法肯定必须on-line在读入内存并写回磁盘的数据块上工作或处理。Scikit很棒,而这实际上是我最喜欢使用的,但是在应用这些算法之前,有哪些工具/工作流程/方法可用于非常必要的探索,修改和数据准备步骤?这些语言可以处理这些步骤,但我实际上是在寻找一个必须在内存不足的情况下解决这些问题的实际示例。
Zelazny13年7

我用您想要的内容(或我认为的!)编辑了我的回复
jpmuc

2

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

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


1

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


1

我最近遇到了SFramesGraphLab Create。这些是Python库,提供了您似乎在Pypi网站上寻找的功能:“ SFrame是可扩展的核心数据框,它使您可以处理大于RAM数量的数据集。在您的系统上。” 因此,可以将其视为Pandas中的数据处理功能和API,而不必先将所有数据存储在内存中。据我所知,SFrame是免费和开源的。另一方面,GraphLab建立在SFrame功能的基础上,以提供用于对存储在SFrame中的数据进行描述性和预测性(机器学习)分析的算法。GraphLab Create创建不是免费/开源的,但是具有免费的演示许可证。无论如何,根据算法的复杂程度,SFrame可能就足够了。


-1

您是否考虑过像Fortran这样的“真实”未解释语言?

到目前为止,建议似乎完全取决于供应商或已得到解释。众所周知,解释型方法在内存密集型应用程序中不好。MatLab的语言级别可能比“ C”高得多,但是C中的内存处理优化可以使其处理100倍的速度快的数据集,而数据集则要大数百万倍。

“ R”和“ Python”都是出色的,高级的,技术丰富的和高度使用的语言。它们也被解释。

您可能考虑使用R-on-Hadoop实例之一。(Rhipe,其他人)这具有能够将R(高级,易于编程)转换为MapReduce / Hadoop指令的优势。Hadoop可以构成一个有趣的穷人多处理集群。

http://www.datadr.org/ <-(Rhipe链接)

Fortran已经开发了数十年。它具有非常有效的内存处理和编译功能。它还具有一些更高级别的库,因此它可以非常简单地完成非常技术复杂的操作。我可能会在MatLab中做一个玩具CFD,但是对于现实的和自编码的东西,我会使用Fortran进行“大铁”处理,而使用MatLab或R这样的东西来表示/汇总数据。没有人会生产解释其“引擎”而不是对其进行编译的商业CFD软件。几家供应商用C或Fortran编码了赚钱的差价合约。SAS最初是用C(链接)编写的。

可访问Fortran和Rhipe。MatLab会花钱,如果我的工作没有花钱,那么我现在将使用R或Python。

更新:
我的观点是“编译”。Python的cython可以从根本上运行相同(基本)代码约1000倍。这意味着您可以拥有大约1000倍大的数据并几乎同时进行处理。使Cython保持清洁可能是一个挑战,但是诸如“ Sage ”之类的工具可以很好地包装它。 据称Rcpp也有类似的功能,但我个人并不知道它的开发水平。

如果您考虑一下,您在科学计算中运行的几乎所有内容(即使是解释性语言)的基础都是编译的Fortran或编译的C。您不会在每次执行EDA时都重新编写代码。您的解释语言在运行时正在调用那些库,尽管效率很低。

顺便说一句,您可能会看一下JMP。它具有易于使用的界面,非常适合进行可视化探索性数据分析(EDA)。


2
您如何使用像fortran这样的编译语言浏览数据?对我来说,解释语言的吸引力在于REPL,它提供了丰富的自省功能,使我能够快速了解​​自己正在处理的内容以及使用我可能不熟悉的新库函数。
Zelazny16年

1
Rcpp开发非常完善(只需检查一下CRAN上的反向用法),但与cython不能真正相比。如果您有一些已定义的函数,是的,您可以接受R输入,在Cpp中对其进行处理,然后将数据返回给R。但是您不会很快将整个R脚本编译到Cpp中。
russellpierce
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.