Jump to content
Fi8sVrs

A Gini coefficient calculator in Python.

Recommended Posts

  • Active Members
Posted

Overview

This is a function that calculates the Gini coefficient of a numpy array. Gini coefficients are often used to quantify income inequality, read more here

.

The function in gini.py is based on the third equation from here, which defines the Gini coefficient as:

gini.png

Examples

For a very unequal sample, 999 zeros and a single one,

>>> from gini import *
>>> a = np.zeros((1000))
>>> a[0] = 1.0

the Gini coefficient is very close to 1.0:

>>> gini(a)
0.99890010998900103

For uniformly distributed random numbers, it will be low, around 0.33:

>>> s = np.random.uniform(-1,0,1000)
>>> gini(s)
0.3295183767105907

For a homogeneous sample, the Gini coefficient is 0.0:

>>> b = np.ones((1000))
>>> gini(b)
0.0

Input Assumptions

 

The Gini calculation by definition requires non-zero positive (ascending-order) sorted values within a 1d vector. This is dealt with within gini(). So these four assumptions can be violated, as they are controlled for:

def gini(array):
    """Calculate the Gini coefficient of a numpy array."""
    # based on bottom eq: http://www.statsdirect.com/help/content/image/stat0206_wmf.gif
    # from: http://www.statsdirect.com/help/default.htm#nonparametric_methods/gini.htm
    array = array.flatten() #all values are treated equally, arrays must be 1d
    if np.amin(array) < 0:
        array -= np.amin(array) #values cannot be negative
    array += 0.0000001 #values cannot be 0
    array = np.sort(array) #values must be sorted
    index = np.arange(1,array.shape[0]+1) #index per array element
    n = array.shape[0]#number of array elements
    return ((np.sum((2 * index - n  - 1) * array)) / (n * np.sum(array))) #Gini coefficient

Notes

  • It is significantly faster than (the current implementation of) PySAL's Gini coefficient function (see pysal.inequality.gini) and outputs are indistinguishable before approximately 6 decimal places. In other words, the two functions are arithmetically identical.
  • It is slightly faster than the Gini coefficient function by David on Ellipsix.

 

Many other Gini coefficient functions found online do not produce equivalent results, hence why I wrote this.

 

Download

 

Source

 

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...