如何保持对大型数据集的探索性分析?


22

当我在一个大数据集(许多样本,许多变量)上进行探索性分析时,我经常发现自己身上有数百个派生变量,以及成千上万的不同地块,而没有真正的方式来跟踪前进的方向。代码最终像意大利面条一样,因为从一开始就没有方向。

有什么建议的方法可以使探索性分析保持整洁?特别是,您如何处理勘探的多个分支(包括无用的分支)以及不同版本的地块?


作为参考,我正在研究地球科学数据(随时间变化的许多变量,有时甚至随着空间的变化)。我通常使用Python或R,并将所有内容存储在git中,并且也一直在尝试IPython Notebook。但是,如果答案对所有领域的人来说都是通用的并且有用其他类型的(大型?)数据,那将是很好的


1
我想您会获得很多建议,这些建议同样适用于旨在评估估计或预测的竞争方法的模拟研究。
概率

1
是的,也可能需要阅读以下答案:stats.stackexchange.com/questions/2910/…。我当时在想可能会有更具体的建议,但我想可能并非如此。
naught101'2014-4-7

Answers:


10

我认为,经常有一种探索性分析的感觉,就是觉得自己掉进了兔子洞,这是由于看不到您要问的实质性问题。我偶尔自己做,然后要提醒自己我的目标是什么。例如,我是要建立一个特定的模型,还是评估现有模型的适当性?我是否在寻找数据问题的证据(即法医数据分析)?或者,这是在分析的早期阶段,在继续开发正式模型之前,我正在非正式地调查特定问题(例如,两个变量之间是否存在关系?)?总而言之,如果您发现自己想出图表和表格,却无法清楚说明您的近期目标或该图表/表格为何相关,那么您就知道自己

我尝试像编写程序一样进行探索性数据分析,无论是编写程序还是编写文章。无论哪种情况,我都不会不先概述一下。当然,该轮廓可以更改(并且经常会更改),但是在没有任何轮廓的情况下开始书写是没有效率的,并且通常会产生较差的最终结果。

在WRT组织中,每个分析师都必须找到适合他或她的工作流程-这样做比IMO严格遵循他人的工作流程更为重要(尽管从他人的工作中汲取灵感总是很有帮助的)。如果您以编程方式工作(即,编写可运行以生成/重新生成一组结果的代码)并将工作检入git,那么您在这方面已经领先许多。我怀疑您可能只需要花一些时间来组织代码,为此,我建议您遵循一下大纲。例如,使您的分析文件相对简短且有针对性,以便每个文件都能回答一个特定问题(例如,特定回归模型的诊断图)。根据项目的规模和复杂性,将它们组织成一两个级别的子目录。这样,项目就可以自我记录;从理论上讲,目录,子目录和文件的列表视图(以及每个文件顶部的注释)应该可以重现您的轮廓。

当然,在一个大型项目中,您可能还具有执行数据清理和管理的代码,为估计某种类型的模型而编写的代码或所编写的其他实用程序,这些都不适合实质性内容。概述以便进行数据分析,因此应将它们组织在项目文件夹的不同部分中。

更新:发布此内容后,我意识到我没有直接解决您有关“死胡同”的问题。如果您真的确定一整套分析没有价值,那么,如果您使用的是git,则始终可以使用提交消息删除相应的文件,例如“放弃此分析行,因为它没有富有成效的。” 与将您写的内容弄皱然后扔到垃圾桶中不同,如果需要,您始终可以返回到后来所做的事情。

但是,我认为您会发现,如果从经过深思熟虑的大纲开始,您的所谓死胡同就会更少。相反,如果您花时间研究一个有价值且相关的问题-即使这会导致无效的发现或未如您预期的那样结果-您可能仍想保留所做的工作和结果的记录(在最小值,这样您就不会再犯此错误)。只需将它们移到轮廓的底部即可,就像“附录”一样。


4

我不知道一般性回答会有多大帮助。您在问如何做一些困难的事情;好的答案可能取决于学科,并且可能很长且细微。:)

就组织而言,您已经在使用git,因此接下来您应该开始使用makefile来执行分析。makefile列出了不同文件之间的相互依赖关系(即,哪些统计信息是从哪个代码派生的),以及在调用时make,需要更新的所有内容。

现在,这对探索性部分没有帮助。对于EDA,我通过ESS在emacs中使用(主要是R)。您需要针对EDA的REPL。我的工作流程是在ESS(在exploratory.R类型文件中)中处理图,估计等,确定我要保留的内容,然后重新编码,以便可以由make批量执行。回复:git,我不知道您如何使用它,但是我为每个项目使用一个存储库(通常是一篇论文),并从我的代码库中重新构建地狱,以保持干净的历史记录;即我用

$ git merge meandering-branch --squash
$ git add -p somefile
$ git rebase -i master
$ git reset HEAD --hard

方式多,当我开始使用Git,而且方式不止我建议初学者。如果您不熟悉所有这些命令和选项,则可能需要了解更多git。对我最大的帮助是在进行逻辑上不同的提交时要受纪律;也就是说,每个提交都应包含您将来可能希望一次全部撤消的所有更改(并且不多或少)。

就实际探究数据而言,我发现这些书很有帮助且有趣,它们专门处理大型数据集(至少部分):

  • Unwin,Theus和Hofmann编辑的大型数据集图形。如果可以访问,请通过springerlink进行访问,否则可以通过谷歌搜索找到各个章节。

  • 数据可视化手册,由Chen,Härdle和Unwin编辑。也通过springerlink

  • Huber的资料分析(2011)。


3

两个词:概念图。这是我发现分割和征服大型数据集或任何真正令人费解的概念的唯一有效方法。http://en.wikipedia.org/wiki/Concept_maps

就个人而言,我认为在纸上比在屏幕上要好,因此我什至在开始进行任何基本分析之前就先确定要处理的内容。对于更专业的图表,有很多思维导图软件http://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software

思维导图具有以下优点:

  • 告诉我关于“核心”变量和派生变量(如果有)的内容
  • 允许基于理论/逻辑来组织/制定模型
  • 指出如果核心变量之间的关系没有像我认为的那样平移,我可能会缺少和/或可能添加的变量

编辑

例如,这是因子分析的概念图:http : //www.metacademy.org/graphs/concepts/factor_analysis#focus=factor_analysis&mode=explore现在,这纯粹是为了学习概念,不是进行分析,而是想法是一样的:提前确定要做的事然后再做。

如果您正在寻找这种版本的自动/编码版本,我认为不存在。试图了解系统时,您无法使建模概念自动化。(这是一件好事,因为它会使很多人失业。)


嗯...这可能与更详细的示例有关。我很难看到这将如何帮助解决我正在谈论的复杂性。特别是,它无助于处理导致死胡同的调查路径中的分析(派生数据,绘图等)。
naught101 2014年

该概念图旨在仅根据主题特定理论研究应该通向某处的路径。如果发现某个特定调查没有进行到任何地方,请在概念图上进行标注,因为这是您的指南/待办事项清单,从那里您可以立即看到哪些派生变量受到影响以及可以进行哪些其他调查尝试。
rocinante 2014年

3

您已经在使用git:为什么不使用版本控制来组织您的探索呢?为勘探的每个新“分支”创建一个新分支,并为不同版本的图创建分支。这种方法将使最终结果的合并更加困难,但是您始终可以保持未跟踪的目录,您可以在其中放置分析的“宝石”。您可能希望以某种方式在此目录中标记文件,以指示它们来自哪个fork / commit。这种方法的额外好处是,可以非常轻松地通过diff命令对比不同的分析。


1

我会研究商业智能工具...出现类似问题的地方。特别是(数据仓库,维度分析)层次结构和向下钻取。

基本思想是您尝试将基础数据表示为可汇​​总的数量(计数,收入等,而不是百分比)。然后,您可以设计层次结构以汇总详细信息(例如,月/周/ ...)。这使您可以对所有数据进行简单的概述,然后放大特定区域。参见例如http://cubes.databrewery.org/(python)或excel powerivot

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.