# brightway2-analyzer / bw2analyzer / econ.py

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79``` ```from __future__ import division import numpy as np def gini_coefficient(x): """ Return computed Gini coefficient. See http://en.wikipedia.org/wiki/Gini_coefficient Adapted from econpy library. copyright: 2005-2009 Alan G. Isaac license: MIT license contact: aisaac AT american.edu Args: *x* (list or array): Data Returns: Gini coefficient (float) """ x = np.array(x) x.sort() y = np.cumsum(x) length = float(x.shape[0]) B = y.sum() / (y[-1] * length) return float(1. + 1 / length - 2 * B) def herfindahl_index(x, normalize=True): """ Return computed Herfindahl index. See http://en.wikipedia.org/wiki/Herfindahl_index Normalized scores are bounded [0, 1]; non-normalized scores are [1/len(x), 1]. Normalization only counts non-zero values. Args: *x* (list or array): Data *normalize* (bool, default=True): Flag to normalize scores. Returns: Herfindahl index (float) """ # Normalize so that total is 1 print x x = np.array(x) / np.sum(x) print x index = (x ** 2).sum() if normalize: correction = 1 / (x != 0).sum() print index, correction index = (index - correction) / (1 - correction) return float(index) def concentration_ratio(x, number=4): """ Return computed concentration ratio. See http://en.wikipedia.org/wiki/Concentration_ratio The concentration ratio measures the share of the market controlled by the top *number* firms. Returned ratio values vary from 0 to 1. Args: *x* (list or array): Data *number* (int, default=4): Number of values to consider. 4 and 8 are commonly used. Returns: Concentration ratio (float) """ # Normalize so that total is 1 x = np.array(x) / np.sum(x) x.sort() return float(x[-number:].sum()) ```