analytics
Présentation
Ce plugin est propose une série d'instructions pour croiser, compter, trier, agréger des flux d’objets Javascript
installation
npm install @ezs/analytics
usage
Table of Contents
- aggregate
- count
- distance
- distinct
- distribute
- drop
- exploding
- filter
- graph
- greater
- groupingByEquality
- groupingByHamming
- groupingByLevenshtein
- groupingByModulo
- keys
- less
- maximizing
- merging
- minimizing
- multiply
- output
- pair
- pluck
- reducing
- segment
- slice
- sort
- statistics
- summing
- tune
- value
aggregate
Aggregate by id and count
[{
{ id: 'x', value: 2 },
{ id: 't', value: 2 },
{ id: 'x', value: 3 },
{ id: 'x', value: 5 },
}]
Script:
[use]
plugin = analytics
[aggregate]
path = id
Output:
[
{ id: 'x', value: [ 2, 3, 5] },
{ id: 't', value: [ 2 ] },
]
Parameters
-
path
String path to use for id (optional, defaultid
) -
value
String path to use for value (if not found 1 is the default value) (optional, defaultvalue
)
Returns Object
count
Take Object
and throw special Object
like {id, value}
if key(s) was found
id is the key, value is equal to 1 (if found)
[
{
"a": "nancy",
"b": "lucy",
"c": "geny",
},
{
"a": "lorem",
"b": "loret",
},
{
"a": "fred",
}
]
Script:
[use]
plugin = analytics
[count]
path = a
path = b
path = c
[aggregate]
[summing]
Output:
[{
"id": "a",
"value": 3
},
{
"id": "b",
"value": 2
},
{
"id": "c",
"value": 1
}]
Parameters
-
path
String
Returns Object
distance
To compare 2 fields with 2 id and compute a distance
- for arrays, the distance is calculated according to the number of element in common
[{
{
id_of_a: 1,
id_of_b: 2,
a: ['x', 'y'],
b: ['x', 'z'],
},
{
id_of_a: 1,
id_of_b: 3,
a: ['x', 'y'],
b: ['y', 'z'],
},
{
id_of_a: 1,
id_of_b: 4,
a: ['x', 'y'],
b: ['z'],
},
{
id_of_a: 1,
id_of_b: 5,
a: ['x', 'y'],
b: ['x', 'y', 'z'],
},
{
id_of_a: 1,
id_of_b: 6,
a: ['x', 'y'],
b: ['x', 'y'],
},
}]
Script:
[use]
plugin = analytics
[distance]
id = id_of_a
id = id_of_b
value = a
value = b
Output:
[
{ id: [ 1, 2 ], value: 0.5 },
{ id: [ 1, 3 ], value: 0.5 },
{ id: [ 1, 4 ], value: 0 },
{ id: [ 1, 5 ], value: 0.8 },
{ id: [ 1, 6 ], value: 1 }
]
]
Parameters
-
path
String path (optional, defaultvalue
)
Returns Object
distinct
Take Object
object getting some fields with json path, and do ...
[{
{ a: 'x', b: 'z' },
{ a: 't', b: 'z' },
{ a: 't', b: 'z' },
{ a: 'x', b: 'z' },
{ a: 'x', b: 'z' },
}]
Script:
[use]
plugin = analytics
[distinct]
path = a
Output:
[
{ id: 'x', value: 1 },
{ id: 't', value: 1 },
{ id: 't', value: 1 },
{ id: 'x', value: 1 },
{ id: 'x', value: 1 },
]
Parameters
-
path
String path (optional, default"id"
)
Returns Object
distribute
Take Object
like { id, value } and throw a serie of number value
[
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
]
Script:
[use]
plugin = analytics
[distribute]
Output:
[
{ "id": 2000, "value": 1 },
{ "id": 2001, "value": 2 },
{ "id": 2002, "value": 0 },
{ "id": 2003, "value": 3 },
{ "id": 2004, "value": 0 },
{ "id": 2005, "value": 4 },
{ "id": 2006, "value": 0 },
{ "id": 2007, "value": 5 },
{ "id": 2008, "value": 0 },
{ "id": 2009, "value": 6 },
{ "id": 2010, "value": 0 },
{ "id": 2011, "value": 7 },
{ "id": 2012, "value": 0 },
{ "id": 2013, "value": 8 }
]
Parameters
-
id
String path to use for id (optional, default"id"
) -
value
String path to use for value (optional, default"value"
) -
step
String step between each value (optional, default1
) -
start
Number first value to throw (optional, defaultminvalueinthestream
) -
size
Number size of the distribution (optional, default(maxvalue-minvalue)inthestream
) -
default
Number default value for missing object (optional, default0
)
Returns Object
drop
Take Object
and throw the same object only if there the value of the select field is not equals than a value
[
{
"departure": "nancy",
"arrival": "paris",
},
{
"departure": "nancy",
"arrival": "toul",
},
{
"departure": "paris",
"arrival": "londre",
}
]
Script:
[use]
plugin = analytics
[drop]
Output:
[{
"departure": "nancy",
"arrival": "paris"
},
{
"departure": "nancy",
"arrival": "toul"
}]
Parameters
-
path
String path of the field to compare (optional, default"value"
) -
if
Number value to compare (optional, default""
)
Returns Object
exploding
Take Object
and take values with [value] path (must be an array)
and throw object of each value. The new object is build with [id] and eac value.
[
{ departure: ['tokyo', 'nancy'], arrival: 'toul' },
{ departure: ['paris', 'nancy'], arrival: 'toul' },
{ departure: ['london', 'berlin'], arrival: 'toul' },
}]
Script:
[use]
plugin = analytics
[exploding]
Output:
[
{ "id": "toul", "value": "tokyo" },
{ "id": "toul", "value": "nancy" },
{ "id": "toul", "value": "paris" },
{ "id": "toul", "value": "nancy" },
{ "id": "toul", "value": "london" },
{ "id": "toul", "value": "berlin" }
]
Parameters
-
id
String path to use for id (optional, default"id"
) -
value
String path to use for value (optional, default"value"
)
Returns Object
filter
Take Object
and throw the same object only if there the value of the select field is equals than a value
-
[ { id: 2000, value: 1 }, { id: 2001, value: 2 }, { id: 2003, value: 3 }, { id: 2005, value: 4 }, { id: 2007, value: 5 }, { id: 2003, value: 3 }, { id: 2011, value: 7 }, { id: 2013, value: 8 }, ]
Script:
[use] plugin = analytics [filter] path = id if = 2003 if = 2013
Output:
[
{ id: 2003, value: 3 },
{ id: 2003, value: 3 },
{ id: 2013, value: 8 },
]
Parameters
-
path
String path of the field to compare (optional, default"value"
) -
if
Number value to compare (optional, default""
)
Returns Object
graph
Take Object
and throw a new special object (id, value) for each combination of values
[
{ cities: ['berlin', 'nancy', 'toul'] },
{ cities: ['paris', 'nancy', 'toul']},
{ cities: ['paris', 'berlin', 'toul'] },
}]
Script:
[use]
plugin = analytics
[graph]
path = cities
Output:
[
{ "id": [ "berlin", "nancy" ], "value": 1 },
{ "id": [ "berlin", "toul" ], "value": 2 },
{ "id": [ "nancy", "toul" ], "value": 2 },
{ "id": [ "nancy", "paris" ], "value": 1 },
{ "id": [ "paris", "toul" ], "value": 2 },
{ "id": [ "berlin", "paris" ], "value": 1 }
]
Parameters
-
path
String
Returns Object
greater
Take Object
and throw the same object only if the value of the selected
field is greater (or equal) than a value
[
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
]
Script:
[use]
plugin = analytics
[greater]
than = 3
strict = true
Output:
[
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
]
Parameters
-
path
String path of the field to compare (optional, default"value"
) -
than
Number value to compare (optional, default0
) -
strict
Boolean greater than but not equal (optional, defaultfalse
)
Returns Object
groupingByEquality
Take Object
like { id, value }
and reduce all values with the same id
in a single object
[
{ "id": "lorem", "value": 1 },
{ "id": "Lorem", "value": 1 },
{ "id": "loren", "value": 1 },
{ "id": "korem", "value": 1 },
{ "id": "olrem", "value": 1 },
{ "id": "toto", "value": 1 },
{ "id": "titi", "value": 1 },
{ "id": "lorem", "value": 1 }
]
Script:
[use]
plugin = analytics
[groupingByEquality]
[summing]
Output:
[
{ "id": [ "lorem" ], "value": 2 },
{ "id": [ "Lorem" ], "value": 1 },
{ "id": [ "loren" ], "value": 1 },
{ "id": [ "korem" ], "value": 1 },
{ "id": [ "olrem" ], "value": 1 },
{ "id": [ "toto" ], "value": 1 },
{ "id": [ "titi" ], "value": 1 }
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
groupingByHamming
Take Object
like { id, value }
and reduce all value
with id
which
have the same Hamming distance in a single object
-
[ { "id": "lorem", "value": 1 }, { "id": "Lorem", "value": 1 }, { "id": "loren", "value": 1 }, { "id": "korem", "value": 1 }, { "id": "olrem", "value": 1 }, { "id": "toto", "value": 1 }, { "id": "titi", "value": 1 }, { "id": "lorem", "value": 1 } ]
Script:
[use] plugin = analytics [groupingByHamming] distance = 1 [summing]
Output:
[
{ "id": [ "lorem", "Lorem", "loren", "korem" ], "value": 5 },
{ "id": [ "olrem" ], "value": 1 },
{ "id": [ "toto", "titi" ], "value": 2 }
]
Parameters
-
id
String path to use for id (optional, default"id"
) -
value
String path to use for value (optional, default"value"
)
Returns Object
groupingByLevenshtein
Take Object
like { id, value }
and reduce all value
s with
id
which have the same Levenshtein distance in a single object
[
{ "id": "lorem", "value": 1 },
{ "id": "Lorem", "value": 1 },
{ "id": "loren", "value": 1 },
{ "id": "korem", "value": 1 },
{ "id": "olrem", "value": 1 },
{ "id": "toto", "value": 1 },
{ "id": "titi", "value": 1 },
{ "id": "lorem", "value": 1 }
]
Script:
[use]
plugin = analytics
[groupingByLevenshtein]
distance = 2
[summing]
Output:
[
{ "id": [ "lorem", "Lorem", "loren", "korem", "olrem" ], "value": 6 },
{ "id": [ "toto", "titi" ], "value": 2 }
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
) -
distance
Number minimal levenshtein distance to have a same id (optional, default1
)
Returns Object
groupingByModulo
Take Object
like { id, value }
and reduce all value
s with the same
modulo computation in a ansingle object
[{
}]
Script:
[use]
plugin = analytics
[groupingByModulo]
Output:
[
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
keys
Take Object
and throws all its keys
[
{ city: 'tokyo', year: 2000, count: 1 },
{ city: 'paris', year: 2001, count: 2 },
{ city: 'london', year: 2003, count: 3 },
{ city: 'nancy', year: 2005, count: 4 },
{ city: 'berlin', year: 2007, count: 5 },
{ city: 'madrid', year: 2009, count: 6 },
{ city: 'stockholm', year: 2011, count: 7 },
{ city: 'bruxelles', year: 2013, count: 8 },
]
Script:
[use]
plugin = analytics
[keys]
[aggregate]
[summing]
Output:
[
{
"id": "city",
"value": 8
},
{
"id": "year",
"value": 8
},
{
"id": "count",
"value": 8
}⏎
]
Parameters
-
path
String
Returns Object
less
Take Object
and throw the same object only if the value of the selected
field is less (or equal) than a value
[{
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
}]
Script:
[use]
plugin = analytics
[less]
path = value
than = 4
Output:
[{
"id": 2000,
"value": 1
},
{
"id": 2001,
"value": 2
},
{
"id": 2003,
"value": 3
},
{
"id": 2005,
"value": 4
}]
Parameters
-
path
String path of the field to compare (optional, defaultvalue
) -
than
Number value to compare (optional, default0
) -
strict
Boolean less than but not equal (optional, defaultfalse
)
Returns Object
maximizing
Take special Object
like {id, value}
and replace value
with the max of value
s
[
{ id: 'toul', value: [1, 2, 3] },
{ id: 'nancy', value: [2, 3, 4] },
{ id: 'neufchateau', value: [3, 4, 5] },
]
Script:
[use]
plugin = analytics
[maximizing]
Output:
[
{ "id": "toul", "value": 3 },
{ "id": "nancy", "value": 4 },
{ "id": "neufchateau", "value": 5 }
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
merging
Take special Object
like {id, value}
and replace value
with the merge of value
s
[{
}]
Script:
[use]
plugin = analytics
[merging]
Output:
[
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
minimizing
Take special Object
like {id, value}
and replace value
with the min of
value
s
[{
}]
Script:
[use]
plugin = analytics
[drop]
Output:
[
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
multiply
Take Object
and throw the same object only if there the value of the select field is equals than a value
Input file:
[{
a: 1,
b: 2,
}]
Script:
[use]
plugin = analytics
[multiply]
path = factor
value = X
value = Y
value = Z
Output:
[{
a: 1,
b: 2,
factor: X
},
{
a: 1,
b: 2,
factor: Y
},
{
a: 1,
b: 2,
factor: Z
},
]
Parameters
-
path
String path of the field to add (optional, default"factor"
) -
value
String value(s) to set factor field (optional, default""
)
Returns Object
output
Format the output with data a meta
Parameters
-
indent
boolean indent or not (optional, defaultfalse
) -
meta
Array<string>? fields to be considered as metadata object
Examples
Input
[
{ _id: 1, value: 2, total: 2 },
{ _id: 2, value: 4, total: 2 }
]
Script
.pipe(ezs('output', { meta: 'total' }))
Output
{
data: [
{ _id: 1, value: 2 },
{ _id: 2, value: 4 }
],
meta: {
total: 2
}
}
Returns string
pair
Take Object
object getting some fields with json path, and
throw all pair of value from two fields
[
{ departure: ['tokyo', 'nancy'], arrival: 'toul' },
{ departure: ['paris', 'nancy'], arrival: 'toul' },
{ departure: ['london', 'berlin'], arrival: 'toul' },
]
Script:
[use]
plugin = analytics
[pair]
path = departure
path = arrival
Output:
[
{ "id": [ "tokyo", "toul" ], "value": 1 },
{ "id": [ "nancy", "toul" ], "value": 1 },
{ "id": [ "paris", "toul" ], "value": 1 },
{ "id": [ "nancy", "toul" ], "value": 1 },
{ "id": [ "london", "toul" ], "value": 1 },
{ "id": [ "berlin", "toul" ], "value": 1 }
]
Parameters
-
path
String
Returns Object
pluck
Take Object
object getting value of fields (with json path
) and throws an
object for each value
[
{ city: 'tokyo', year: 2000, count: 1 },
{ city: 'paris', year: 2001, count: 2 },
{ city: 'london', year: 2003, count: 3 },
{ city: 'nancy', year: 2005, count: 4 },
{ city: 'berlin', year: 2007, count: 5 },
{ city: 'madrid', year: 2009, count: 6 },
{ city: 'stockholm', year: 2011, count: 7 },
{ city: 'bruxelles', year: 2013, count: 8 },
]
Script:
[use]
plugin = analytics
[pluck]
path = year
Output:
[
{ "id": "year", "value": 2000 },
{ "id": "year", "value": 2001 },
{ "id": "year", "value": 2003 },
{ "id": "year", "value": 2005 },
{ "id": "year", "value": 2007 },
{ "id": "year", "value": 2009 },
{ "id": "year", "value": 2011 },
{ "id": "year", "value": 2013 }
]
Parameters
-
path
String path to use form group by (optional, defaultid
)
Returns Object
reducing
Take Object
group value of { id, value }
objectpath
[{
{ id: 'x', value: 2 },
{ id: 't', value: 2 },
{ id: 'x', value: 3 },
{ id: 'x', value: 5 },
}]
Script:
[use]
plugin = analytics
[reducing]
Output:
[
{ id: 'x', value: [2, 3, 5] },
{ id: 't', value: [2] },
]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
segment
Take Object
object getting some fields with json path, and throw segment of
value. Ex: get [a,b,c]
and throw [a,b], [b,c]
[{
{
id: 'doc#1',
value: [
1,
2,
3,
4,
],
},
{
id: 'doc#2',
value: [
4,
5,
6,
],
},
{
id: 'doc#3',
value: [
6,
7,
]
},
{
id: 'doc#4',
value: [
1,
2,
3,
4,
5,
6,
7,
]
}
}]
Script:
[use]
plugin = analytics
[segment]
path = value
Output:
[
{ id: [ 1, 2 ], value: 1 }
{ id: [ 2, 3 ], value: 1 }
{ id: [ 3, 4 ], value: 1 }
{ id: [ 4, 5 ], value: 1 }
{ id: [ 5, 6 ], value: 1 }
{ id: [ 6, 7 ], value: 1 }
{ id: [ 1, 2 ], value: 1 }
{ id: [ 2, 3 ], value: 1 }
{ id: [ 3, 4 ], value: 1 }
{ id: [ 4, 5 ], value: 1 }
{ id: [ 5, 6 ], value: 1 }
{ id: [ 6, 7 ], value: 1 }
]
Parameters
-
path
String path (optional, defaultvalue
) -
aggregate
Boolean aggregate all values for all paths (or not) (optional, defaulttrue
)
Returns Object
slice
Take Object
and throw the same object only if it is in the section of the
stream between start and start + size. stream is numbered from 1
[{
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
}]
Script:
[use]
plugin = analytics
[drop]
Output:
[
{ "id": 2001, "value": 2 },
{ "id": 2003, "value": 3 },
]
Parameters
-
start
Number start of the slice (optional, default0
) -
size
Number size of the slice (optional, default10
)
Returns Object
sort
Take all Object
and sort them with dedicated key
[{
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
}]
Script:
[use]
plugin = analytics
[sort]
path = value
reverse = true
Output:
[
{ "id": 2013, "value": 8 },
{ "id": 2011, "value": 7 },
{ "id": 2009, "value": 6 },
{ "id": 2007, "value": 5 },
{ "id": 2005, "value": 4 },
{ "id": 2003, "value": 3 },
{ "id": 2001, "value": 2 },
{ "id": 2000, "value": 1 }
]
Parameters
-
path
String path to use for id (optional, defaultid
) -
reverse
boolean reverser order (optional, defaultfalse
)
Returns Object
statistics
Compute some statistics from one or more fields
Parameters
-
path
String path of the value field (optional, defaultvalue
) -
target
String path of statistics in output object (optional, default_statistics
)
Examples
Input
```json
[
{ a: 1, },
{ a: 1, },
{ a: 2, },
{ a: 3, },
{ a: 3, },
{ a: 3, },
]
```
Script
```ini
[use]
plugin = analytics
[statistics]
path = a
```
Output
```json
[{
"a": 1,
"stats": {
"a": {
"sample": 2,
"frequency": 1,
"percentage": 25,
"sum": 4,
"count": 3,
"min": 1,
"max": 2,
"mean": 1.3333333333333333,
"range": 1,
"midrange": 0.5,
"variance": 0.2222222222222222,
"deviation": 0.4714045207910317,
"population": 2
}
}
},
{
"a": 1,
"stats": {
"a": {
"sample": 2,
"frequency": 1,
"percentage": 25,
"sum": 4,
"count": 3,
"min": 1,
"max": 2,
"mean": 1.3333333333333333,
"range": 1,
"midrange": 0.5,
"variance": 0.2222222222222222,
"deviation": 0.4714045207910317,
"population": 2
}
}
},
{
"a": 2,
"stats": {
"a": {
"sample": 1,
"frequency": 0.5,
"percentage": 50,
"sum": 4,
"count": 3,
"min": 1,
"max": 2,
"mean": 1.3333333333333333,
"range": 1,
"midrange": 0.5,
"variance": 0.2222222222222222,
"deviation": 0.4714045207910317,
"population": 2
}
}
}]
```
Returns Object
summing
Take special Object
like {id, value}
and replace value
with the sum of
value
s
[
{ "id": "A", "value": [1, 1, 1] },
{ "id": "B", "value": [1] },
{ "id": "C", "value": [1, 1, 1, 1] },
]
Script:
[use]
plugin = analytics
[summing]
Output:
[{
"id": "A", "value": 3
},
{
"id": "B",
"value": 1
},
{
"id": "C",
"value": 4
}]
Parameters
-
id
String path to use for id (optional, defaultid
) -
value
String path to use for value (optional, defaultvalue
)
Returns Object
tune
Take all Object
and sort them with selected field
[{
}]
Script:
[use]
plugin = analytics
[tune]
Output:
[
]
Parameters
-
path
String path to use for the sort key (optional, defaultid
)
Returns Object
value
Take Object
object and getting the value field
[
{ id: 2000, value: 1 },
{ id: 2001, value: 2 },
{ id: 2003, value: 3 },
{ id: 2005, value: 4 },
{ id: 2007, value: 5 },
{ id: 2009, value: 6 },
{ id: 2011, value: 7 },
{ id: 2013, value: 8 },
]
Script:
[use]
plugin = analytics
[value]
path = id
Output:
[
2000,
2001,
2003,
2005,
2007,
2009,
2011,
2013
]
Parameters
-
path
String the pah of the value field (optional, defaultvalue
)
Returns Object