首页 文章

清理/操作大数据的解决方案(目前使用Stata)

提问于
浏览
2

我目前正在使用10%的非常大的数据集样本(10个变量,超过300米行),当以完整数据集的.dta格式存储时,数据量超过200 GB . 在具有~50G RAM和多个内核的UNIX服务器上使用Stata-MP时,Stata能够在合理的时间内为10%样本处理egen,崩溃,合并等操作 .

但是,现在我想继续分析整个样本 . 即使我使用具有足够RAM来容纳数据集的机器,简单地生成变量也需要很长时间 . (我想也许后台操作会导致Stata遇到虚拟内存)

该问题也非常适合并行化,即数据集中的行彼此独立,因此我可以轻松地将一个大型数据集视为100个较小的数据集 .

有没有人对如何处理/分析这些数据有任何建议,或者可以就我目前的一些建议给出反馈?我主要使用Stata / SAS / MATLAB,所以也许还有其他我根本不知道的方法 .

以下是我目前的一些想法:

  • 将数据集拆分为较小的数据集,并在Stata中使用非正式并行处理 . 我可以在每个分区上运行清理/处理/分析,然后在没有存储所有中间部分的情况下合并结果 .

  • 使用SQL存储数据并执行某些数据操作,例如聚合某些值 . 这里的一个问题是,Stata可以相当容易地处理的一些任务,比如跨时间比较值,在SQL中不会很好 . 此外,在30%的数据样本中运行SQL中的一些查询时,我已经遇到了性能问题 . 但也许我没有通过正确索引等优化 . 此外,Shard-Query似乎可以帮助解决这个问题,但我还没有彻底研究过它 .

  • R也看起来很有希望,但我不确定它是否能解决使用这些大量数据的问题 .

2 回答

  • 2

    感谢那些评论和回复的人 . 我意识到我的问题类似于thread . 我已经将Stata中的一些数据操作代码重写为SQL,响应时间更快 . 我相信通过正确利用索引并在必要时通过分区/分片使用并行处理,我可以获得大的优化收益 . 在完成所有数据操作之后,我可以通过ODBC在Stata中导入该数据 .

  • 1

    由于您熟悉Stata,因此Stata _1053803中有大量关于大型数据集的常见问题解答:您可能会发现这很有帮助 .

    我会通过列清理,拆分它们,运行任何特定的清洁程序,然后再回到 merge .

    根据您的计算机资源,您应该能够使用 tempfile 将各个列保存在多个临时文件中 . 注意只选择与分析最相关的变量或列应该会大大减少集合的大小 .

相关问题