Todos.
- Tests
- Makefile (all modules)
- Examples
- Travis.yml (all modules)
- npm publish
- individualize
- serverify
- use through2 (?)
- create a flow adventure
- pipelines (snap together; nyt)
- if process needs stringified values, transformer( stringify )
- what should happen when the window size exceeds the piped data length? (mean, var, mva, etc)
- move KDE and pdf to separate npmodules
- flow-server (workerfy)
- browserify build (leave out file streams)
- all simulators should have start, pause, stop logic and an interval parameter
- Moving weighted mean (exp; wmean)
- Moving weighted variance (wvar)
- Mean overlap parameter
- Variance overlap parameter
- Histnd
- MVA should output 2d hist (or no, just stream to histnd; in which case, call flow-mean-variance; or yes, mva, but make a stream pipeline: mean-variance pipe histnd)
- Ability to specify value precision (significant digits; flow-sigfig)
- KDE pdfs
- Threshold occurrence (accumulation threshold; like cumulative sum)
- Threshold count (reduce --> single value output)
- Threshold binary (see logical below)
- Threshold alert (transform)
- moving threshold occurrence
- moving threshold
- moving outliers (use online insertion sort with binsearch; this stream will be cpu expensive)
- moving iqr
- moving quantile
- file loopback (infinite read; configurable start, pause, end)
- moving median
- moving pcc
- pc analysis
- moving cov
- merge independent json streams on a per element basis (see zip below)
- find first([num]) --> could make this and #25 part of find; optional parameters: 'first|last', [number]
- find last([num])
- sort (insertion sort and sink)
- aggregate (round-robbin? if value-by-value); also aggregate by chunk (e.g., streamed arrays of, say, 300 elements, which are aggregated element-wise)
- random emitter (e.g., random sampling; biased coin flip) (see #39)
- Poisson emitter (Substack's on-the-fly adjust) (simulator)
- Markov generator (setup with initial config (pi, T, length [could be infinite] ) and then pipe ) --> could also emit on an interval; use setTimeout and have start, pause, stop logic. (simulator)
- unique (filter?) (value hash [value: time]; reducer version; emitter version) --> will need a max num values parameter; once limit reached, cull oldest values (see Issacs)
- downsample (input data: [time,value])
- rate (/s) --> thlorenz; stream-spy? --> flow-velocity? flow-throughput? flow-meta-rate? flow-info-rate? (see flow-info below)
- convert units (thinking of the pretty-bytes module) --> params: input units, output units; e.g., 'm', 'km'; SI and Imperial units --> create separate module containing units dictionary (convert-units; unit-converter; units; units.io)
- simplify find (only 1 filter function needed)
- sine wave simulator (period, amplitude)
- unzip and zip; (e.g., array of 3; create 3 separate streams; transforms; merge back to array of 3) --> fan and unfan?
- flow connectors (tsd, elastic, etc.; flow-from-opentsdb, flow-from-elasticsearch) --> wrapper for opentsdb.js
- uniform random variates source simulator (as demo, use flow.add() to set the mean)
- flow-info (meta information; flow-tap? flow-inspect? flow-inspector?)
- count
- throughput/velocity
- last val (val and timestamp)
- chunk-median
- geometric mean (gmean)
- harmonic mean (hmean)
- moving gmean
- moving hmean
- moving skewness
- validation --> allow pass through for valid data; allow user-defined behavior when validation not met (e.g., kill stream, emit error message, pipe invalid data to separate stream (fork stream), etc)
- object
- properties
- prop value validation
- array
- length
- content-type
- ndarray (typed arrays)
- boolean
- numeric
- string
- date/time
- arbitrary (filter)
- can use any validate.io method
- object
- math:
- log; log is tricky for negative numbers (requires imaginary numbers)
- mod (divisor)
- precision
- toFixed
- trig functions(?) --> yes
- auto-corr (sink)
- logical (matlab-style) --> arbitrary filter function
- boolean --> 1, truthy; 0, falsy
- rate --> [t0,v0],[t1,v1]: (v1-v0)/(t1-t0); next, (v2-v1)/(t2-t1); keep previous data point on hand
- moving kurtosis
- moving t-test
- moving g-test
- moving b-test
- flow fig
- eval pdfs over a specified range (min,max) and resolution (num values)
- flow-normal
- flow-exponential
- flow-binomial
- flow-beta
- flow-gamma
- etc.
- binarysearch (initialize with array of values; find index of array value matching streamed value)
- binsearch (see hist)
- moving normality test
- birch
- sliding dft
- bloom filter
- moving frequency --> moving window; count item frequency; emit array.
- chunked frequency
- frequency --> reduce stream; hash with count
- replay --> stream data to transform stream; as data streams, simply pass through while also writing data to file (cache; newline delimited text); once data source ends, replay the data continuously (node-byline); pause, stop (clear cache), start.
- coefficient of variation
- throttle (emit data on time interval; e.g., every 10 secs; alternatively, only emit event when no other data is received for some time interval following first data)
- roundn()
- stdev() - reduce, window, chunk
- Filters.mOutliers
- Filters.outliers
- Filters.eOutliers
- Stats.kde
- Stats.mva
- Stats.mvariance
- Threshold