El 31 de agosto de 2012 19:13, gmail <manuelcorte...@gmail.com> escribió:
> ola lista. Sucede que para una materia donde se toca el tema de cálculo > diferencial y análisis de datos, hice una sencilla aplicación que toma > datos y saca la media, desviación estándar y algunas otras cosillas más, > pero me topo con un problema de exactitud de los resultados, que se ve > sobretodo al momento de sacar la desviación estándar. > > Pongo aquí el extracto del código de la función que uso para obtenerlas, > ignoro si hay una forma más cómoda: > > import math > def desviacion_standar(lists, media): > total = 0 > for i in range(0,len(lists)): > value = lists[i] > value = value - media > value = value**2 > total = total + value > total = total/float(len(lists)) > return math.sqrt(total) > > Los argumentos de la función son una lista de datos, que se obtienen de > una cadena en gtk que se parte con split, y el valor de la media, para la > cual tengo una función en otra parte del programa que sí la hace. > > Pongo un ejemplo: con los datos 31, 32, 32, 33, 35, 37, 40, 43, 44 y 45; > el valor de la media es de 37.2 y Python lo saca bien, pero el valor de la > desviación estándar debe ser de 5.4, y Python me devuelve un 5.132... > > Hola, ese valor de 5.4 para la desviación estándar de donde sale? Hay veces que la fórmula para la desviación estándar usa en el denominador N y otras N-1. En el caso de tu cálculo usas N, en el caso de 5.4 parece que está usando N-1. Si en total divides por N-1 te saldrá más cercano a 5.4. import math def desviacion_standar(lists, media): total = 0 for i in range(0,len(lists)): value = lists[i] value = value - media value = value**2 total = total + value *total = total/(float(len(lists)) - 1)* return math.sqrt(total) Lo importante aquí es que definas las desviación estándar como quieres, si tu muestra es muy grande no importa mucho la diferencia entre N o N-1, pero si es pequeña si que es importante. Una forma alternativa es usando numpy, que te permite hacerlo en una línea: import numpy as np resultado = np.std(lists) # Para el caso en el que el denominador ser N resultado = np.std(lists, ddof = 1) # Para el caso en el que en el denominador tengas N - 1 Saludos.
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/