El 31 de agosto de 2012 19:28, Kiko <kikocorre...@gmail.com> escribió:
> > > 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. > Por completar un poco más. Si necesitas mucha precisión puedes mirar el módulo *decimal* de la librería estándar. Saludos.
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/