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/

Responder a