On Thursday, July 17, 2014 8:49:12 AM UTC-4, empt...@gmail.com wrote:
>
> Hi, 
>
> I have a list of epoch times which map to HTTP requests. 
>
> '(1405060202611
> 1405060201157
> 1405060201361
> 1405060201261
> 1405060200391
> 1405060201458
> 1405060201705
> 1405060201058
> 1405060205062
> 1405060201558
> 1405060201761
> ....)
>
> I am trying to find out how many HTTP requests I have in a specified time 
> period, so I can graph requests per second.
>
>  
Hi Aidy,

It sounds like you're looking to create a histogram.

There are probably a number of libraries around to do that, but here's 
something I whipped up:

~~~clojure
#!/usr/bin/env lein-exec

(def min-val 0)
(def max-val 100)

(def raw-data (sort (for [i (range 20)]
                      (+ (rand (- max-val min-val))
                         min-val))))

(println "raw data:" raw-data)
(newline)

(def interval-size 10)
;; e.g.: ((0 10) (10 20) (20 30) ... (90 100))
(def intervals (partition 2
                          1
                          (range min-val
                                 (+ max-val interval-size)
                                 interval-size)))

(defn interval-for
  "Finds you which interval `x` lands in."
  [x]
  (first (drop-while (fn [i] (not (and (>= x (first i))
                                       (<  x (second i)))))
                     intervals)))


(let [histo-data (loop [accum (zipmap (map vec intervals)
                                      (repeat []))
                        d     raw-data]
                   (if (empty? d)
                     accum
                     (recur (update-in accum
                                       [(interval-for (first d))]
                                       conj
                                       (first d))
                            (rest d))))]
  (doseq [d (sort histo-data)]
    (println d)))
~~~

Hm... my crystal ball tells me that in few minutes someone will point out 
how I can replace that `loop` with a `reduce`...

-- John

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to