├── .gitignore ├── .github └── FUNDING.yml ├── knn ├── README.md ├── index.js └── iris.csv ├── linear-regression ├── README.md ├── index.js └── advertising.csv ├── package.json ├── LICENSE ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [abhisheksoni27] 4 | -------------------------------------------------------------------------------- /knn/README.md: -------------------------------------------------------------------------------- 1 | # k Nearest Neighbours 2 | For a walk through, please refer to the article on Medium. [Machine Learning with Javascript : Part 2 (k Nearest Neighbours)](https://hackernoon.com/machine-learning-with-javascript-part-2-da994c17d483) 3 | -------------------------------------------------------------------------------- /linear-regression/README.md: -------------------------------------------------------------------------------- 1 | # Linear Regression 2 | For a walk through, please refer to the article on Medium. [Machine Learning with Javascript : Part 1 (Linear Regression)](https://hackernoon.com/machine-learning-with-javascript-part-1-9b97f3ed4fe5) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "getting-started-with-ml-using-js", 3 | "version": "1.0.0", 4 | "description": "Machine Learning with JavaScript. Fast and Simple.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "machine learning", 11 | "ML", 12 | "ML in JS", 13 | "artificial intelligence", 14 | "AI" 15 | ], 16 | "author": "Abhishek Soni", 17 | "license": "MIT", 18 | "dependencies": { 19 | "csvtojson": "^1.1.9", 20 | "ml-knn": "^2.0.0", 21 | "ml-regression": "^4.2.1", 22 | "prompt": "^1.0.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Abhishek Soni 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Machine Learning with JavaScript :rocket: 2 | 3 | You don't need ~~Python~~ to train your own models and perform Machine Learning. 4 | 5 | This repository is linked to a series I have been writing about on Medium.com, regarding _ML in JS_. 6 | 7 | [Machine Learning with Javascript : Part 1](https://hackernoon.com/machine-learning-with-javascript-part-1-9b97f3ed4fe5) 8 | 9 | ## Repository Info 10 | 11 | The repository is organized as follows: 12 | 13 | 1. **Linear Regression** | [linear-regression](https://github.com/abhisheksoni27/machine-learning-with-js/tree/master/linear-regression) 14 | 2. **k Nearest Neighbors** | [knn](https://github.com/abhisheksoni27/machine-learning-with-js/tree/master/knn) 15 | 16 | ## Get started 17 | 18 | 1. Clone this repo, or fork it and clone your own copy. 19 | 2. Run `npm install` or `yarn` inside the repository to download the required `node_modules`. 20 | 21 | That's it. 22 | 23 | Run the following command to run your model. 24 | 25 | ```bash 26 | $ node index.js 27 | ``` 28 | Tweak certain things inside index.js and run again. Awesome, eh? :tada: 29 | 30 | ## Contributing 31 | 32 | If you have an idea for this repository, or if you want to contribute to this series, please open a **Pull Request**. I await your shenanigans. :laughing: 33 | -------------------------------------------------------------------------------- /linear-regression/index.js: -------------------------------------------------------------------------------- 1 | const ml = require('ml-regression'); 2 | const csv = require('csvtojson'); 3 | const SLR = ml.SLR; // Simple Linear Regression 4 | 5 | const csvFilePath = 'advertising.csv'; // Data 6 | let csvData = [], // parsed Data 7 | X = [], // Input 8 | y = []; // Output 9 | 10 | let regressionModel; 11 | 12 | const readline = require('readline'); // For user prompt to allow predictions 13 | 14 | const rl = readline.createInterface({ 15 | input: process.stdin, 16 | output: process.stdout 17 | }); 18 | 19 | csv() 20 | .fromFile(csvFilePath) 21 | .subscribe(jsonObj => { 22 | csvData.push(jsonObj); 23 | }) 24 | .on('done', () => { 25 | dressData(); // To get data points from JSON Objects 26 | performRegression(); 27 | }); 28 | 29 | function performRegression() { 30 | regressionModel = new SLR(X, y); // Train the model on training data 31 | console.log(regressionModel.toString(3)); 32 | predictOutput(); 33 | } 34 | 35 | function dressData() { 36 | /** 37 | * One row of the data object looks like: 38 | * { 39 | * TV: "10", 40 | * Radio: "100", 41 | * Newspaper: "20", 42 | * "Sales": "1000" 43 | * } 44 | * 45 | * Hence, while adding the data points, 46 | * we need to parse the String value as a Float. 47 | */ 48 | csvData.forEach((row) => { 49 | X.push(f(row.radio)); // or row['radio'] 50 | y.push(f(row.sales)); // or row['sales'] 51 | }); 52 | } 53 | 54 | function f(s) { 55 | return parseFloat(s); 56 | } 57 | 58 | function predictOutput() { 59 | rl.question('Enter input X for prediction (Press CTRL+C to exit) : ', (answer) => { 60 | console.log(`At X = ${answer}, y = ${regressionModel.predict(parseFloat(answer)).toFixed(2)}`); 61 | predictOutput(); 62 | }); 63 | } 64 | -------------------------------------------------------------------------------- /knn/index.js: -------------------------------------------------------------------------------- 1 | const KNN = require('ml-knn'); 2 | const csv = require('csvtojson'); 3 | const prompt = require('prompt'); 4 | let knn; 5 | const csvFilePath = 'iris.csv'; // Data 6 | const names = ['sepalLength', 'sepalWidth', 'petalLength', 'petalWidth', 'type']; // For header 7 | 8 | let seperationSize; // To seperate training and test data 9 | 10 | let data = [], X = [], y = []; 11 | 12 | let trainingSetX = [], trainingSetY = [], testSetX = [], testSetY = []; 13 | 14 | csv({noheader: true, headers: names}) 15 | .fromFile(csvFilePath) 16 | .on('json', (jsonObj) => { 17 | data.push(jsonObj); // Push each object to data Array 18 | }) 19 | .on('done', (error) => { 20 | seperationSize = 0.7 * data.length; 21 | data = shuffleArray(data); 22 | dressData(); 23 | }); 24 | 25 | function dressData() { 26 | 27 | /** 28 | * There are three different types of Iris flowers 29 | * that this dataset classifies. 30 | * 31 | * 1. Iris Setosa (Iris-setosa) 32 | * 2. Iris Versicolor (Iris-versicolor) 33 | * 3. Iris Virginica (Iris-virginica) 34 | * 35 | * We are going to change these classes from Strings to numbers. 36 | * Such that, a value of type equal to 37 | * 0 would mean setosa, 38 | * 1 would mean versicolor, and 39 | * 3 would mean virginica 40 | */ 41 | 42 | let types = new Set(); // To gather UNIQUE classes 43 | 44 | data.forEach((row) => { 45 | types.add(row.type); 46 | }); 47 | 48 | typesArray = [...types]; // To save the different types of classes. 49 | 50 | data.forEach((row) => { 51 | let rowArray, typeNumber; 52 | 53 | rowArray = Object.keys(row).map(key => parseFloat(row[key])).slice(0, 4); 54 | 55 | typeNumber = typesArray.indexOf(row.type); // Convert type(String) to type(Number) 56 | 57 | X.push(rowArray); 58 | y.push(typeNumber); 59 | }); 60 | 61 | trainingSetX = X.slice(0, seperationSize); 62 | trainingSetY = y.slice(0, seperationSize); 63 | testSetX = X.slice(seperationSize); 64 | testSetY = y.slice(seperationSize); 65 | 66 | train(); 67 | } 68 | 69 | function train() { 70 | knn = new KNN(trainingSetX, trainingSetY, {k: 7}); 71 | test(); 72 | } 73 | 74 | function test() { 75 | const result = knn.predict(testSetX); 76 | const testSetLength = testSetX.length; 77 | const predictionError = error(result, testSetY); 78 | console.log(`Test Set Size = ${testSetLength} and number of Misclassifications = ${predictionError}`); 79 | predict(); 80 | } 81 | 82 | function error(predicted, expected) { 83 | let misclassifications = 0; 84 | for (var index = 0; index < predicted.length; index++) { 85 | if (predicted[index] !== expected[index]) { 86 | misclassifications++; 87 | } 88 | } 89 | return misclassifications; 90 | } 91 | 92 | function predict() { 93 | let temp = []; 94 | prompt.start(); 95 | 96 | prompt.get(['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'], function (err, result) { 97 | if (!err) { 98 | for (var key in result) { 99 | temp.push(parseFloat(result[key])); 100 | } 101 | console.log(`With ${temp} -- type = ${knn.predict(temp)}`); 102 | } 103 | }); 104 | } 105 | 106 | /** 107 | * https://stackoverflow.com/a/12646864 108 | * Randomize array element order in-place. 109 | * Using Durstenfeld shuffle algorithm. 110 | */ 111 | function shuffleArray(array) { 112 | for (var i = array.length - 1; i > 0; i--) { 113 | var j = Math.floor(Math.random() * (i + 1)); 114 | var temp = array[i]; 115 | array[i] = array[j]; 116 | array[j] = temp; 117 | } 118 | return array; 119 | } -------------------------------------------------------------------------------- /knn/iris.csv: -------------------------------------------------------------------------------- 1 | 5.1,3.5,1.4,0.2,Iris-setosa 2 | 4.9,3.0,1.4,0.2,Iris-setosa 3 | 4.7,3.2,1.3,0.2,Iris-setosa 4 | 4.6,3.1,1.5,0.2,Iris-setosa 5 | 5.0,3.6,1.4,0.2,Iris-setosa 6 | 5.4,3.9,1.7,0.4,Iris-setosa 7 | 4.6,3.4,1.4,0.3,Iris-setosa 8 | 5.0,3.4,1.5,0.2,Iris-setosa 9 | 4.4,2.9,1.4,0.2,Iris-setosa 10 | 4.9,3.1,1.5,0.1,Iris-setosa 11 | 5.4,3.7,1.5,0.2,Iris-setosa 12 | 4.8,3.4,1.6,0.2,Iris-setosa 13 | 4.8,3.0,1.4,0.1,Iris-setosa 14 | 4.3,3.0,1.1,0.1,Iris-setosa 15 | 5.8,4.0,1.2,0.2,Iris-setosa 16 | 5.7,4.4,1.5,0.4,Iris-setosa 17 | 5.4,3.9,1.3,0.4,Iris-setosa 18 | 5.1,3.5,1.4,0.3,Iris-setosa 19 | 5.7,3.8,1.7,0.3,Iris-setosa 20 | 5.1,3.8,1.5,0.3,Iris-setosa 21 | 5.4,3.4,1.7,0.2,Iris-setosa 22 | 5.1,3.7,1.5,0.4,Iris-setosa 23 | 4.6,3.6,1.0,0.2,Iris-setosa 24 | 5.1,3.3,1.7,0.5,Iris-setosa 25 | 4.8,3.4,1.9,0.2,Iris-setosa 26 | 5.0,3.0,1.6,0.2,Iris-setosa 27 | 5.0,3.4,1.6,0.4,Iris-setosa 28 | 5.2,3.5,1.5,0.2,Iris-setosa 29 | 5.2,3.4,1.4,0.2,Iris-setosa 30 | 4.7,3.2,1.6,0.2,Iris-setosa 31 | 4.8,3.1,1.6,0.2,Iris-setosa 32 | 5.4,3.4,1.5,0.4,Iris-setosa 33 | 5.2,4.1,1.5,0.1,Iris-setosa 34 | 5.5,4.2,1.4,0.2,Iris-setosa 35 | 4.9,3.1,1.5,0.1,Iris-setosa 36 | 5.0,3.2,1.2,0.2,Iris-setosa 37 | 5.5,3.5,1.3,0.2,Iris-setosa 38 | 4.9,3.1,1.5,0.1,Iris-setosa 39 | 4.4,3.0,1.3,0.2,Iris-setosa 40 | 5.1,3.4,1.5,0.2,Iris-setosa 41 | 5.0,3.5,1.3,0.3,Iris-setosa 42 | 4.5,2.3,1.3,0.3,Iris-setosa 43 | 4.4,3.2,1.3,0.2,Iris-setosa 44 | 5.0,3.5,1.6,0.6,Iris-setosa 45 | 5.1,3.8,1.9,0.4,Iris-setosa 46 | 4.8,3.0,1.4,0.3,Iris-setosa 47 | 5.1,3.8,1.6,0.2,Iris-setosa 48 | 4.6,3.2,1.4,0.2,Iris-setosa 49 | 5.3,3.7,1.5,0.2,Iris-setosa 50 | 5.0,3.3,1.4,0.2,Iris-setosa 51 | 7.0,3.2,4.7,1.4,Iris-versicolor 52 | 6.4,3.2,4.5,1.5,Iris-versicolor 53 | 6.9,3.1,4.9,1.5,Iris-versicolor 54 | 5.5,2.3,4.0,1.3,Iris-versicolor 55 | 6.5,2.8,4.6,1.5,Iris-versicolor 56 | 5.7,2.8,4.5,1.3,Iris-versicolor 57 | 6.3,3.3,4.7,1.6,Iris-versicolor 58 | 4.9,2.4,3.3,1.0,Iris-versicolor 59 | 6.6,2.9,4.6,1.3,Iris-versicolor 60 | 5.2,2.7,3.9,1.4,Iris-versicolor 61 | 5.0,2.0,3.5,1.0,Iris-versicolor 62 | 5.9,3.0,4.2,1.5,Iris-versicolor 63 | 6.0,2.2,4.0,1.0,Iris-versicolor 64 | 6.1,2.9,4.7,1.4,Iris-versicolor 65 | 5.6,2.9,3.6,1.3,Iris-versicolor 66 | 6.7,3.1,4.4,1.4,Iris-versicolor 67 | 5.6,3.0,4.5,1.5,Iris-versicolor 68 | 5.8,2.7,4.1,1.0,Iris-versicolor 69 | 6.2,2.2,4.5,1.5,Iris-versicolor 70 | 5.6,2.5,3.9,1.1,Iris-versicolor 71 | 5.9,3.2,4.8,1.8,Iris-versicolor 72 | 6.1,2.8,4.0,1.3,Iris-versicolor 73 | 6.3,2.5,4.9,1.5,Iris-versicolor 74 | 6.1,2.8,4.7,1.2,Iris-versicolor 75 | 6.4,2.9,4.3,1.3,Iris-versicolor 76 | 6.6,3.0,4.4,1.4,Iris-versicolor 77 | 6.8,2.8,4.8,1.4,Iris-versicolor 78 | 6.7,3.0,5.0,1.7,Iris-versicolor 79 | 6.0,2.9,4.5,1.5,Iris-versicolor 80 | 5.7,2.6,3.5,1.0,Iris-versicolor 81 | 5.5,2.4,3.8,1.1,Iris-versicolor 82 | 5.5,2.4,3.7,1.0,Iris-versicolor 83 | 5.8,2.7,3.9,1.2,Iris-versicolor 84 | 6.0,2.7,5.1,1.6,Iris-versicolor 85 | 5.4,3.0,4.5,1.5,Iris-versicolor 86 | 6.0,3.4,4.5,1.6,Iris-versicolor 87 | 6.7,3.1,4.7,1.5,Iris-versicolor 88 | 6.3,2.3,4.4,1.3,Iris-versicolor 89 | 5.6,3.0,4.1,1.3,Iris-versicolor 90 | 5.5,2.5,4.0,1.3,Iris-versicolor 91 | 5.5,2.6,4.4,1.2,Iris-versicolor 92 | 6.1,3.0,4.6,1.4,Iris-versicolor 93 | 5.8,2.6,4.0,1.2,Iris-versicolor 94 | 5.0,2.3,3.3,1.0,Iris-versicolor 95 | 5.6,2.7,4.2,1.3,Iris-versicolor 96 | 5.7,3.0,4.2,1.2,Iris-versicolor 97 | 5.7,2.9,4.2,1.3,Iris-versicolor 98 | 6.2,2.9,4.3,1.3,Iris-versicolor 99 | 5.1,2.5,3.0,1.1,Iris-versicolor 100 | 5.7,2.8,4.1,1.3,Iris-versicolor 101 | 6.3,3.3,6.0,2.5,Iris-virginica 102 | 5.8,2.7,5.1,1.9,Iris-virginica 103 | 7.1,3.0,5.9,2.1,Iris-virginica 104 | 6.3,2.9,5.6,1.8,Iris-virginica 105 | 6.5,3.0,5.8,2.2,Iris-virginica 106 | 7.6,3.0,6.6,2.1,Iris-virginica 107 | 4.9,2.5,4.5,1.7,Iris-virginica 108 | 7.3,2.9,6.3,1.8,Iris-virginica 109 | 6.7,2.5,5.8,1.8,Iris-virginica 110 | 7.2,3.6,6.1,2.5,Iris-virginica 111 | 6.5,3.2,5.1,2.0,Iris-virginica 112 | 6.4,2.7,5.3,1.9,Iris-virginica 113 | 6.8,3.0,5.5,2.1,Iris-virginica 114 | 5.7,2.5,5.0,2.0,Iris-virginica 115 | 5.8,2.8,5.1,2.4,Iris-virginica 116 | 6.4,3.2,5.3,2.3,Iris-virginica 117 | 6.5,3.0,5.5,1.8,Iris-virginica 118 | 7.7,3.8,6.7,2.2,Iris-virginica 119 | 7.7,2.6,6.9,2.3,Iris-virginica 120 | 6.0,2.2,5.0,1.5,Iris-virginica 121 | 6.9,3.2,5.7,2.3,Iris-virginica 122 | 5.6,2.8,4.9,2.0,Iris-virginica 123 | 7.7,2.8,6.7,2.0,Iris-virginica 124 | 6.3,2.7,4.9,1.8,Iris-virginica 125 | 6.7,3.3,5.7,2.1,Iris-virginica 126 | 7.2,3.2,6.0,1.8,Iris-virginica 127 | 6.2,2.8,4.8,1.8,Iris-virginica 128 | 6.1,3.0,4.9,1.8,Iris-virginica 129 | 6.4,2.8,5.6,2.1,Iris-virginica 130 | 7.2,3.0,5.8,1.6,Iris-virginica 131 | 7.4,2.8,6.1,1.9,Iris-virginica 132 | 7.9,3.8,6.4,2.0,Iris-virginica 133 | 6.4,2.8,5.6,2.2,Iris-virginica 134 | 6.3,2.8,5.1,1.5,Iris-virginica 135 | 6.1,2.6,5.6,1.4,Iris-virginica 136 | 7.7,3.0,6.1,2.3,Iris-virginica 137 | 6.3,3.4,5.6,2.4,Iris-virginica 138 | 6.4,3.1,5.5,1.8,Iris-virginica 139 | 6.0,3.0,4.8,1.8,Iris-virginica 140 | 6.9,3.1,5.4,2.1,Iris-virginica 141 | 6.7,3.1,5.6,2.4,Iris-virginica 142 | 6.9,3.1,5.1,2.3,Iris-virginica 143 | 5.8,2.7,5.1,1.9,Iris-virginica 144 | 6.8,3.2,5.9,2.3,Iris-virginica 145 | 6.7,3.3,5.7,2.5,Iris-virginica 146 | 6.7,3.0,5.2,2.3,Iris-virginica 147 | 6.3,2.5,5.0,1.9,Iris-virginica 148 | 6.5,3.0,5.2,2.0,Iris-virginica 149 | 6.2,3.4,5.4,2.3,Iris-virginica 150 | 5.9,3.0,5.1,1.8,Iris-virginica 151 | -------------------------------------------------------------------------------- /linear-regression/advertising.csv: -------------------------------------------------------------------------------- 1 | "","TV","Radio","Newspaper","Sales" 2 | "1",230.1,37.8,69.2,22.1 3 | "2",44.5,39.3,45.1,10.4 4 | "3",17.2,45.9,69.3,9.3 5 | "4",151.5,41.3,58.5,18.5 6 | "5",180.8,10.8,58.4,12.9 7 | "6",8.7,48.9,75,7.2 8 | "7",57.5,32.8,23.5,11.8 9 | "8",120.2,19.6,11.6,13.2 10 | "9",8.6,2.1,1,4.8 11 | "10",199.8,2.6,21.2,10.6 12 | "11",66.1,5.8,24.2,8.6 13 | "12",214.7,24,4,17.4 14 | "13",23.8,35.1,65.9,9.2 15 | "14",97.5,7.6,7.2,9.7 16 | "15",204.1,32.9,46,19 17 | "16",195.4,47.7,52.9,22.4 18 | "17",67.8,36.6,114,12.5 19 | "18",281.4,39.6,55.8,24.4 20 | "19",69.2,20.5,18.3,11.3 21 | "20",147.3,23.9,19.1,14.6 22 | "21",218.4,27.7,53.4,18 23 | "22",237.4,5.1,23.5,12.5 24 | "23",13.2,15.9,49.6,5.6 25 | "24",228.3,16.9,26.2,15.5 26 | "25",62.3,12.6,18.3,9.7 27 | "26",262.9,3.5,19.5,12 28 | "27",142.9,29.3,12.6,15 29 | "28",240.1,16.7,22.9,15.9 30 | "29",248.8,27.1,22.9,18.9 31 | "30",70.6,16,40.8,10.5 32 | "31",292.9,28.3,43.2,21.4 33 | "32",112.9,17.4,38.6,11.9 34 | "33",97.2,1.5,30,9.6 35 | "34",265.6,20,0.3,17.4 36 | "35",95.7,1.4,7.4,9.5 37 | "36",290.7,4.1,8.5,12.8 38 | "37",266.9,43.8,5,25.4 39 | "38",74.7,49.4,45.7,14.7 40 | "39",43.1,26.7,35.1,10.1 41 | "40",228,37.7,32,21.5 42 | "41",202.5,22.3,31.6,16.6 43 | "42",177,33.4,38.7,17.1 44 | "43",293.6,27.7,1.8,20.7 45 | "44",206.9,8.4,26.4,12.9 46 | "45",25.1,25.7,43.3,8.5 47 | "46",175.1,22.5,31.5,14.9 48 | "47",89.7,9.9,35.7,10.6 49 | "48",239.9,41.5,18.5,23.2 50 | "49",227.2,15.8,49.9,14.8 51 | "50",66.9,11.7,36.8,9.7 52 | "51",199.8,3.1,34.6,11.4 53 | "52",100.4,9.6,3.6,10.7 54 | "53",216.4,41.7,39.6,22.6 55 | "54",182.6,46.2,58.7,21.2 56 | "55",262.7,28.8,15.9,20.2 57 | "56",198.9,49.4,60,23.7 58 | "57",7.3,28.1,41.4,5.5 59 | "58",136.2,19.2,16.6,13.2 60 | "59",210.8,49.6,37.7,23.8 61 | "60",210.7,29.5,9.3,18.4 62 | "61",53.5,2,21.4,8.1 63 | "62",261.3,42.7,54.7,24.2 64 | "63",239.3,15.5,27.3,15.7 65 | "64",102.7,29.6,8.4,14 66 | "65",131.1,42.8,28.9,18 67 | "66",69,9.3,0.9,9.3 68 | "67",31.5,24.6,2.2,9.5 69 | "68",139.3,14.5,10.2,13.4 70 | "69",237.4,27.5,11,18.9 71 | "70",216.8,43.9,27.2,22.3 72 | "71",199.1,30.6,38.7,18.3 73 | "72",109.8,14.3,31.7,12.4 74 | "73",26.8,33,19.3,8.8 75 | "74",129.4,5.7,31.3,11 76 | "75",213.4,24.6,13.1,17 77 | "76",16.9,43.7,89.4,8.7 78 | "77",27.5,1.6,20.7,6.9 79 | "78",120.5,28.5,14.2,14.2 80 | "79",5.4,29.9,9.4,5.3 81 | "80",116,7.7,23.1,11 82 | "81",76.4,26.7,22.3,11.8 83 | "82",239.8,4.1,36.9,12.3 84 | "83",75.3,20.3,32.5,11.3 85 | "84",68.4,44.5,35.6,13.6 86 | "85",213.5,43,33.8,21.7 87 | "86",193.2,18.4,65.7,15.2 88 | "87",76.3,27.5,16,12 89 | "88",110.7,40.6,63.2,16 90 | "89",88.3,25.5,73.4,12.9 91 | "90",109.8,47.8,51.4,16.7 92 | "91",134.3,4.9,9.3,11.2 93 | "92",28.6,1.5,33,7.3 94 | "93",217.7,33.5,59,19.4 95 | "94",250.9,36.5,72.3,22.2 96 | "95",107.4,14,10.9,11.5 97 | "96",163.3,31.6,52.9,16.9 98 | "97",197.6,3.5,5.9,11.7 99 | "98",184.9,21,22,15.5 100 | "99",289.7,42.3,51.2,25.4 101 | "100",135.2,41.7,45.9,17.2 102 | "101",222.4,4.3,49.8,11.7 103 | "102",296.4,36.3,100.9,23.8 104 | "103",280.2,10.1,21.4,14.8 105 | "104",187.9,17.2,17.9,14.7 106 | "105",238.2,34.3,5.3,20.7 107 | "106",137.9,46.4,59,19.2 108 | "107",25,11,29.7,7.2 109 | "108",90.4,0.3,23.2,8.7 110 | "109",13.1,0.4,25.6,5.3 111 | "110",255.4,26.9,5.5,19.8 112 | "111",225.8,8.2,56.5,13.4 113 | "112",241.7,38,23.2,21.8 114 | "113",175.7,15.4,2.4,14.1 115 | "114",209.6,20.6,10.7,15.9 116 | "115",78.2,46.8,34.5,14.6 117 | "116",75.1,35,52.7,12.6 118 | "117",139.2,14.3,25.6,12.2 119 | "118",76.4,0.8,14.8,9.4 120 | "119",125.7,36.9,79.2,15.9 121 | "120",19.4,16,22.3,6.6 122 | "121",141.3,26.8,46.2,15.5 123 | "122",18.8,21.7,50.4,7 124 | "123",224,2.4,15.6,11.6 125 | "124",123.1,34.6,12.4,15.2 126 | "125",229.5,32.3,74.2,19.7 127 | "126",87.2,11.8,25.9,10.6 128 | "127",7.8,38.9,50.6,6.6 129 | "128",80.2,0,9.2,8.8 130 | "129",220.3,49,3.2,24.7 131 | "130",59.6,12,43.1,9.7 132 | "131",0.7,39.6,8.7,1.6 133 | "132",265.2,2.9,43,12.7 134 | "133",8.4,27.2,2.1,5.7 135 | "134",219.8,33.5,45.1,19.6 136 | "135",36.9,38.6,65.6,10.8 137 | "136",48.3,47,8.5,11.6 138 | "137",25.6,39,9.3,9.5 139 | "138",273.7,28.9,59.7,20.8 140 | "139",43,25.9,20.5,9.6 141 | "140",184.9,43.9,1.7,20.7 142 | "141",73.4,17,12.9,10.9 143 | "142",193.7,35.4,75.6,19.2 144 | "143",220.5,33.2,37.9,20.1 145 | "144",104.6,5.7,34.4,10.4 146 | "145",96.2,14.8,38.9,11.4 147 | "146",140.3,1.9,9,10.3 148 | "147",240.1,7.3,8.7,13.2 149 | "148",243.2,49,44.3,25.4 150 | "149",38,40.3,11.9,10.9 151 | "150",44.7,25.8,20.6,10.1 152 | "151",280.7,13.9,37,16.1 153 | "152",121,8.4,48.7,11.6 154 | "153",197.6,23.3,14.2,16.6 155 | "154",171.3,39.7,37.7,19 156 | "155",187.8,21.1,9.5,15.6 157 | "156",4.1,11.6,5.7,3.2 158 | "157",93.9,43.5,50.5,15.3 159 | "158",149.8,1.3,24.3,10.1 160 | "159",11.7,36.9,45.2,7.3 161 | "160",131.7,18.4,34.6,12.9 162 | "161",172.5,18.1,30.7,14.4 163 | "162",85.7,35.8,49.3,13.3 164 | "163",188.4,18.1,25.6,14.9 165 | "164",163.5,36.8,7.4,18 166 | "165",117.2,14.7,5.4,11.9 167 | "166",234.5,3.4,84.8,11.9 168 | "167",17.9,37.6,21.6,8 169 | "168",206.8,5.2,19.4,12.2 170 | "169",215.4,23.6,57.6,17.1 171 | "170",284.3,10.6,6.4,15 172 | "171",50,11.6,18.4,8.4 173 | "172",164.5,20.9,47.4,14.5 174 | "173",19.6,20.1,17,7.6 175 | "174",168.4,7.1,12.8,11.7 176 | "175",222.4,3.4,13.1,11.5 177 | "176",276.9,48.9,41.8,27 178 | "177",248.4,30.2,20.3,20.2 179 | "178",170.2,7.8,35.2,11.7 180 | "179",276.7,2.3,23.7,11.8 181 | "180",165.6,10,17.6,12.6 182 | "181",156.6,2.6,8.3,10.5 183 | "182",218.5,5.4,27.4,12.2 184 | "183",56.2,5.7,29.7,8.7 185 | "184",287.6,43,71.8,26.2 186 | "185",253.8,21.3,30,17.6 187 | "186",205,45.1,19.6,22.6 188 | "187",139.5,2.1,26.6,10.3 189 | "188",191.1,28.7,18.2,17.3 190 | "189",286,13.9,3.7,15.9 191 | "190",18.7,12.1,23.4,6.7 192 | "191",39.5,41.1,5.8,10.8 193 | "192",75.5,10.8,6,9.9 194 | "193",17.2,4.1,31.6,5.9 195 | "194",166.8,42,3.6,19.6 196 | "195",149.7,35.6,6,17.3 197 | "196",38.2,3.7,13.8,7.6 198 | "197",94.2,4.9,8.1,9.7 199 | "198",177,9.3,6.4,12.8 200 | "199",283.6,42,66.2,25.5 201 | "200",232.1,8.6,8.7,13.4 202 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | async@~0.9.0: 6 | version "0.9.2" 7 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 8 | 9 | async@~1.0.0: 10 | version "1.0.0" 11 | resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" 12 | 13 | balanced-match@^1.0.0: 14 | version "1.0.0" 15 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 16 | 17 | brace-expansion@^1.1.7: 18 | version "1.1.8" 19 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 20 | dependencies: 21 | balanced-match "^1.0.0" 22 | concat-map "0.0.1" 23 | 24 | colors@1.0.x: 25 | version "1.0.3" 26 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" 27 | 28 | colors@^1.1.2: 29 | version "1.1.2" 30 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 31 | 32 | concat-map@0.0.1: 33 | version "0.0.1" 34 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 35 | 36 | csvtojson@^1.1.9: 37 | version "1.1.9" 38 | resolved "https://registry.yarnpkg.com/csvtojson/-/csvtojson-1.1.9.tgz#e641ae72f7bc2fa3f9aaf127e021fc89447c1cd1" 39 | dependencies: 40 | lodash "^4.17.3" 41 | strip-bom "1.0.0" 42 | 43 | cycle@1.0.x: 44 | version "1.0.3" 45 | resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" 46 | 47 | deep-equal@~0.2.1: 48 | version "0.2.2" 49 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d" 50 | 51 | eyes@0.1.x: 52 | version "0.1.8" 53 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 54 | 55 | first-chunk-stream@^1.0.0: 56 | version "1.0.0" 57 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" 58 | 59 | fs.realpath@^1.0.0: 60 | version "1.0.0" 61 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 62 | 63 | glob@^7.0.5: 64 | version "7.1.2" 65 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 66 | dependencies: 67 | fs.realpath "^1.0.0" 68 | inflight "^1.0.4" 69 | inherits "2" 70 | minimatch "^3.0.4" 71 | once "^1.3.0" 72 | path-is-absolute "^1.0.0" 73 | 74 | i@0.3.x: 75 | version "0.3.6" 76 | resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" 77 | 78 | inflight@^1.0.4: 79 | version "1.0.6" 80 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 81 | dependencies: 82 | once "^1.3.0" 83 | wrappy "1" 84 | 85 | inherits@2: 86 | version "2.0.3" 87 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 88 | 89 | is-finite@^1.0.0: 90 | version "1.0.2" 91 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 92 | dependencies: 93 | number-is-nan "^1.0.0" 94 | 95 | is-integer@^1.0.6: 96 | version "1.0.7" 97 | resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c" 98 | dependencies: 99 | is-finite "^1.0.0" 100 | 101 | is-utf8@^0.2.0: 102 | version "0.2.1" 103 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 104 | 105 | isstream@0.1.x: 106 | version "0.1.2" 107 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 108 | 109 | lodash@^4.17.3: 110 | version "4.17.4" 111 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 112 | 113 | minimatch@^3.0.4: 114 | version "3.0.4" 115 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 116 | dependencies: 117 | brace-expansion "^1.1.7" 118 | 119 | minimist@0.0.8: 120 | version "0.0.8" 121 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 122 | 123 | mkdirp@0.x.x: 124 | version "0.5.1" 125 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 126 | dependencies: 127 | minimist "0.0.8" 128 | 129 | ml-array-max@^1.0.1: 130 | version "1.0.1" 131 | resolved "https://registry.yarnpkg.com/ml-array-max/-/ml-array-max-1.0.1.tgz#bd6213b1e0fdccf0eebb9c9a677c2d2405a92181" 132 | 133 | ml-array-min@^1.0.1: 134 | version "1.0.1" 135 | resolved "https://registry.yarnpkg.com/ml-array-min/-/ml-array-min-1.0.1.tgz#544b71ee0b2f38e6093e6a5964af8a6daff22f28" 136 | 137 | ml-array-rescale@^1.1.0: 138 | version "1.1.0" 139 | resolved "https://registry.yarnpkg.com/ml-array-rescale/-/ml-array-rescale-1.1.0.tgz#e5a6aaff247865d1e1c8acfb8ef630fe5df1e3a2" 140 | dependencies: 141 | ml-array-max "^1.0.1" 142 | ml-array-min "^1.0.1" 143 | 144 | ml-distance-euclidean@^1.0.0: 145 | version "1.0.0" 146 | resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-1.0.0.tgz#08447c2233641a2b2a9b4c29e5f792d28f1d5b95" 147 | 148 | ml-kernel-gaussian@^2.0.1: 149 | version "2.0.1" 150 | resolved "https://registry.yarnpkg.com/ml-kernel-gaussian/-/ml-kernel-gaussian-2.0.1.tgz#a01aef9f44f5bcc11341b09a383b1b32f11933c0" 151 | dependencies: 152 | ml-distance-euclidean "^1.0.0" 153 | 154 | ml-kernel-polynomial@^2.0.0: 155 | version "2.0.0" 156 | resolved "https://registry.yarnpkg.com/ml-kernel-polynomial/-/ml-kernel-polynomial-2.0.0.tgz#8ec02c02ccb68bf25a92fbccb4d55a4b387c8313" 157 | 158 | ml-kernel-sigmoid@^1.0.0: 159 | version "1.0.0" 160 | resolved "https://registry.yarnpkg.com/ml-kernel-sigmoid/-/ml-kernel-sigmoid-1.0.0.tgz#884b28be13f61a60a5173f04240e8096eb1d9cd2" 161 | 162 | ml-kernel@^2.0.0: 163 | version "2.3.4" 164 | resolved "https://registry.yarnpkg.com/ml-kernel/-/ml-kernel-2.3.4.tgz#7f6cdd5a3a9b1b6ee3c34bfd15c181664a0661dd" 165 | dependencies: 166 | ml-distance-euclidean "^1.0.0" 167 | ml-kernel-gaussian "^2.0.1" 168 | ml-kernel-polynomial "^2.0.0" 169 | ml-kernel-sigmoid "^1.0.0" 170 | ml-matrix "^5.0.0" 171 | 172 | ml-knn@^2.0.0: 173 | version "2.1.3" 174 | resolved "https://registry.yarnpkg.com/ml-knn/-/ml-knn-2.1.3.tgz#12b9d5c8877d98078d635d64d1acc8ad974f442b" 175 | dependencies: 176 | ml-distance-euclidean "^1.0.0" 177 | 178 | ml-matrix@^5.0.0: 179 | version "5.0.1" 180 | resolved "https://registry.yarnpkg.com/ml-matrix/-/ml-matrix-5.0.1.tgz#2cb1f20b33ed8a0475dadd68ca7a6f7da5c5482c" 181 | dependencies: 182 | ml-array-rescale "^1.1.0" 183 | 184 | ml-regression-base@^1.0.0, ml-regression-base@^1.1.1, ml-regression-base@^1.2.0: 185 | version "1.2.0" 186 | resolved "https://registry.yarnpkg.com/ml-regression-base/-/ml-regression-base-1.2.0.tgz#e8c58c12b649d845ecb13e0c246ad1be6e57cc1c" 187 | 188 | ml-regression-exponential@^1.0.0: 189 | version "1.0.1" 190 | resolved "https://registry.yarnpkg.com/ml-regression-exponential/-/ml-regression-exponential-1.0.1.tgz#f5eedba31a3e0bcfbbb92c26c590f9d02970e7d0" 191 | dependencies: 192 | ml-regression-base "^1.1.1" 193 | ml-regression-simple-linear "^1.0.1" 194 | 195 | ml-regression-multivariate-linear@^1.0.0: 196 | version "1.0.1" 197 | resolved "https://registry.yarnpkg.com/ml-regression-multivariate-linear/-/ml-regression-multivariate-linear-1.0.1.tgz#fb1f1eb7cadac11d27eacc9473da2b83795ec0cb" 198 | dependencies: 199 | ml-matrix "^5.0.0" 200 | ml-regression-base "^1.2.0" 201 | 202 | ml-regression-polynomial@^1.0.0: 203 | version "1.0.3" 204 | resolved "https://registry.yarnpkg.com/ml-regression-polynomial/-/ml-regression-polynomial-1.0.3.tgz#bd77838c8b673ddcc6ad6e53959a9a97789b80c5" 205 | dependencies: 206 | ml-matrix "^5.0.0" 207 | ml-regression-base "^1.1.1" 208 | 209 | ml-regression-power@^1.0.0: 210 | version "1.0.0" 211 | resolved "https://registry.yarnpkg.com/ml-regression-power/-/ml-regression-power-1.0.0.tgz#eb934fc3c0531a15d8772f46a7ca9551785e481f" 212 | dependencies: 213 | ml-regression-base "^1.2.0" 214 | ml-regression-simple-linear "^1.0.2" 215 | 216 | ml-regression-robust-polynomial@^1.0.0: 217 | version "1.0.1" 218 | resolved "https://registry.yarnpkg.com/ml-regression-robust-polynomial/-/ml-regression-robust-polynomial-1.0.1.tgz#870793f61bde021d002e439ebb4064428ed9d888" 219 | dependencies: 220 | ml-matrix "^5.0.0" 221 | ml-regression-base "^1.2.0" 222 | 223 | ml-regression-simple-linear@^1.0.0, ml-regression-simple-linear@^1.0.1, ml-regression-simple-linear@^1.0.2: 224 | version "1.0.2" 225 | resolved "https://registry.yarnpkg.com/ml-regression-simple-linear/-/ml-regression-simple-linear-1.0.2.tgz#d99fe95be9178c3bf045cc58490b1e62851336af" 226 | dependencies: 227 | ml-regression-base "^1.0.0" 228 | 229 | ml-regression-theil-sen@^1.0.0: 230 | version "1.0.0" 231 | resolved "https://registry.yarnpkg.com/ml-regression-theil-sen/-/ml-regression-theil-sen-1.0.0.tgz#fb33c67ca88cd182c9eee999cecccd7aad5c2bc8" 232 | dependencies: 233 | ml-regression-base "^1.2.0" 234 | ml-stat "^1.3.3" 235 | 236 | ml-regression@^4.2.1: 237 | version "4.4.2" 238 | resolved "https://registry.yarnpkg.com/ml-regression/-/ml-regression-4.4.2.tgz#d19b376bcc990968cda0d9c3e59f04fd12b91a5f" 239 | dependencies: 240 | is-integer "^1.0.6" 241 | ml-kernel "^2.0.0" 242 | ml-matrix "^5.0.0" 243 | ml-regression-base "^1.2.0" 244 | ml-regression-exponential "^1.0.0" 245 | ml-regression-multivariate-linear "^1.0.0" 246 | ml-regression-polynomial "^1.0.0" 247 | ml-regression-power "^1.0.0" 248 | ml-regression-robust-polynomial "^1.0.0" 249 | ml-regression-simple-linear "^1.0.0" 250 | ml-regression-theil-sen "^1.0.0" 251 | ml-stat "^1.3.3" 252 | 253 | ml-stat@^1.3.3: 254 | version "1.3.3" 255 | resolved "https://registry.yarnpkg.com/ml-stat/-/ml-stat-1.3.3.tgz#8a5493b0f67382fbf705c260e070436655a7dcfa" 256 | 257 | mute-stream@~0.0.4: 258 | version "0.0.7" 259 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 260 | 261 | ncp@1.0.x: 262 | version "1.0.1" 263 | resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246" 264 | 265 | number-is-nan@^1.0.0: 266 | version "1.0.1" 267 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 268 | 269 | once@^1.3.0: 270 | version "1.4.0" 271 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 272 | dependencies: 273 | wrappy "1" 274 | 275 | path-is-absolute@^1.0.0: 276 | version "1.0.1" 277 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 278 | 279 | pkginfo@0.3.x: 280 | version "0.3.1" 281 | resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" 282 | 283 | pkginfo@0.x.x: 284 | version "0.4.1" 285 | resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" 286 | 287 | prompt@^1.0.0: 288 | version "1.0.0" 289 | resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.0.0.tgz#8e57123c396ab988897fb327fd3aedc3e735e4fe" 290 | dependencies: 291 | colors "^1.1.2" 292 | pkginfo "0.x.x" 293 | read "1.0.x" 294 | revalidator "0.1.x" 295 | utile "0.3.x" 296 | winston "2.1.x" 297 | 298 | read@1.0.x: 299 | version "1.0.7" 300 | resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" 301 | dependencies: 302 | mute-stream "~0.0.4" 303 | 304 | revalidator@0.1.x: 305 | version "0.1.8" 306 | resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" 307 | 308 | rimraf@2.x.x: 309 | version "2.6.2" 310 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 311 | dependencies: 312 | glob "^7.0.5" 313 | 314 | stack-trace@0.0.x: 315 | version "0.0.10" 316 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" 317 | 318 | strip-bom@1.0.0: 319 | version "1.0.0" 320 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" 321 | dependencies: 322 | first-chunk-stream "^1.0.0" 323 | is-utf8 "^0.2.0" 324 | 325 | utile@0.3.x: 326 | version "0.3.0" 327 | resolved "https://registry.yarnpkg.com/utile/-/utile-0.3.0.tgz#1352c340eb820e4d8ddba039a4fbfaa32ed4ef3a" 328 | dependencies: 329 | async "~0.9.0" 330 | deep-equal "~0.2.1" 331 | i "0.3.x" 332 | mkdirp "0.x.x" 333 | ncp "1.0.x" 334 | rimraf "2.x.x" 335 | 336 | winston@2.1.x: 337 | version "2.1.1" 338 | resolved "https://registry.yarnpkg.com/winston/-/winston-2.1.1.tgz#3c9349d196207fd1bdff9d4bc43ef72510e3a12e" 339 | dependencies: 340 | async "~1.0.0" 341 | colors "1.0.x" 342 | cycle "1.0.x" 343 | eyes "0.1.x" 344 | isstream "0.1.x" 345 | pkginfo "0.3.x" 346 | stack-trace "0.0.x" 347 | 348 | wrappy@1: 349 | version "1.0.2" 350 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 351 | --------------------------------------------------------------------------------