Primer mini-programa en Python: Statistics

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.

DescargaStatistics.py

Anuncios

8 Responses to “Primer mini-programa en Python: Statistics”


  1. 1 Adri diciembre 8, 2010 en 5:58 pm

    En Python se recomienda poner el nombre de variables y funciones en minúsculas y con barras bajas (_), no en CamelCase. En Python, los nombres de las clases sí se ponen en CamelCase. Por ejemplo, recopilacionDatosCuant() se pondría así: recopilacion_datos_cuant().

    En el uso de while, en vez de poner: while variable == True:, puedes poner: while variable:. Es como poner: if variable:, en caso de ser cierta la condición (True), entra en el bloque de código.

    En valor = float(input("Inserte valor de la variable: ")), hay que llevar cuidado si el usuario no introduce un float. ¿Y si introduce una cadena?: excepción no controlada:

    >>> float("a")
    Traceback (most recent call last):
    File "", line 1, in
    ValueError: invalid literal for float(): a

    Para controlarla, usa try-except. Puedes hacer una función que contenga un bucle para que introduzca un valor hasta que sea el tipo de dato que deseas:

    def introduce_valor(tipo, msg):
    valor = None
    while not valor:
    try:
    valor = tipo(input(msg))
    except ValueError:
    continue
    else:
    return valor

    Para usarla:

    valor = introduce_valor(float, "Inserte valor de la variable: ")
    print(valor)

    Ejemplo de uso:

    adrian@desktop:~$ python test.py
    Inserte valor de la variable: a
    Inserte valor de la variable:
    Inserte valor de la variable: 1.3
    1.3

    Para la interfaz gráfica, yo he usado PyGTK (trabajo con GNOME), pero tú que trabajas con KDE, tienes disponible PyQt 😉

    Y hasta aquí mis aportaciones. Saludos!

  2. 2 Adri diciembre 8, 2010 en 6:00 pm

    La función anterior aparece sin la identación :S

    Voy a probar de nuevo a ver si aparece la identación poniendo otras etiquetas HTML:

    def introduce_valor(tipo, msg):
        valor = None
        while not valor:
            try:
                valor = tipo(input(msg))
            except ValueError:
                continue
            else:
                return valor
    

    Saludos!, y perdona por el doble comentario.

    • 3 iyanmv diciembre 8, 2010 en 8:03 pm

      Ok. Muchas gracias por los apuntes. Por cierto, para otra vez que quieras poner código en los comentarios y se guarde la sangria, utiliza la etiqueta “”

      Un saludo, y gracias de nuevo

  3. 4 Lycus HackerEmo diciembre 9, 2010 en 11:18 am

    no tienes pensado en crear tutoriales de python 3?

    • 5 iyanmv diciembre 12, 2010 en 3:19 pm

      Pues de momento no. Estoy aprendiendo así que no aún no haré tutoriales…


  1. 1 Bitacoras.com Trackback en diciembre 8, 2010 en 12:48 pm
  2. 2 Tweets that mention Primer mini-programa en Python: Statistics « El blog de Iyan -- Topsy.com Trackback en diciembre 8, 2010 en 1:44 pm
  3. 3 Statistics v0.1 Beta « El blog de Iyan Trackback en diciembre 25, 2010 en 5:32 pm

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




Fedora 14

Visitas al blog

  • 699,713 visitas

Bienvenido!!

Estimado lector, en primer lugar, gracias por seguir mi blog y ayudar a mejorarlo. En esta bitácora encontrarás noticias, tutoriales y muchas cosas más sobre GNU/Linux y el Software Libre, sobre todo de dos distribuciones, Fedora y Arch Linux. No dudes en preguntar tus dudas, comentar las entradas o proponerme ideas para el blog. Más información en Acerca de
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

Introduce tu correo para suscribirte a este blog y recibir las entradas en tu correo.

Únete a otros 72 seguidores

Comentarios recientes

Marcos en Post-Instalación de Arch …
Dasn en NTP en ArchLinux
Maria en Borrón y cuenta nueva
iyan gonzalez en Borrón y cuenta nueva
Spanish Red en Fedora o Archlinux

Guia de Usuario Fedora 14

Post-instalación de Arch Linux

Categorías

Fedora Blogger Network


A %d blogueros les gusta esto: