cuartiles calcular python statistics scipy

calcular cuartiles en python



Parcela cuantil-cuantil usando SciPy (6)

¿Cómo crearías un gráfico qq usando Python?

Suponiendo que tiene un gran conjunto de medidas y está utilizando alguna función de trazado que tenga valores XY como entrada. La función debe graficar los cuantiles de las mediciones contra los cuantiles correspondientes de alguna distribución (normal, uniforme ...).

El gráfico resultante nos permite evaluar en nuestra medición sigue la distribución supuesta o no.

http://en.wikipedia.org/wiki/Quantile-quantile_plot

Tanto R como Matlab proporcionan funciones listas para esto, pero me pregunto cuál sería el método más limpio para implementarlo en Python.


Creo que scipy.stats.probplot hará lo que quieras. Vea la documentación para más detalles.

import numpy as np import pylab import scipy.stats as stats measurements = np.random.normal(loc = 20, scale = 5, size=100) stats.probplot(measurements, dist="norm", plot=pylab) pylab.show()

Resultado


Se me ocurrió esto. Quizás puedas mejorarlo. Especialmente el método de generar los cuantiles de la distribución me parece engorroso.

Puede reemplazar np.random.normal con cualquier otra distribución de np.random para comparar datos con otras distribuciones.

#!/bin/python import numpy as np measurements = np.random.normal(loc = 20, scale = 5, size=100000) def qq_plot(data, sample_size): qq = np.ones([sample_size, 2]) np.random.shuffle(data) qq[:, 0] = np.sort(data[0:sample_size]) qq[:, 1] = np.sort(np.random.normal(size = sample_size)) return qq print qq_plot(measurements, 1000)


Usar qqplot de statsmodels.api es otra opción:

Ejemplo muy básico:

import numpy as np import statsmodels.api as sm import pylab test = np.random.normal(0,1, 1000) sm.qqplot(test, line=''45'') pylab.show()

Resultado:

La documentación y más ejemplos están aquí




Puedes usar bokeh

from bokeh.plotting import figure, show from scipy.stats import probplot # pd_series is the series you want to plot series1 = probplot(pd_series, dist="norm") p1 = figure(title="Normal QQ-Plot", background_fill_color="#E8DDCB") p1.scatter(series1[0][0],series1[0][1], fill_color="red") show(p1)