1

日付/タイムスタンプ、応答時間、メッセージ サイズの 3 つの列を持つ Incanter データセットがあります。私がやりたいのは、x 軸に日付/タイムスタンプ、y 軸に応答時間を示す散布図を作成することです。

これは簡単ですが、メッセージ サイズ列に基づいて個別の一連のデータを生成したいと考えています。Incanter のscatter-plot関数は:group-byオプションを取りますが、離散値のみを処理するようです。メッセージサイズ列に関数を適用してシリーズを生成したいと思います。次のようないくつかの機能:

(fn [n]
  (cond
    (< n 5000)                    "small"
    (and (>= n 5000) (< n 20000)) "medium"
    (>= n 20000)                  "large"))

これは可能ですか、それとも同じことを達成するためのより良い方法はありますか?

4

1 に答える 1

2

次のように、関数を使用して計算された離散値を持つ新しい列でデータセットを合成できます....

(def dataset1 (dataset 
               [:x :y] 
               (for [x (range 10) y (range 10)] [x y])))
;=> #'user/dataset1

dataset1
[:x :y]
[0 0]
[0 1]
...
[9 8]
[9 9]

(def dataset2 (with-data dataset1 
  (conj-cols $data 
     (dataset [:size] ($map #(cond
                              (< % 3)   "small"
                              (<= 3 % 6) "medium"
                              (< 6 %)   "large") :x)))))
;=> #'user/dataset2

dataset2
[:x :y :size]
[0 0 "small"]
[0 1 "small"]
...
[9 8 "large"]
[9 9 "large"]

追加して:group-byから、生成した離散値で使用します...

(with-data dataset2 
   (view 
      (scatter-plot 
       :x 
       :y 
       :group-by :size )))

このようなものを与えるには:

インキャンター プロット

2 つの列から group-by を生成するバリアント:

 (def dataset3 
  (with-data dataset1  
    (conj-cols 
      $data 
      (dataset [:size] ($map #(let [sum (+ % %2)] 
                               (cond
                                 (< sum 4 )    "small"
                                 (<= 4 sum 12) "medium"
                                 (> 12 sum )   "large")) [:x :y])))))

次のようなプロット:

合計プロット

于 2012-04-24T00:45:20.627 に答える