Rank
****

There are many ways to rank a sequence of values. agate strives to
find a balance between simple, intuitive ranking and flexibility when
you need it.


Competition rank
================

The basic rank supported by agate is standard "competition ranking".
In this model the values "[3, 4, 4, 5]" would be ranked "[1, 2, 2,
4]". You can apply competition ranking using the "Rank" computation:

   new_table = table.compute([
       ('rank', agate.Rank('value'))
   ])


Rank descending
===============

Descending competition ranking is specified using the "reverse"
argument.

   new_table = table.compute([
       ('rank', agate.Rank('value', reverse=True))
   ])


Rank change
===========

You can compute the change from one rank to another by combining the
"Rank" and "Change" computations:

   new_table = table.compute([
       ('rank2014', agate.Rank('value2014')),
       ('rank2015', agate.Rank('value2015'))
   ])

   new_table2 = new_table.compute([
       ('rank_change', agate.Change('rank2014', 'rank2015'))
   ])


Percentile rank
===============

"Percentile rank" is a bit of a misnomer. Really, this is the
percentile in which each value in a column is located. This column can
be computed for your data using the "PercentileRank" computation:

   new_table = table.compute([
       ('percentile_rank', agate.PercentileRank('value'))
   ])

Note that there is no entirely standard method for computing
percentiles. The percentiles computed in this manner may not agree
precisely with those generated by other software. See the
"Percentiles" class documentation for implementation details.
