¿Cómo trazar un PMF de una muestra?

¿Existe alguna función o biblioteca que me ayude a trazar la función de masa de probabilidad de una muestra de la misma manera que para la función de densidad de probabilidad de una muestra?

Por ejemplo, al usar pandas, trazar un PDF es tan simple como llamar:

sample.plot(kind="density") 

Si no hay una manera fácil, ¿cómo puedo calcular el PMF para que pueda trazar utilizando matplotlib?

Si ts es una serie, puede obtener PMF de la muestra por:

 >>> pmf = ts.value_counts().sort_index() / len(ts) 

y trazarlo por:

 >>> pmf.plot(kind='bar') 

La única solución numpy se puede hacer usando np.unique :

 >>> xs = np.random.randint(0, 10, 100) >>> xs array([5, 2, 2, 1, 2, 8, 6, 7, 5, 3, 2, 6, 4, 9, 7, 6, 4, 7, 6, 8, 7, 0, 6, 2, 9, 8, 7, 7, 2, 6, 2, 8, 0, 2, 5, 1, 3, 6, 7, 7, 2, 2, 0, 3, 8, 7, 4, 0, 5, 7, 5, 4, 4, 9, 5, 1, 6, 6, 0, 9, 4, 2, 0, 8, 7, 5, 1, 1, 2, 8, 3, 8, 9, 0, 0, 6, 8, 7, 2, 6, 7, 9, 7, 8, 8, 3, 3, 7, 8, 2, 2, 4, 4, 5, 3, 4, 1, 5, 5, 1]) >>> val, cnt = np.unique(xs, return_counts=True) >>> pmf = cnt / len(xs) >>> # values along with probability mass function >>> np.column_stack((val, pmf)) array([[ 0. , 0.08], [ 1. , 0.07], [ 2. , 0.15], [ 3. , 0.07], [ 4. , 0.09], [ 5. , 0.1 ], [ 6. , 0.11], [ 7. , 0.15], [ 8. , 0.12], [ 9. , 0.06]]) 

Puede usar np.histogram para calcular PMF usando density=true siempre que se utilicen bandejas de ancho unitario (de lo contrario obtendrá el valor de la función de densidad de probabilidad en la casilla que probablemente no sea lo que necesita).

 >>> xs = np.array( [5, 2, 2, 1, 2, 8, 6, 7, 5, 3, 2, 6, 4, 9, 7, 6, 4, 7, 6, 8, 7, 0, 6, 2, 9, 8, 7, 7, 2, 6, 2, 8, 0, 2, 5, 1, 3, 6, 7, 7, 2, 2, 0, 3, 8, 7, 4, 0, 5, 7, 5, 4, 4, 9, 5, 1, 6, 6, 0, 9, 4, 2, 0, 8, 7, 5, 1, 1, 2, 8, 3, 8, 9, 0, 0, 6, 8, 7, 2, 6, 7, 9, 7, 8, 8, 3, 3, 7, 8, 2, 2, 4, 4, 5, 3, 4, 1, 5, 5, 1]) >>> pmf, bins = np.histogram(xs, bins=range(0,11), density=True) >>> np.column_stack((bins[:-1], pmf)) array([[ 0. , 0.08], [ 1. , 0.07], [ 2. , 0.15], [ 3. , 0.07], [ 4. , 0.09], [ 5. , 0.1 ], [ 6. , 0.11], [ 7. , 0.15], [ 8. , 0.12], [ 9. , 0.06]])