With this CSV example:
Source,col1,col2,col3
foo,1,2,3
bar,3,4,5
The standard method I use Pandas is this:
Parse CSV<
I think the closest thing are libraries like:
Recline in particular has a Dataset object with a structure somewhat similar to Pandas data frames. It then allows you to connect your data with "Views" such as a data grid, graphing, maps etc. Views are usually thin wrappers around existing best of breed visualization libraries such as D3, Flot, SlickGrid etc.
Here's an example for Recline:
// Load some data var dataset = recline.Model.Dataset({ records: [ { value: 1, date: '2012-08-07' }, { value: 5, b: '2013-09-07' } ] // Load CSV data instead // (And Recline has support for many more data source types) // url: 'my-local-csv-file.csv', // backend: 'csv' }); // get an element from your HTML for the viewer var $el = $('#data-viewer'); var allInOneDataViewer = new recline.View.MultiView({ model: dataset, el: $el }); // Your new Data Viewer will be live!
Pandas.js at the moment is an experimental library, but seems very promising it uses under the hood immutable.js and NumpPy logic, both data objects series and DataFrame are there..
It's pretty easy to parse CSV in javascript because each line's already essentially a javascript array. If you load your csv into an array of strings (one per line) it's pretty easy to load an array of arrays with the values:
var pivot = function(data){
var result = [];
for (var i = 0; i < data.length; i++){
for (var j=0; j < data[i].length; j++){
if (i === 0){
result[j] = [];
}
result[j][i] = data[i][j];
}
}
return result;
};
var getData = function() {
var csvString = $(".myText").val();
var csvLines = csvString.split(/\n?$/m);
var dataTable = [];
for (var i = 0; i < csvLines.length; i++){
var values;
eval("values = [" + csvLines[i] + "]");
dataTable[i] = values;
}
return pivot(dataTable);
};
Then getData()
returns a multidimensional array of values by column.
I've demonstrated this in a jsFiddle for you.
Of course, you can't do it quite this easily if you don't trust the input - if there could be script in your data which eval might pick up, etc.