forked from sheetjs/sheetjs
		
	- all formats accept `sheetRows` option (fixes #1062 h/t @prog666) - `table_to_*` support for `sheetRows` - demo cleanup
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
 | |
| /* eslint-env node */
 | |
| var XLSX = require('xlsx');
 | |
| var pr = require('propel');
 | |
| var linest = require('./linest');
 | |
| 
 | |
| /* generate linreg.xlsx with 100 random points */
 | |
| linest.generate_random_file(100);
 | |
| 
 | |
| /* get the first worksheet as an array of arrays, skip the first row */
 | |
| var wb = XLSX.readFile('linreg.xlsx');
 | |
| var ws = wb.Sheets[wb.SheetNames[0]];
 | |
| var aoa = XLSX.utils.sheet_to_json(ws, {header:1, raw:true}).slice(1);
 | |
| 
 | |
| /* calculate the coefficients in JS */
 | |
| (function(aoa) {
 | |
| 	var x_ = 0, y_ = 0, xx = 0, xy = 0, n = aoa.length;
 | |
| 	for(var i = 0; i < n; ++i) {
 | |
| 		x_ += aoa[i][0] / n;
 | |
| 		y_ += aoa[i][1] / n;
 | |
| 		xx += aoa[i][0] * aoa[i][0];
 | |
| 		xy += aoa[i][0] * aoa[i][1];
 | |
| 	}
 | |
| 	var m = Math.fround((xy - n * x_ * y_)/(xx - n * x_ * x_));
 | |
| 	console.log(m, Math.fround(y_ - m * x_), "JS Post");
 | |
| })(aoa);
 | |
| 
 | |
| /* build X and Y vectors */
 | |
| var tensor = pr.tensor(aoa).transpose();
 | |
| var xs = tensor.slice(0, 1);
 | |
| var ys = tensor.slice(1, 1);
 | |
| 
 | |
| /* compute the coefficient */
 | |
| var n = xs.size;
 | |
| var x_ = Math.fround(xs.reduceMean().dataSync()[0]);
 | |
| var y_ = Math.fround(ys.reduceMean().dataSync()[0]);
 | |
| var xx = Math.fround(xs.dot(xs.transpose()).dataSync()[0]);
 | |
| var xy = Math.fround(xs.dot(ys.transpose()).dataSync()[0]);
 | |
| var m = Math.fround((xy - n * x_ * y_)/(xx - n * x_ * x_));
 | |
| var b_ = Math.fround(y_ - m * x_);
 | |
| console.log(m, b_, "Propel");
 | |
| var yh = xs.mul(m).add(b_);
 | |
| 
 | |
| /* export data to aoa */
 | |
| var prdata = pr.concat([xs, ys, yh]).transpose();
 | |
| var shape = prdata.shape;
 | |
| var prarr = prdata.dataSync();
 | |
| var praoa = [];
 | |
| for(var j = 0; j < shape[0]; ++j) {
 | |
| 	praoa[j] = [];
 | |
| 	for(var i = 0; i < shape[1]; ++i) praoa[j][i] = prarr[j * shape[1] + i];
 | |
| }
 | |
| 
 | |
| /* add headers and export */
 | |
| praoa.unshift(["x", "y", "pred"]);
 | |
| var new_ws = XLSX.utils.aoa_to_sheet(praoa);
 | |
| var new_wb = XLSX.utils.book_new();
 | |
| XLSX.utils.book_append_sheet(new_wb, new_ws, "Sheet1");
 | |
| XLSX.writeFile(new_wb, "propel.xls");
 |