New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

echarts-stat

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

echarts-stat - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

img/histogram.png

1968

dist/ecStat.js

@@ -24,5 +24,5 @@ (function webpackUniversalModuleDefinition(root, factory) {

/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };

@@ -34,3 +34,3 @@

/******/ // Flag the module as loaded
/******/ module.l = true;
/******/ module.loaded = true;

@@ -48,28 +48,2 @@ /******/ // Return the exports of the module

/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/ // __webpack_public_path__

@@ -79,3 +53,3 @@ /******/ __webpack_require__.p = "";

/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 12);
/******/ return __webpack_require__(0);
/******/ })

@@ -87,162 +61,296 @@ /************************************************************************/

var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
module.exports = __webpack_require__(1);
var number = __webpack_require__(1);
var objToString = Object.prototype.toString;
/**
* Get the size of a array
* @param {Array} data
* @return {Array}
*/
function size(data) {
var s = [];
while (isArray(data)) {
s.push(data.length);
data = data[0];
}
return s;
}
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
/**
* @param {*} value
* @return {boolean}
*/
function isArray(value) {
return objToString.call(value) === '[object Array]';
}
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
/**
* constructs a (m x n) array with all values 0
* @param {number} m the row
* @param {number} n the column
* @return {Array}
*/
function zeros(m, n) {
var zeroArray = [];
for (var i = 0; i < m ; i++) {
zeroArray[i] = [];
for (var j = 0; j < n; j++) {
zeroArray[i][j] = 0;
}
}
return zeroArray;
}
return {
/**
* Sums each element in the array
* @param {Array} vector
* @return {number}
*/
function sum(vector) {
var sum = 0;
for (var i = 0; i < vector.length; i++) {
sum += vector[i];
}
return sum;
}
clustering: __webpack_require__(2),
regression: __webpack_require__(6),
statistics: __webpack_require__(7),
histogram: __webpack_require__(16)
/**
* Computes the sum of the specified column elements in a two-dimensional array
* @param {Array.<Array>} dataList two-dimensional array
* @param {number} n the specified column, zero-based
* @return {number}
*/
function sumOfColumn(dataList, n) {
var sum = 0;
for (var i = 0; i < dataList.length; i++) {
sum += dataList[i][n];
}
return sum;
}
};
return {
size: size,
isArray: isArray,
zeros: zeros,
sum: sum,
sumOfColumn: sumOfColumn
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 1 */
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
/**
* Test whether value is a number.
* @param {*} value
* @return {boolean}
*/
function isNumber(value) {
return typeof value === 'number' && !isNaN(value);
}
var dataPreprocess = __webpack_require__(3);
var array = __webpack_require__(4);
var arraySize = array.size;
var sumOfColumn = array.sumOfColumn;
var arraySum = array.sum;
var zeros = array.zeros;
var isArray = array.isArray;
var mathSqrt = Math.sqrt;
var mathPow = Math.pow;
/**
* Test if a number is integer.
* @param {number} value
* @return {boolean}
*/
function isInteger(value) {
return isFinite(value) && value === Math.round(value);
}
/**
* KMeans of clustering algorithm
* @param {Array.<Array.<number>>} data two-dimension array
* @param {number} k the number of clusters in a dataset
* @return {Object}
*/
function kMeans(data, k) {
return {
isNumber: isNumber,
isInteger: isInteger
};
var size = arraySize(data);
// create array to assign data points to centroids, also holds SE of each point
var clusterAssigned = zeros(size[0], 2);
var centroids = createRandCent(data, k);
var clusterChanged = true;
var minDist;
var minIndex;
var distIJ;
var ptsInClust;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
while (clusterChanged) {
clusterChanged = false;
for (var i = 0; i < size[0]; i++) {
minDist = Infinity;
minIndex = -1;
for (var j = 0; j < k; j++) {
distIJ = distEuclid(data[i], centroids[j]);
if (distIJ < minDist) {
minDist = distIJ;
minIndex = j;
}
}
if (clusterAssigned[i][0] !== minIndex) {
clusterChanged = true;
}
clusterAssigned[i][0] = minIndex;
clusterAssigned[i][1] = mathPow(minDist, 2);
}
//recalculate centroids
for (var i = 0; i < k; i++) {
ptsInClust = [];
for (var j = 0; j < clusterAssigned.length; j++) {
if (clusterAssigned[j][0] === i) {
ptsInClust.push(data[j]);
}
}
centroids[i] = meanInColumns(ptsInClust);
}
}
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
var clusterWithKmeans = {
centroids: centroids,
clusterAssigned: clusterAssigned
};
return clusterWithKmeans;
}
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
/**
* Calculate the average of each column in a two-dimensional array
* and returns the values as an array.
* @param {Array.<Array>} dataList two-dimensional array
* @return {Array}
*/
function meanInColumns(dataList) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var size = array.size;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
var size = arraySize(dataList);
var meanArray = [];
var sum;
var mean;
for (var j = 0; j < size[1]; j++) {
sum = 0;
for (var i = 0; i < size[0]; i++) {
sum += dataList[i][j];
}
mean = sum / size[0];
meanArray.push(mean);
}
return meanArray;
}
/**
* Data preprocessing, filter the wrong data object.
* for example [12,] --- missing y value
* [,12] --- missing x value
* [12, b] --- incorrect y value
* ['a', 12] --- incorrect x value
* @param {Array.<Array>} data
* @return {Array.<Array.<number>>}
*/
function dataPreprocess(data) {
/**
* The combine of hierarchical clustering and k-means.
* @param {Array} data two-dimension array.
* @param {[type]} k the number of clusters in a dataset
* @param {boolean} stepByStep
* @return {}
*/
function hierarchicalKMeans(data, k, stepByStep) {
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var predata = [];
var arraySize = size(data);
for (var i = 0; i < arraySize[0]; i++) {
var isCorrect = true;
for (var j = 0; j < arraySize[1]; j++) {
if (!isNumber(data[i][j])) {
isCorrect = false;
}
}
if (isCorrect) {
predata.push(data[i]);
}
}
return predata;
}
var dataSet = dataPreprocess(data);
var size = arraySize(dataSet);
var clusterAssment = zeros(size[0], 2);
// initial center point
var centroid0 = meanInColumns(dataSet);
var centList = [centroid0];
var squareError;
for (var i = 0; i < size[0]; i++) {
squareError = distEuclid(dataSet[i], centroid0);
clusterAssment[i][1] = mathPow(squareError, 2);
}
var lowestSSE;
var ptsInClust;
var ptsNotClust;
var clusterInfo;
var sseSplit;
var sseNotSplit;
var index = 1;
var result = {
isEnd: false
};
return dataPreprocess;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
function oneStep() {
//the existing clusters are continuously divided
//until the number of clusters is k
if (index < k) {
lowestSSE = Infinity;
var centSplit;
var newCentroid;
var newClusterAss;
for (var j = 0; j < centList.length; j++) {
ptsInClust = [];
ptsNotClust = [];
for (var i = 0; i < clusterAssment.length; i++) {
if (clusterAssment[i][0] === j) {
ptsInClust.push(dataSet[i]);
}
else {
ptsNotClust.push(clusterAssment[i][1]);
}
}
clusterInfo = kMeans(ptsInClust, 2);
sseSplit = sumOfColumn(clusterInfo.clusterAssigned, 1);
sseNotSplit = arraySum(ptsNotClust);
if (sseSplit + sseNotSplit < lowestSSE) {
lowestSSE = sseNotSplit + sseSplit;
centSplit = j;
newCentroid = clusterInfo.centroids;
newClusterAss = clusterInfo.clusterAssigned;
}
}
for (var i = 0; i < newClusterAss.length; i++) {
if (newClusterAss[i][0] === 0) {
newClusterAss[i][0] = centSplit;
}
else if (newClusterAss[i][0] === 1) {
newClusterAss[i][0] = centList.length;
}
}
centList[centSplit] = newCentroid[0];
centList.push(newCentroid[1]);
for ( i = 0, j = 0; i < clusterAssment.length && j < newClusterAss.length; i++) {
if (clusterAssment[i][0] === centSplit) {
clusterAssment[i][0] = newClusterAss[j][0];
clusterAssment[i][1] = newClusterAss[j++][1];
}
}
var pointInClust = [];
for (var i = 0; i < centList.length; i++) {
pointInClust[i] = [];
for (var j = 0; j < clusterAssment.length; j++) {
if (clusterAssment[j][0] === i) {
pointInClust[i].push(dataSet[j]);
}
}
}
result.clusterAssment = clusterAssment;
result.centroids = centList;
result.pointsInCluster = pointInClust;
index++;
}
else {
result.isEnd = true;
}
return result;
}
var step = {
next: oneStep
};
if (!stepByStep) {
var result;
while (!(result = step.next()).isEnd);
return result;
}
else {
return step;
}
}
/**
* Create random centroid of kmeans.
* @param {Array.<number>} dataSet two-dimension array
* @param {number} k the number of centroids to be created
* @return {Array.<number>} random centroids of kmeans
*/
function createRandCent(dataSet, k) {
var size = arraySize(dataSet);
//constructs a two-dimensional array with all values 0
var centroids = zeros(k, size[1]);
var minJ;
var maxJ;
var rangeJ;
//create random cluster centers, within bounds of each dimension
for (var j = 0; j < size[1]; j++) {
minJ = dataSet[0][j];
maxJ = dataSet[0][j];
for (var i = 1; i < size[0]; i++) {
if (dataSet[i][j] < minJ) {
minJ = dataSet[i][j];
}
if (dataSet[i][j] > maxJ) {
maxJ = dataSet[i][j];
}
}
rangeJ = maxJ - minJ;
for (var i = 0; i < k; i++) {
centroids[i][j] = minJ + rangeJ * Math.random();
}
}
return centroids;
}
/**
* Distance method for calculating similarity
* @param {Array.<number>} vec1
* @param {Array.<nnumber>} vec2
* @return {number}
*/
function distEuclid(vec1, vec2) {
if (!isArray(vec1) && !isArray(vec2)) {
return mathSqrt(mathPow(vec1 - vec2, 2));
}
var powerSum = 0;
//subtract the corresponding elements in the vectors
for (var i = 0; i < vec1.length; i++) {
powerSum += mathPow(vec1[i] - vec2[i], 2);
}
return mathSqrt(powerSum);
}
return {
kMeans: kMeans,
hierarchicalKMeans: hierarchicalKMeans
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),

@@ -252,15 +360,57 @@ /* 3 */

var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
return {
var array = __webpack_require__(4);
var isArray = array.isArray;
var size = array.size;
var number = __webpack_require__(5);
var isNumber = number.isNumber;
clustering: __webpack_require__(4),
regression: __webpack_require__(5),
statistic: __webpack_require__(6)
/**
* Data preprocessing, filter the wrong data object.
* for example [12,] --- missing y value
* [,12] --- missing x value
* [12, b] --- incorrect y value
* ['a', 12] --- incorrect x value
* @param {Array.<Array>} data
* @return {Array.<Array.<number>>}
*/
function dataPreprocess(data) {
};
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var predata = [];
var arraySize = size(data);
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
if (arraySize.length === 1) {
for (var i = 0; i < arraySize[0]; i++) {
if (isNumber(data[i])) {
predata.push(data[i]);
}
}
}
else if (arraySize.length === 2) {
for (var i = 0; i < arraySize[0]; i++) {
var isCorrect = true;
for (var j = 0; j < arraySize[1]; j++) {
if (!isNumber(data[i][j])) {
isCorrect = false;
}
}
if (isCorrect) {
predata.push(data[i]);
}
}
}
return predata;
}
return dataPreprocess;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),

@@ -270,807 +420,961 @@ /* 4 */

var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var dataPreprocess = __webpack_require__(2);
var array = __webpack_require__(0);
var arraySize = array.size;
var sumOfColumn = array.sumOfColumn;
var arraySum = array.sum;
var zeros = array.zeros;
var isArray = array.isArray;
var mathSqrt = Math.sqrt;
var mathPow = Math.pow;
var objToString = Object.prototype.toString;
var arrayProto = Array.prototype;
var nativeMap = arrayProto.map;
/**
* KMeans of clustering algorithm
* @param {Array.<Array.<number>>} data two-dimension array
* @param {number} k the number of clusters in a dataset
* @return {Object}
*/
function kMeans(data, k) {
/**
* Get the size of a array
* @param {Array} data
* @return {Array}
*/
function size(data) {
var s = [];
while (isArray(data)) {
s.push(data.length);
data = data[0];
}
return s;
}
var size = arraySize(data);
// create array to assign data points to centroids, also holds SE of each point
var clusterAssigned = zeros(size[0], 2);
var centroids = createRandCent(data, k);
var clusterChanged = true;
var minDist;
var minIndex;
var distIJ;
var ptsInClust;
/**
* @param {*} value
* @return {boolean}
*/
function isArray(value) {
return objToString.call(value) === '[object Array]';
}
while (clusterChanged) {
clusterChanged = false;
for (var i = 0; i < size[0]; i++) {
minDist = Infinity;
minIndex = -1;
for (var j = 0; j < k; j++) {
distIJ = distEuclid(data[i], centroids[j]);
if (distIJ < minDist) {
minDist = distIJ;
minIndex = j;
}
}
if (clusterAssigned[i][0] !== minIndex) {
clusterChanged = true;
}
clusterAssigned[i][0] = minIndex;
clusterAssigned[i][1] = mathPow(minDist, 2);
}
//recalculate centroids
for (var i = 0; i < k; i++) {
ptsInClust = [];
for (var j = 0; j < clusterAssigned.length; j++) {
if (clusterAssigned[j][0] === i) {
ptsInClust.push(data[j]);
}
}
centroids[i] = meanInColumns(ptsInClust);
}
}
/**
* constructs a (m x n) array with all values 0
* @param {number} m the row
* @param {number} n the column
* @return {Array}
*/
function zeros(m, n) {
var zeroArray = [];
for (var i = 0; i < m ; i++) {
zeroArray[i] = [];
for (var j = 0; j < n; j++) {
zeroArray[i][j] = 0;
}
}
return zeroArray;
}
var clusterWithKmeans = {
centroids: centroids,
clusterAssigned: clusterAssigned
};
return clusterWithKmeans;
}
/**
* Sums each element in the array.
* Internal use, for performance considerations, to avoid
* unnecessary judgments and calculations.
* @param {Array} vector
* @return {number}
*/
function sum(vector) {
var sum = 0;
for (var i = 0; i < vector.length; i++) {
sum += vector[i];
}
return sum;
}
/**
* Calculate the average of each column in a two-dimensional array
* and returns the values as an array.
* @param {Array.<Array>} dataList two-dimensional array
* @return {Array}
*/
function meanInColumns(dataList) {
/**
* Computes the sum of the specified column elements in a two-dimensional array
* @param {Array.<Array>} dataList two-dimensional array
* @param {number} n the specified column, zero-based
* @return {number}
*/
function sumOfColumn(dataList, n) {
var sum = 0;
for (var i = 0; i < dataList.length; i++) {
sum += dataList[i][n];
}
return sum;
}
var size = arraySize(dataList);
var meanArray = [];
var sum;
var mean;
for (var j = 0; j < size[1]; j++) {
sum = 0;
for (var i = 0; i < size[0]; i++) {
sum += dataList[i][j];
}
mean = sum / size[0];
meanArray.push(mean);
}
return meanArray;
}
/**
* The combine of hierarchical clustering and k-means.
* @param {Array} data two-dimension array.
* @param {[type]} k the number of clusters in a dataset
* @param {boolean} stepByStep
* @return {}
*/
function hierarchicalKMeans(data, k, stepByStep) {
function ascending(a, b) {
var dataSet = dataPreprocess(data);
var size = arraySize(dataSet);
var clusterAssment = zeros(size[0], 2);
// initial center point
var centroid0 = meanInColumns(dataSet);
var centList = [centroid0];
var squareError;
for (var i = 0; i < size[0]; i++) {
squareError = distEuclid(dataSet[i], centroid0);
clusterAssment[i][1] = mathPow(squareError, 2);
}
var lowestSSE;
var ptsInClust;
var ptsNotClust;
var clusterInfo;
var sseSplit;
var sseNotSplit;
var index = 1;
var result = {
isEnd: false
};
return a > b ? 1 : a < b ? -1 : a === b ? 0 : NaN;
function oneStep() {
//the existing clusters are continuously divided
//until the number of clusters is k
if (index < k) {
lowestSSE = Infinity;
var centSplit;
var newCentroid;
var newClusterAss;
}
for (var j = 0; j < centList.length; j++) {
ptsInClust = [];
ptsNotClust = [];
for (var i = 0; i < clusterAssment.length; i++) {
if (clusterAssment[i][0] === j) {
ptsInClust.push(dataSet[i]);
}
else {
ptsNotClust.push(clusterAssment[i][1]);
}
}
clusterInfo = kMeans(ptsInClust, 2);
sseSplit = sumOfColumn(clusterInfo.clusterAssigned, 1);
sseNotSplit = arraySum(ptsNotClust);
if (sseSplit + sseNotSplit < lowestSSE) {
lowestSSE = sseNotSplit + sseSplit;
centSplit = j;
newCentroid = clusterInfo.centroids;
newClusterAss = clusterInfo.clusterAssigned;
}
}
/**
* Binary search algorithm --- this bisector is specidfied to histogram, which every bin like that [a, b),
* so the return value use to add 1.
* @param {Array.<number>} array
* @param {number} value
* @param {number} start
* @param {number} end
* @return {number}
*/
function bisect(array, value, start, end) { //移出去
for (var i = 0; i < newClusterAss.length; i++) {
if (newClusterAss[i][0] === 0) {
newClusterAss[i][0] = centSplit;
}
else if (newClusterAss[i][0] === 1) {
newClusterAss[i][0] = centList.length;
}
}
if (start == null) {
start = 0;
}
if (end == null) {
end = array.length;
}
while (start < end) {
var mid = Math.floor((start + end) / 2);
var compare = ascending(array[mid], value);
if (compare > 0) {
end = mid;
}
else if (compare < 0) {
start = mid + 1;
}
else {
return mid + 1;
}
}
return start;
}
centList[centSplit] = newCentroid[0];
centList.push(newCentroid[1]);
for ( i = 0, j = 0; i < clusterAssment.length && j < newClusterAss.length; i++) {
if (clusterAssment[i][0] === centSplit) {
clusterAssment[i][0] = newClusterAss[j][0];
clusterAssment[i][1] = newClusterAss[j++][1];
}
}
/**
* 数组映射
* @memberOf module:zrender/core/util
* @param {Array} obj
* @param {Function} cb
* @param {*} [context]
* @return {Array}
*/
function map(obj, cb, context) {
if (!(obj && cb)) {
return;
}
if (obj.map && obj.map === nativeMap) {
return obj.map(cb, context);
}
else {
var result = [];
for (var i = 0, len = obj.length; i < len; i++) {
result.push(cb.call(context, obj[i], i, obj));
}
return result;
}
}
var pointInClust = [];
for (var i = 0; i < centList.length; i++) {
pointInClust[i] = [];
for (var j = 0; j < clusterAssment.length; j++) {
if (clusterAssment[j][0] === i) {
pointInClust[i].push(dataSet[j]);
}
}
}
result.clusterAssment = clusterAssment;
result.centroids = centList;
result.pointsInCluster = pointInClust;
return {
size: size,
isArray: isArray,
zeros: zeros,
sum: sum,
sumOfColumn: sumOfColumn,
ascending: ascending,
bisect: bisect,
map: map
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
index++;
}
else {
result.isEnd = true;
}
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
return result;
}
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var step = {
next: oneStep
};
/**
* Test whether value is a number.
* @param {*} value
* @return {boolean}
*/
function isNumber(value) {
if (!stepByStep) {
var result;
while (!(result = step.next()).isEnd);
return result;
}
else {
return step;
}
value = (value === null ? NaN : +value);
return typeof value === 'number' && !isNaN(value);
}
}
/**
* Test if a number is integer.
* @param {number} value
* @return {boolean}
*/
function isInteger(value) {
return isFinite(value) && value === Math.round(value);
}
/**
* Create random centroid of kmeans.
* @param {Array.<number>} dataSet two-dimension array
* @param {number} k the number of centroids to be created
* @return {Array.<number>} random centroids of kmeans
*/
function createRandCent(dataSet, k) {
var size = arraySize(dataSet);
//constructs a two-dimensional array with all values 0
var centroids = zeros(k, size[1]);
var minJ;
var maxJ;
var rangeJ;
//create random cluster centers, within bounds of each dimension
for (var j = 0; j < size[1]; j++) {
minJ = dataSet[0][j];
maxJ = dataSet[0][j];
for (var i = 1; i < size[0]; i++) {
if (dataSet[i][j] < minJ) {
minJ = dataSet[i][j];
}
if (dataSet[i][j] > maxJ) {
maxJ = dataSet[i][j];
}
}
rangeJ = maxJ - minJ;
for (var i = 0; i < k; i++) {
centroids[i][j] = minJ + rangeJ * Math.random();
}
}
return centroids;
}
return {
isNumber: isNumber,
isInteger: isInteger
};
/**
* Distance method for calculating similarity
* @param {Array.<number>} vec1
* @param {Array.<nnumber>} vec2
* @return {number}
*/
function distEuclid(vec1, vec2) {
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
if (!isArray(vec1) && !isArray(vec2)) {
return mathSqrt(mathPow(vec1 - vec2, 2));
}
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var powerSum = 0;
//subtract the corresponding elements in the vectors
for (var i = 0; i < vec1.length; i++) {
powerSum += mathPow(vec1[i] - vec2[i], 2);
}
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
return mathSqrt(powerSum);
}
var dataPreprocess = __webpack_require__(3);
return {
kMeans: kMeans,
hierarchicalKMeans: hierarchicalKMeans
};
var regreMethods = {
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/**
* Common linear regression algorithm
* @param {Array.<Array.<number>>} data two-dimensional array
* @return {Object}
*/
linear: function (data) {
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
var predata = dataPreprocess(data);
var sumX = 0;
var sumY = 0;
var sumXY = 0;
var sumXX = 0;
var len = predata.length;
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
for (var i = 0; i < len; i++) {
sumX += predata[i][0];
sumY += predata[i][1];
sumXY += predata[i][0] * predata[i][1];
sumXX += predata[i][0] * predata[i][0];
}
var array = __webpack_require__(0);
var dataPreprocess = __webpack_require__(2);
var gradient = ((len * sumXY) - (sumX * sumY)) / ((len * sumXX) - (sumX * sumX));
var intercept = (sumY / len) - ((gradient * sumX) / len);
var result = [];
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], gradient * predata[j][0] + intercept];
result.push(coordinate);
}
var regreMethods = {
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100;
/**
* Common linear regression algorithm
* @param {Array.<Array.<number>>} data two-dimensional array
* @return {Object}
*/
linear: function (data) {
return {
points: result,
parameter: {
gradient: gradient,
intercept: intercept
},
expression: string
};
},
var predata = dataPreprocess(data);
var sumX = 0;
var sumY = 0;
var sumXY = 0;
var sumXX = 0;
var len = predata.length;
/**
* If the raw data include [0,0] point, we should choose linearThroughOrigin
* instead of linear.
* @param {Array.<Array>} data two-dimensional number array
* @return {Object}
*/
linearThroughOrigin: function (data) {
for (var i = 0; i < len; i++) {
sumX += predata[i][0];
sumY += predata[i][1];
sumXY += predata[i][0] * predata[i][1];
sumXX += predata[i][0] * predata[i][0];
}
var predata = dataPreprocess(data);
var sumXX = 0;
var sumXY = 0;
var gradient = ((len * sumXY) - (sumX * sumY)) / ((len * sumXX) - (sumX * sumX));
var intercept = (sumY / len) - ((gradient * sumX) / len);
for (var i = 0; i < predata.length; i++) {
sumXX += predata[i][0] * predata[i][0];
sumXY += predata[i][0] * predata[i][1];
}
var result = [];
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], gradient * predata[j][0] + intercept];
result.push(coordinate);
}
var gradient = sumXY / sumXX;
var result = [];
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100;
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], predata[j][0] * gradient];
result.push(coordinate);
}
return {
points: result,
parameter: {
gradient: gradient,
intercept: intercept
},
expression: string
};
},
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x';
/**
* If the raw data include [0,0] point, we should choose linearThroughOrigin
* instead of linear.
* @param {Array.<Array>} data two-dimensional number array
* @return {Object}
*/
linearThroughOrigin: function (data) {
return {
points: result,
parameter: {
gradient: gradient
},
expression: string
};
},
var predata = dataPreprocess(data);
var sumXX = 0;
var sumXY = 0;
/**
* Exponential regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @return {Object}
*/
exponential: function (data) {
for (var i = 0; i < predata.length; i++) {
sumXX += predata[i][0] * predata[i][0];
sumXY += predata[i][0] * predata[i][1];
}
var predata = dataPreprocess(data);
var sumX = 0;
var sumY = 0;
var sumXXY = 0;
var sumYlny = 0;
var sumXYlny = 0;
var sumXY = 0;
var gradient = sumXY / sumXX;
var result = [];
for (var i = 0; i < predata.length; i++) {
sumX += predata[i][0];
sumY += predata[i][1];
sumXY += predata[i][0] * predata[i][1];
sumXXY += predata[i][0] * predata[i][0] * predata[i][1];
sumYlny += predata[i][1] * Math.log(predata[i][1]);
sumXYlny += predata[i][0] * predata[i][1] * Math.log(predata[i][1]);
}
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], predata[j][0] * gradient];
result.push(coordinate);
}
var denominator = (sumY * sumXXY) - (sumXY * sumXY);
var coefficient = Math.pow(Math.E, (sumXXY * sumYlny - sumXY * sumXYlny) / denominator);
var index = (sumY * sumXYlny - sumXY * sumYlny) / denominator;
var result = [];
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x';
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], coefficient * Math.pow(Math.E, index * predata[j][0])];
result.push(coordinate);
}
return {
points: result,
parameter: {
gradient: gradient
},
expression: string
};
},
var string = 'y = ' + Math.round(coefficient * 100) / 100 + 'e^(' + Math.round(index * 100) / 100 + 'x)';
/**
* Exponential regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @return {Object}
*/
exponential: function (data) {
return {
points: result,
parameter: {
coefficient: coefficient,
index: index
},
expression: string
};
var predata = dataPreprocess(data);
var sumX = 0;
var sumY = 0;
var sumXXY = 0;
var sumYlny = 0;
var sumXYlny = 0;
var sumXY = 0;
},
for (var i = 0; i < predata.length; i++) {
sumX += predata[i][0];
sumY += predata[i][1];
sumXY += predata[i][0] * predata[i][1];
sumXXY += predata[i][0] * predata[i][0] * predata[i][1];
sumYlny += predata[i][1] * Math.log(predata[i][1]);
sumXYlny += predata[i][0] * predata[i][1] * Math.log(predata[i][1]);
}
/**
* Logarithmic regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @return {Object}
*/
logarithmic: function (data) {
var denominator = (sumY * sumXXY) - (sumXY * sumXY);
var coefficient = Math.pow(Math.E, (sumXXY * sumYlny - sumXY * sumXYlny) / denominator);
var index = (sumY * sumXYlny - sumXY * sumYlny) / denominator;
var result = [];
var predata = dataPreprocess(data);
var sumlnx = 0;
var sumYlnx = 0;
var sumY = 0;
var sumlnxlnx = 0;
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], coefficient * Math.pow(Math.E, index * predata[j][0])];
result.push(coordinate);
}
for (var i = 0; i < predata.length; i++) {
sumlnx += Math.log(predata[i][0]);
sumYlnx += predata[i][1] * Math.log(predata[i][0]);
sumY += predata[i][1];
sumlnxlnx += Math.pow(Math.log(predata[i][0]), 2);
}
var string = 'y = ' + Math.round(coefficient * 100) / 100 + 'e^(' + Math.round(index * 100) / 100 + 'x)';
var gradient = (i * sumYlnx - sumY * sumlnx) / (i * sumlnxlnx - sumlnx * sumlnx);
var intercept = (sumY - gradient * sumlnx) / i;
var result = [];
return {
points: result,
parameter: {
coefficient: coefficient,
index: index
},
expression: string
};
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], gradient * Math.log(predata[j][0]) + intercept];
result.push(coordinate);
}
},
var string =
'y = '
+ Math.round(intercept * 100) / 100
+ ' + '
+ Math.round(gradient * 100) / 100 + 'ln(x)';
/**
* Logarithmic regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @return {Object}
*/
logarithmic: function (data) {
return {
points: result,
parameter: {
gradient: gradient,
intercept: intercept
},
expression: string
};
var predata = dataPreprocess(data);
var sumlnx = 0;
var sumYlnx = 0;
var sumY = 0;
var sumlnxlnx = 0;
},
for (var i = 0; i < predata.length; i++) {
sumlnx += Math.log(predata[i][0]);
sumYlnx += predata[i][1] * Math.log(predata[i][0]);
sumY += predata[i][1];
sumlnxlnx += Math.pow(Math.log(predata[i][0]), 2);
}
/**
* Polynomial regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @param {number} order order of polynomials
* @return {Object}
*/
polynomial: function (data, order) {
var gradient = (i * sumYlnx - sumY * sumlnx) / (i * sumlnxlnx - sumlnx * sumlnx);
var intercept = (sumY - gradient * sumlnx) / i;
var result = [];
var predata = dataPreprocess(data);
if (typeof order === 'undefined') {
order = 2;
}
//coefficient matrix
var coeMatrix = [];
var lhs = [];
var k = order + 1;
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], gradient * Math.log(predata[j][0]) + intercept];
result.push(coordinate);
}
for (var i = 0; i < k; i++) {
var sumA = 0;
for (var n = 0; n < predata.length; n++) {
sumA += predata[n][1] * Math.pow(predata[n][0], i);
}
lhs.push(sumA);
var string = 'y = ' + Math.round(intercept * 100) / 100 + ' + ' + Math.round(gradient * 100) / 100 + 'ln(x)';
var temp = [];
for (var j = 0; j < k; j++) {
var sumB = 0;
for (var m = 0; m < predata.length; m++) {
sumB += Math.pow(predata[m][0], i + j);
}
temp.push(sumB);
}
coeMatrix.push(temp);
}
coeMatrix.push(lhs);
return {
points: result,
parameter: {
gradient: gradient,
intercept: intercept
},
expression: string
};
var coeArray = gaussianElimination(coeMatrix, k);
},
var result = [];
/**
* Polynomial regression
* @param {Array.<Array.<number>>} data two-dimensional number array
* @param {number} order order of polynomials
* @return {Object}
*/
polynomial: function (data, order) {
for (var i = 0; i < predata.length; i++) {
var value = 0;
for (var n = 0; n < coeArray.length; n++) {
value += coeArray[n] * Math.pow(predata[i][0], n);
}
result.push([predata[i][0], value]);
}
var predata = dataPreprocess(data);
if (typeof order === 'undefined') {
order = 2;
}
//coefficient matrix
var coeMatrix = [];
var lhs = [];
var k = order + 1;
var string = 'y = ';
for (var i = coeArray.length - 1; i >= 0; i--) {
if (i > 1) {
string += Math.round(coeArray[i] * Math.pow(10, i + 1)) / Math.pow(10, i + 1) + 'x^' + i + ' + ';
}
else if (i === 1) {
string += Math.round(coeArray[i] * 100) / 100 + 'x' + ' + ';
}
else {
string += Math.round(coeArray[i] * 100) / 100;
}
}
for (var i = 0; i < k; i++) {
var sumA = 0;
for (var n = 0; n < predata.length; n++) {
sumA += predata[n][1] * Math.pow(predata[n][0], i);
}
lhs.push(sumA);
return {
points: result,
parameter: coeArray,
expression: string
};
var temp = [];
for (var j = 0; j < k; j++) {
var sumB = 0;
for (var m = 0; m < predata.length; m++) {
sumB += Math.pow(predata[m][0], i + j);
}
temp.push(sumB);
}
coeMatrix.push(temp);
}
coeMatrix.push(lhs);
}
var coeArray = gaussianElimination(coeMatrix, k);
};
var result = [];
/**
* Gaussian elimination
* @param {Array.<Array.<number>>} matrix two-dimensional number array
* @param {number} number
* @return {Array}
*/
function gaussianElimination(matrix, number) {
for (var i = 0; i < predata.length; i++) {
var value = 0;
for (var n = 0; n < coeArray.length; n++) {
value += coeArray[n] * Math.pow(predata[i][0], n);
}
result.push([predata[i][0], value]);
}
for (var i = 0; i < matrix.length - 1; i++) {
var maxColumn = i;
for (var j = i + 1; j < matrix.length - 1; j++) {
if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][maxColumn])) {
maxColumn = j;
}
}
// the matrix here is the transpose of the common Augmented matrix.
// so the can perform the primary column transform, in fact, equivalent
// to the primary line changes
for (var k = i; k < matrix.length; k++) {
var temp = matrix[k][i];
matrix[k][i] = matrix[k][maxColumn];
matrix[k][maxColumn] = temp;
}
for (var n = i + 1; n < matrix.length - 1; n++) {
for (var m = matrix.length - 1; m >= i; m--) {
matrix[m][n] -= matrix[m][i] / matrix[i][i] * matrix[i][n];
}
}
}
var string = 'y = ';
for (var i = coeArray.length - 1; i >= 0; i--) {
if (i > 1) {
string += Math.round(coeArray[i] * Math.pow(10, i + 1)) / Math.pow(10, i + 1) + 'x^' + i + ' + ';
}
else if (i === 1) {
string += Math.round(coeArray[i] * 100) / 100 + 'x' + ' + ';
}
else {
string += Math.round(coeArray[i] * 100) / 100;
}
}
var data = new Array(number);
var len = matrix.length - 1;
for (var j = matrix.length - 2; j >= 0; j--) {
var temp = 0;
for (var i = j + 1; i < matrix.length - 1; i++) {
temp += matrix[i][j] * data[i];
}
data[j] = (matrix[len][j] - temp) / matrix[j][j];
return {
points: result,
parameter: coeArray,
expression: string
};
}
}
return data;
}
};
var regression = function (regreMethod, data, order) {
/**
* Gaussian elimination
* @param {Array.<Array.<number>>} matrix two-dimensional number array
* @param {number} number
* @return {Array}
*/
function gaussianElimination(matrix, number) {
return regreMethods[regreMethod](data, order);
for (var i = 0; i < matrix.length - 1; i++) {
var maxColumn = i;
for (var j = i + 1; j < matrix.length - 1; j++) {
if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][maxColumn])) {
maxColumn = j;
}
}
// the matrix here is the transpose of the common Augmented matrix.
// so the can perform the primary column transform, in fact, equivalent
// to the primary line changes
for (var k = i; k < matrix.length; k++) {
var temp = matrix[k][i];
matrix[k][i] = matrix[k][maxColumn];
matrix[k][maxColumn] = temp;
}
for (var n = i + 1; n < matrix.length - 1; n++) {
for (var m = matrix.length - 1; m >= i; m--) {
matrix[m][n] -= matrix[m][i] / matrix[i][i] * matrix[i][n];
}
}
}
};
var data = Array(number);
var len = matrix.length - 1;
for (var j = matrix.length - 2; j >= 0; j--) {
var temp = 0;
for (var i = j + 1; i < matrix.length - 1; i++) {
temp += matrix[i][j] * data[i];
}
data[j] = (matrix[len][j] - temp) / matrix[j][j];
return regression;
}
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
return data;
}
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
var regression = function (regreMethod, data, order) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
return regreMethods[regreMethod](data, order);
var statistics = {};
};
statistics.max = __webpack_require__(8);
statistics.deviation = __webpack_require__(9);
statistics.mean = __webpack_require__(11);
statistics.median = __webpack_require__(13);
statistics.min = __webpack_require__(15);
statistics.max = __webpack_require__(14);
statistics.max = __webpack_require__(10);
statistics.sum = __webpack_require__(12);
return regression;
return statistics;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 6 */
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var statistic = {};
var number = __webpack_require__(5);
var isNumber = number.isNumber;
statistic.max = __webpack_require__(7);
statistic.mean = __webpack_require__(8);
statistic.median = __webpack_require__(9);
statistic.min = __webpack_require__(10);
statistic.sum = __webpack_require__(11);
/**
* Is a method for computing the max value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function max(data) {
return statistic;
var maxData = -Infinity;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i]) && data[i] > maxData) {
maxData = data[i];
}
}
return maxData;
}
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
return max;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 7 */
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
var variance = __webpack_require__(10);
/**
* Is a method for computing the max value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function max(data) {
/**
* Computing the deviation
* @param {Array.<number>} data
* @return {number}
*/
return function (data) {
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var squaredDeviation = variance(data);
var maxData = -Infinity;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i]) && data[i] > maxData) {
maxData = data[i];
}
}
return maxData;
}
return squaredDeviation ? Math.sqrt(squaredDeviation) : squaredDeviation;
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
return max;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var number = __webpack_require__(5);
var isNumber = number.isNumber;
var mean = __webpack_require__(11);
/**
* Computing the variance of list of sample
* @param {Array.<number>} data
* @return {number}
*/
function sampleVariance(data) {
var len = data.length;
if (!len || len < 2) {
return 0;
}
if (data.length >= 2) {
var meanValue = mean(data);
var sum = 0;
var temple;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i])) {
temple = data[i] - meanValue;
sum += temple * temple;
}
}
return sum / data.length - 1;
}
}
return sampleVariance;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 8 */
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
var sum = __webpack_require__(12);
/**
* Is a method for computing the mean value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function mean(data) {
/**
* Is a method for computing the mean value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function mean(data) {
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var sumData = 0;
var len = data.length;
for (var i = 0; i < len; i++) {
if (isNumber(data[i])) {
sumData += data[i];
}
}
return sumData / len;
}
var len = data.length;
return mean;
if (!len) {
return 0;
}
return sum(data) / data.length;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
}
return mean;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 9 */
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
var number = __webpack_require__(5);
var isNumber = number.isNumber;
/**
* Is a method for computing the median value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function median(data) {
/**
* Is a method for computing the sum of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function sum(data) {
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var predata = [];
var len = data.length;
for (var i = 0; i < len; i++) {
if (isNumber(data[i])) {
predata.push(data[i]);
}
}
var len = data.length;
predata.sort(function (a, b) {
return a - b;
});
if (!len) {
return 0;
}
var sumData = 0;
for (var i = 0; i < len; i++) {
if (isNumber(data[i])) {
sumData += data[i];
}
}
return sumData;
}
var medianData;
return sum;
if ((len % 2) === 0) {
var n = len / 2;
medianData = (predata[n] + predata[n + 1]) / 2;
}
else {
var m = (len + 1) / 2;
medianData = predata[m];
}
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
return medianData;
}
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
return median;
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
var quantile = __webpack_require__(14);
/**
* Is a method for computing the median value of a sorted array of numbers
* @param {Array.<number>} data
* @return {number}
*/
function median(data) {
return quantile(data, 0.5);
}
return median;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 10 */
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
/**
* Estimating quantiles from a sorted sample of numbers
* @see https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample
* R-7 method
* @param {Array.<number>} data sorted array
* @param {number} p
*/
return function (data, p) {
/**
* Is a method for computing the min value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function min(data) {
var len = data.length;
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
if (!len) {
return 0;
}
if (p <= 0 || len < 2) {
return data[0];
}
if (p >= 1) {
return data[len -1];
}
// in the wikipedia's R-7 method h = (N - 1)p + 1, but here array index start from 0
var h = (len - 1) * p;
var i = Math.floor(h);
var a = data[i];
var b = data[i + 1];
return a + (b - a) * (h - i);
};
var minData = Infinity;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i]) && data[i] < minData) {
minData = data[i];
}
}
return minData;
}
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
return min;
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var number = __webpack_require__(5);
var isNumber = number.isNumber;
/**
* Is a method for computing the min value of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function min(data) {
var minData = Infinity;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i]) && data[i] < minData) {
minData = data[i];
}
}
return minData;
}
return min;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 11 */
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
var array = __webpack_require__(0);
var isArray = array.isArray;
var number = __webpack_require__(1);
var isNumber = number.isNumber;
var max = __webpack_require__(8);
var min = __webpack_require__(15);
var quantile = __webpack_require__(14);
var deviation = __webpack_require__(9);
var dataPreprocess = __webpack_require__(3);
var array = __webpack_require__(4);
var ascending = array.ascending;
var map = array.map;
var range = __webpack_require__(17);
var bisect = array.bisect;
var tickStep = __webpack_require__(18);
/**
* Is a method for computing the sum of a list of numbers,
* which will filter other data types.
* @param {Array.<number>} data
* @return {number}
*/
function sum(data) {
/**
* Compute bins for histogram
* @param {Array.<number>} data
* @param {string} threshold
* @return {Object}
*/
function computeBins(data, threshold) {
if (!isArray(data)) {
throw new Error('Invalid data type, you should input an array');
}
var sumData = 0;
for (var i = 0; i < data.length; i++) {
if (isNumber(data[i])) {
sumData += data[i];
}
}
return sumData;
}
if (threshold == null) {
return sum;
threshold = thresholdMethod.squareRoot;
}.call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
}
else {
threshold = thresholdMethod[threshold];
}
var values = dataPreprocess(data);
var maxValue = max(values);
var minValue = min(values);
var binsNumber = threshold(values, minValue, maxValue);
var step = tickStep(minValue, maxValue, binsNumber);
// return the xAxis coordinate for each bins, except the end point of the value
var rangeArray = range(Math.ceil(minValue / step) * step, Math.floor(maxValue / step) * step, step);
var len = rangeArray.length;
var bins = new Array(len + 1);
for (var i = 0; i <= len; i++) {
bins[i] = {};
bins[i].sample = [];
bins[i].x0 = i > 0 // 不要数组直接挂属性,改成Object
? rangeArray[i - 1]
: (rangeArray[i] - minValue) === step
? minValue
: (rangeArray[i] - step);
bins[i].x1 = i < len
? rangeArray[i]
: (maxValue - rangeArray[i-1]) === step
? maxValue
: rangeArray[i - 1] + step;
}
for (var i = 0; i < values.length; i++) {
if (minValue <= values[i] && values[i] <= maxValue) {
bins[bisect(rangeArray, values[i], 0, len)].sample.push(values[i]);
}
}
var data = map(bins, function (bin) {
return [(bin.x0 + bin.x1) / 2, bin.sample.length];
});
return {
bins: bins,
data: data
};
}
/**
* Four kinds of threshold methods used to
* compute how much bins the histogram should be divided
* @see https://en.wikipedia.org/wiki/Histogram
* @type {Object}
*/
var thresholdMethod = {
squareRoot: function (data) {
var bins = Math.ceil(Math.sqrt(data.length));
return bins > 50 ? 50 : bins;
},
scott: function (data, min, max) {
return Math.ceil((max - min) / (3.5 * deviation(data) * Math.pow(data.length, -1 / 3)));
},
freedmanDiaconis: function (data, min, max) {
data.sort(ascending);
return Math.ceil(
(max - min) / (2 * (quantile(data, 0.75) - quantile(data, 0.25)) * Math.pow(data.length, -1 / 3))
);
},
sturges: function (data) {
return Math.ceil(Math.log(data.length) / Math.LN2) + 1;
}
};
return computeBins;
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 12 */
/* 17 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(3);
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
/**
* Computing range array
* @param {number} start
* @param {number} stop
* @param {number} step
* @return {Array.<number>}
*/
return function (start, stop, step) {
var len = arguments.length;
if (len < 2) {
stop = start;
start = 0;
step = 1;
}
else if (len < 3) {
step = 1;
}
else {
step = +step;
}
var n = Math.ceil((stop - start) / step);
var range = new Array(n + 1);
for (var i = 0; i < n + 1; i++) {
range[i] = start + i * step;
}
return range;
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
/**
* Computing the length of step
* @see https://github.com/d3/d3-array/blob/master/src/ticks.js
* @param {number} start
* @param {number} stop
* @param {number} count
*/
return function (start, stop, count) {
var step0 = Math.abs(stop - start) / count;
var step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10));
var error = step0 / step1;
if (error >= Math.sqrt(50)) {
step1 *= 10;
}
else if (error >= Math.sqrt(10)) {
step1 *= 5;
}
else if(error >= Math.sqrt(2)) {
step1 *= 2;
}
return stop >= start ? step1 : -step1;
};
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ })
/******/ ]);
});
/******/ ])
});
;

@@ -1,1 +0,1 @@

!function(r,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.ecStat=n():r.ecStat=n()}(this,function(){return function(r){function n(o){if(t[o])return t[o].exports;var e=t[o]={i:o,l:!1,exports:{}};return r[o].call(e.exports,e,e.exports,n),e.l=!0,e.exports}var t={};return n.m=r,n.c=t,n.i=function(r){return r},n.d=function(r,t,o){n.o(r,t)||Object.defineProperty(r,t,{configurable:!1,enumerable:!0,get:o})},n.n=function(r){var t=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(t,"a",t),t},n.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},n.p="",n(n.s=12)}([function(r,n,t){var o;o=function(r){function n(r){for(var n=[];o(r);)n.push(r.length),r=r[0];return n}function o(r){return"[object Array]"===i.call(r)}function e(r,n){for(var t=[],o=0;o<r;o++){t[o]=[];for(var e=0;e<n;e++)t[o][e]=0}return t}function a(r){for(var n=0,t=0;t<r.length;t++)n+=r[t];return n}function u(r,n){for(var t=0,o=0;o<r.length;o++)t+=r[o][n];return t}var i=(t(1),Object.prototype.toString);return{size:n,isArray:o,zeros:e,sum:a,sumOfColumn:u}}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){return"number"==typeof r&&!isNaN(r)}function t(r){return isFinite(r)&&r===Math.round(r)}return{isNumber:n,isInteger:t}}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=[],t=a(r),o=0;o<t[0];o++){for(var u=!0,f=0;f<t[1];f++)i(r[o][f])||(u=!1);u&&n.push(r[o])}return n}var o=t(0),e=o.isArray,a=o.size,u=t(1),i=u.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){return{clustering:t(4),regression:t(5),statistic:t(6)}}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r,n){for(var t,e,i,f,l=s(r),v=h(l[0],2),c=a(r,n),p=!0;p;){p=!1;for(var g=0;g<l[0];g++){t=1/0,e=-1;for(var y=0;y<n;y++)i=u(r[g],c[y]),i<t&&(t=i,e=y);v[g][0]!==e&&(p=!0),v[g][0]=e,v[g][1]=d(t,2)}for(var g=0;g<n;g++){f=[];for(var y=0;y<v.length;y++)v[y][0]===g&&f.push(r[y]);c[g]=o(f)}}var x={centroids:c,clusterAssigned:v};return x}function o(r){for(var n,t,o=s(r),e=[],a=0;a<o[1];a++){n=0;for(var u=0;u<o[0];u++)n+=r[u][a];t=n/o[0],e.push(t)}return e}function e(r,t,e){function a(){if(I<t){m=1/0;for(var r,o,e,a=0;a<x.length;a++){w=[],b=[];for(var u=0;u<g.length;u++)g[u][0]===a?w.push(c[u]):b.push(g[u][1]);A=n(w,2),E=l(A.clusterAssigned,1),N=v(b),E+N<m&&(m=N+E,r=a,o=A.centroids,e=A.clusterAssigned)}for(var u=0;u<e.length;u++)0===e[u][0]?e[u][0]=r:1===e[u][0]&&(e[u][0]=x.length);for(x[r]=o[0],x.push(o[1]),u=0,a=0;u<g.length&&a<e.length;u++)g[u][0]===r&&(g[u][0]=e[a][0],g[u][1]=e[a++][1]);for(var i=[],u=0;u<x.length;u++){i[u]=[];for(var a=0;a<g.length;a++)g[a][0]===u&&i[u].push(c[a])}j.clusterAssment=g,j.centroids=x,j.pointsInCluster=i,I++}else j.isEnd=!0;return j}for(var f,c=i(r),p=s(c),g=h(p[0],2),y=o(c),x=[y],M=0;M<p[0];M++)f=u(c[M],y),g[M][1]=d(f,2);var m,w,b,A,E,N,I=1,j={isEnd:!1},O={next:a};if(e)return O;for(var j;!(j=O.next()).isEnd;);return j}function a(r,n){for(var t,o,e,a=s(r),u=h(n,a[1]),i=0;i<a[1];i++){t=r[0][i],o=r[0][i];for(var f=1;f<a[0];f++)r[f][i]<t&&(t=r[f][i]),r[f][i]>o&&(o=r[f][i]);e=o-t;for(var f=0;f<n;f++)u[f][i]=t+e*Math.random()}return u}function u(r,n){if(!c(r)&&!c(n))return p(d(r-n,2));for(var t=0,o=0;o<r.length;o++)t+=d(r[o]-n[o],2);return p(t)}var i=t(2),f=t(0),s=f.size,l=f.sumOfColumn,v=f.sum,h=f.zeros,c=f.isArray,p=Math.sqrt,d=Math.pow;return{kMeans:n,hierarchicalKMeans:e}}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r,n){for(var t=0;t<r.length-1;t++){for(var o=t,e=t+1;e<r.length-1;e++)Math.abs(r[t][e])>Math.abs(r[t][o])&&(o=e);for(var a=t;a<r.length;a++){var u=r[a][t];r[a][t]=r[a][o],r[a][o]=u}for(var i=t+1;i<r.length-1;i++)for(var f=r.length-1;f>=t;f--)r[f][i]-=r[f][t]/r[t][t]*r[t][i]}for(var s=Array(n),l=r.length-1,e=r.length-2;e>=0;e--){for(var u=0,t=e+1;t<r.length-1;t++)u+=r[t][e]*s[t];s[e]=(r[l][e]-u)/r[e][e]}return s}var o=(t(0),t(2)),e={linear:function(r){for(var n=o(r),t=0,e=0,a=0,u=0,i=n.length,f=0;f<i;f++)t+=n[f][0],e+=n[f][1],a+=n[f][0]*n[f][1],u+=n[f][0]*n[f][0];for(var s=(i*a-t*e)/(i*u-t*t),l=e/i-s*t/i,v=[],h=0;h<n.length;h++){var c=[n[h][0],s*n[h][0]+l];v.push(c)}var p="y = "+Math.round(100*s)/100+"x + "+Math.round(100*l)/100;return{points:v,parameter:{gradient:s,intercept:l},expression:p}},linearThroughOrigin:function(r){for(var n=o(r),t=0,e=0,a=0;a<n.length;a++)t+=n[a][0]*n[a][0],e+=n[a][0]*n[a][1];for(var u=e/t,i=[],f=0;f<n.length;f++){var s=[n[f][0],n[f][0]*u];i.push(s)}var l="y = "+Math.round(100*u)/100+"x";return{points:i,parameter:{gradient:u},expression:l}},exponential:function(r){for(var n=o(r),t=0,e=0,a=0,u=0,i=0,f=0,s=0;s<n.length;s++)t+=n[s][0],e+=n[s][1],f+=n[s][0]*n[s][1],a+=n[s][0]*n[s][0]*n[s][1],u+=n[s][1]*Math.log(n[s][1]),i+=n[s][0]*n[s][1]*Math.log(n[s][1]);for(var l=e*a-f*f,v=Math.pow(Math.E,(a*u-f*i)/l),h=(e*i-f*u)/l,c=[],p=0;p<n.length;p++){var d=[n[p][0],v*Math.pow(Math.E,h*n[p][0])];c.push(d)}var g="y = "+Math.round(100*v)/100+"e^("+Math.round(100*h)/100+"x)";return{points:c,parameter:{coefficient:v,index:h},expression:g}},logarithmic:function(r){for(var n=o(r),t=0,e=0,a=0,u=0,i=0;i<n.length;i++)t+=Math.log(n[i][0]),e+=n[i][1]*Math.log(n[i][0]),a+=n[i][1],u+=Math.pow(Math.log(n[i][0]),2);for(var f=(i*e-a*t)/(i*u-t*t),s=(a-f*t)/i,l=[],v=0;v<n.length;v++){var h=[n[v][0],f*Math.log(n[v][0])+s];l.push(h)}var c="y = "+Math.round(100*s)/100+" + "+Math.round(100*f)/100+"ln(x)";return{points:l,parameter:{gradient:f,intercept:s},expression:c}},polynomial:function(r,t){var e=o(r);"undefined"==typeof t&&(t=2);for(var a=[],u=[],i=t+1,f=0;f<i;f++){for(var s=0,l=0;l<e.length;l++)s+=e[l][1]*Math.pow(e[l][0],f);u.push(s);for(var v=[],h=0;h<i;h++){for(var c=0,p=0;p<e.length;p++)c+=Math.pow(e[p][0],f+h);v.push(c)}a.push(v)}a.push(u);for(var d=n(a,i),g=[],f=0;f<e.length;f++){for(var y=0,l=0;l<d.length;l++)y+=d[l]*Math.pow(e[f][0],l);g.push([e[f][0],y])}for(var x="y = ",f=d.length-1;f>=0;f--)x+=f>1?Math.round(d[f]*Math.pow(10,f+1))/Math.pow(10,f+1)+"x^"+f+" + ":1===f?Math.round(100*d[f])/100+"x + ":Math.round(100*d[f])/100;return{points:g,parameter:d,expression:x}}},a=function(r,n,t){return e[r](n,t)};return a}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){var n={};return n.max=t(7),n.mean=t(8),n.median=t(9),n.min=t(10),n.sum=t(11),n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=-(1/0),t=0;t<r.length;t++)u(r[t])&&r[t]>n&&(n=r[t]);return n}var o=t(0),e=o.isArray,a=t(1),u=a.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=0,t=r.length,o=0;o<t;o++)u(r[o])&&(n+=r[o]);return n/t}var o=t(0),e=o.isArray,a=t(1),u=a.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=[],t=r.length,o=0;o<t;o++)u(r[o])&&n.push(r[o]);n.sort(function(r,n){return r-n});var a;if(t%2===0){var i=t/2;a=(n[i]+n[i+1])/2}else{var f=(t+1)/2;a=n[f]}return a}var o=t(0),e=o.isArray,a=t(1),u=a.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=1/0,t=0;t<r.length;t++)u(r[t])&&r[t]<n&&(n=r[t]);return n}var o=t(0),e=o.isArray,a=t(1),u=a.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){var o;o=function(r){function n(r){if(!e(r))throw new Error("Invalid data type, you should input an array");for(var n=0,t=0;t<r.length;t++)u(r[t])&&(n+=r[t]);return n}var o=t(0),e=o.isArray,a=t(1),u=a.isNumber;return n}.call(n,t,n,r),!(void 0!==o&&(r.exports=o))},function(r,n,t){r.exports=t(3)}])});
!function(r,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.ecStat=n():r.ecStat=n()}(this,function(){return function(r){function n(e){if(t[e])return t[e].exports;var o=t[e]={exports:{},id:e,loaded:!1};return r[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=r,n.c=t,n.p="",n(0)}([function(r,n,t){r.exports=t(12)},function(r,n,t){var e;e=function(r){function n(r){return r=null===r?NaN:+r,"number"==typeof r&&!isNaN(r)}function t(r){return isFinite(r)&&r===Math.round(r)}return{isNumber:n,isInteger:t}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){return function(r,n){var t=r.length;if(!t)return 0;if(n<=0||t<2)return r[0];if(n>=1)return r[t-1];var e=(t-1)*n,o=Math.floor(e),a=r[o],u=r[o+1];return a+(u-a)*(e-o)}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){for(var n=[];t(r);)n.push(r.length),r=r[0];return n}function t(r){return"[object Array]"===l.call(r)}function e(r,n){for(var t=[],e=0;e<r;e++){t[e]=[];for(var o=0;o<n;o++)t[e][o]=0}return t}function o(r){for(var n=0,t=0;t<r.length;t++)n+=r[t];return n}function a(r,n){for(var t=0,e=0;e<r.length;e++)t+=r[e][n];return t}function u(r,n){return r>n?1:r<n?-1:r===n?0:NaN}function i(r,n,t,e){for(null==t&&(t=0),null==e&&(e=r.length);t<e;){var o=Math.floor((t+e)/2),a=u(r[o],n);if(a>0)e=o;else{if(!(a<0))return o+1;t=o+1}}return t}function f(r,n,t){if(r&&n){if(r.map&&r.map===h)return r.map(n,t);for(var e=[],o=0,a=r.length;o<a;o++)e.push(n.call(t,r[o],o,r));return e}}var l=Object.prototype.toString,s=Array.prototype,h=s.map;return{size:n,isArray:t,zeros:e,sum:o,sumOfColumn:a,ascending:u,bisect:i,map:f}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){if(!o(r))throw new Error("Invalid data type, you should input an array");var n=[],t=a(r);if(1===t.length)for(var e=0;e<t[0];e++)i(r[e])&&n.push(r[e]);else if(2===t.length)for(var e=0;e<t[0];e++){for(var u=!0,f=0;f<t[1];f++)i(r[e][f])||(u=!1);u&&n.push(r[e])}return n}var e=t(3),o=e.isArray,a=e.size,u=t(1),i=u.isNumber;return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){var n=t(9);return function(r){var t=n(r);return t?Math.sqrt(t):t}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){for(var n=-(1/0),t=0;t<r.length;t++)o(r[t])&&r[t]>n&&(n=r[t]);return n}var e=t(1),o=e.isNumber;return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){var n=r.length;return n?e(r)/r.length:0}var e=t(10);return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){for(var n=1/0,t=0;t<r.length;t++)o(r[t])&&r[t]<n&&(n=r[t]);return n}var e=t(1),o=e.isNumber;return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){var n=r.length;if(!n||n<2)return 0;if(r.length>=2){for(var t,e=a(r),u=0,i=0;i<r.length;i++)o(r[i])&&(t=r[i]-e,u+=t*t);return u/r.length-1}}var e=t(1),o=e.isNumber,a=t(7);return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){var n=r.length;if(!n)return 0;for(var t=0,e=0;e<n;e++)o(r[e])&&(t+=r[e]);return t}var e=t(1),o=e.isNumber;return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r,n){for(var t,o,i,f,s=l(r),h=c(s[0],2),v=a(r,n),p=!0;p;){p=!1;for(var d=0;d<s[0];d++){t=1/0,o=-1;for(var M=0;M<n;M++)i=u(r[d],v[M]),i<t&&(t=i,o=M);h[d][0]!==o&&(p=!0),h[d][0]=o,h[d][1]=g(t,2)}for(var d=0;d<n;d++){f=[];for(var M=0;M<h.length;M++)h[M][0]===d&&f.push(r[M]);v[d]=e(f)}}var x={centroids:v,clusterAssigned:h};return x}function e(r){for(var n,t,e=l(r),o=[],a=0;a<e[1];a++){n=0;for(var u=0;u<e[0];u++)n+=r[u][a];t=n/e[0],o.push(t)}return o}function o(r,t,o){function a(){if(E<t){y=1/0;for(var r,e,o,a=0;a<x.length;a++){b=[],w=[];for(var u=0;u<d.length;u++)d[u][0]===a?b.push(v[u]):w.push(d[u][1]);N=n(b,2),A=s(N.clusterAssigned,1),q=h(w),A+q<y&&(y=q+A,r=a,e=N.centroids,o=N.clusterAssigned)}for(var u=0;u<o.length;u++)0===o[u][0]?o[u][0]=r:1===o[u][0]&&(o[u][0]=x.length);for(x[r]=e[0],x.push(e[1]),u=0,a=0;u<d.length&&a<o.length;u++)d[u][0]===r&&(d[u][0]=o[a][0],d[u][1]=o[a++][1]);for(var i=[],u=0;u<x.length;u++){i[u]=[];for(var a=0;a<d.length;a++)d[a][0]===u&&i[u].push(v[a])}j.clusterAssment=d,j.centroids=x,j.pointsInCluster=i,E++}else j.isEnd=!0;return j}for(var f,v=i(r),p=l(v),d=c(p[0],2),M=e(v),x=[M],m=0;m<p[0];m++)f=u(v[m],M),d[m][1]=g(f,2);var y,b,w,N,A,q,E=1,j={isEnd:!1},z={next:a};if(o)return z;for(var j;!(j=z.next()).isEnd;);return j}function a(r,n){for(var t,e,o,a=l(r),u=c(n,a[1]),i=0;i<a[1];i++){t=r[0][i],e=r[0][i];for(var f=1;f<a[0];f++)r[f][i]<t&&(t=r[f][i]),r[f][i]>e&&(e=r[f][i]);o=e-t;for(var f=0;f<n;f++)u[f][i]=t+o*Math.random()}return u}function u(r,n){if(!v(r)&&!v(n))return p(g(r-n,2));for(var t=0,e=0;e<r.length;e++)t+=g(r[e]-n[e],2);return p(t)}var i=t(4),f=t(3),l=f.size,s=f.sumOfColumn,h=f.sum,c=f.zeros,v=f.isArray,p=Math.sqrt,g=Math.pow;return{kMeans:n,hierarchicalKMeans:o}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){return{clustering:t(11),regression:t(14),statistics:t(15),histogram:t(13)}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r,n){n=null==n?p.squareRoot:p[n];for(var t=i(r),a=e(t),u=o(t),f=n(t,u,a),l=v(u,a,f),g=h(Math.ceil(u/l)*l,Math.floor(a/l)*l,l),d=g.length,M=new Array(d+1),x=0;x<=d;x++)M[x]={},M[x].sample=[],M[x].x0=x>0?g[x-1]:g[x]-u===l?u:g[x]-l,M[x].x1=x<d?g[x]:a-g[x-1]===l?a:g[x-1]+l;for(var x=0;x<t.length;x++)u<=t[x]&&t[x]<=a&&M[c(g,t[x],0,d)].sample.push(t[x]);var r=s(M,function(r){return[(r.x0+r.x1)/2,r.sample.length]});return{bins:M,data:r}}var e=t(6),o=t(8),a=t(2),u=t(5),i=t(4),f=t(3),l=f.ascending,s=f.map,h=t(17),c=f.bisect,v=t(18),p={squareRoot:function(r){var n=Math.ceil(Math.sqrt(r.length));return n>50?50:n},scott:function(r,n,t){return Math.ceil((t-n)/(3.5*u(r)*Math.pow(r.length,-1/3)))},freedmanDiaconis:function(r,n,t){return r.sort(l),Math.ceil((t-n)/(2*(a(r,.75)-a(r,.25))*Math.pow(r.length,-1/3)))},sturges:function(r){return Math.ceil(Math.log(r.length)/Math.LN2)+1}};return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r,n){for(var t=0;t<r.length-1;t++){for(var e=t,o=t+1;o<r.length-1;o++)Math.abs(r[t][o])>Math.abs(r[t][e])&&(e=o);for(var a=t;a<r.length;a++){var u=r[a][t];r[a][t]=r[a][e],r[a][e]=u}for(var i=t+1;i<r.length-1;i++)for(var f=r.length-1;f>=t;f--)r[f][i]-=r[f][t]/r[t][t]*r[t][i]}for(var l=new Array(n),s=r.length-1,o=r.length-2;o>=0;o--){for(var u=0,t=o+1;t<r.length-1;t++)u+=r[t][o]*l[t];l[o]=(r[s][o]-u)/r[o][o]}return l}var e=t(4),o={linear:function(r){for(var n=e(r),t=0,o=0,a=0,u=0,i=n.length,f=0;f<i;f++)t+=n[f][0],o+=n[f][1],a+=n[f][0]*n[f][1],u+=n[f][0]*n[f][0];for(var l=(i*a-t*o)/(i*u-t*t),s=o/i-l*t/i,h=[],c=0;c<n.length;c++){var v=[n[c][0],l*n[c][0]+s];h.push(v)}var p="y = "+Math.round(100*l)/100+"x + "+Math.round(100*s)/100;return{points:h,parameter:{gradient:l,intercept:s},expression:p}},linearThroughOrigin:function(r){for(var n=e(r),t=0,o=0,a=0;a<n.length;a++)t+=n[a][0]*n[a][0],o+=n[a][0]*n[a][1];for(var u=o/t,i=[],f=0;f<n.length;f++){var l=[n[f][0],n[f][0]*u];i.push(l)}var s="y = "+Math.round(100*u)/100+"x";return{points:i,parameter:{gradient:u},expression:s}},exponential:function(r){for(var n=e(r),t=0,o=0,a=0,u=0,i=0,f=0,l=0;l<n.length;l++)t+=n[l][0],o+=n[l][1],f+=n[l][0]*n[l][1],a+=n[l][0]*n[l][0]*n[l][1],u+=n[l][1]*Math.log(n[l][1]),i+=n[l][0]*n[l][1]*Math.log(n[l][1]);for(var s=o*a-f*f,h=Math.pow(Math.E,(a*u-f*i)/s),c=(o*i-f*u)/s,v=[],p=0;p<n.length;p++){var g=[n[p][0],h*Math.pow(Math.E,c*n[p][0])];v.push(g)}var d="y = "+Math.round(100*h)/100+"e^("+Math.round(100*c)/100+"x)";return{points:v,parameter:{coefficient:h,index:c},expression:d}},logarithmic:function(r){for(var n=e(r),t=0,o=0,a=0,u=0,i=0;i<n.length;i++)t+=Math.log(n[i][0]),o+=n[i][1]*Math.log(n[i][0]),a+=n[i][1],u+=Math.pow(Math.log(n[i][0]),2);for(var f=(i*o-a*t)/(i*u-t*t),l=(a-f*t)/i,s=[],h=0;h<n.length;h++){var c=[n[h][0],f*Math.log(n[h][0])+l];s.push(c)}var v="y = "+Math.round(100*l)/100+" + "+Math.round(100*f)/100+"ln(x)";return{points:s,parameter:{gradient:f,intercept:l},expression:v}},polynomial:function(r,t){var o=e(r);"undefined"==typeof t&&(t=2);for(var a=[],u=[],i=t+1,f=0;f<i;f++){for(var l=0,s=0;s<o.length;s++)l+=o[s][1]*Math.pow(o[s][0],f);u.push(l);for(var h=[],c=0;c<i;c++){for(var v=0,p=0;p<o.length;p++)v+=Math.pow(o[p][0],f+c);h.push(v)}a.push(h)}a.push(u);for(var g=n(a,i),d=[],f=0;f<o.length;f++){for(var M=0,s=0;s<g.length;s++)M+=g[s]*Math.pow(o[f][0],s);d.push([o[f][0],M])}for(var x="y = ",f=g.length-1;f>=0;f--)x+=f>1?Math.round(g[f]*Math.pow(10,f+1))/Math.pow(10,f+1)+"x^"+f+" + ":1===f?Math.round(100*g[f])/100+"x + ":Math.round(100*g[f])/100;return{points:d,parameter:g,expression:x}}},a=function(r,n,t){return o[r](n,t)};return a}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){var n={};return n.max=t(6),n.deviation=t(5),n.mean=t(7),n.median=t(16),n.min=t(8),n.max=t(2),n.max=t(9),n.sum=t(10),n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){function n(r){return e(r,.5)}var e=t(2);return n}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){return function(r,n,t){var e=arguments.length;e<2?(n=r,r=0,t=1):t=e<3?1:+t;for(var o=Math.ceil((n-r)/t),a=new Array(o+1),u=0;u<o+1;u++)a[u]=r+u*t;return a}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))},function(r,n,t){var e;e=function(r){return function(r,n,t){var e=Math.abs(n-r)/t,o=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),a=e/o;return a>=Math.sqrt(50)?o*=10:a>=Math.sqrt(10)?o*=5:a>=Math.sqrt(2)&&(o*=2),n>=r?o:-o}}.call(n,t,n,r),!(void 0!==e&&(r.exports=e))}])});
{
"name": "echarts-stat",
"version": "1.0.0",
"version": "1.1.0",
"description": "a statistical tool for ECharts",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -28,6 +28,83 @@ # ecStat

* [Histogram](#histogram)
* [Clustering](#clustering)
* [Regression](#regression)
* [Statistic](#statistic)
* [Statistics](#statistic)
### Histogram
A histogram is a graphical representation of the distribution of numerical data. It is an estimate of the probability distribution of a quantitative variable. It is a kind of bar graph. To construct a histogram, the first step is to "bin" the range of values - that is, divide the entire range of values into a series of intervals - and then count how many values fall into each interval. The bins are usually specified as consecutive, non-overlapping intervals of a variable. Here the bins(intervals) must be adjacent, and are of equal size.
#### Syntax
```js
var bins = ecStat.histogram(data, binMethod);
```
##### Parameter
* `data` - `Array<number>`. Data samples of numbers.
```js
var data = [8.6, 8.8, 10.5, 10.7, 10.8, 11.0, ... ];
```
* `binMethod` - `string`. There are four methods to calculate the number of bins, which are `squareRoot`, `scott`, `freedmanDiaconis`, and `sturges`. Of course, there is no "best" number of bins, and different bin sizes can reveal different features of the data.
* `squareRoot` - This is the default method, which is also used by Excel histograms. Returns the number of bins according to [Square-root choice](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition):
```js
var bins = ecStat.histogram(data);
```
* `scott` - Returns the number of bins according to [Scott's normal reference Rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition):
```js
var bins = ecStat.histogram(data, 'scott');
```
* `freedmanDiaconis` - Returns the number of bins according to [The Freedman-Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition):
```js
var bins = ecStat.histogram(data, 'freedmanDiaconis');
```
* `sturges` - Returns the number of bins according to [Sturges' formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition):
```js
var bins = ecStat.histogram(data, 'sturges');
```
##### Return Value
* `bins` - `Object`. Contain detailed messages of each bin and data used for [ECharts](https://github.com/ecomfe/echarts) to draw the bar chart.
* `bins.bins` - `Array.<Object>`. An array of bins, where each bin is an object, containing three attributes:
* `x0` - `number`. The lower bound of the bin (inclusive).
* `x1` - `number`. The upper bound of the bin (exclusive).
* `sample` - `Array.<number>`. Containing the associated elements from the input data.
* `bins.data` - `Array.<Array.<number>>`. An array of bins data, each bins data is an array not only containing the mean value of `x0` and `x1`, but also the length of `sample`, which is the number of sample values in that bin.
#### Examples
When using ECharts bar chart to draw the histogram, we must notice that, setting the `xAxis.scale` as `true`.
```html
<script src='https://cdn.bootcss.com/echarts/3.4.0/echarts.js'></script>
<script src='./dist/ecStat.js'></script>
<script>
var bins = ecStat.histogram(data);
var option = {
...
xAxis: [{
type: 'value',
// this must be set as true, otherwise barWidth and bins width can not corresponding on
scale: true
}],
...
}
</script>
```
![histogram](img/histogram.png)
[Run](http://gallery.echartsjs.com/editor.html?c=xBk5VZddJW)
### Clustering

@@ -43,3 +120,3 @@

* data - `Two-dimensional Numeric Array`, each data point can have more than two numeric attributes in the original data set. In the following example, `data[0]` is called `data point` and `data[0][1]` is one of the numeric attributes of `data[0]`.
* `data` - `two-dimensional Numeric Array`. Each data point can have more than two numeric attributes in the original data set. In the following example, `data[0]` is called `data point` and `data[0][1]` is one of the numeric attributes of `data[0]`.

@@ -54,8 +131,8 @@ ```js

```
* clusterNumer - `number`, the number of clusters generated
* stepByStep - `Boolean`, control whether doing the clustering step by step
* `clusterNumer` - `number`. The number of clusters generated
* `stepByStep` - `boolean`. Control whether doing the clustering step by step
##### Return Value
* result - `Object`, including the centroids, clusterAssment, and pointsInCluster. For Example:
* `result` - `Object`. Including the centroids, clusterAssment, and pointsInCluster. For Example:

@@ -141,4 +218,4 @@ ```js

* regressionType - `String`, there are four types of regression, whice are `linear`, `exponential`, `logarithmic`, `polynomial`
* data - `Two-dimensional Numeric Array`, each data object should have two numeric attributes in the original data set. For Example:
* `regressionType` - `string`. There are four types of regression, whice are `linear`, `exponential`, `logarithmic`, `polynomial`
* `data` - `two-dimensional Numeric Array`. Each data object should have two numeric attributes in the original data set. For Example:

@@ -153,7 +230,7 @@ ```js

```
* order - `number`, the order of polynomial. If you choose other types of regression, you can ignore it
* `order` - `number`. The order of polynomial. If you choose other types of regression, you can ignore it
##### Return Value
* myRegression - `Object`, Including points, parameter, and expression. For Example:
* `myRegression` - `Object`. Including points, parameter, and expression. For Example:

@@ -246,81 +323,127 @@ ```js

### Statistic
### Statistics
This interface provides general statistical services such as maximum, minimum, average, median, sum, etc.
This interface provides basic summary statistical services.
#### ecStat.statistic.max()
#### ecStat.statistics.deviation()
##### Syntax
```
var maxValue = ecStat.statistic.max(dataList);
var sampleDeviation = ecStat.statistics.deviation(dataList);
```
##### Parameter
* dataList : `Array.<number>`
* `dataList` : `Array.<number>`
##### Return Value
* maxValue: `number`, the maximum value of the data list
* `sampleDeviation`: `number`. Return the deviation of the numeric array *dataList*. If the *dataList* is empty or the length less than 2, return 0.
#### ecStat.statistic.min()
#### ecStat.statistics.sampleVariance()
##### Syntax
```
var minValue = ecStat.statistic.min(dataList);
var varianceValue = ecStat.statistics.sampleVariance(dataList);
```
##### Parameter
* dataList : `Array.<number>`
* `dataList` : `Array.<number>`
##### Return Value
* minValue: `number`, the minimum value of the data list
* `varianceValue`: `number`. Return the variance of the numeric array *dataList*. If the *dataList* is empty or the length less than 2, return 0.
#### ecStat.statistic.mean()
#### ecStat.statistics.quantile()
##### Syntax
```
var meanValue = ecStat.statistic.mean(dataList);
var quantileValue = ecStat.statistics.quantile(dataList, p);
```
##### Parameter
* dataList : `Array.<number>`
* `dataList` : `Array.<number>`. Sorted array of numbers.
* `p`: `number`. where 0 =< *p* <= 1. For example, the first quartile at p = 0.25, the seconed quartile at p = 0.5(same as the median), and the third quartile at p = 0.75.
##### Return Value
* meanValue: `number`, the average of the data list
* `quantileValue`: `number`. Return the *p*-quantile of the sorted array of numbers. If p <= 0 or the length of *dataList* less than 2, return the first element of the sorted array; if p >= 1, return the last element of the sorted array; If *dataList* is empty, return 0.
#### ecStat.statistic.median()
#### ecStat.statistics.max()
##### Syntax
```
var medianValue = ecStat.statistic.median(dataList);
var maxValue = ecStat.statistics.max(dataList);
```
##### Parameter
* dataList : `Array.<number>`
* `dataList` : `Array.<number>`
##### Return Value
* medianValue: `number`, the median of the data list
* `maxValue`: `number`. The maximum value of the *dataList*.
#### ecStat.statistic.sum()
#### ecStat.statistics.min()
##### Syntax
```
var sumValue = ecStat.statistic.sum(dataList);
var minValue = ecStat.statistics.min(dataList);
```
##### Parameter
* dataList : `Array.<number>`
* `dataList` : `Array.<number>`
##### Return Value
* sumValue: `number`, the sum of the data list
* `minValue`: `number`. The minimum value of the *dataList*.
#### ecStat.statistics.mean()
##### Syntax
```
var meanValue = ecStat.statistics.mean(dataList);
```
##### Parameter
* `dataList` : `Array.<number>`
##### Return Value
* `meanValue`: `number`. The average of the *dataList*.
#### ecStat.statistics.median()
##### Syntax
```
var medianValue = ecStat.statistics.median(dataList);
```
##### Parameter
* `dataList` : `Array.<number>`. Sorted array of numbers
##### Return Value
* `medianValue`: `number`. The median of the *dataList*.
#### ecStat.statistics.sum()
##### Syntax
```
var sumValue = ecStat.statistics.sum(dataList);
```
##### Parameter
* `dataList` : `Array.<number>`
##### Return Value
* `sumValue`: `number`. The sum of the *dataList*.

@@ -7,3 +7,4 @@ define(function (require) {

regression: require('./regression'),
statistic: require('./statistic')
statistics: require('./statistics'),
histogram: require('./histogram')

@@ -10,0 +11,0 @@ };

define(function (require) {
var array = require('./util/array');
var dataPreprocess = require('./util/dataPreprocess');
var regreMethods = {

@@ -163,3 +161,7 @@

var string = 'y = ' + Math.round(intercept * 100) / 100 + ' + ' + Math.round(gradient * 100) / 100 + 'ln(x)';
var string =
'y = '
+ Math.round(intercept * 100) / 100
+ ' + '
+ Math.round(gradient * 100) / 100 + 'ln(x)';

@@ -278,3 +280,3 @@ return {

var data = Array(number);
var data = new Array(number);
var len = matrix.length - 1;

@@ -281,0 +283,0 @@ for (var j = matrix.length - 2; j >= 0; j--) {

define(function (require) {
var number = require('./number');
var objToString = Object.prototype.toString;
var arrayProto = Array.prototype;
var nativeMap = arrayProto.map;

@@ -46,3 +47,5 @@ /**

/**
* Sums each element in the array
* Sums each element in the array.
* Internal use, for performance considerations, to avoid
* unnecessary judgments and calculations.
* @param {Array} vector

@@ -73,2 +76,67 @@ * @return {number}

function ascending(a, b) {
return a > b ? 1 : a < b ? -1 : a === b ? 0 : NaN;
}
/**
* Binary search algorithm --- this bisector is specidfied to histogram, which every bin like that [a, b),
* so the return value use to add 1.
* @param {Array.<number>} array
* @param {number} value
* @param {number} start
* @param {number} end
* @return {number}
*/
function bisect(array, value, start, end) { //移出去
if (start == null) {
start = 0;
}
if (end == null) {
end = array.length;
}
while (start < end) {
var mid = Math.floor((start + end) / 2);
var compare = ascending(array[mid], value);
if (compare > 0) {
end = mid;
}
else if (compare < 0) {
start = mid + 1;
}
else {
return mid + 1;
}
}
return start;
}
/**
* 数组映射
* @memberOf module:zrender/core/util
* @param {Array} obj
* @param {Function} cb
* @param {*} [context]
* @return {Array}
*/
function map(obj, cb, context) {
if (!(obj && cb)) {
return;
}
if (obj.map && obj.map === nativeMap) {
return obj.map(cb, context);
}
else {
var result = [];
for (var i = 0, len = obj.length; i < len; i++) {
result.push(cb.call(context, obj[i], i, obj));
}
return result;
}
}
return {

@@ -79,5 +147,8 @@ size: size,

sum: sum,
sumOfColumn: sumOfColumn
sumOfColumn: sumOfColumn,
ascending: ascending,
bisect: bisect,
map: map
};
});

@@ -25,11 +25,25 @@ define(function (require) {

var arraySize = size(data);
for (var i = 0; i < arraySize[0]; i++) {
var isCorrect = true;
for (var j = 0; j < arraySize[1]; j++) {
if (!isNumber(data[i][j])) {
isCorrect = false;
if (arraySize.length === 1) {
for (var i = 0; i < arraySize[0]; i++) {
if (isNumber(data[i])) {
predata.push(data[i]);
}
}
if (isCorrect) {
predata.push(data[i]);
}
else if (arraySize.length === 2) {
for (var i = 0; i < arraySize[0]; i++) {
var isCorrect = true;
for (var j = 0; j < arraySize[1]; j++) {
if (!isNumber(data[i][j])) {
isCorrect = false;
}
}
if (isCorrect) {
predata.push(data[i]);
}
}

@@ -36,0 +50,0 @@ }

@@ -9,2 +9,4 @@ define(function (require) {

function isNumber(value) {
value = (value === null ? NaN : +value);
return typeof value === 'number' && !isNaN(value);

@@ -11,0 +13,0 @@ }

@@ -7,5 +7,5 @@ require.config({

{
main: 'echarts-stat',
main: 'ecStat',
location: '../src',
name: 'echarts-stat'
name: 'ecStat'
},

@@ -12,0 +12,0 @@ {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc