2009-07-15 13 views
6

私は、非DBソース(例えば、CSV、OLTPシステム)から供給されたデータセットをグループ化、ピボット、結合および小計するためのいくつかの非常に基本的なツールを書いています。 「グループ化」方法は、これらのほとんどの中心に位置します。"グループ化"とその他のデータベースアルゴリズム?

しかし、データをグループ化するための効率的なアルゴリズムを作成するために多くの作業が行われていることは確かです。私はそれらを使用していないと確信しています。私のGoogle-fuは何かをまったく動かすことができませんでした。

グループ化されたデータを作成するためのより良い方法について説明しているオンラインの資料や書籍がありますか?

また、MySQLのソースなどを調べるだけでいいですか?

+0

私はあなたがこの時点で最適化を完了したと思っていますが、Wes McKinneyは彼のパンダの図書館の問題によってグループにどのようにアプローチしたかについて少し書いています:http://wesmckinney.com/blog/mastering-high -performance-data-algorithms-i-group-by/ – DGrady

答えて

5

いくつかのフィールド(またはフィールドと式のセット)を "グループ化"するのに便利な方法の1つですが、簡単にするために "フィールド"を使用します) - グループ化する前に結果を上書きする)ソートされた方法で - あなたは実際には並べ替え(ORDER BYもそこにあり、ちょうどGROUP BY!と同じフィールドにある一般的なケースではなく)を気にしません。順序付けの「副作用」プロパティ - グループ化フィールドと同じ値を持つRBG内のすべての行が直後に来るので、グループ化フィールドが変更されるまで蓄積し、それまでに蓄積した結果を放出/生成し、アキュムレータを新しい行(グループ化フィールドの値が異なるもの)に再初期化します。 - ちょうど始めにアキュムレータを初期化してください。 、 もちろん。

これがうまくいかない場合は、グループ化フィールドをハッシュし、そのグループに蓄積されている結果のハッシュテーブルを使用することができます。つまり、RBGの各行でグループ化フィールドをハッシュし、ハッシュテーブルのキーとして、RBG行から適切に初期化されたアキュムレータをそこに置かない場合は、RBG行ごとにアキュムレータを更新します。最後にすべてを出すだけです。問題は、あなたが最後までさらに記憶を取り上げていることです! - )

これは2つの基本的なアプローチです。それぞれの疑似コードをご希望ですか?

+0

ありがとうアレックス、これらは完全に意味があり、私は最初のものを使用しています。あなたはこのスペースでアルゴリズムの良いソースを知っていますか?またはこれはちょうど個人的な経験ですか? –

+0

軽い埋め込みSQLエンジンが存在しなかったか、非常に高価だったので、残念ながら、それは基本的には個人的な経験です - (ISAMのようなものや、初期のbsd-dbのような)エンベデッドエンジンが必要なときにSQLiteを使う傾向があります;-)。 –

+0

良い点アレックス、私はSQLliteを見て、それは良い見ています。振り返ると、CとPerlからVBAまで、この同じソリューションをさまざまな言語で実装したようです:) –

1

OLAPデータベースをチェックアウトする必要があります。 OLAPでは、「スライスとサイコロ」形式で分析することを目的とした集約のデータベースを作成できます。

OLAPデータベースを使用して、数、平均、分、最大、合計、および標準などの集計値を、任意の数のディメンションですばやく分析できます。

this MSDNのOLAPの紹介を参照してください。

+0

Thanks jn29098。おそらく、私が探していたものではなく、OLAPの素敵なリンクです。 –

0

CSVファイルの例と結果のタイプを教えてください。私はあなたのためにPythonで解決策を掘り起こすことができます。

Pythonには、この種のことに役立つCSVモジュールとリスト/生成子の補足があります。

  • 水田。
+0

Thanks Paddy、私は特定のソリューション(私は1つ)よりもむしろアルゴリズムを探しています。私は最適化しているので、私は何も愚かなことをしたことを確認したい:) –

関連する問題