/chiasm-dataset-loader

A Chiasm component that fetches datasets over HTTP.

Primary LanguageJavaScriptMIT LicenseMIT

chiasm-dataset-loader

A Chiasm component that loads delimiter separated value (DSV) data tables. This is a thin wrapper around the dsv-dataset module, which is a metadata specification and parsing library for data sets. Take a look at the unit test for example usage. When a "path" property is specified, the component appends ".csv" and ".json" to it and uses an XMLHttpRequest to fetch those two paths. The ".csv" fils should contain a data table, and the ".json" file should contain metadata about the table including column types.

Example use:

The following script will set up the component in a Chiasm application:

var ChiasmDatasetLoader = require("chiasm-dataset-loader");
var chiasm = Chiasm();
chiasm.plugins.datasetLoader = ChiasmDatasetLoader;
chiasm.setConfig({
  loader: {
    plugin: "datasetLoader",
    state: {
      path: "http://bl.ocks.org/curran/raw/a08a1080b88344b0c8a7/iris"
    }
  }
});

Here are a few sample lines from http://bl.ocks.org/curran/raw/a08a1080b88344b0c8a7/iris.csv:

sepal_length,sepal_width,petal_length,petal_width,class
5.3,3.7,1.5,0.2,setosa
5.7,2.8,4.1,1.3,versicolor
5.8,2.7,5.1,1.9,virginica

Here is the content of http://bl.ocks.org/curran/raw/a08a1080b88344b0c8a7/iris.json:

{
  "columns": [
    { "name": "sepal_length", "type": "number", "label": "Sepal Length" },
    { "name": "sepal_width",  "type": "number", "label": "Sepal Width" },
    { "name": "petal_length", "type": "number", "label": "Petal Length" },
    { "name": "petal_width",  "type": "number", "label": "Petal Width" },
    { "name": "class",        "type": "string", "label": "Species" }
  ]
}

The following code will print out the parsed table:

chiasm.getComponent("loader").then(function (loader){
  loader.when("dataset", function (dataset){
    console.log(JSON.stringify(dataset, null, 2));
  });
});

The following JSON will be printed:

{
  "data": [
    {
      "sepal_length": 5.1,
      "sepal_width": 3.5,
      "petal_length": 1.4,
      "petal_width": 0.2,
      "class": "setosa"
    },
    {
      "sepal_length": 6.2,
      "sepal_width": 2.9,
      "petal_length": 4.3,
      "petal_width": 1.3,
      "class": "versicolor"
    },
    {
      "sepal_length": 6.3,
      "sepal_width": 3.3,
      "petal_length": 6,
      "petal_width": 2.5,
      "class": "virginica"
    },
    ... more rows of data ...
  ],
  "metadata": {
    "columns": [
      { "name": "sepal_length", "type": "number", "label": "Sepal Length" },
      { "name": "sepal_width", "type": "number", "label": "Sepal Width" },
      { "name": "petal_length", "type": "number", "label": "Petal Length" },
      { "name": "petal_width", "type": "number", "label": "Petal Width" },
      { "name": "class", "type": "string", "label": "Species" }
    ]
  ]
}

Notice how numeric columns have been parsed to numbers. This data structure is an instance of chiasm-dataset.

To see how this component can be used to fetch data for visualizations, check out this Magic Bar Chart example.