Primer mini-programa en Python: Statistics

Publicado el 08 diciembre 2010 por Iyanmv @iyanmv

He avanzado bastante con Python. Ya me he acostumbrado a los cambios que introdujo la rama 3.0 y creo que puedo decir que ya se pensar un poco más como lo haría un programador. Aquí os dejo un pequeño programa que he hecho aplicando los conocimientos sobre las listas, variables, condiciones y sobre todo los bucles for. He intentado dejar el código lo más ordenado posible con algunos comentarios aclarando lo que hace cada función.

print(">> Statistics v0.1 Alpha")
print(">> Iyán Méndez Veiga")
print(">> me@iyanmv.com")
print("---------------------")

# Todos los datos estadísticos son almacenados en la lista 'datos'. Dentro de esta se almacenan el resto de información, introducida por el usuario o calculada, en otras listas y enteros.

def lineas(n):
  for i in range(n):
    print()

datos = [
         [],   #Valores (0)
         [],   #Frecuencias Absolutas (1)
         [],   #Frecuencias Relativas (2)
         [],   #Frecuencias Abs Acumuladas (3)
         [],   #Frecuencias Rel Acumuladas (4)
         0.0,    #Número total de datos (5)
         [],   #Xi x Ni (6)
         0.0,  #Suma de todos los productos de Xi x Ni (7)
         0.0,  #Media aritmética (8)
         0.0,  #Moda (9)
         0.0,  #Mediana (10)
        ]

def recopilacionDatosCuant():
  print("Bienvenido a Statistics. Has seleccionado el modo variables cuantitativas. Sigue los pasos descritos para realizar un estudio estadístico")
  seguir = True
  # Proceso para añadir los valores y frecuencias que deseé el usuario
  while seguir == True:
    lineas(1)
    valor = float(input("Inserte valor de la variable: "))
    datos[0].append(valor)
    frecuencia = float(input("Inserte frecuencia absoluta: "))
    datos[1].append(frecuencia)
    lineas(1)
    if input("> ¿Añadir más valores? s/n ") == "n":
      seguir = False

def recopilacionDatosCualit():
  print("Bienvenido a Statistics. Has seleccionado el modo variables cualitativas. Sigue los pasos descritos para realizar un estudio estadístico")
  seguir = True
  # Proceso para añadir los valores y frecuencias que deseé el usuario
  while seguir == True:
    lineas(1)
    valor = str(input("Inserte valor de la variable: "))
    datos[0].append(valor)
    frecuencia = float(input("Inserte frecuencia absoluta: "))
    datos[1].append(frecuencia)
    lineas(1)
    if input("> ¿Añadir más valores? s/n ") == "n":
      seguir = False

def analizandoDatosCuant():
  "Esta función calcula todo lo necesario para futuros estudios estadísticos"
  # En un mismo bucle se calcula el número total de datos y las frecuencias absolutas acumuladas.
  datos[5] = 0.0
  frecAbsAcu = 0.0
  for i in datos[1]:
    datos[5] += i
    frecAbsAcu += i
    datos[3].append(frecAbsAcu)

  # Aquí se calculan y guardan las frecuencias relativas.
  for i in datos[1]:
    frecRel = i/datos[5]
    datos[2].append(frecRel)

  # Aquí se calculan las frec. rel. acumuladas.
  freRel = 0
  for i in datos[2]:
    datos[4].append(frecRel)
    frecRel += i

  # Aquí se calculan los productos de Xi x Ni y el sumatorio de los mismos.
  count = 0
  while count < len(datos[0]):
    producto = float(datos[0][count]) * float(datos[1][count])
    datos[6].append(producto)
    datos[7] += float(producto)
    count += 1

def analizandoDatosCualit():
  "Esta función calcula todo lo necesario para futuros estudios estadísticos"
  # En un mismo bucle se calcula el número total de datos y las frecuencias absolutas acumuladas.
  datos[5] = 0.0
  frecAbsAcu = 0.0
  for i in datos[1]:
    datos[5] += i
    frecAbsAcu += i
    datos[3].append(frecAbsAcu)

  # Aquí se calculan y guardan las frecuencias relativas.
  for i in datos[1]:
    frecRel = i/datos[5]
    datos[2].append(frecRel)

  # Aquí se calculan las frec. rel. acumuladas.
  freRel = 0
  for i in datos[2]:
    datos[4].append(frecRel)
    frecRel += i

def parametrosCentralizacionCuant():
  "Cálculo de media aritmética, Moda y Mediana"
  # Calculando la media aritmética "datos[8]":
  datos[8] = datos[7] / datos[5]

  # Calculando la moda "datos[9]":
  for i in range(len(datos[0])-1):
    if datos[1][i] > datos[9]:
      datos[9] = datos[1][i]

  # Calculando la mediana "datos[10]":
  nDatos = datos[5] / 2.0
  n = 0
  for i in datos[3]:
    n += 1
    if i < nDatos:
      continue
    elif i == nDatos:
      datos[10] = (float(datos[0][n-1]) + float(datos[0][n])) / 2
      break
    else:
      datos[10] = datos[0][n-1]
      break

def parametrosCentralizacionCualit():
  "Cálculo de la Moda"
  # Calculando la moda "datos[9]":
  for i in range(len(datos[0])-1):
    maxima = 0
    if datos[1][i] > maxima:
      maxima += datos[1][i]
      datos[9] = datos[0][i]

def tablaFrecuenciaCuant():#Hay que mejorar esta sección MUCHO!!
  lineas(2)
  print("Valores: ", datos[0])
  print("Frecuencias Absolutas: ", datos[1])
  print("Frecuencias Relativas: ", datos[2])
  print("Frecuencias Abs. Acu.: ", datos[3])
  print("Frecuencias Rel. Acu.: ", datos[4])
  print("------------------------------------")
  print("Número total de datos: ", datos[5])
  print("La media aritmética es: ", datos[8])
  print("La moda es: ", datos[9])
  print("La mediana es: ", datos[10])
  lineas(1)
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")

def tablaFrecuenciaCualit(): #Hay que mejorar esta sección MUCHO!!
  lineas(2)
  print("Valores: ", datos[0])
  print("Frecuencias Absolutas: ", datos[1])
  print("Frecuencias Relativas: ", datos[2])
  print("Frecuencias Abs. Acu.: ", datos[3])
  print("Frecuencias Rel. Acu.: ", datos[4])
  print("------------------------------------")
  print("Número total de datos: ", datos[5])
  print("La moda es: ", datos[9])
  lineas(1)
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")

opcionInicial = input("¿Va a trabajar con variables cuantitativas(1) o cualitativas(2)? ")
lineas(1)
if opcionInicial == "1":
  recopilacionDatosCuant()
  analizandoDatosCuant()
  parametrosCentralizacionCuant()
  tablaFrecuenciaCuant()
elif opcionInicial == "2":
  recopilacionDatosCualit()
  analizandoDatosCualit()
  parametrosCentralizacionCualit()
  tablaFrecuenciaCualit()
else:
  print("Opción no validad. Fin del programa.")
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")
  lineas(2)

lineas(1)

Si pueden echarle un vistazo y comentarme los fallos o las mejoras que se os ocurran me sería muy útil. Para las vacaciones tengo pensado añadirle los parámetros de dispersión (es un programa para realizar estadísticas), mejorar y mucho la tabla de frecuencias (ahora está un poco cutre presentada) y si me animo quizás hacerle una pequeña interfaz gráfica, aunque para esto último aún tengo que aprender un poco para hacerlo.

Descarga | Statistics.py


Filed under: GNU/Linux, Programación, Python, Software libre