<commit_before>[![Build Status](https://travis-ci.org/oculus42/rc.js.svg?branch=master)](https://travis-ci.org/oculus42/rc.js)

rowcol.js - Row/Column Data Manipulation
=====

While JSON arrays of objects are very familiar for representing collections of data and map nicely to row-based storage in databases, they are inefficient for transmission, storage, and filtering. "Rows" are good for interacting with a specific record, but not for *finding* that record.

**rowcol.js** provides tools for converting between rows and columns and interacting with columnar data.

Performance Comparisons
---
*  [Single Column Filter](http://jsperf.com/rc-simple/5) — For simple single-column comparisons, rowcol was 40-400% faster. With time, this performance has changed. As of December 27, 2015, rowcol is now slower in Chrome and Firefox, while Safari is faster.
*  [Simple Equivalence Filter](http://jsperf.com/rc-equiv/7) — Simple equivalence is an order of magnitude faster than native row filtering, except, strangely, in Firefox (as of December 27, 2015).
*  More to come.

Problems with Rows
----
*  Each JSON row includes a header (the key in a key-value pair) for each record. For heterogeneous data, rearranging this into columns removes the weight of the header during transmission. Rows with optional keys add `undefined` values, but may still be smaller depending on column counts and names.
*  Many data filters are applied to columns (`price > 50.00` or `active == true`), requiring incrementing across all objects even though you only want one particular attribute.<commit_msg>Added Badges<commit_after>[![Build Status](https://travis-ci.org/oculus42/rc.js.svg?branch=master)](https://travis-ci.org/oculus42/rc.js)
[![Code Climate](https://codeclimate.com/github/oculus42/rc.js/badges/gpa.svg)](https://codeclimate.com/github/oculus42/rc.js)
[![Test Coverage](https://codeclimate.com/github/oculus42/rc.js/badges/coverage.svg)](https://codeclimate.com/github/oculus42/rc.js/coverage)

rowcol.js - Row/Column Data Manipulation
=====

While JSON arrays of objects are very familiar for representing collections of data and map nicely to row-based storage in databases, they are inefficient for transmission, storage, and filtering. "Rows" are good for interacting with a specific record, but not for *finding* that record.

**rowcol.js** provides tools for converting between rows and columns and interacting with columnar data.

Performance Comparisons
---
*  [Single Column Filter](http://jsperf.com/rc-simple/5) — For simple single-column comparisons, rowcol was 40-400% faster. With time, this performance has changed. As of December 27, 2015, rowcol is now slower in Chrome and Firefox, while Safari is faster.
*  [Simple Equivalence Filter](http://jsperf.com/rc-equiv/7) — Simple equivalence is an order of magnitude faster than native row filtering, except, strangely, in Firefox (as of December 27, 2015).
*  More to come.

Problems with Rows
----
*  Each JSON row includes a header (the key in a key-value pair) for each record. For heterogeneous data, rearranging this into columns removes the weight of the header during transmission. Rows with optional keys add `undefined` values, but may still be smaller depending on column counts and names.
*  Many data filters are applied to columns (`price > 50.00` or `active == true`), requiring incrementing across all objects even though you only want one particular attribute.
{'fraction_non_alphanumeric': 0.0938953488372093, 'fraction_numerical': 0.01802325581395349, 'mean_word_length': 4.7254575707154745, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6755471', 'n_tokens_mistral': 989, 'n_tokens_neox': 895, 'n_words': 414}