2011-07-29 24 views
0

MYSQLの行全体にわたる値の分布を計算する最良の方法は、ルビのいくつかの計算値です。Rails/MySQLでの値の分布を計算する

例は、サイトを介して送信されたメッセージの長さです。だから私たちはすべてのメッセージを見て、これが100文字の長さ、1000などであることを見ることができます。

次に、与えられたメッセージについて、「このメッセージは90パーセントの長さに該当します」のように%他のメッセージへ。

ので単純平均が

  • ここで十分なディストリビューションは高速検索のために何とかキャッシュされるべきではないでしょう警告

    • これらは必ずしも線形分布ではない、のためにこれらの分布の数十にプルする必要があるかもしれません単一ページのロード

    多分いくつかの統計パッケージ/ルビーの宝石やこれの良い例がありますか?ありがとう!

  • 答えて

    2

    あなたのデータセットの標準偏差を計算してから、データポイントを与えて、平均からどれくらいの標準偏差が離れているかを教えてください。

    などあなたが95パーセンタイルを言うことができるそのように、

    チェックアウト:

    正規分布:http://www.regentsprep.org/Regents/math/algtrig/ATS2/NormalLesson.htm

    0

    計算上の問題あなたのデータの標準偏差と平均を取って、逆正規のルックアップを行うことは、あなたが非常に限定的な仮定をしていることです。データが正常でない場合はどうなりますか?これはかなり悪い仮定である多くの状況があります。

    ノンパラメトリックの質問に答えるのが理想です。つまり、いくつかの分布仮説に依存する必要はありません。これを行う1つの方法は、MySQLのビューを使用することです:

    http://www.mysqltutorial.org/mysql-views-tutorial.aspx

    あなたがテーブルの各行のメッセージ長のための百分位を計算したいと仮定し、することができます行のために、カウントMySQLのビューを作成してみてくださいi、行iのメッセージ長以下の他のメッセージ長の数。テーブルは挿入ごとに1回更新されるため、検索が高速になります。独自の「#メッセージは以下の長さを作成

    1. は、MySQLのビューは、計算上遅すぎるされている場合、また、あなたのデータアクセス層の上に書き込みに、次のロジックを挿入してみてください私はテーブルの中の列。
    2. 新しい行の挿入時に、この行の「#メッセージの長さ以下の」列に、必要に応じて簡単なSQLカウント式を入力します。
    3. また、新しい行の挿入時に、この表の他のすべての行を繰り返し、メッセージの長さが新しい行のメッセージ長より大きいすべての行でこの "#メッセージの長さ"を増やします。

    あなたの問題はランク付けがうまく線形であるため、後者のアプローチを使用することでO(n^2)の複雑さをO(n)に減らすことができます。お役に立てれば。

    また、パーセンタイル以外の操作を行う場合は、このブログで正規化、スケーリング、ランク付けなどの情報を確認してください。データには何が起こっているのかに関する良いグラフィックが含まれています。 のために書かれた:

    http://www.redowlconsulting.com/Blog/post/2011/07/28/StatisticalTricksForLists.aspx

    関連する問題