Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/saehm/DruidJS
A JavaScript Library for Dimensionality Reduction
https://github.com/saehm/DruidJS
clustering dimensionality-reduction fastmap isomap javascript-library lle ltsa matrix mds pca t-sne umap unsupervised-learning
Last synced: about 1 month ago
JSON representation
A JavaScript Library for Dimensionality Reduction
- Host: GitHub
- URL: https://github.com/saehm/DruidJS
- Owner: saehm
- Created: 2019-08-27T11:37:10.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-09-26T16:42:50.000Z (3 months ago)
- Last Synced: 2024-11-08T13:06:15.058Z (about 1 month ago)
- Topics: clustering, dimensionality-reduction, fastmap, isomap, javascript-library, lle, ltsa, matrix, mds, pca, t-sne, umap, unsupervised-learning
- Language: JavaScript
- Homepage:
- Size: 6.18 MB
- Stars: 112
- Watchers: 7
- Forks: 10
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-dataviz-education - DruidJS
- awesome-viz - DruidJS - DruidJS is a JavaScript library for dimensionality reduction. With dimesionality reduction you can project high-dimensional data to a lower dimensionality while keeping method-specific properties of the data. DruidJS makes it easy to project a dataset with the implemented dimensionality reduction methods. ([↑](#contents) Data Analytics)
README
## DruidJS — A JavaScript Library for Dimensionality Reduction.
DruidJS is a JavaScript library for dimensionality reduction.
With dimesionality reduction you can project high-dimensional data to a lower dimensionality while keeping method-specific properties of the data.
DruidJS makes it easy to project a dataset with the implemented dimensionality reduction methods.
### Resources
```
@inproceedings{cutura2020druid,
title={{DRUIDJS — A JavaScript Library for Dimensionality Reduction}},
author={Cutura, Rene and Kralj, Christoph and Sedlmair, Michael},
booktitle={2020 IEEE Visualization Conference (VIS)},
pages={111--115},
year={2020},
organization={IEEE}
}
```- [Documentation](https://saehm.github.io/DruidJS/index.html)
- [Demo](https://renecutura.eu/druid_demo)
- [Conference Talk](https://youtu.be/bi6FfsWV_9k?t=2463) [IEEEVIS2020](http://ieeevis.org/year/2020/welcome)### Installation
If you use npm, install with `npm install @saehrimnir/druidjs`, and use it with
```js
import * as druid from "@saehrimnir/druidjs";
```Otherwise download the files [here](https://github.com/saehm/DruidJS/releases/latest), or use for instance [unpkg](https://unpkg.com/@saehrimnir/druidjs) this way:
```html
```
### Matrix
DruidJS uses internally the Matrix class for storing data. You can use it by creating a `druid.Matrix` object for instance with the function `from`, in example:
```js
import * as druid from '@saehrimnir/druidjs';let data = [[...], [...], ...];
let matrix = druid.Matrix.from(data);
```
You can create a `druid.Matrix` object programmatically by:
```js
let fn = (row, col) => row == col ? 1 : 0;
let matrix = new druid.Matrix(rows, columns, fn);
```
If `rows == columns`, then `matrix` would be a identity matrix.
A shortcut for a identity matrix is:
```js
let matrix = new druid.Matrix(rows, columns, "I");
// or
let matrix = new druid.Matrix(rows, columnbs, "identity");
```
There are more shortcuts for creating matrices:
```js
let matrix = new druid.Matrix(3, 3, "zeros"); // matrix would be a 3x3 matrix with zeroes
let matrix = new druid.Matrix(3, 3, "center"); // matrix would be a 3x3 center matrix;
let number = 12;
let matrix = new druid.Matrix(3, 3, number); // matrix would b a 3x3 matrix filled with 'number'
```If you want to use a `druid.Matrix` object, for instance, with [d3](https://d3js.org), you can use either the `to2dArray` property, the `iterate_rows` generator function, or just use the `druid.Matrix` object as an iterable (works with d3 since version 6).
```js
let data = await d3.csv("data.csv");
let matrix = druid.Matrix.from(data);
d3.selectAll("datapoints").data(matrix.to2dArray)//...
d3.selectAll("datapoints").data(matrix.iterate_rows())//...
d3.selectAll("datapoints").data(matrix)//...
```
### DR methods#### Transform
[Example](https://observablehq.com/@saehrimnir/hello-druidjs)#### Generator
[Example](https://observablehq.com/@saehrimnir/hello-druidjs/2)#### TopoMap Example
[Example](https://observablehq.com/@saehrimnir/topomap)
...