]> gitweb.factorcode.org Git - factor.git/commitdiff
move histogram to math.statistics, write a main article for math.statistics
authorDoug Coleman <doug.coleman@gmail.com>
Fri, 30 Oct 2009 07:55:54 +0000 (02:55 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 30 Oct 2009 07:55:54 +0000 (02:55 -0500)
basis/math/statistics/statistics-docs.factor
basis/math/statistics/statistics-tests.factor
basis/math/statistics/statistics.factor
extra/histogram/histogram-docs.factor [deleted file]
extra/histogram/histogram-tests.factor [deleted file]
extra/histogram/histogram.factor [deleted file]

index 1a29d611f916d8500573fbe7283bcb7d4feff612..dc54f4181f84e1e5df7cbf5fc40bda384f194bf2 100644 (file)
@@ -1,4 +1,5 @@
-USING: help.markup help.syntax debugger ;
+USING: assocs debugger hashtables help.markup help.syntax
+quotations sequences ;
 IN: math.statistics
 
 HELP: geometric-mean
@@ -58,3 +59,104 @@ HELP: var
   { $example "USING: math.statistics prettyprint ;" "{ 1 2 3 } var ." "1" }
   { $example "USING: math.statistics prettyprint ;" "{ 1 2 3 4 } var ." "1+2/3" } } ;
 
+
+HELP: histogram
+{ $values
+    { "seq" sequence }
+    { "hashtable" hashtable }
+}
+{ $examples 
+    { $example "! Count the number of times an element appears in a sequence."
+               "USING: prettyprint histogram ;"
+               "\"aaabc\" histogram ."
+               "H{ { 97 3 } { 98 1 } { 99 1 } }"
+    }
+}
+{ $description "Returns a hashtable where the keys are the elements of the sequence and the values are the number of times they appeared in that sequence." } ;
+
+HELP: histogram*
+{ $values
+    { "hashtable" hashtable } { "seq" sequence }
+    { "hashtable" hashtable }
+}
+{ $examples 
+    { $example "! Count the number of times the elements of two sequences appear."
+               "USING: prettyprint histogram ;"
+               "\"aaabc\" histogram \"aaaaaabc\" histogram* ."
+               "H{ { 97 9 } { 98 2 } { 99 2 } }"
+    }
+}
+{ $description "Takes an existing hashtable and uses " { $link histogram } " to continue counting the number of occurences of each element." } ;
+
+HELP: sequence>assoc
+{ $values
+    { "seq" sequence } { "quot" quotation } { "exemplar" "an exemplar assoc" }
+    { "assoc" assoc }
+}
+{ $examples 
+    { $example "! Iterate over a sequence and increment the count at each element"
+               "USING: assocs prettyprint histogram ;"
+               "\"aaabc\" [ inc-at ] H{ } sequence>assoc ."
+               "H{ { 97 3 } { 98 1 } { 99 1 } }"
+    }
+}
+{ $description "Iterates over a sequence, allowing elements of the sequence to be added to a newly created " { $snippet "assoc" } " according to the passed quotation." } ;
+
+HELP: sequence>assoc*
+{ $values
+    { "assoc" assoc } { "seq" sequence } { "quot" quotation }
+    { "assoc" assoc }
+}
+{ $examples 
+    { $example "! Iterate over a sequence and add the counts to an existing assoc"
+               "USING: assocs prettyprint histogram kernel ;"
+               "H{ { 97 2 } { 98 1 } } clone \"aaabc\" [ inc-at ] sequence>assoc* ."
+               "H{ { 97 5 } { 98 2 } { 99 1 } }"
+    }
+}
+{ $description "Iterates over a sequence, allowing elements of the sequence to be added to an existing " { $snippet "assoc" } " according to the passed quotation." } ;
+
+HELP: sequence>hashtable
+{ $values
+    { "seq" sequence } { "quot" quotation }
+    { "hashtable" hashtable }
+}
+{ $examples 
+    { $example "! Count the number of times an element occurs in a sequence"
+               "USING: assocs prettyprint histogram ;"
+               "\"aaabc\" [ inc-at ] sequence>hashtable ."
+               "H{ { 97 3 } { 98 1 } { 99 1 } }"
+    }
+}
+{ $description "Iterates over a sequence, allowing elements of the sequence to be added to a hashtable according to the passed quotation." } ;
+
+ARTICLE: "histogram" "Computing histograms"
+"Counting elements in a sequence:"
+{ $subsections
+    histogram
+    histogram*
+}
+"Combinators for implementing histogram:"
+{ $subsections
+    sequence>assoc
+    sequence>assoc*
+    sequence>hashtable
+} ;
+
+ARTICLE: "math.statistics" "Statistics"
+"Computing the mean:"
+{ $subsections mean geometric-mean harmonic-mean }
+"Computing the median:"
+{ $subsections median lower-median upper-median medians }
+"Computing the mode:"
+{ $subsections mode }
+"Computing the standard deviation and variance:"
+{ $subsections std var }
+"Computing the range and minimum and maximum elements:"
+{ $subsections range minmax }
+"Computing the kth smallest element:"
+{ $subsections kth-smallest }
+"Counting the frequency of occurrence of elements:"
+{ $subsection "histogram" } ;
+
+ABOUT: "math.statistics"
index 32ebcbc6a19b85a871b90b0e403005994ec6ef0b..0d3172f685800936875776b007b48fdb48775698 100644 (file)
@@ -43,3 +43,13 @@ IN: math.statistics.tests
 [ 0 ] [ { 1 } var ] unit-test
 [ 0.0 ] [ { 1 } std ] unit-test
 [ 0.0 ] [ { 1 } ste ] unit-test
+
+[
+    H{
+        { 97 2 }
+        { 98 2 }
+        { 99 2 }
+    }
+] [
+    "aabbcc" histogram
+] unit-test
index dad09708557f95c17904bc5276bbb033d86c8ea7..9c72b848ca6ba9df7e7bbeccbf8dd67ed0fe6cac 100644 (file)
@@ -45,7 +45,8 @@ IN: math.statistics
     k seq nth ; inline
 
 : lower-median ( seq -- elt )
-    dup dup length odd? [ midpoint@ ] [ midpoint@ 1 - ] if kth-smallest ;
+    [ ] [ ] [ length odd? ] tri
+    [ midpoint@ ] [ midpoint@ 1 - ] if kth-smallest ;
 
 : upper-median ( seq -- elt )
     dup midpoint@ kth-smallest ;
@@ -54,13 +55,35 @@ IN: math.statistics
     [ lower-median ] [ upper-median ] bi ;
 
 : median ( seq -- x )
-    dup length odd? [ lower-median ] [ medians + 2 / ] if ;
+    [ ] [ length odd? ] bi [ lower-median ] [ medians + 2 / ] if ;
 
-: frequency ( seq -- hashtable )
-    H{ } clone [ '[ _ inc-at ] each ] keep ;
+<PRIVATE
+
+: (sequence>assoc) ( seq quot assoc -- assoc )
+    [ swap curry each ] keep ; inline
+
+PRIVATE>
+
+: sequence>assoc* ( assoc seq quot: ( obj assoc -- ) -- assoc )
+    rot (sequence>assoc) ; inline
+
+: sequence>assoc ( seq quot: ( obj assoc -- ) exemplar -- assoc )
+    clone (sequence>assoc) ; inline
+
+: sequence>hashtable ( seq quot: ( obj hashtable -- ) -- hashtable )
+    H{ } sequence>assoc ; inline
+
+: histogram* ( hashtable seq -- hashtable )
+    [ inc-at ] sequence>assoc* ;
+
+: histogram ( seq -- hashtable )
+    [ inc-at ] sequence>hashtable ;
+
+: collect-values ( seq quot: ( obj hashtable -- ) -- hash )
+    '[ [ dup @ ] dip push-at ] sequence>hashtable ; inline
 
 : mode ( seq -- x )
-    frequency >alist
+    histogram >alist
     [ ] [ [ [ second ] bi@ > ] 2keep ? ] map-reduce first ;
 
 : minmax ( seq -- min max )
diff --git a/extra/histogram/histogram-docs.factor b/extra/histogram/histogram-docs.factor
deleted file mode 100755 (executable)
index fc463ca..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-IN: histogram\r
-USING: help.markup help.syntax sequences hashtables quotations assocs ;\r
-\r
-HELP: histogram\r
-{ $values\r
-    { "seq" sequence }\r
-    { "hashtable" hashtable }\r
-}\r
-{ $examples \r
-    { $example "! Count the number of times an element appears in a sequence."\r
-               "USING: prettyprint histogram ;"\r
-               "\"aaabc\" histogram ."\r
-               "H{ { 97 3 } { 98 1 } { 99 1 } }"\r
-    }\r
-}\r
-{ $description "Returns a hashtable where the keys are the elements of the sequence and the values are the number of times they appeared in that sequence." } ;\r
-\r
-HELP: histogram*\r
-{ $values\r
-    { "hashtable" hashtable } { "seq" sequence }\r
-    { "hashtable" hashtable }\r
-}\r
-{ $examples \r
-    { $example "! Count the number of times the elements of two sequences appear."\r
-               "USING: prettyprint histogram ;"\r
-               "\"aaabc\" histogram \"aaaaaabc\" histogram* ."\r
-               "H{ { 97 9 } { 98 2 } { 99 2 } }"\r
-    }\r
-}\r
-{ $description "Takes an existing hashtable and uses " { $link histogram } " to continue counting the number of occurences of each element." } ;\r
-\r
-HELP: sequence>assoc\r
-{ $values\r
-    { "seq" sequence } { "quot" quotation } { "exemplar" "an exemplar assoc" }\r
-    { "assoc" assoc }\r
-}\r
-{ $examples \r
-    { $example "! Iterate over a sequence and increment the count at each element"\r
-               "USING: assocs prettyprint histogram ;"\r
-               "\"aaabc\" [ inc-at ] H{ } sequence>assoc ."\r
-               "H{ { 97 3 } { 98 1 } { 99 1 } }"\r
-    }\r
-}\r
-{ $description "Iterates over a sequence, allowing elements of the sequence to be added to a newly created " { $snippet "assoc" } " according to the passed quotation." } ;\r
-\r
-HELP: sequence>assoc*\r
-{ $values\r
-    { "assoc" assoc } { "seq" sequence } { "quot" quotation }\r
-    { "assoc" assoc }\r
-}\r
-{ $examples \r
-    { $example "! Iterate over a sequence and add the counts to an existing assoc"\r
-               "USING: assocs prettyprint histogram kernel ;"\r
-               "H{ { 97 2 } { 98 1 } } clone \"aaabc\" [ inc-at ] sequence>assoc* ."\r
-               "H{ { 97 5 } { 98 2 } { 99 1 } }"\r
-    }\r
-}\r
-{ $description "Iterates over a sequence, allowing elements of the sequence to be added to an existing " { $snippet "assoc" } " according to the passed quotation." } ;\r
-\r
-HELP: sequence>hashtable\r
-{ $values\r
-    { "seq" sequence } { "quot" quotation }\r
-    { "hashtable" hashtable }\r
-}\r
-{ $examples \r
-    { $example "! Count the number of times an element occurs in a sequence"\r
-               "USING: assocs prettyprint histogram ;"\r
-               "\"aaabc\" [ inc-at ] sequence>hashtable ."\r
-               "H{ { 97 3 } { 98 1 } { 99 1 } }"\r
-    }\r
-}\r
-{ $description "Iterates over a sequence, allowing elements of the sequence to be added to a hashtable according to the passed quotation." } ;\r
-\r
-ARTICLE: "histogram" "Computing histograms"\r
-"Counting elements in a sequence:"\r
-{ $subsections\r
-    histogram\r
-    histogram*\r
-}\r
-"Combinators for implementing histogram:"\r
-{ $subsections\r
-    sequence>assoc\r
-    sequence>assoc*\r
-    sequence>hashtable\r
-} ;\r
-\r
-ABOUT: "histogram"\r
diff --git a/extra/histogram/histogram-tests.factor b/extra/histogram/histogram-tests.factor
deleted file mode 100755 (executable)
index f0e7b3e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-IN: histogram.tests\r
-USING: help.markup help.syntax tools.test histogram ;\r
-\r
-[\r
-    H{\r
-        { 97 2 }\r
-        { 98 2 }\r
-        { 99 2 }\r
-    }\r
-] [\r
-    "aabbcc" histogram\r
-] unit-test\r
diff --git a/extra/histogram/histogram.factor b/extra/histogram/histogram.factor
deleted file mode 100755 (executable)
index d5c6ab3..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-! Copyright (C) 2009 Doug Coleman.\r
-! See http://factorcode.org/license.txt for BSD license.\r
-USING: kernel sequences assocs fry ;\r
-IN: histogram\r
-\r
-<PRIVATE\r
-\r
-: (sequence>assoc) ( seq quot assoc -- assoc )\r
-    [ swap curry each ] keep ; inline\r
-\r
-PRIVATE>\r
-\r
-: sequence>assoc* ( assoc seq quot: ( obj assoc -- ) -- assoc )\r
-    rot (sequence>assoc) ; inline\r
-\r
-: sequence>assoc ( seq quot: ( obj assoc -- ) exemplar -- assoc )\r
-    clone (sequence>assoc) ; inline\r
-\r
-: sequence>hashtable ( seq quot: ( obj hashtable -- ) -- hashtable )\r
-    H{ } sequence>assoc ; inline\r
-\r
-: histogram* ( hashtable seq -- hashtable )\r
-    [ inc-at ] sequence>assoc* ;\r
-\r
-: histogram ( seq -- hashtable )\r
-    [ inc-at ] sequence>hashtable ;\r
-\r
-: collect-values ( seq quot: ( obj hashtable -- ) -- hash )\r
-    '[ [ dup @ ] dip push-at ] sequence>hashtable ; inline\r