Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Side by Side Diff: bower_components/chartnewjs/Add-ins/stats.js

Issue 786953007: npm_modules: Fork bower_components into Polymer 0.4.0 and 0.5.0 versions (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1
2 function stats(data, config) {
3 data.stats = {};
4 if (typeof data.datasets == 'undefined') { // Pie structure;
5 PSbasic(data);
6 } else { // line structure;
7 LSbasic(data);
8 Linear_Regression(data);
9 }
10 replace_stats(data, config);
11 return;
12 };
13
14 function isStat(val) {
15 if (typeof val == "string") {
16 if (val.indexOf("#") >= 0) return true;
17 }
18 return false;
19 };
20
21 function Linear_Regression(data) {
22 // compute Means - source of algorithm : http://fr.wikipedia.org/wiki/R% C3%A9gression_lin%C3%A9aire
23 data.stats.linear_regression_count_xPos = 0;
24 data.stats.linear_regression_sum_xPos = 0;
25 data.stats.linear_regression_sum_data = 0;
26 for (var i = 0; i < data.datasets.length; i++) {
27 if (!(typeof data.datasets[i].xPos == "undefined")) {
28 data.datasets[i].stats.linear_regression_sum_xPos = 0;
29 data.datasets[i].stats.linear_regression_sum_data = 0;
30 data.datasets[i].stats.linear_regression_count_xPos = 0;
31 data.datasets[i].stats.count_data = 0;
32 for (var j = 0; j < data.datasets[i].data.length; j++) {
33 if (!(typeof data.datasets[i].data[j] == "undefi ned") && !(typeof data.datasets[i].xPos[j] == "undefined")) {
34 data.stats.linear_regression_count_xPos+ +;
35 data.stats.linear_regression_sum_xPos += data.datasets[i].xPos[j];
36 data.stats.linear_regression_sum_data += data.datasets[i].data[j];
37 data.datasets[i].stats.linear_regression _count_xPos++;
38 data.datasets[i].stats.linear_regression _sum_xPos += data.datasets[i].xPos[j];
39 data.datasets[i].stats.linear_regression _sum_data += data.datasets[i].data[j];
40 }
41 }
42 if (data.datasets[i].stats.linear_regression_count_xPos > 0) {
43 data.datasets[i].stats.linear_regression_mean_xP os = data.datasets[i].stats.linear_regression_sum_xPos / data.datasets[i].stats. linear_regression_count_xPos;
44 data.datasets[i].stats.linear_regression_mean_da ta = data.datasets[i].stats.linear_regression_sum_data / data.datasets[i].stats. linear_regression_count_xPos;
45 }
46 }
47 }
48 // mean;
49 if (data.stats.linear_regression_count_xPos > 0) {
50 data.stats.linear_regression_mean_xPos = data.stats.linear_regre ssion_sum_xPos / data.stats.linear_regression_count_xPos;
51 data.stats.linear_regression_mean_data = data.stats.linear_regre ssion_sum_data / data.stats.linear_regression_count_xPos;
52 }
53 // Covariance - variance;
54 data.stats.linear_regression_covariance = 0;
55 data.stats.linear_regression_variance = 0;
56 for (var i = 0; i < data.datasets.length; i++) {
57 if (!(typeof data.datasets[i].xPos == "undefined")) {
58 data.datasets[i].stats.linear_regression_covariance = 0;
59 data.datasets[i].stats.linear_regression_variance = 0;
60 for (var j = 0; j < data.datasets[i].data.length; j++) {
61 if (!(typeof data.datasets[i].data[j] == "undefi ned") && !(typeof data.datasets[i].xPos[j] == "undefined")) {
62 data.stats.linear_regression_covariance += (data.datasets[i].xPos[j] - data.stats.linear_regression_mean_xPos) * (data.d atasets[i].data[j] - data.stats.linear_regression_mean_data);
63 data.stats.linear_regression_variance += (data.datasets[i].xPos[j] - data.stats.linear_regression_mean_xPos) * (data.dat asets[i].xPos[j] - data.stats.linear_regression_mean_xPos);
64 data.datasets[i].stats.linear_regression _covariance += (data.datasets[i].xPos[j] - data.datasets[i].stats.linear_regress ion_mean_xPos) * (data.datasets[i].data[j] - data.datasets[i].stats.linear_regre ssion_mean_data);
65 data.datasets[i].stats.linear_regression _variance += (data.datasets[i].xPos[j] - data.datasets[i].stats.linear_regressio n_mean_xPos) * (data.datasets[i].xPos[j] - data.datasets[i].stats.linear_regress ion_mean_xPos);
66 }
67 }
68 if (data.datasets[i].stats.linear_regression_count_xPos > 0) {
69 data.datasets[i].stats.linear_regression_covaria nce /= data.datasets[i].stats.linear_regression_count_xPos;
70 data.datasets[i].stats.linear_regression_varianc e /= data.datasets[i].stats.linear_regression_count_xPos;
71 data.datasets[i].stats.linear_regression_b1 = da ta.datasets[i].stats.linear_regression_covariance / data.datasets[i].stats.linea r_regression_variance;
72 data.datasets[i].stats.linear_regression_b0 = da ta.datasets[i].stats.linear_regression_mean_data - data.datasets[i].stats.linear _regression_b1 * data.datasets[i].stats.linear_regression_mean_xPos;
73 }
74 }
75 }
76 // b1 - b0;
77 if (data.stats.linear_regression_count_xPos > 0) {
78 data.stats.linear_regression_covariance /= data.stats.linear_reg ression_count_xPos;
79 data.stats.linear_regression_variance /= data.stats.linear_regre ssion_count_xPos;
80 data.stats.linear_regression_b1 = data.stats.linear_regression_c ovariance / data.stats.linear_regression_variance;
81 data.stats.linear_regression_b0 = data.stats.linear_regression_m ean_data - data.stats.linear_regression_b1 * data.stats.linear_regression_mean_x Pos;
82 }
83 }
84
85 function PSbasic(data) {
86 data.stats.sum = 0;
87 data.stats.count_all = 0;
88 data.stats.count_missing = 0;
89 data.stats.count_not_missing = 0;
90 data.stats.mean = undefined;
91 data.stats.sum_square_diff_mean = 0;
92 data.stats.standard_deviation = undefined;
93 data.stats.standard_deviation_estimation = undefined;
94 data.stats.student_t_test = undefined;
95 data.stats.coefficient_variation = undefined;
96 data.stats.data_with_stats = false;
97 for (var i = 0; i < data["length"]; i++) {
98 if (!isStat(data[i].value)) {
99 (data.stats.count_all) ++;
100 } else data.stats.data_with_stats = true;
101 if (typeof data[i].value == "undefined") {
102 (data.stats.count_missing) ++;
103 } else if (isStat(data[i].value)) {} else {
104 (data.stats.count_not_missing) ++;
105 (data.stats.sum) += 1 * data[i].value;
106 }
107 }
108 if (data.stats.count_not_missing > 0) {
109 data.stats.mean = data.stats.sum / data.stats.count_not_missing;
110 }
111 // sum of (val-mean)2;
112 // sum of (val-mean)3;
113 data.stats.sum_square_diff_mean = 0;
114 data.stats.sum_pow3_diff_mean = 0;
115 data.stats.sum_pow4_diff_mean = 0;
116 for (var i = 0; i < data["length"]; i++) {
117 if (typeof data[i].value != "undefined" && !isStat(data[i].value )) {
118 data.stats.sum_square_diff_mean += Math.pow(data[i].valu e - data.stats.mean, 2);
119 data.stats.sum_pow3_diff_mean += Math.pow(data[i].value - data.stats.mean, 3);
120 data.stats.sum_pow4_diff_mean += Math.pow(data[i].value - data.stats.mean, 4);
121 }
122 }
123 // standard deviation;
124 if (data.stats.count_not_missing > 0) {
125 data.stats.variance = data.stats.sum_square_diff_mean / data.sta ts.count_not_missing;
126 data.stats.standard_deviation = Math.sqrt(data.stats.sum_square_ diff_mean / data.stats.count_not_missing);
127 data.stats.standard_error_mean = Math.sqrt(data.stats.sum_square _diff_mean) / data.stats.count_not_missing;
128 }
129 // standard deviation estimation;
130 if (data.stats.count_not_missing > 1) {
131 data.stats.standard_deviation_estimation = Math.sqrt(data.stats. sum_square_diff_mean / (data.stats.count_not_missing - 1));
132 if (data.stats.mean > 0) data.stats.coefficient_variation = 100 * data.stats.standard_deviation_estimation / data.stats.mean;
133 if (data.stats.standard_deviation_estimation > 0) data.stats.stu dent_t_test = data.stats.mean / (data.stats.standard_deviation_estimation / Math .sqrt(data.stats.count_not_missing));
134 console.log(data.stats.mean);
135 console.log(data.stats.standard_deviation_estimation);
136 console.log(data.stats.count_not_missing);
137 }
138 // skewness;
139 if (data.stats.count_not_missing > 2) {
140 data.stats.skewness = (data.stats.count_not_missing * data.stats .sum_pow3_diff_mean) / (Math.pow(data.stats.standard_deviation_estimation, 3) * (data.stats.count_not_missing - 1) * (data.stats.count_not_missing - 2));
141 } else {
142 data.stats.skewness = undefined;
143 }
144 // kutosis;
145 if (data.stats.count_not_missing > 3) {
146 data.stats.kurtosis = (data.stats.count_not_missing * (data.stat s.count_not_missing + 1) * data.stats.sum_pow4_diff_mean) / (Math.pow(data.stats .standard_deviation_estimation, 4) * (data.stats.count_not_missing - 1) * (data. stats.count_not_missing - 2) * (data.stats.count_not_missing - 3)) - 3 * (data.s tats.count_not_missing - 1) * (data.stats.count_not_missing - 1) / ((data.stats. count_not_missing - 2) * (data.stats.count_not_missing - 3));
147 } else {
148 data.stats.kurtosis = undefined;
149 }
150 // ordering stats;
151 var orderStat = new Array();
152 cnt = 0;
153 for (i = 0; i < data.length; i++) {
154 if (typeof data[i].value != "undefined" && !isStat(data[i].value )) {
155 orderStat[cnt] = {
156 val: 1 * data[i].value,
157 one: 1
158 };
159 cnt++;
160 }
161 }
162 var setStat = new Array();
163 setStat = Pstats(orderStat, "one");
164 for (i = 0; i < setStat.length; i++) {
165 data.stats.minimum = setStat[i].res.minimum;
166 data.stats.maximum = setStat[i].res.maximum;
167 data.stats.Q0 = setStat[i].res.Q0;
168 data.stats.Q1 = setStat[i].res.Q1;
169 data.stats.Q5 = setStat[i].res.Q5;
170 data.stats.Q10 = setStat[i].res.Q10;
171 data.stats.Q25 = setStat[i].res.Q25;
172 data.stats.Q50 = setStat[i].res.Q50;
173 data.stats.Q75 = setStat[i].res.Q75;
174 data.stats.Q90 = setStat[i].res.Q90;
175 data.stats.Q95 = setStat[i].res.Q95;
176 data.stats.Q99 = setStat[i].res.Q99;
177 data.stats.Q100 = setStat[i].res.Q100;
178 data.stats.median = setStat[i].res.median;
179 data.stats.interquartile_range = data.stats.Q75 - data.stats.Q25 ;
180 }
181 };
182
183 function LSbasic(data) {
184 data.stats.sum = 0;
185 data.stats.count_all = 0;
186 data.stats.count_missing = 0;
187 data.stats.count_not_missing = 0;
188 data.stats.mean = undefined;
189 data.stats.sum_square_diff_mean = 0;
190 data.stats.sum_pow3_diff_mean = 0;
191 data.stats.sum_pow4_diff_mean = 0;
192 data.stats.standard_deviation = undefined;
193 data.stats.standard_deviation_estimation = undefined;
194 data.stats.student_t_test = undefined;
195 data.stats.coefficient_variation = undefined;
196 data.stats.data_with_stats = false;
197 data.stats.data_minimum = {};
198 data.stats.data_maximum = {};
199 data.stats.data_Q0 = {};
200 data.stats.data_Q1 = {};
201 data.stats.data_Q5 = {};
202 data.stats.data_Q10 = {};
203 data.stats.data_Q25 = {};
204 data.stats.data_Q50 = {};
205 data.stats.data_Q75 = {};
206 data.stats.data_Q90 = {};
207 data.stats.data_Q95 = {};
208 data.stats.data_Q99 = {};
209 data.stats.data_Q100 = {};
210 data.stats.data_median = {};
211 data.stats.data_sum = {};
212 data.stats.data_count_all = {};
213 data.stats.data_count_missing = {};
214 data.stats.data_count_not_missing = {};
215 data.stats.data_mean = {};
216 data.stats.data_sum_square_diff_mean = {};
217 data.stats.data_sum_pow3_diff_mean = {};
218 data.stats.data_sum_pow4_diff_mean = {};
219 data.stats.data_variance = {};
220 data.stats.data_standard_deviation = {};
221 data.stats.data_standard_error_mean = {};
222 data.stats.data_standard_deviation_estimation = {};
223 data.stats.data_student_t_test = {};
224 data.stats.data_coefficient_variation = {};
225 data.stats.data_skewness = {};
226 data.stats.data_kurtosis = {};
227 data.stats.data_interquartile_range = {};
228 data.stats.max_number_data = 0;
229 data.stats.min_number_data = Number.MAX_VALUE;
230 for (var i = 0; i < data.datasets["length"]; i++) {
231 data.datasets[i].stats = {};
232 data.datasets[i].stats.sum = 0;
233 data.datasets[i].stats.count_all = 0;
234 data.datasets[i].stats.count_missing = 0;
235 data.datasets[i].stats.count_not_missing = 0;
236 data.datasets[i].stats.mean = undefined;
237 data.datasets[i].stats.sum_square_diff_mean = 0;
238 data.datasets[i].stats.sum_pow3_diff_mean = 0;
239 data.datasets[i].stats.sum_pow4_diff_mean = 0;
240 data.datasets[i].stats.standard_deviation = undefined;
241 if (data.datasets[i].data["length"] > data.stats.max_number_data ) {
242 for (var k = data.stats.max_number_data; k < data.datase ts[i].data["length"]; k++) {
243 data.stats.data_sum[k] = 0;
244 data.stats.data_count_all[k] = 0;
245 data.stats.data_count_missing[k] = 0;
246 data.stats.data_count_not_missing[k] = 0;
247 data.stats.data_mean[k] = undefined;
248 data.stats.data_sum_square_diff_mean[k] = 0;
249 data.stats.data_sum_pow3_diff_mean[k] = 0;
250 data.stats.data_sum_pow4_diff_mean[k] = 0;
251 data.stats.data_standard_deviation[k] = undefine d;
252 data.stats.data_standard_deviation_estimation[k] = undefined;
253 data.stats.data_student_t_test[k] = undefined;
254 data.stats.data_coefficient_variation[k] = undef ined;
255 }
256 data.stats.max_number_data = data.datasets[i].data["leng th"];
257 data.stats.min_number_data = Math.min(data.stats.min_num ber_data, data.datasets[i].data["length"]);
258 }
259 for (var j = 0; j < data.datasets[i].data["length"]; j++) {
260 if (!isStat(data.datasets[i].data[j])) {
261 (data.stats.count_all) ++;
262 (data.datasets[i].stats.count_all) ++;
263 (data.stats.data_count_all[j]) ++;
264 } else {
265 data.stats.data_with_stats = true;
266 }
267 if (typeof data.datasets[i].data[j] == "undefined") {
268 (data.stats.count_missing) ++;
269 (data.datasets[i].stats.count_missing) ++;
270 (data.stats.data_count_missing[j]) ++;
271 } else if (isStat(data.datasets[i].data[j])) {} else {
272 (data.stats.count_not_missing) ++;
273 (data.datasets[i].stats.count_not_missing) ++;
274 (data.stats.data_count_not_missing[j]) ++;
275 (data.stats.sum) += 1 * data.datasets[i].data[j] ;
276 (data.datasets[i].stats.sum) += 1 * data.dataset s[i].data[j];
277 (data.stats.data_sum[j]) += 1 * data.datasets[i] .data[j];
278 }
279 }
280 if (data.datasets[i].stats.count_not_missing == 0) {
281 data.datasets[i].stats.minimum = undefined;
282 data.datasets[i].stats.maximum = undefined;
283 data.datasets[i].stats.sum = undefined;
284 data.datasets[i].stats.mean = undefined;
285 } else {
286 data.datasets[i].stats.mean = data.datasets[i].stats.sum / data.datasets[i].stats.count_not_missing;
287 }
288 }
289 if (data.stats.count_not_missing > 0) {
290 data.stats.mean = data.stats.sum / data.stats.count_not_missing;
291 }
292 for (i = 0; i < data.stats.max_number_data; i++) {
293 if (data.stats.data_count_not_missing[i] > 0) {
294 data.stats.data_mean[i] = data.stats.data_sum[i] / data. stats.data_count_not_missing[i];
295 }
296 }
297 // sum of (val-mean)2;
298 data.stats.sum_square_diff_mean = 0;
299 data.stats.sum_pow3_diff_mean = 0;
300 data.stats.sum_pow4_diff_mean = 0;
301 for (var i = 0; i < data.datasets["length"]; i++) {
302 data.datasets[i].stats.sum_square_diff_mean = 0;
303 data.datasets[i].stats.sum_pow3_diff_mean = 0;
304 data.datasets[i].stats.sum_pow4_diff_mean = 0;
305 for (var j = 0; j < data.datasets[i].data["length"]; j++) {
306 if (typeof data.datasets[i].data[j] != "undefined" && !i sStat(data.datasets[i].data[j].value)) {
307 data.stats.sum_square_diff_mean += Math.pow(data .datasets[i].data[j] - data.stats.mean, 2);
308 data.stats.sum_pow3_diff_mean += Math.pow(data.d atasets[i].data[j] - data.stats.mean, 3);
309 data.stats.sum_pow4_diff_mean += Math.pow(data.d atasets[i].data[j] - data.stats.mean, 4);
310 data.stats.data_sum_square_diff_mean[j] += Math. pow(data.datasets[i].data[j] - data.stats.data_mean[j], 2);
311 data.stats.data_sum_pow3_diff_mean[j] += Math.po w(data.datasets[i].data[j] - data.stats.data_mean[j], 3);
312 data.stats.data_sum_pow4_diff_mean[j] += Math.po w(data.datasets[i].data[j] - data.stats.data_mean[j], 4);
313 data.datasets[i].stats.sum_square_diff_mean += M ath.pow(data.datasets[i].data[j] - data.datasets[i].stats.mean, 2);
314 data.datasets[i].stats.sum_pow3_diff_mean += Mat h.pow(data.datasets[i].data[j] - data.datasets[i].stats.mean, 3);
315 data.datasets[i].stats.sum_pow4_diff_mean += Mat h.pow(data.datasets[i].data[j] - data.datasets[i].stats.mean, 4);
316 }
317 }
318 }
319 // standard deviation;
320 if (data.stats.count_not_missing > 0) {
321 data.stats.variance = data.stats.sum_square_diff_mean / data.sta ts.count_not_missing;
322 data.stats.standard_deviation = Math.sqrt(data.stats.sum_square_ diff_mean / data.stats.count_not_missing);
323 data.stats.standard_error_mean = Math.sqrt(data.stats.sum_square _diff_mean) / data.stats.count_not_missing;
324 }
325 for (i = 0; i < data.datasets["length"]; i++) {
326 if (data.datasets[i].stats.count_not_missing > 0) {
327 data.datasets[i].stats.variance = data.datasets[i].stats .sum_square_diff_mean / data.datasets[i].stats.count_not_missing;
328 data.datasets[i].stats.standard_deviation = Math.sqrt(da ta.datasets[i].stats.sum_square_diff_mean / data.datasets[i].stats.count_not_mis sing);
329 data.datasets[i].stats.standard_error_mean = Math.sqrt(d ata.datasets[i].stats.sum_square_diff_mean) / data.datasets[i].stats.count_not_m issing;
330 }
331 }
332 for (j = 0; j < data.stats.max_number_data; j++) {
333 if (data.stats.data_count_not_missing[j] > 0) {
334 data.stats.data_variance[j] = data.stats.data_sum_square _diff_mean[j] / data.stats.data_count_not_missing[j];
335 data.stats.data_standard_deviation[j] = Math.sqrt(data.s tats.data_sum_square_diff_mean[j] / data.stats.data_count_not_missing[j]);
336 data.stats.data_standard_error_mean[j] = Math.sqrt(data. stats.data_sum_square_diff_mean[j]) / data.stats.data_count_not_missing[j];
337 }
338 }
339 // standard deviation estimation;
340 if (data.stats.count_not_missing > 1) {
341 data.stats.standard_deviation_estimation = Math.sqrt(data.stats. sum_square_diff_mean / (data.stats.count_not_missing - 1));
342 if (data.stats.mean > 0) data.stats.coefficient_variation = 100 * data.stats.standard_deviation_estimation / data.stats.mean;
343 if (data.stats.standard_deviation_estimation > 0) data.stats.stu dent_t_test = data.stats.mean / (data.stats.standard_deviation_estimation / Math .sqrt(data.stats.count_not_missing));
344 }
345 for (i = 0; i < data.datasets["length"]; i++) {
346 if (data.datasets[i].stats.count_not_missing > 1) {
347 data.datasets[i].stats.standard_deviation_estimation = M ath.sqrt(data.datasets[i].stats.sum_square_diff_mean / (data.datasets[i].stats.c ount_not_missing - 1));
348 if (data.datasets[i].stats.mean > 0) data.datasets[i].st ats.coefficient_variation = 100 * data.datasets[i].stats.standard_deviation_esti mation / data.datasets[i].stats.mean;
349 if (data.datasets[i].stats.standard_deviation_estimation > 0) data.datasets[i].stats.student_t_test = data.datasets[i].stats.mean / (dat a.datasets[i].stats.standard_deviation_estimation / Math.sqrt(data.datasets[i].s tats.count_not_missing));
350 }
351 }
352 for (j = 0; j < data.stats.max_number_data; j++) {
353 if (data.stats.data_count_not_missing[j] > 1) {
354 data.stats.data_standard_deviation_estimation[j] = Math. sqrt(data.stats.data_sum_square_diff_mean[j] / (data.stats.data_count_not_missin g[j] - 1));
355 if (data.stats.data_mean[j] > 0) data.stats.data_coeffic ient_variation[j] = 100 * data.stats.data_standard_deviation_estimation[j] / dat a.stats.data_mean[j];
356 if (data.stats.data_standard_deviation_estimation[j] > 0 ) data.stats.data_student_t_test[j] = data.stats.data_mean[j] / (data.stats.data _standard_deviation_estimation[j] / Math.sqrt(data.stats.data_count_not_missing[ j]));
357 }
358 }
359 // skewness;
360 if (data.stats.count_not_missing >= 2) {
361 data.stats.skewness = (data.stats.count_not_missing * data.stats .sum_pow3_diff_mean) / (Math.pow(data.stats.standard_deviation_estimation, 3) * (data.stats.count_not_missing - 1) * (data.stats.count_not_missing - 2));
362 } else {
363 data.stats.skewness = undefined;
364 }
365 // kurtosis;
366 if (data.stats.count_not_missing >= 3) {
367 data.stats.kurtosis = (data.stats.count_not_missing * (data.stat s.count_not_missing + 1) * data.stats.sum_pow4_diff_mean) / (Math.pow(data.stats .standard_deviation_estimation, 4) * (data.stats.count_not_missing - 1) * (data. stats.count_not_missing - 2) * (data.stats.count_not_missing - 3)) - 3 * (data.s tats.count_not_missing - 1) * (data.stats.count_not_missing - 1) / ((data.stats. count_not_missing - 2) * (data.stats.count_not_missing - 3));
368 } else {
369 data.stats.kurtosis = undefined;
370 }
371 for (i = 0; i < data.datasets["length"]; i++) {
372 if (data.datasets[i].stats.count_not_missing >= 2) {
373 data.datasets[i].stats.skewness = (data.datasets[i].stat s.count_not_missing * data.datasets[i].stats.sum_pow3_diff_mean) / (Math.pow(dat a.datasets[i].stats.standard_deviation_estimation, 3) * (data.datasets[i].stats. count_not_missing - 1) * (data.datasets[i].stats.count_not_missing - 2));
374 } else {
375 data.datasets[i].stats.skewness = undefined;
376 }
377 if (data.datasets[i].stats.count_not_missing >= 3) {
378 data.datasets[i].stats.kurtosis = (data.datasets[i].stat s.count_not_missing * (data.datasets[i].stats.count_not_missing + 1) * data.data sets[i].stats.sum_pow4_diff_mean) / (Math.pow(data.datasets[i].stats.standard_de viation_estimation, 4) * (data.datasets[i].stats.count_not_missing - 1) * (data. datasets[i].stats.count_not_missing - 2) * (data.datasets[i].stats.count_not_mis sing - 3)) - 3 * (data.datasets[i].stats.count_not_missing - 1) * (data.datasets [i].stats.count_not_missing - 1) / ((data.datasets[i].stats.count_not_missing - 2) * (data.datasets[i].stats.count_not_missing - 3));
379 } else {
380 data.datasets[i].stats.kurtosis = undefined;
381 }
382 }
383 for (j = 0; j < data.stats.max_number_data; j++) {
384 if (data.stats.data_count_not_missing[j] >= 2) {
385 data.stats.data_skewness[j] = (data.stats.data_count_not _missing[j] * data.stats.data_sum_pow3_diff_mean[j]) / (Math.pow(data.stats.data _standard_deviation_estimation[j], 3) * (data.stats.data_count_not_missing[j] - 1) * (data.stats.data_count_not_missing[j] - 2));
386 } else {
387 data.stats.data_skewness[j] = undefined;
388 }
389 if (data.stats.data_count_not_missing[j] >= 3) {
390 data.stats.data_kurtosis[j] = (data.stats.data_count_not _missing[j] * (data.stats.data_count_not_missing[j] + 1) * data.stats.data_sum_p ow4_diff_mean[j]) / (Math.pow(data.stats.data_standard_deviation_estimation[j], 4) * (data.stats.data_count_not_missing[j] - 1) * (data.stats.data_count_not_mis sing[j] - 2) * (data.stats.data_count_not_missing[j] - 3)) - 3 * (data.stats.dat a_count_not_missing[j] - 1) * (data.stats.data_count_not_missing[j] - 1) / ((dat a.stats.data_count_not_missing[j] - 2) * (data.stats.data_count_not_missing[j] - 3));
391 } else {
392 data.stats.data_kurtosis[j] = undefined;
393 }
394 }
395 // ordering stats;
396 var orderStat = new Array();
397 cnt = 0;
398 for (i = 0; i < data.datasets["length"]; i++) {
399 for (j = 0; j < data.datasets[i].data["length"]; j++) {
400 if (typeof data.datasets[i].data[j] != "undefined" && !i sStat(data.datasets[i].data[j].value)) {
401 orderStat[cnt] = {
402 val: 1 * data.datasets[i].data[j],
403 dataset: i,
404 col: j,
405 one: 1
406 };
407 cnt++;
408 }
409 }
410 }
411 var setStat = new Array();
412 setStat = Pstats(orderStat, "one");
413 for (i = 0; i < setStat.length; i++) {
414 data.stats.minimum = setStat[i].res.minimum;
415 data.stats.maximum = setStat[i].res.maximum;
416 data.stats.Q0 = setStat[i].res.Q0;
417 data.stats.Q1 = setStat[i].res.Q1;
418 data.stats.Q5 = setStat[i].res.Q5;
419 data.stats.Q10 = setStat[i].res.Q10;
420 data.stats.Q25 = setStat[i].res.Q25;
421 data.stats.Q50 = setStat[i].res.Q50;
422 data.stats.Q75 = setStat[i].res.Q75;
423 data.stats.Q90 = setStat[i].res.Q90;
424 data.stats.Q95 = setStat[i].res.Q95;
425 data.stats.Q99 = setStat[i].res.Q99;
426 data.stats.Q100 = setStat[i].res.Q100;
427 data.stats.median = setStat[i].res.median;
428 data.stats.interquartile_range = data.stats.Q75 - data.stats.Q25 ;
429 }
430 setStat = Pstats(orderStat, "dataset");
431 for (i = 0; i < setStat.length; i++) {
432 data.datasets[setStat[i].secvalue].stats.minimum = setStat[i].re s.minimum;
433 data.datasets[setStat[i].secvalue].stats.maximum = setStat[i].re s.maximum;
434 data.datasets[setStat[i].secvalue].stats.Q0 = setStat[i].res.Q0;
435 data.datasets[setStat[i].secvalue].stats.Q1 = setStat[i].res.Q1;
436 data.datasets[setStat[i].secvalue].stats.Q5 = setStat[i].res.Q5;
437 data.datasets[setStat[i].secvalue].stats.Q10 = setStat[i].res.Q1 0;
438 data.datasets[setStat[i].secvalue].stats.Q25 = setStat[i].res.Q2 5;
439 data.datasets[setStat[i].secvalue].stats.Q50 = setStat[i].res.Q5 0;
440 data.datasets[setStat[i].secvalue].stats.Q75 = setStat[i].res.Q7 5;
441 data.datasets[setStat[i].secvalue].stats.Q90 = setStat[i].res.Q9 0;
442 data.datasets[setStat[i].secvalue].stats.Q95 = setStat[i].res.Q9 5;
443 data.datasets[setStat[i].secvalue].stats.Q99 = setStat[i].res.Q9 9;
444 data.datasets[setStat[i].secvalue].stats.Q100 = setStat[i].res.Q 100;
445 data.datasets[setStat[i].secvalue].stats.median = setStat[i].res .median;
446 data.datasets[setStat[i].secvalue].stats.interquartile_range = d ata.datasets[setStat[i].secvalue].stats.Q75 - data.datasets[setStat[i].secvalue] .stats.Q25;
447 }
448 setStat = Pstats(orderStat, "col");
449 for (i = 0; i < setStat.length; i++) {
450 data.stats.data_minimum[setStat[i].secvalue] = setStat[i].res.mi nimum;
451 data.stats.data_maximum[setStat[i].secvalue] = setStat[i].res.ma ximum;
452 data.stats.data_Q0[setStat[i].secvalue] = setStat[i].res.Q0;
453 data.stats.data_Q1[setStat[i].secvalue] = setStat[i].res.Q1;
454 data.stats.data_Q5[setStat[i].secvalue] = setStat[i].res.Q5;
455 data.stats.data_Q10[setStat[i].secvalue] = setStat[i].res.Q10;
456 data.stats.data_Q25[setStat[i].secvalue] = setStat[i].res.Q25;
457 data.stats.data_Q50[setStat[i].secvalue] = setStat[i].res.Q50;
458 data.stats.data_Q75[setStat[i].secvalue] = setStat[i].res.Q75;
459 data.stats.data_Q90[setStat[i].secvalue] = setStat[i].res.Q90;
460 data.stats.data_Q95[setStat[i].secvalue] = setStat[i].res.Q95;
461 data.stats.data_Q99[setStat[i].secvalue] = setStat[i].res.Q99;
462 data.stats.data_Q100[setStat[i].secvalue] = setStat[i].res.Q100;
463 data.stats.data_median[setStat[i].secvalue] = setStat[i].res.med ian;
464 data.stats.data_interquartile_range[setStat[i].secvalue] = data. stats.data_Q75[setStat[i].secvalue] - data.stats.data_Q25[setStat[i].secvalue];
465 }
466 };
467
468 function Pstats(orderStat, secVar) {
469 var result = new Array();
470 orderStat.sort(function(a, b) {
471 if (a[secVar] < b[secVar]) return -1
472 else if (a[secVar] > b[secVar]) return 1
473 if (a.val < b.val) return -1
474 else if (a.val > b.val) return 1
475 else return 0
476 });
477 var deb = 0,
478 fin = 0;
479 for (i = 1; i < orderStat.length; i++) {
480 if (orderStat[i][secVar] == orderStat[deb][secVar]) fin++;
481 else {
482 result[result.length] = {
483 secvalue: orderStat[deb][secVar],
484 res: P2stats(deb, fin, orderStat)
485 };
486 fin++;
487 deb = fin;
488 }
489 }
490 result[result.length] = {
491 secvalue: orderStat[deb][secVar],
492 res: P2stats(deb, fin, orderStat)
493 };
494 return result;
495 };
496
497 function P2stats(deb, fin, orderStat) {
498 return {
499 minimum: orderStat[deb].val,
500 maximum: orderStat[fin].val,
501 Q0: orderStat[deb].val,
502 Q1: Quantile(1, deb, fin, orderStat),
503 Q5: Quantile(5, deb, fin, orderStat),
504 Q10: Quantile(10, deb, fin, orderStat),
505 Q25: Quantile(25, deb, fin, orderStat),
506 Q50: Quantile(50, deb, fin, orderStat),
507 Q75: Quantile(75, deb, fin, orderStat),
508 Q90: Quantile(90, deb, fin, orderStat),
509 Q95: Quantile(95, deb, fin, orderStat),
510 Q99: Quantile(99, deb, fin, orderStat),
511 Q100: orderStat[fin].val,
512 median: Quantile(50, deb, fin, orderStat)
513 }
514 };
515
516 function Quantile(quant, deb, fin, orderStat) {
517 var nbobs = fin - deb + 1;
518 if (quant <= 50.01) {
519 var v1 = Math.ceil((nbobs * quant / 100) - 0.000001) - 1;
520 var v2 = Math.ceil(((nbobs + 1) * quant / 100) - 0.000001) - 1;
521 } else {
522 var v1 = Math.ceil((nbobs * (100 - quant) / 100) - 0.000001) - 1 ;
523 v1 = nbobs - v1 - 1;
524 var v2 = Math.ceil(((nbobs + 1) * (100 - quant) / 100) - 0.00000 1) - 1;
525 v2 = nbobs - v2 - 1;
526 }
527 // if(deb+v2>fin)v2=fin-deb-1;
528 return ((orderStat[deb + v1].val + orderStat[deb + v2].val) / 2);
529 };
530
531 function disp_stats(data) {
532 document.write("data.stats.count_all=" + data.stats.count_all + "<BR>");
533 document.write("data.stats.count_missing=" + data.stats.count_missing + "<BR>");
534 document.write("data.stats.count_not_missing=" + data.stats.count_not_mi ssing + "<BR>");
535 document.write("data.stats.minimum=" + data.stats.minimum + "<BR>");
536 document.write("data.stats.maximum=" + data.stats.maximum + "<BR>");
537 document.write("data.stats.sum=" + data.stats.sum + "<BR>");
538 document.write("data.stats.mean=" + data.stats.mean + "<BR>");
539 document.write("data.stats.sum_square_diff_mean=" + data.stats.sum_squar e_diff_mean + "<BR>");
540 document.write("data.stats.variance=" + data.stats.variance + "<BR>");
541 document.write("data.stats.standard _deviation=" + data.stats.standard_d eviation + "<BR>");
542 document.write("data.stats.standard_error_mean=" + data.stats.standard_e rror_mean + "<BR>");
543 document.write("data.stats.standard_deviation_estimation=" + data.stats. standard_deviation_estimation + "<BR>");
544 document.write("data.stats.coefficient_variation=" + data.stats.coeffici ent_variation + "<BR>");
545 document.write("data.stats.skewness=" + data.stats.skewness + "<BR>");
546 document.write("data.stats.kurtosis=" + data.stats.kurtosis + "<BR>");
547 document.write("data.stats.student_t_test=" + data.stats.student_t_test + "<BR>");
548 document.write("data.stats.Q0" + data.stats.Q0 + "<BR>");
549 document.write("data.stats.Q1=" + data.stats.Q1 + "<BR>");
550 document.write("data.stats.Q5=" + data.stats.Q5 + "<BR>");
551 document.write("data.stats.Q10=" + data.stats.Q10 + "<BR>");
552 document.write("data.stats.Q25=" + data.stats.Q25 + "<BR>");
553 document.write("data.stats.Q50=" + data.stats.Q50 + "<BR>");
554 document.write("data.stats.Q75=" + data.stats.Q75 + "<BR>");
555 document.write("data.stats.Q90=" + data.stats.Q90 + "<BR>");
556 document.write("data.stats.Q95=" + data.stats.Q95 + "<BR>");
557 document.write("data.stats.Q99=" + data.stats.Q99 + "<BR>");
558 document.write("data.stats.Q100=" + data.stats.Q100 + "<BR>");
559 document.write("data.stats.median=" + data.stats.median + "<BR>");
560 document.write("data.stats.interquartile_range=" + data.stats.interquart ile_range + "<BR>");
561 document.write("<hr>")
562 if (typeof data.datasets != 'undefined') {
563 for (i = 0; i < data.datasets.length; i++) {
564 document.write("<hr>")
565 document.write("DATASET: " + i + "<BR>");
566 document.write("data.datasets[" + i + "].stats.count_all =" + data.datasets[i].stats.count_all + "<BR>");
567 document.write("data.datasets[" + i + "].stats.count_mis sing=" + data.datasets[i].stats.count_missing + "<BR>");
568 document.write("data.datasets[" + i + "].stats.count_not _missing=" + data.datasets[i].stats.count_not_missing + "<BR>");
569 document.write("data.datasets[" + i + "].stats.minimum=" + data.datasets[i].stats.minimum + "<BR>");
570 document.write("data.datasets[" + i + "].stats.maximum=" + data.datasets[i].stats.maximum + "<BR>");
571 document.write("data.datasets[" + i + "].stats.sum=" + d ata.datasets[i].stats.sum + "<BR>");
572 document.write("data.datasets[" + i + "].stats.mean=" + data.datasets[i].stats.mean + "<BR>");
573 document.write("data.datasets[" + i + "].stats.sum_squar e_diff_mean=" + data.datasets[i].stats.sum_square_diff_mean + "<BR>");
574 document.write("data.datasets[" + i + "].stats.variance= " + data.datasets[i].stats.variance + "<BR>");
575 document.write("data.datasets[" + i + "].stats.standard_ deviation=" + data.datasets[i].stats.standard_deviation + "<BR>");
576 document.write("data.datasets[" + i + "].stats.standard_ error_mean=" + data.datasets[i].stats.standard_error_mean + "<BR>");
577 document.write("data.datasets[" + i + "].stats.standard_ deviation_estimation=" + data.datasets[i].stats.standard_deviation_estimation + "<BR>");
578 document.write("data.datasets[" + i + "].stats.student_t _test=" + data.datasets[i].stats.student_t_test + "<BR>");
579 document.write("data.datasets[" + i + "].stats.coefficie nt_variation=" + data.datasets[i].stats.coefficient_variation + "<BR>");
580 document.write("data.datasets[" + i + "]stats.skewness=" + data.datasets[i].stats.skewness + "<BR>");
581 document.write("data.datasets[" + i + "]stats.kurtosis=" + data.datasets[i].stats.kurtosis + "<BR>");
582 document.write("data.datasets[" + i + "].stats.Q0=" + da ta.datasets[i].stats.Q0 + "<BR>");
583 document.write("data.datasets[" + i + "].stats.Q1=" + da ta.datasets[i].stats.Q1 + "<BR>");
584 document.write("data.datasets[" + i + "].stats.Q5=" + da ta.datasets[i].stats.Q5 + "<BR>");
585 document.write("data.datasets[" + i + "].stats.Q10=" + d ata.datasets[i].stats.Q10 + "<BR>");
586 document.write("data.datasets[" + i + "].stats.Q25=" + d ata.datasets[i].stats.Q25 + "<BR>");
587 document.write("data.datasets[" + i + "].stats.Q50=" + d ata.datasets[i].stats.Q50 + "<BR>");
588 document.write("data.datasets[" + i + "].stats.Q75=" + d ata.datasets[i].stats.Q75 + "<BR>");
589 document.write("data.datasets[" + i + "].stats.Q90=" + d ata.datasets[i].stats.Q90 + "<BR>");
590 document.write("data.datasets[" + i + "].stats.Q95=" + d ata.datasets[i].stats.Q95 + "<BR>");
591 document.write("data.datasets[" + i + "].stats.Q99=" + d ata.datasets[i].stats.Q99 + "<BR>");
592 document.write("data.datasets[" + i + "].stats.Q100=" + data.datasets[i].stats.Q100 + "<BR>");
593 document.write("data.datasets[" + i + "].stats.median=" + data.datasets[i].stats.median + "<BR>");
594 document.write("data.datasets[" + i + "].stats.interquar tile_range=" + data.datasets[i].stats.interquartile_range + "<BR>");
595 }
596 document.write("<hr>")
597 for (i = 0; i < data.stats.max_number_data; i++) {
598 document.write("<hr>")
599 document.write("Data: " + i + "<BR>");
600 document.write("data.stats.data_count_all[" + i + "]=" + data.stats.data_count_all[i] + "<BR>");
601 document.write("data.stats.data_count_missing[" + i + "] =" + data.stats.data_count_missing[i] + "<BR>");
602 document.write("data.stats.data_count_not_missing[" + i + "]=" + data.stats.data_count_not_missing[i] + "<BR>");
603 document.write("data.stats.data_minimum[" + i + "]=" + d ata.stats.data_minimum[i] + "<BR>");
604 document.write("data.stats.data_maximum[" + i + "]=" + d ata.stats.data_maximum[i] + "<BR>");
605 document.write("data.stats.data_sum[" + i + "]=" + data. stats.data_sum[i] + "<BR>");
606 document.write("data.stats.data_mean[" + i + "]=" + data .stats.data_mean[i] + "<BR>");
607 document.write("data.stats.data_sum_square_diff_mean[" + i + "]=" + data.stats.data_sum_square_diff_mean[i] + "<BR>");
608 document.write("data.stats.data_variance[" + i + "]=" + data.stats.data_variance[i] + "<BR>");
609 document.write("data.stats.data_standard_deviation[" + i + "]=" + data.stats.data_standard_deviation[i] + "<BR>");
610 document.write("data.stats.data_standard_error_mean[" + i + "]=" + data.stats.data_standard_error_mean[i] + "<BR>");
611 document.write("data.stats.data_standard_deviation_estim ation[" + i + "]=" + data.stats.data_standard_deviation_estimation[i] + "<BR>");
612 document.write("data.stats.data_student_t_test[" + i + " ]=" + data.stats.data_student_t_test[i] + "<BR>");
613 document.write("data.stats.data_coefficient_variation[" + i + "]=" + data.stats.data_coefficient_variation[i] + "<BR>");
614 document.write("data.stats.data_skewness[" + i + "]=" + data.stats.data_skewness[i] + "<BR>");
615 document.write("data.stats.data_kurtosis[" + i + "]=" + data.stats.data_kurtosis[i] + "<BR>");
616 document.write("data.stats.data_Q0[" + i + "]=" + data.s tats.data_Q0[i] + "<BR>");
617 document.write("data.stats.data_Q1[" + i + "]=" + data.s tats.data_Q1[i] + "<BR>");
618 document.write("data.stats.data_Q5[" + i + "]=" + data.s tats.data_Q5[i] + "<BR>");
619 document.write("data.stats.data_Q10[" + i + "]=" + data. stats.data_Q10[i] + "<BR>");
620 document.write("data.stats.data_Q25[" + i + "]=" + data. stats.data_Q25[i] + "<BR>");
621 document.write("data.stats.data_Q50[" + i + "]=" + data. stats.data_Q50[i] + "<BR>");
622 document.write("data.stats.data_Q75[" + i + "]=" + data. stats.data_Q75[i] + "<BR>");
623 document.write("data.stats.data_Q90[" + i + "]=" + data. stats.data_Q90[i] + "<BR>");
624 document.write("data.stats.data_Q95[" + i + "]=" + data. stats.data_Q95[i] + "<BR>");
625 document.write("data.stats.data_Q99[" + i + "]=" + data. stats.data_Q99[i] + "<BR>");
626 document.write("data.stats.data_Q100[" + i + "]=" + data .stats.data_Q100[i] + "<BR>");
627 document.write("data.stats.data_median[" + i + "]=" + da ta.stats.data_median[i] + "<BR>");
628 document.write("data.stats.data_interquartile_range[" + i + "]=" + data.stats.data_interquartile_range[i] + "<BR>");
629 }
630 }
631 };
632
633 function replace_stats(data, config) {
634 // replace in the data
635 if (data.stats.data_with_stats) {
636 if (typeof data.datasets == 'undefined') { // Pie structure;
637 for (i = 0; i < data.length; i++) {
638 if (isStat(data[i].value)) data[i].value = repla ce_Stats_In(data[i].value, data, -1, -1);
639 // templates ?
640 if (isTemplate(data[i].value)) {
641 data[i].value = tmplStat(data[i].value, {
642 V1: 1
643 });
644 }
645 }
646 } else { // line structure;
647 for (var i = 0; i < data.datasets["length"]; i++) {
648 for (var j = 0; j < data.datasets[i].data["lengt h"]; j++) {
649 if (isStat(data.datasets[i].data[j])) {
650 data.datasets[i].data[j] = repla ce_Stats_In(data.datasets[i].data[j], data, i, j);
651 }
652 // templates ?
653 if (isTemplate(data.datasets[i].data[j]) ) {
654 data.datasets[i].data[j] = tmplS tat(data.datasets[i].data[j], {
655 V1: 1
656 });
657 }
658 }
659 }
660 }
661 }
662 // replace in other part of the data (titles)
663 if (typeof data.datasets == 'undefined') { // Pie structure;
664 for (i = 0; i < data.length; i++) {
665 if (isStat(data[i].title)) data[i].title = replace_Stats _In(data[i].title, data, -1, -1);
666 // templates ?
667 if (isTemplate(data[i].title)) {
668 data[i].title = tmplStat(data[i].title, {
669 V1: 1
670 });
671 }
672 }
673 } else { // line structure;
674 for (var i = 0; i < data.datasets["length"]; i++) {
675 if (isStat(data.datasets[i].title)) {
676 data.datasets[i].title = replace_Stats_In(data.d atasets[i].title, data, i, -1);
677 }
678 // templates ?
679 if (isTemplate(data.datasets[i].title)) {
680 data.datasets[i].title = tmplStat(data.datasets[ i].title, {
681 V1: 1
682 });
683 }
684 }
685 }
686 // replace in options
687 replace_in_object(config, data);
688 };
689
690 function replace_in_object(obj, data) {
691 for (var attrname in obj) {
692 if (typeof obj[attrname] == "object") {
693 replace_in_object(obj[attrname], data);
694 } else if (isStat(obj[attrname])) {
695 obj[attrname] = replace_Stats_In(obj[attrname], data, -1 , -1);
696 // templates if not a template option....
697 if (!(attrname == "annotateLabel" || attrname == "inGrap hDataTmpl" || attrname == "scaleLabel")) {
698 if (isTemplate(obj[attrname])) {
699 obj[attrname] = tmplStat(obj[attrname], {
700 V1: 1
701 });
702 }
703 }
704 }
705 }
706 };
707
708 function tmplStat(str, data) {
709 // Figure out if we're getting a template, or if we need to
710 // load the template - and be sure to cache the result.
711 var fn = !/\W/.test(str) ?
712 cachebis[str] = cachebis[str] ||
713 tmplbis(document.getElementById(str).innerHTML) :
714 // Generate a reusable function that will serve as a template
715 // generator (and which will be cached).
716 new Function("obj",
717 "var p=[],print=function(){p.push.apply(p,arguments);};" +
718 // Introduce the data as local variables using with(){}
719 "with(obj){p.push('" +
720 // Convert the template into pure JavaScript
721 str
722 .replace(/[\r\t\n]/g, " ")
723 .split("<%").join("\t")
724 .replace(/((^|%>)[^\t]*)'/g, "$1\r")
725 .replace(/\t=(.*?)%>/g, "',$1,'")
726 .split("\t").join("');")
727 .split("%>").join("p.push('")
728 .split("\r").join("\\'") + "');}return p.join('');");
729 // Provide some basic currying to the user
730 return data ? fn(data) : fn;
731 };
732
733 function isTemplate(strvar) {
734 if (typeof strvar == "string") {
735 if (strvar.indexOf("<%") >= 0) {
736 if (strvar.indexOf(">", strvar.indexOf("%>")) > 0) {
737 return true;
738 }
739 }
740 }
741 return false;
742 };
743
744 function replace_Stats_In(strval, data, dataset, coldata) {
745 var resval = "";
746 var start = 0;
747 var prevstat = true;
748 while (strval.indexOf("#", start) >= 0) {
749 // strval.substring(start,) ;
750 if (!prevstat) {
751 var statOf = convertStat(strval.substring(start, strval. indexOf("#", start)), data, dataset, coldata);
752 if (statOf.found) {
753 resval = resval + statOf.resval;
754 start = strval.indexOf("#", start) + 1;
755 prevstat = true;
756 } else {
757 resval = resval + "#" + statOf.resval;
758 start = strval.indexOf("#", start) + 1;
759 }
760 } else {
761 if (start > 0) resval = resval;
762 resval = resval + strval.substring(start, strval.indexOf ("#", start));
763 start = strval.indexOf("#", start) + 1;
764 prevstat = false;
765 }
766 }
767 if (!prevstat) resval = resval + "#";
768 resval = resval + strval.substring(start, strval.length);
769 return resval;
770 };
771
772 function convertStat(statval, data, dataset, coldata) {
773 var resval = statval;
774 var found = false;
775 if (typeof data.stats[statval.toLowerCase()] != "undefined" && typeof da ta.stats[statval.toLowerCase()] != "object") {
776 resval = data.stats[statval.toLowerCase()];
777 found = true;
778 } else if (statval.toLowerCase().substring(0, 3) == "ds_") {
779 stat = statval.toLowerCase().substring(3);
780 if (stat.indexOf("(") > 0) {
781 var vdataset = stat.substring(stat.indexOf("(") + 1);
782 vdataset = 1 * vdataset.substring(0, vdataset.indexOf(") "));
783 var stat = stat.substring(0, stat.indexOf("("));
784 } else {
785 vdataset = Math.max(1 * dataset, 0);
786 }
787 if (typeof data.datasets == "object") {
788 if (typeof data.datasets[vdataset] == "object") {
789 if (typeof data.datasets[vdataset].stats == "obj ect") {
790 if (typeof data.datasets[vdataset].stats [stat] == "number") {
791 resval = data.datasets[vdataset] .stats[stat];
792 found = true;
793 }
794 }
795 }
796 }
797 } else if (statval.toLowerCase().substring(0, 5) == "data_") {
798 stat = statval.toLowerCase().substring(5);
799 if (stat.indexOf("(") > 0) {
800 vdataset = stat.substring(stat.indexOf("(") + 1);
801 vdataset = 1 * vdataset.substring(0, vdataset.indexOf(") "));
802 stat = stat.substring(0, stat.indexOf("("));
803 } else {
804 vdataset = Math.max(1 * coldata, 0);
805 }
806 if (typeof data.datasets == "object") {
807 if (typeof data.stats["data_" + stat] == "object") {
808 if (typeof data.stats["data_" + stat][vdataset] == "number") {
809 resval = data.stats["data_" + stat][vdat aset];
810 found = true;
811 }
812 }
813 }
814 }
815 return {
816 found: found,
817 resval: resval
818 };
819 };
OLDNEW
« no previous file with comments | « bower_components/chartnewjs/Add-ins/gradientColor.js ('k') | bower_components/chartnewjs/ChartNew.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698