Hello!

I'm new to clojure and new to lisp, so I'm still getting accustomed to  
working functionally and I'm trying to take advantage of clojure's  
sequences when appropriate.

I'm working on a project to display a variety of measurements and  
comparing values across various intervals. I'm pulling the measurement  
data from an SQL database and its most efficient to pull all of the  
attributes for a given interval at once. When I'm comparing the same  
measurements from different intervals, I need to split the attributes  
into individual series.

Here's an example of the results. The first vector is the data from  
today: the second is from yesterday.

(def stats ([{:timestamp 1.238226902583523E12,
    :attr-1 221, :attr-2 1220553964, :attr-3 1899985 }
   {:timestamp 1.238227202350991E12,
    :attr-1 221, :attr-2 1220553964, :attr-3 1899985 }
   {:timestamp 1.2382275025300952E12,
    :attr-1 221, :attr-2 1220553964, :attr-3 1899985 }]
[{:timestamp 1.2382281021213591E12,
    :attr-1 221, :attr-2 1220553964, :attr-3 1899985 }
  {:timestamp 1.238227202230129E12,
   :attr-1 220, :attr-2 1212431385, :attr-3 1899985 }
  {:sampled_at_js_timestamp 1.238227501935876E12,
   :attr-1 220, :attr-2 1212431385, :attr-3 1899985 }])

And here's the results transformed:

{"attr-1":{"today":[[1.238226902583523E12,221],
                     [1.238227202350991E12,221],
                     [1.2382275025300952E12,221]],
            "yesterday":[[1.2382269016771082E12,220],
                         [1.238227202230129E12,220],
                         [1.238227501935876E12,220]]},
  "attr-2":{"today":[[1.238226902583523E12,1220553964],
                     [1.238227202350991E12,1220553964],
                     [1.2382275025300952E12,1220553964]],
            "yesterday":[[1.2382269016771082E12,1220553964],
                         [1.238227202230129E12,1212431385],
                         [1.238227501935876E12,1212431385]]},
  "attr-3":{"today":[[1.238226902583523E12,1899985],
                     [1.238227202350991E12,1899985],
                     [1.2382275025300952E12,1899985]],
            "yesterday":[[1.2382269016771082E12,1899985],
                         [1.238227202230129E12,1899985],
                         [1.238227501935876E12,1899985]]}}

Here's what I'm currently using:

(let [get-2ple (fn [row col-name] (vector (row :timestamp) (row col- 
name)))
       map-stats (fn [col-name stats] (map #(get-2ple % col-name)  
stats))
       collect-stats (fn [col-name stats]
                       (hash-map "today" (map-stats col-name (first  
stats))
                                 "yesterday" (map-stats col-name  
(first (next stats)))))
       chart-data (hash-map "attr-1" (collect-stats :attr-1 stats)
                            "attr-2" (collect-stats :attr-2 stats)
                            "attr-3" (collect-stats :attr-3 stats))]
   chart-data)

However, this requires multiple passes over the result data. I should  
think it'd be possible to do it in one, but I can't seem to wrap my  
head around it.

Any pointers would be much appreciated.

Cheers!

Michael Glaesemann
grzm seespotcode net


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

Reply via email to