working new users per day
authorKyle Spaans <kspaans@student.math.uwaterloo.ca>
Mon, 20 Apr 2009 19:36:48 +0000 (15:36 -0400)
committerKyle Spaans <kspaans@student.math.uwaterloo.ca>
Mon, 20 Apr 2009 21:44:56 +0000 (17:44 -0400)
Simple extra function added to the end of userstats.ss
that will printed properly formatted data that counts the number
of "first posts" per day.

nntp-to-dot.ss
userstats.ss

index deb1dae..b19edfd 100644 (file)
@@ -77,6 +77,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;(posts-per-day first last uwnews)
 (count-users first last uwnews)
+(new-u-vs-time)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (close-output-port dotfile)
index 047287a..1f2416d 100644 (file)
@@ -14,7 +14,7 @@
 (require "common.ss")
 (require srfi/19)
 
-(provide count-users)
+(provide count-users new-u-vs-time)
 
 ;; User Statistics Struct
 ;; String - usename in the form of an email address, possibility of duplicates
                                                  pdays
                                                  (/ new-nump pdays))))]))]))
           (count-users (+ first 1) last newsd)]))
+
+;; new-u-vs-time: void -> void
+;; Prints out info (similar to PPD) representing the number of new users showing up
+;; on the newsgroup (e.g. first posts) plotted versus time. This will be plottable with GNUPLOT.
+;; First map all first post instances to a new hash table that will count the number of first
+;; posts on each day. Then map over that hash table to print them out appropriately.
+(define (new-u-vs-time)
+  (let [(new-u-hash (make-hash))]
+    (hash-for-each
+      users
+      (lambda (k v)
+        (letrec [(ndate (date->string (ustats-firstp v) "~D"))
+                 (result (hash-ref new-u-hash ndate #f))]
+          (cond
+            [(boolean? result) (hash-set! new-u-hash ndate 1)]
+            [else (hash-set! new-u-hash ndate (+ 1 result))]))))
+    (hash-for-each new-u-hash
+                   (lambda (k v) (printf "~a ~a~n" k v)))))