Hack x Crack - Comunidad de Seguridad informática

Programación => Scripting => Python => Mensaje iniciado por: quuim en Marzo 09, 2013, 09:09:55 pm

Título: [Python] Calculadora estadística unidimensional
Publicado por: quuim en Marzo 09, 2013, 09:09:55 pm
Aquí un script que calcula las formulas básicas de la estadística unidimensional:


Código: [Seleccionar]
#!/usr/bin/env python
#coding: Latin-1
#quuim - HxC

import os, sys
from math import sqrt

def main():
print "CALCULADORA  ESTADÍSTICA UNIDIMENSIONAL\n\n\n\n"

variables = [] # Se crea una lista donde se guardarán las xi
frecuencias = [] # Se crea una lista donde se guardarán las fi

while True: # Mientras el usuario no escriba "listo" se irán añadiendo los valores introducidos a la lista "variables"
anadir = raw_input("Introduce las variables (x), de menor a mayor, cuando estén todas introducidas introduce 'listo': ")

if anadir != "listo":
variables.append(anadir)
else:
break


while True: # Mientras el usuario no escriba "listo" se irán añadiendo los valores introducidos a la lista "frecuencias"
anadir = raw_input("Introduce las frecuencias (fi), cuando estén todas introducidas introduce 'listo': ")

if anadir != "listo":
frecuencias.append(anadir)
else:
break

os.system("clear")


print "xi", " - ".join(variables)
print "fi", " - ".join(frecuencias)



for i in range(0, len(variables)):
variables[i] = float(variables[i])


for i in range(0, len(frecuencias)):
frecuencias[i] = float(frecuencias[i])

# Calcular frecuencia acumulada (Fi)

Fi = []
a = 0
for i in frecuencias:
Fi.append(str(int(a + i)))
a = a + i
print "Fi", " - ".join(Fi), "\n\n"

calculos(variables, frecuencias)

def calculos(xi,fi):
longitud_x = len(xi) # Se calcula la cantidad de datos en la lista
longitud_f = len(fi)
if longitud_x == longitud_f:

#--------------------------------------------------------------------------------------------
#CALCULAR PROMEDIO
#--------------------------------------------------------------------------------------------

N = 0
for i in fi: # Se suman todos los valores de la lista para saber el número total de datos
N = N + i
acum = []
for num in range(0, longitud_x): # Se crea una lista (acom) que contiene todos los xi * fi
acum.append(xi[num] * fi[num])
promedio = 0
for num in acum: # Se suman los datos que contiene la lista acom
promedio = promedio + num

promedio = promedio / N # Se calcula el promedio (suma xi * fi)/ número de datos

print "El promedio es", promedio, "\n"

#--------------------------------------------------------------------------------------------
#CALCULAR CUARTILES
#--------------------------------------------------------------------------------------------

posQ1 = N / 4.0

if posQ1 - int(posQ1) != 0:
print "El primer cuartil está ubicado en la posición", int(posQ1) + 1

else:
print "El primer cuartil está ubicado en la posición", posQ1, "y", posQ1 + 1


posQ2 = posQ1 * 2

if posQ2 - int(posQ2) != 0:
print "El segundo cuartil (también dicho mediana) está ubicado en la posición", int(posQ2) + 1

else:
print "El segundo cuartil (también dicho mediana) está ubicado en la posición", posQ2, "y", posQ2 + 1


posQ3 = posQ1 * 3

if posQ3 - int(posQ3) != 0:
print "El tercer cuartil está ubicado en la posición", int(posQ3) + 1, "\n"

else:
print "El tercer cuartil está ubicado en la posición", posQ3, "y", posQ3 + 1, "\n"


#--------------------------------------------------------------------------------------------
#CALCULAR VARIANZA (sigma al cuadrado)
#--------------------------------------------------------------------------------------------
acum = []
for i in xi: # Guarda los cuadrados de las variables en la lista acum
acum.append(i ** 2)

acum_1 = []
for i in range(0,longitud_x):
acum_1.append(acum[i] * fi[i])

SumaCuadrados = 0
for num in acum_1: # Se suman los datos que contiene la lista acum_1
SumaCuadrados = SumaCuadrados + num

varianza = (SumaCuadrados / N) - promedio ** 2 # Se calcula la varianza
print "La varianza (sigma al cuadrado) es", varianza, "\n"

#--------------------------------------------------------------------------------------------
#CALCULAR DESVIACIÓN TÍPICA (sigma)
#--------------------------------------------------------------------------------------------

sigma = sqrt(varianza)
print "La desviación típica (sigma) es", sigma, "\n"

#--------------------------------------------------------------------------------------------
#CALCULAR CUOFICIENTE DE VARIACIÓN DE PEARSON
#--------------------------------------------------------------------------------------------

pearson = (sigma / promedio) * 100
print "El cuoficiente de variación de Pearson es", pearson, "%"
else:
print "Has introducido un número de datos distintos de variables y frecuencias, por favor, vuelve a introducir los datos"
raw_input()
os.system("clear")
main()
main()

Seguramente le añadiré algo más, hasta puede que le añada para calcular formulas de estadística bidimensional pero de momento así se queda. Dudas, sugerencias y críticas abajo!
Título: Re:[Python] Calculadora estadística unidimensional
Publicado por: anonimic en Marzo 17, 2013, 05:12:22 am
que buena calculadora he de decirte que yo solo he hecho una que hace las 4 operaciones basicas jaja pero esta es toda una obra desde mi punto de vista jaja
haber si algun dia la necesitare ... dime tu para que la usas
Título: Re:[Python] Calculadora estadística unidimensional
Publicado por: quuim en Marzo 18, 2013, 09:01:17 am
que buena calculadora he de decirte que yo solo he hecho una que hace las 4 operaciones basicas jaja pero esta es toda una obra desde mi punto de vista jaja
haber si algun dia la necesitare ... dime tu para que la usas

Me facilita la vida en la clase de matemáticas jejeje
Título: Re:[Python] Calculadora estadística unidimensional
Publicado por: anonimic en Marzo 18, 2013, 11:13:27 pm
wajaja me imagino jajaja :D