Pregunta

El verdadero objetivo aquí es encontrar los medios de cuantiles (o sumas, o la mediana, etc.) en Python. Como yo no soy un usuario avanzado de Python, pero he utilizado R por un tiempo, mi ruta elegida es a través de RPY. Sin embargo, me encontré con el problema de que la lista devuelta de los medios no son correspondiente a la orden de los cuantiles. En particular, tengo los siguientes en R:

> a = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> b = c(2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000)
> prob = seq(0,5)/5
> br = quantile(a,prob)
> rcut = cut(a, br, include.lowest = TRUE)
> quintile_means = tapply(b, rcut, mean)
> quintile_means
[1,2.8] (2.8,4.6] (4.6,6.4] (6.4,8.2]  (8.2,10] 
      3        30       300      3000     30000 

que es muy buena. Sin embargo, si traduzco el código en RPY, llegué

>>> import rpy
>>> from rpy import r
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = [2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000]
>>> prob = [ x / 5.0 for x in range(6)]
>>> br = r.quantile(a, prob)
>>> rcut = r.cut(a, br, include_lowest=r.TRUE)
>>> quintile_means = r.tapply(b, rcut, r.mean)
>>> print quintile_means
[30.0, 300.0, 3000.0, 30000.0, 3.0]

Tenga en cuenta la lista final a sido mal ordenados (lo sabemos porque a y b están ordenados tanto en este caso). En general, sólo tengo ninguna manera de recuperar el orden correcto desde el más alto al más bajo cuantil en RPY. ¿Alguna sugerencia?

Además (no en sustitución, como me gustaría saber la respuesta a la pregunta anterior), si se puede sugerir una forma de realizar el análisis directamente en Python, que será grande también. (No tengo numpy o SciPy instalado.) Thx!

Editar : Para aclarar, a y se b emparejado , pero no necesariamente ordena . Por ejemplo, a es el tamaño de los ojos y b es el tamaño de la nariz. Estoy intentando descubrir que en los distintos cuantiles de a, ¿cuáles son los medios de los bs corresponsales. Gracias.

¿Fue útil?

Solución

Si usted no necesita etiquetas (por ejemplo: (8.2,10]) entonces se podría llamar cut con labels=FALSE. Esto debe mantener el orden (y acelerar su código de forma gratuita).

Otros consejos

Trate rpy2.

Con rpy2> = 2.1.0, esto podría ser:

from rpy2.robjects.vectors import IntVector
from rpy2.robjects.packages import importr
base = importr('base')
stats = importr('stats')

a = IntVector((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
b = IntVector((2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000))
prob = base.seq(0,5).ro / 5
br = stats.quantile(a,prob)
rcut = base.cut(a, br, include_lowest = True)
quintile_means = base.tapply(b, rcut, stats.mean)
print(quintile_means)
  

Sólo tengo ninguna manera de recuperar el   orden correcto de menor a   más alto cuantil en RPY

Si desea ordenar la lista de los más bajos a los más altos resuelve el problema, intente sorted(quintile_means).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top