Skip to content

Commit 14cfbee

Browse files
committed
release version 1.1.1
1 parent b5c50a7 commit 14cfbee

File tree

2 files changed

+70
-33
lines changed

2 files changed

+70
-33
lines changed

dist/ecStat.js

+69-32
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ return /******/ (function(modules) { // webpackBootstrap
7373

7474
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
7575

76-
var dataPreprocess = __webpack_require__(2);
76+
var dataProcess = __webpack_require__(2);
77+
var dataPreprocess = dataProcess.dataPreprocess;
7778
var array = __webpack_require__(3);
7879
var arraySize = array.size;
7980
var sumOfColumn = array.sumOfColumn;
@@ -164,12 +165,14 @@ return /******/ (function(modules) { // webpackBootstrap
164165
/**
165166
* The combine of hierarchical clustering and k-means.
166167
* @param {Array} data two-dimension array.
167-
* @param {[type]} k the number of clusters in a dataset
168+
* @param {[type]} k the number of clusters in a dataset. It has to be greater than 1.
168169
* @param {boolean} stepByStep
169170
* @return {}
170171
*/
171172
function hierarchicalKMeans(data, k, stepByStep) {
172-
173+
if (k < 2 ) {
174+
return;
175+
}
173176
var dataSet = dataPreprocess(data);
174177
var size = arraySize(dataSet);
175178
var clusterAssment = zeros(size[0], 2);
@@ -397,7 +400,22 @@ return /******/ (function(modules) { // webpackBootstrap
397400
return predata;
398401
}
399402

400-
return dataPreprocess;
403+
/**
404+
* @param {string|number} val
405+
* @return {number}
406+
*/
407+
function getPrecision(val) {
408+
var str = val.toString();
409+
// scientific notation is not considered
410+
var dotIndex = str.indexOf('.');
411+
return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;
412+
}
413+
414+
return {
415+
dataPreprocess: dataPreprocess,
416+
getPrecision: getPrecision
417+
};
418+
401419
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
402420

403421
/***/ }),
@@ -569,7 +587,7 @@ return /******/ (function(modules) { // webpackBootstrap
569587
*/
570588
function isNumber(value) {
571589

572-
value = (value === null ? NaN : +value);
590+
value = value === null ? NaN : +value;
573591
return typeof value === 'number' && !isNaN(value);
574592
}
575593

@@ -595,7 +613,8 @@ return /******/ (function(modules) { // webpackBootstrap
595613

596614
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
597615

598-
var dataPreprocess = __webpack_require__(2);
616+
var dataProcess = __webpack_require__(2);
617+
var dataPreprocess = dataProcess.dataPreprocess;
599618

600619
var regreMethods = {
601620

@@ -908,8 +927,8 @@ return /******/ (function(modules) { // webpackBootstrap
908927
statistics.mean = __webpack_require__(10);
909928
statistics.median = __webpack_require__(12);
910929
statistics.min = __webpack_require__(14);
911-
statistics.max = __webpack_require__(13);
912-
statistics.max = __webpack_require__(9);
930+
statistics.quantile = __webpack_require__(13);
931+
statistics.sampleVariance = __webpack_require__(9);
913932
statistics.sum = __webpack_require__(11);
914933

915934
return statistics;
@@ -1000,14 +1019,15 @@ return /******/ (function(modules) { // webpackBootstrap
10001019
sum += temple * temple;
10011020
}
10021021
}
1003-
return sum / data.length - 1;
1022+
return sum / (data.length - 1);
10041023
}
10051024
}
10061025

10071026
return sampleVariance;
10081027

10091028
}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
10101029

1030+
10111031
/***/ }),
10121032
/* 10 */
10131033
/***/ (function(module, exports, __webpack_require__) {
@@ -1172,7 +1192,9 @@ return /******/ (function(modules) { // webpackBootstrap
11721192
var min = __webpack_require__(14);
11731193
var quantile = __webpack_require__(13);
11741194
var deviation = __webpack_require__(8);
1175-
var dataPreprocess = __webpack_require__(2);
1195+
var dataProcess = __webpack_require__(2);
1196+
var dataPreprocess = dataProcess.dataPreprocess;
1197+
var getPrecision = dataProcess.getPrecision;
11761198
var array = __webpack_require__(3);
11771199
var ascending = array.ascending;
11781200
var map = array.map;
@@ -1189,25 +1211,26 @@ return /******/ (function(modules) { // webpackBootstrap
11891211
function computeBins(data, threshold) {
11901212

11911213
if (threshold == null) {
1192-
11931214
threshold = thresholdMethod.squareRoot;
1194-
11951215
}
11961216
else {
1197-
11981217
threshold = thresholdMethod[threshold];
1199-
12001218
}
12011219
var values = dataPreprocess(data);
12021220
var maxValue = max(values);
12031221
var minValue = min(values);
1204-
12051222
var binsNumber = threshold(values, minValue, maxValue);
1206-
12071223
var step = tickStep(minValue, maxValue, binsNumber);
1208-
1224+
var precision = -Math.floor(Math.log(Math.abs(maxValue - minValue) / binsNumber) / Math.LN10);
1225+
12091226
// return the xAxis coordinate for each bins, except the end point of the value
1210-
var rangeArray = range(Math.ceil(minValue / step) * step, Math.floor(maxValue / step) * step, step);
1227+
var rangeArray = range(
1228+
// use function toFixed() to avoid data like '0.700000001'
1229+
+((Math.ceil(minValue / step) * step).toFixed(precision)),
1230+
+((Math.floor(maxValue / step) * step).toFixed(precision)),
1231+
step,
1232+
precision
1233+
);
12111234

12121235
var len = rangeArray.length;
12131236

@@ -1216,7 +1239,7 @@ return /******/ (function(modules) { // webpackBootstrap
12161239
for (var i = 0; i <= len; i++) {
12171240
bins[i] = {};
12181241
bins[i].sample = [];
1219-
bins[i].x0 = i > 0 // 不要数组直接挂属性,改成Object
1242+
bins[i].x0 = i > 0
12201243
? rangeArray[i - 1]
12211244
: (rangeArray[i] - minValue) === step
12221245
? minValue
@@ -1235,16 +1258,21 @@ return /******/ (function(modules) { // webpackBootstrap
12351258
}
12361259

12371260
var data = map(bins, function (bin) {
1238-
return [(bin.x0 + bin.x1) / 2, bin.sample.length];
1261+
// use function toFixed() to avoid data like '6.5666638489'
1262+
return [+((bin.x0 + bin.x1) / 2).toFixed(precision), bin.sample.length];
1263+
});
1264+
1265+
var customData = map(bins, function (bin) {
1266+
return [bin.x0, bin.x1, bin.sample.length];
12391267
});
12401268

12411269
return {
12421270
bins: bins,
1243-
data: data
1271+
data: data,
1272+
customData: customData
12441273
};
12451274
}
12461275

1247-
12481276
/**
12491277
* Four kinds of threshold methods used to
12501278
* compute how much bins the histogram should be divided
@@ -1291,34 +1319,42 @@ return /******/ (function(modules) { // webpackBootstrap
12911319

12921320
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
12931321

1322+
var dataProcess = __webpack_require__(2);
1323+
var getPrecision = dataProcess.getPrecision;
1324+
12941325
/**
1295-
* Computing range array
1326+
* Computing range array.
1327+
* Adding param precision to fix range value, avoiding range[i] = 0.7000000001.
12961328
* @param {number} start
1297-
* @param {number} stop
1329+
* @param {number} end
12981330
* @param {number} step
1331+
* @param {number} precision
12991332
* @return {Array.<number>}
13001333
*/
1301-
return function (start, stop, step) {
1334+
return function (start, end, step, precision) {
13021335

13031336
var len = arguments.length;
13041337

13051338
if (len < 2) {
1306-
stop = start;
1339+
end = start;
13071340
start = 0;
13081341
step = 1;
13091342
}
13101343
else if (len < 3) {
13111344
step = 1;
13121345
}
1313-
else {
1346+
else if (len < 4) {
13141347
step = +step;
1348+
precision = getPrecision(step);
1349+
}
1350+
else {
1351+
precision = +precision;
13151352
}
13161353

1317-
var n = Math.ceil((stop - start) / step);
1354+
var n = Math.ceil(((end - start) / step).toFixed(precision));
13181355
var range = new Array(n + 1);
1319-
13201356
for (var i = 0; i < n + 1; i++) {
1321-
range[i] = start + i * step;
1357+
range[i] = +(start + i * step).toFixed(precision);
13221358
}
13231359
return range;
13241360
};
@@ -1341,7 +1377,8 @@ return /******/ (function(modules) { // webpackBootstrap
13411377
return function (start, stop, count) {
13421378

13431379
var step0 = Math.abs(stop - start) / count;
1344-
var step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10));
1380+
var precision = Math.floor(Math.log(step0) / Math.LN10);
1381+
var step1 = Math.pow(10, precision);
13451382
var error = step0 / step1;
13461383

13471384
if (error >= Math.sqrt(50)) {
@@ -1353,7 +1390,7 @@ return /******/ (function(modules) { // webpackBootstrap
13531390
else if(error >= Math.sqrt(2)) {
13541391
step1 *= 2;
13551392
}
1356-
return stop >= start ? step1 : -step1;
1393+
return +((stop >= start ? step1 : -step1).toFixed(-precision));
13571394

13581395
};
13591396

0 commit comments

Comments
 (0)