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 )))

给出这样的东西:

咒语情节

从两列生成分组依据的变体:

 (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 回答