apoc.agg.statistics

Function APOC Core

apoc.agg.statistics(value,[percentiles = 0.5,0.75,0.9,0.95,0.99]) - returns numeric statistics (percentiles, min,minNonZero,max,total,mean,stdev) for values

Signature

apoc.agg.statistics(value :: NUMBER?, percentiles = [0.5, 0.75, 0.9, 0.95, 0.99] :: LIST? OF FLOAT?) :: (MAP?)

Input parameters

Name Type Default

value

NUMBER?

null

percentiles

LIST? OF FLOAT?

[0.5, 0.75, 0.9, 0.95, 0.99]

Usage Examples

The examples in this section are based on the following sample graph:

CREATE (TopGun:Movie {title:"Top Gun", released:1986, tagline:'I feel the need, the need for speed.'})
CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})
CREATE (AsGoodAsItGets:Movie {title:'As Good as It Gets', released:1997, tagline:'A comedy from the heart that goes for the throat.'})
CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (SnowFallingonCedars:Movie {title:'Snow Falling on Cedars', released:1999, tagline:'First loves last. Forever.'})
CREATE (JerryMaguire:Movie {title:'Jerry Maguire', released:2000, tagline:'The rest of his life begins now.'});
CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})

We can find the release year of movies for different statistical measures, by running the query below:

MATCH (movie:Movie)
RETURN apoc.agg.statistics(movie.released) AS stats;
Table 1. Results
stats

{total: 10, min: 1986, minNonZero: 1986.0, max: 2003, mean: 1996.8, 0.5: 1997, 0.99: 2003, 0.75: 1999, 0.9: 2000, 0.95: 2003, stdev: 4.3772137256478585}

We can expand the map of values to have one key per row by using the UNWIND clause on the keys of the map:

MATCH (movie:Movie)
WITH apoc.agg.statistics(movie.released) AS stats
UNWIND keys(stats) AS key
RETURN key, stats[key] AS value;
Table 2. Results
key value

"total"

10

"min"

1986

"minNonZero"

1986.0

"max"

2003

"mean"

1996.8

"0.5"

1997

"0.99"

2003

"0.75"

1999

"0.9"

2000

"0.95"

2003

"stdev"

4.3772137256478585

By default, the function will return the 0.5, 0.75, 0.9, 0.95, and 0.99 percentiles, but we can pass in our own percentiles (2nd parameter):

MATCH (movie:Movie)
WITH apoc.agg.statistics(movie.released, [0.1, 0.25]) AS stats
UNWIND keys(stats) AS key
RETURN key, stats[key] AS value;
Table 3. Results
key value

"total"

10

"min"

1986

"minNonZero"

1986.0

"0.1"

1986

"max"

2003

"mean"

1996.8

"0.25"

1996

"stdev"

4.3772137256478585