1

Active Record で一連のレコードをグループ化しようとしているので、たとえば、各レコードの数量属性を正規化するためにいくつかの計算を行うことができます。

ユーザーが日付と数量を入力します。日付は一意ではないため、日付ごとに 10 ~ 20 個の数量がある場合があります。個々のレコードごとではなく、毎日の合計のみを処理する必要があります。nそれから、最高値と最低値を決定した後、基本的には通常 10 で割ってそれぞれを変換します。

これは私が今していることです:

def heat_map(project, word_count, n_div)
    return "freezing" if word_count == 0
    words = project.words
    counts = words.map(&:quantity)
    max = counts.max
    min = counts.min
    return "max" if word_count == max
    return "min" if word_count == min
    break_point = (max - min).to_f/n_div.to_f
    heat_index = (((word_count - min).to_f)/break_point).to_i  
end

これは、すべての単語数の表を表示する場合にうまく機能しますが、ヒート マップを、毎日の累計を表示するカレンダーに適用しようとしています。これは明らかに日数を合計していないため、通常のスケールから外れた数値になってしまいます。

正規化を行う前に、単語数をグループ化し、日ごとに合計する方法がわかりません。group_by を実行してから map 呼び出しを追加しようとしましたが、未定義のメソッド エラーが発生しました。何か案は?また、単語数を正規化するためのより良い/よりクリーンな方法にもオープンです。

4

1 に答える 1

0

モデルについてもう少し知らずに答えるのは難しいです。ですから、あなたが興味を持っているcreated_at日付はwords表の日付だけだと仮定します。実際の単語を格納する場所wordsと呼ばれるテーブルにフィールドがあると仮定しています。word

また、同じ単語に対して 1 日に複数のエントリがある可能性もあると想定しています (量が異なる可能性があります)。

したがって、これにより、1 日あたりの単語数の順序付きハッシュが得られます。

project.words.group('DATE(created_at)').group('word').sum('quantity')

これらの推測が意味をなさない場合は、モデルの構造についてもう少し詳しく教えてください。

于 2012-06-26T07:07:06.197 に答える