大規模なデータセットの探索的分析をチェックする方法


22

大きなデータセット(多くのサンプル、多くの変数)で探索的分析を開始すると、多くの場合、何百もの派生変数と多数の異なるプロットがあり、何が起こっているのかを追跡する実際の方法がありません。コードは、最初から方向性がないため、スパゲッティのようになります...

探索的分析をきちんと整理するために推奨される方法はありますか?特に、探索の複数のブランチ(行き止まりのブランチを含む)を、どのように異なるバージョンのプロットで処理しますか?


参考までに、私は地球科学データ(時間とともに多くの変数、時には空間にわたっても)に取り組んでいます。私は通常、PythonまたはRで作業し、すべてをgitに保存し、IPython Notebookも試しています。ただし、他のタイプの(大規模?)データを使用して、すべての分野の人々にとって回答がある程度一般的で有用であればよいでしょう


1
競合する推定または予測の方法を評価するために設計されたシミュレーション研究にも、多くのアドバイスが等しく適用されると思います。
確率論的

1
ええ、この答えもおそらく読む必要があります:stats.stackexchange.com/questions/2910/…。もっと具体的なアドバイスがあるかもしれないと思っていましたが、おそらくそうではないと思います。
naught101 14

回答:


10

頻繁に、探索的分析でウサギの穴を掘り下げたように感じる傾向は、あなたが尋ねている実質的な質問を見失うためだと思います。私は時々自分でそれを行い、その後、自分の目標が何であるかを思い出さなければなりません。たとえば、特定のモデルを構築しようとしていますか、または既存のモデルの妥当性を評価しようとしていますか?データに関する問題の証拠(つまり、法医学データ分析)を探していますか?または、これは分析の初期段階で、正式なモデルの開発に進む前に、特定の質問を非公式に調査しています(たとえば、2つの変数の間に関係がありますか)。要するに、あなたがプロットとテーブルをクランキングするのに気づいたが、あなたの当面の目標が何であるか、またはそのプロット/テーブルが関連する理由を明確に述べることができないなら、あなたはあなたが知っている

私は、プログラムを書いているのか記事を書いているのかに関係なく、書くのと同じように探索的データ分析にアプローチしようとします。どちらの場合でも、最初にアウトラインを作成せずに開始しません。もちろん、そのアウトラインは変化する可能性があります(頻繁に変化します)が、1つなしで書き始めることは非効率的であり、最終製品の品質が低下することがよくあります。

WRTの組織では、各アナリストが自分に合ったワークフローを見つける必要があります。そうすることで、他の人のワークフローを厳格に追おうとするよりもIMOの方が重要になります(ただし、他の人がやっていることからアイデアを得るのは常に役立ちます)。プログラムで作業している場合(つまり、一連の結果を生成/再生成するために実行できるコードを記述している場合)、作業をgitにチェックインしている場合、この点ですでに多くの先を行っています。コードを整理するのに少し時間をかける必要があるのではないかと思うので、そのために、アウトラインに従うことをお勧めします。たとえば、分析ファイルを比較的短く、ターゲットを絞って、それぞれが特定の質問(たとえば、特定の回帰モデルの診断プロット)に答えるようにします。プロジェクトのサイズと複雑さに応じて、これらを1つまたは2つのレベルでサブディレクトリに整理します。このようにして、プロジェクトは自己文書化されます。ディレクトリ、サブディレクトリ、およびファイルのリストビュー(各ファイルの上部にあるコメントと共に)は、理論的にはアウトラインを再現する必要があります。

もちろん、大規模なプロジェクトでは、データのクリーニングと管理を行うコード、特定のタイプのモデルを推定するために作成したコード、または作成した他のユーティリティもありますが、これらは実質的な範囲に収まりませんデータ分析の概要です。プロジェクトフォルダーの別の部分に整理する必要があります。

更新:これを投稿した後、「行き止まり」に関するあなたの質問に直接対処していないことに気付きました。分析セット全体に価値がないと本当に判断した場合、gitで作業している場合は、「この分析行は破棄されなかったため、生産的。」書いたものをくしゃくしゃにしてゴミ箱に捨てるのとは異なり、必要に応じていつでも後の作業に戻ることができます。

ただし、考えているアウトラインから進んでいくと、いわゆる行き止まりが少なくなることがわかると思います。代わりに、価値のある関連する質問の調査に時間を費やす場合-これがヌルの発見につながったり、予想どおりにならない場合でも、おそらくあなたがしたことと結果の記録を保持したいでしょう最低限、これを後で繰り返すのを間違えないように)。これらを「付録」のように、アウトラインの一番下に移動するだけです。


4

一般的な答えがどれほど役立つかはわかりません。あなたは難しいことをする方法を尋ねています。良い答えはおそらく規律に依存し、おそらく長く微妙なものになるでしょう。:)

組織に関しては、すでにgitを使用しているので、次にmakefileを使用して分析を実行する必要があります。makefileは、異なるファイルが互いにどのように依存するか(つまり、どの統計がどのコードから派生するか)をレイアウトし、を呼び出すとmake、更新する必要のあるすべてのものが作成されます。

さて、それは探索的な部分には役立ちません。EDAでは、ESSを介してemacsで(大部分)Rを使用します。EDAのREPLが必要です。私のワークフローは、ESS(exploratory.Rタイプファイル内)のプロット、見積もりなどで遊んで、保持するものを決定し、makeでバッチ実行できるように再コーディングすることです。Re: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が編集したデータ視覚化ハンドブックスプリンガーリンク経由

  • Huberによるデータ分析(2011)..


3

2つの単語:コンセプトマップ。それは、大規模なデータセットや本当に複雑な概念を分割して征服するために私が見つけた唯一の効果的な方法です。http://en.wikipedia.org/wiki/Concept_maps

個人的には、画面よりも紙の方がいいと思うので、基本的な分析を始める前に、自分が扱っているものをマップするだけです。より専門的な図については、多くのマインドマッピングソフトウェアがありますhttp://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software

マインドマッピングにはいくつかの利点があります。

  • 「コア」変数と派生変数(もしあれば)に関して私が持っているものを教えてくれます
  • 理論/論理に基づいたモデルの組織化/定式化が可能
  • コア変数間の関係が期待どおりにパンアウトしない場合、欠落している可能性のある変数および/または追加できる変数を指します

編集

例として、因子分析の概念マップを以下に示します。同じことです。事前に計画を立てて、実行する意味があることを実行してから実行します。

これの自動化/コード化されたバージョンを探しているなら、私はそれが存在するとは思わない。システムを理解しようとするとき、モデリングの概念を自動化することはできません。(そして、それは良いことです。なぜなら、それは多くの人々を失業させるからです。)


Hrm ...これは、より詳細な例で可能です。これが、私が話している複雑さに対処するのにどのように役立つかを理解するのに苦労しています。特に、行き止まりにつながる調査パスからの分析(派生データ、プロットなど)の処理に対処する助けにはなりません。
naught101

概念マップは、主題固有の理論に基づいてどこかにつながるはずのパスのみを調査するように設計されています。特定の調査がどこにも行かなかったことが判明した場合は、それがあなたのガイド/ To Doリストであるため、コンセプトマップにメモします。試してください。
ロシナンテ14年

3

すでにgitを使用している場合:バージョン管理を使用して探索を整理してみませんか?探索の新しい「ブランチ」ごとに新しいブランチを作成し、プロットの異なるバージョンのブランチも分岐します。この方法では、最終結果を結合するのが少し難しくなりますが、分析の「宝石」をドロップできる未追跡のディレクトリを常に維持できます。おそらく、このディレクトリ内のファイルに何らかの方法でラベルを付けて、それらがどのフォーク/コミット元であるかを示したいと思うでしょう。この方法には、diffコマンドを使用してさまざまな分析を非常に簡単に対比できるという利点があります。


1

同様の問題が発生するビジネスインテリジェンスツールを検討します。特に(データウェアハウス、ディメンション分析)階層とドリルダウン。

基本的な考え方は、基礎となるデータを集約可能な数量(パーセンテージではなく、カウント、収益など)として表現しようとすることです。次に、詳細(たとえば、月/週/ ...)を集計する階層を設計します。これにより、すべてのデータの概要を簡単に確認し、特定の領域を拡大することができます。例:http : //cubes.databrewery.org/(python)またはexcel power pivot

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.