aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Sloan2012-09-20 16:22:34 -0500
committerZachary Sloan2012-09-20 16:22:34 -0500
commit5fb161ed9accc49f3d36671809a017ed21657ed0 (patch)
treed96c51b8f6008b95fbf62a6121c41e8512fc931d
parent1e081d88b96660c69d2de9e6b00a54f800348cde (diff)
downloadgenenetwork2-5fb161ed9accc49f3d36671809a017ed21657ed0.tar.gz
Created a class in coffeescript for stats and got several to display dynamically
-rwxr-xr-xwqflask/wqflask/show_trait/DataEditingPage.py2
-rw-r--r--wqflask/wqflask/static/new/javascript/stats.coffee46
-rw-r--r--wqflask/wqflask/static/new/javascript/stats.js81
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee93
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js87
-rw-r--r--wqflask/wqflask/templates/trait_data_and_analysis.html8
6 files changed, 215 insertions, 102 deletions
diff --git a/wqflask/wqflask/show_trait/DataEditingPage.py b/wqflask/wqflask/show_trait/DataEditingPage.py
index 8ee1d9c8..32ecc732 100755
--- a/wqflask/wqflask/show_trait/DataEditingPage.py
+++ b/wqflask/wqflask/show_trait/DataEditingPage.py
@@ -1814,7 +1814,7 @@ class DataEditingPage(templatePage):
print("No strain %s, let's create it now" % strainName)
strain = webqtlCaseData.webqtlCaseData(strainName)
print("zyt - strainNameOrig:", strainNameOrig)
-
+
if strains == 'primary':
strain.this_id = "Primary_" + str(counter)
diff --git a/wqflask/wqflask/static/new/javascript/stats.coffee b/wqflask/wqflask/static/new/javascript/stats.coffee
new file mode 100644
index 00000000..677dc258
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/stats.coffee
@@ -0,0 +1,46 @@
+class Stats
+ constructor: (@the_values) ->
+
+ add_value: (value) ->
+ @the_values.push(value)
+
+ n_of_samples: ->
+ return @the_values.length
+
+ sum: ->
+ total = 0
+ total += value for value in @the_values
+ return total
+
+ mean: ->
+ return @sum() / @n_of_samples()
+
+ median: ->
+ is_odd = @the_values.length % 2
+ median_position = Math.floor(@the_values.length / 2)
+ the_values_sorted = @the_values.sort((a,b) -> return a - b)
+ if is_odd
+ return the_values_sorted[median_position]
+ else
+ return (the_values_sorted[median_position] +
+ the_values_sorted[median_position - 1]) / 2
+
+ std_dev: ->
+ sum = 0
+ for value in @the_values
+ step_a = Math.pow(value - @mean(), 2)
+ sum += step_a
+ step_b = sum / @the_values.length
+ return Math.sqrt(step_b)
+
+ std_error: ->
+ return @std_dev() / Math.sqrt(@n_of_samples())
+
+
+bxd_only = new Stats([3, 5, 7, 8])
+console.log("[red] bxd_only mean:", bxd_only.mean())
+console.log("[green] bxd_only median:", bxd_only.median())
+console.log("[purple] bxd_only std_dev:", bxd_only.std_dev())
+console.log("[magenta] bxd_only std_error:", bxd_only.std_error())
+
+window.Stats = Stats \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/stats.js b/wqflask/wqflask/static/new/javascript/stats.js
new file mode 100644
index 00000000..f95d03d4
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/stats.js
@@ -0,0 +1,81 @@
+// Generated by CoffeeScript 1.3.3
+(function() {
+ var Stats, bxd_only;
+
+ Stats = (function() {
+
+ function Stats(the_values) {
+ this.the_values = the_values;
+ }
+
+ Stats.prototype.add_value = function(value) {
+ return this.the_values.push(value);
+ };
+
+ Stats.prototype.n_of_samples = function() {
+ return this.the_values.length;
+ };
+
+ Stats.prototype.sum = function() {
+ var total, value, _i, _len, _ref;
+ total = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ total += value;
+ }
+ return total;
+ };
+
+ Stats.prototype.mean = function() {
+ return this.sum() / this.n_of_samples();
+ };
+
+ Stats.prototype.median = function() {
+ var is_odd, median_position, the_values_sorted;
+ is_odd = this.the_values.length % 2;
+ median_position = Math.floor(this.the_values.length / 2);
+ the_values_sorted = this.the_values.sort(function(a, b) {
+ return a - b;
+ });
+ if (is_odd) {
+ return the_values_sorted[median_position];
+ } else {
+ return (the_values_sorted[median_position] + the_values_sorted[median_position - 1]) / 2;
+ }
+ };
+
+ Stats.prototype.std_dev = function() {
+ var step_a, step_b, sum, value, _i, _len, _ref;
+ sum = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ step_a = Math.pow(value - this.mean(), 2);
+ sum += step_a;
+ }
+ step_b = sum / this.the_values.length;
+ return Math.sqrt(step_b);
+ };
+
+ Stats.prototype.std_error = function() {
+ return this.std_dev() / Math.sqrt(this.n_of_samples());
+ };
+
+ return Stats;
+
+ })();
+
+ bxd_only = new Stats([3, 5, 7, 8]);
+
+ console.log("[red] bxd_only mean:", bxd_only.mean());
+
+ console.log("[green] bxd_only median:", bxd_only.median());
+
+ console.log("[purple] bxd_only std_dev:", bxd_only.std_dev());
+
+ console.log("[magenta] bxd_only std_error:", bxd_only.std_error());
+
+ window.Stats = Stats;
+
+}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
index 2952bef5..c44582db 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
@@ -19,54 +19,56 @@ $ ->
$(".stats_mdp").change(stats_mdp_change)
- update_stat_values = (the_values)->
+ change_stats_value = (category, value_type, the_value)->
+ id = "#" + process_id(category, value_type)
+ in_box = $(id).html
+
+ current_value = parseFloat($(in_box)).toFixed(2)
+
+ if the_value != current_value
+ $(id).html(the_value).effect("highlight")
+
+ update_stat_values = (sample_sets)->
for category in ['primary_only', 'other_only', 'all_cases']
- # Mean
- id = "#" + process_id(category, "mean")
- total = 0
- total += value for value in the_values[category]
- the_mean = total / the_values[category].length
- the_mean = the_mean.toFixed(2)
- in_box = $(id).html
-
- current_mean = parseFloat($(in_box)).toFixed(2)
-
- if the_mean != current_mean
- $(id).html(the_mean).effect("highlight")
-
# Number of samples
- n_of_samples = the_values[category].length
+ n_of_samples = sample_sets[category].n_of_samples()
id = "#" + process_id(category, "n_of_samples")
current_n_of_samples = $(id).html()
if n_of_samples != current_n_of_samples
$(id).html(n_of_samples).effect("highlight")
+
+ # Mean
+ #id = "#" + process_id(category, "mean")
+
+ the_mean = sample_sets[category].mean()
+ the_mean = the_mean.toFixed(2)
+ change_stats_value(category, "mean", the_mean)
+ #in_box = $(id).html
+ #current_mean = parseFloat($(in_box)).toFixed(2)
+
+ #if the_mean != current_mean
+ # $(id).html(the_mean).effect("highlight")
# Median
id = "#" + process_id(category, "median")
+ the_median = sample_sets[category].median()
+ the_median = the_median.toFixed(2)
+ in_box = $(id).html
+
+ current_median = parseFloat($(in_box)).toFixed(2)
- is_odd = the_values[category].length % 2
- median_position = Math.floor(the_values[category].length / 2)
-
- # sort numerically
- the_values_sorted = the_values[category].sort((a, b) -> return a - b)
- if is_odd
- the_median = the_values_sorted[median_position]
- else
- the_median = (the_values_sorted[median_position] +
- the_values_sorted[median_position + 1]) / 2
- current_median = $(id).html()
if the_median != current_median
$(id).html(the_median).effect("highlight")
# Todo: Compare stat values to genenetwork.org current code / sample vs. population
# Standard deviation
sum = 0
- for value in the_values[category]
+ for value in sample_sets[category]
step_a = Math.pow(value - the_mean, 2)
sum += step_a
- step_b = sum / the_values[category].length
+ step_b = sum / sample_sets[category].length
sd = Math.sqrt(step_b)
sd = sd.toFixed(2)
@@ -76,35 +78,32 @@ $ ->
$(id).html(sd).effect("highlight")
- edit_data_change = ->
- the_values =
- primary_only: []
- other_only: []
- all_cases: []
- console.log("at beginning:", the_values)
+ edit_data_change = ->
+ sample_sets =
+ primary_only: new Stats([])
+ other_only: new Stats([])
+ all_cases: new Stats([])
+
+ console.log("at beginning:", sample_sets)
values = $('#value_table').find(".edit_strain_value")
- #console.log("values are:", values)
+
for value in values
real_value = $(value).val()
- #console.log("parent is:", $(value).closest("tr"))
row = $(value).closest("tr")
- console.log("row is:", row)
- console.log("row[0].id is:", row[0].id)
category = row[0].id
checkbox = $(row).find(".edit_strain_checkbox")
checked = $(checkbox).attr('checked')
- if not checked
- console.log("Not checked")
- continue
- if is_number(real_value) and real_value != ""
+
+ if checked and is_number(real_value) and real_value != ""
real_value = parseFloat(real_value)
if _(category).startsWith("Primary")
- the_values.primary_only.push(real_value)
+ sample_sets.primary_only.add_value(real_value)
else if _(category).startsWith("Other")
- the_values.other_only.push(real_value)
- the_values.all_cases.push(real_value)
- console.log("towards end:", the_values)
- update_stat_values(the_values)
+ sample_sets.other_only.add_value(real_value)
+ sample_sets.all_cases.add_value(real_value)
+ console.log("towards end:", sample_sets)
+ update_stat_values(sample_sets)
+
make_table = ->
header = "<thead><tr><th>&nbsp;</th>"
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
index 04f43822..b4eed350 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
@@ -10,7 +10,7 @@
};
$(function() {
- var edit_data_change, hide_tabs, make_table, on_corr_method_change, process_id, show_hide_outliers, stats_mdp_change, update_stat_values;
+ var change_stats_value, edit_data_change, hide_tabs, make_table, on_corr_method_change, process_id, show_hide_outliers, stats_mdp_change, update_stat_values;
hide_tabs = function(start) {
var x, _i, _results;
_results = [];
@@ -27,55 +27,46 @@
return $("#stats_tabs" + selected).show();
};
$(".stats_mdp").change(stats_mdp_change);
- update_stat_values = function(the_values) {
- var category, current_mean, current_median, current_n_of_samples, current_sd, id, in_box, is_odd, median_position, n_of_samples, sd, step_a, step_b, sum, the_mean, the_median, the_values_sorted, total, value, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
+ change_stats_value = function(category, value_type, the_value) {
+ var current_value, id, in_box;
+ id = "#" + process_id(category, value_type);
+ in_box = $(id).html;
+ current_value = parseFloat($(in_box)).toFixed(2);
+ if (the_value !== current_value) {
+ return $(id).html(the_value).effect("highlight");
+ }
+ };
+ update_stat_values = function(sample_sets) {
+ var category, current_median, current_n_of_samples, current_sd, id, in_box, n_of_samples, sd, step_a, step_b, sum, the_mean, the_median, value, _i, _j, _len, _len1, _ref, _ref1, _results;
_ref = ['primary_only', 'other_only', 'all_cases'];
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
category = _ref[_i];
- id = "#" + process_id(category, "mean");
- total = 0;
- _ref1 = the_values[category];
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- value = _ref1[_j];
- total += value;
- }
- the_mean = total / the_values[category].length;
- the_mean = the_mean.toFixed(2);
- in_box = $(id).html;
- current_mean = parseFloat($(in_box)).toFixed(2);
- if (the_mean !== current_mean) {
- $(id).html(the_mean).effect("highlight");
- }
- n_of_samples = the_values[category].length;
+ n_of_samples = sample_sets[category].n_of_samples();
id = "#" + process_id(category, "n_of_samples");
current_n_of_samples = $(id).html();
if (n_of_samples !== current_n_of_samples) {
$(id).html(n_of_samples).effect("highlight");
}
+ the_mean = sample_sets[category].mean();
+ the_mean = the_mean.toFixed(2);
+ change_stats_value(category, "mean", the_mean);
id = "#" + process_id(category, "median");
- is_odd = the_values[category].length % 2;
- median_position = Math.floor(the_values[category].length / 2);
- the_values_sorted = the_values[category].sort(function(a, b) {
- return a - b;
- });
- if (is_odd) {
- the_median = the_values_sorted[median_position];
- } else {
- the_median = (the_values_sorted[median_position] + the_values_sorted[median_position + 1]) / 2;
- }
- current_median = $(id).html();
+ the_median = sample_sets[category].median();
+ the_median = the_median.toFixed(2);
+ in_box = $(id).html;
+ current_median = parseFloat($(in_box)).toFixed(2);
if (the_median !== current_median) {
$(id).html(the_median).effect("highlight");
}
sum = 0;
- _ref2 = the_values[category];
- for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
- value = _ref2[_k];
+ _ref1 = sample_sets[category];
+ for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+ value = _ref1[_j];
step_a = Math.pow(value - the_mean, 2);
sum += step_a;
}
- step_b = sum / the_values[category].length;
+ step_b = sum / sample_sets[category].length;
sd = Math.sqrt(step_b);
sd = sd.toFixed(2);
id = "#" + process_id(category, "sd");
@@ -89,39 +80,33 @@
return _results;
};
edit_data_change = function() {
- var category, checkbox, checked, real_value, row, the_values, value, values, _i, _len;
- the_values = {
- primary_only: [],
- other_only: [],
- all_cases: []
+ var category, checkbox, checked, real_value, row, sample_sets, value, values, _i, _len;
+ sample_sets = {
+ primary_only: new Stats([]),
+ other_only: new Stats([]),
+ all_cases: new Stats([])
};
- console.log("at beginning:", the_values);
+ console.log("at beginning:", sample_sets);
values = $('#value_table').find(".edit_strain_value");
for (_i = 0, _len = values.length; _i < _len; _i++) {
value = values[_i];
real_value = $(value).val();
row = $(value).closest("tr");
- console.log("row is:", row);
- console.log("row[0].id is:", row[0].id);
category = row[0].id;
checkbox = $(row).find(".edit_strain_checkbox");
checked = $(checkbox).attr('checked');
- if (!checked) {
- console.log("Not checked");
- continue;
- }
- if (is_number(real_value) && real_value !== "") {
+ if (checked && is_number(real_value) && real_value !== "") {
real_value = parseFloat(real_value);
if (_(category).startsWith("Primary")) {
- the_values.primary_only.push(real_value);
+ sample_sets.primary_only.add_value(real_value);
} else if (_(category).startsWith("Other")) {
- the_values.other_only.push(real_value);
+ sample_sets.other_only.add_value(real_value);
}
- the_values.all_cases.push(real_value);
+ sample_sets.all_cases.add_value(real_value);
}
}
- console.log("towards end:", the_values);
- return update_stat_values(the_values);
+ console.log("towards end:", sample_sets);
+ return update_stat_values(sample_sets);
};
make_table = function() {
var header, key, row, row_line, rows, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
diff --git a/wqflask/wqflask/templates/trait_data_and_analysis.html b/wqflask/wqflask/templates/trait_data_and_analysis.html
index 16f2e2be..1f33dee5 100644
--- a/wqflask/wqflask/templates/trait_data_and_analysis.html
+++ b/wqflask/wqflask/templates/trait_data_and_analysis.html
@@ -1310,13 +1310,15 @@
</tr>
<script>
- js_data = {{ js_data | safe }}
- </script>-->
+ js_data = {{ js_data | safe }}
+ </script>
<script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>-->
<script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
+
+ <script type="text/javascript" src="/static/new/javascript/stats.js"></script>
<script type="text/javascript" src="/static/new/javascript/trait_data_and_analysis.js"></script>
-
+
<!-- End of body -->