IMPORTANDO NUESTRAS FUNCIONES para datos agrupados en Python 3.7 Parte 2


Luego de haber comprobado que al invocar funciones también podemos invocar nuestras propias funciones al importar nuestros módulos, en esta sesión vamos a codificar un módulo: mice01.py que conendrá la función tabFrec que nos permitirá que, dado una lista de datos, esta función nos devuelva la tabla de frecuencias en la consola y en la ventana de gráfico, el histograma correspondiente a la frecuencia absoluta y el gráfico circular.

Abra un nuevo archivo usando [File] - [File new] y grabe de inmediato con el nombre mice01.py

Empezamos el módulo

Primero importamos las librerías necesarias

import numpy as np
import matplotlib.pyplot as plt

Definimos la única función que tendrá este archivo
def tabFrec(Lista):
A continuación obtenemos los elementos: el máximo y mínimo de los datos; el número de intervalos, k; el ancho, c
    xmin = np.min(Lista)
    xmax = np.max(Lista)
    n = len(Lista)
    k = 1+int(np.log(n)/np.log(2))
    c = (xmax-xmin)/k
    LimInf = np.zeros(k)
    LimSup = np.zeros(k)
    LimInf[0] = xmin
    LimSup[0] = LimInf[0]+c

Realizamos el proceso de determinación de los límites inferior y superior de los intervalos.
    for i in range(1,k):
        LimInf[i] = LimSup[i-1]
        LimSup[i] = LimInf[i]+c

Preparamos las listas que contendrá como elementos, las freciencias absolutas (fabs), absoluta acumulada (fAc), frecuencia relativa (frel) y relativa acumulada (frAc). Estos se inicializan en 0 para que existan cuando reciban valores.
    fabs = np.zeros(k)
    fAc = np.zeros(k)
    frel= np.zeros(k)
    frAc = np.zeros(k)

Primero obtenemos las frecuencia absoluta
    for i in range(k):
        for j in range(n):
            if Lista[j] <= LimSup[i] and Lista[j] >= LimInf[i]:
                fabs[i]+=1

Ahora se prepara y determinan las otras frecuencias
    fAc[0] = fabs[0]
    frel[0] = fabs[0]/n
    frAc[0] = frel[0]
    for i in range(1,k):
        fAc[i] = fAc[i-1]+fabs[i]
        frel[i] = fabs[i]/n
        frAc[i] = frAc[i-1]+frel[i]

Habiendo determinado los intervalos y las respectivas frecuencias, debemos imprimirlas
    print("\n         Tabla de frecuencias\n    X Fr.Abs FrabsAc  Frel    FrelAc\n")
    for i in range(k):
        if fabs[i]>0:
            print(" %4d %4d  %4d  %8.2f  %8.2f"%(i,int(fabs[i]),int(fAc[i]),frel[i],frAc[i]))

En esta segunda parte, preparamos el gráfico del histograma de frecuencias, para ello, definimos k (número de intervalos) valores que serán los puntos donde se levante cada barra
    ejeX = np.arange(k)

Generamos las etiquetas que se le podrá en el eje X. La función chr(65+í) permite obtener las letras mayúsculas comenzando con 65 que es A.
    labX = []
    for i in range(k):
        labX.append(chr(65+i))

Puesto que vamos a obtener dos gráficos, debemos definir los espacios de la ventana. Esto lo hacemos con
   plt.subplot(211)

Construimos la gráfica centrándola, usando un vector de colores y definiendo la separación entre una barra y otra; en este caso, width = 0.99, signfica que la separación será de 0.01.
    plt.bar(ejeX,fabs,align = "center",color=("r","g","b","y","m"),width = 0.99)

Finalmente la inserción de los elementos del gráfico como las etiquetas del eje X, eje Y, título, subtítulo.
    plt.xticks(ejeX,labX)
    plt.ylabel("Frecuencia absoluta")
    plt.suptitle("Gráfico estadísico")
    plt.title("Frecuencia absoluta")

Toca ahora preparar y construir el gráfico circular
Generamos la separación del sector
    sep = []
    for i in range(k):
        sep.append(0)

Supondremos que el tercer sector es el que queremos sobresalga (explode)
    sep[2] = 0.08

Definimos el espacio
    plt.subplot(212)

Ahora trazamos la gráfica
    plt.pie(fabs,explode=sep,labels = labX, autopct = "%1.1f%%",shadow = True)

Finalmente mostramos los gráficas
    plt.show()


La siguiente imagen muestra parte de esta función. Observe bien la posición de las instrucciones dentro de la función. Es fundamental respetar la indentación que es automática.


Grabe el módulo

Ejecute usando [Run] - [Run module]. Es necesario ejecutarlo para chequear su sintaxis y generar el código interpretado, lo cual podrá ser ejecutado por Python.

¿Cómo lo usamos?


Estando en la consola de Python, debe preparar una lista, digamos x, por ejemplo:
x = [320,210,250,200,350,500,420]
Ahora, importamos la función tabFrec del módulo mice01
>>>from mice01 import tabFrec
Y, simplemente la invocamos
>>>tabFrec(x)

La imagen siguiente muestra la ventana con dos gráficos

 


La tabla de frecuencia emitida en la consola:

Datos desde un archivo

Leemos el archivo:
>>> fn = open("d:\\pypage\\ingreso.csv")
>>> datos = fn.read()
>>>fn.close()

Definimos una lista que recibirá estos datos
>>>x = []

Quitamos el fin de línea de cada línea leída
>>> datos = datos.split("\n")
>>>datos

Puesto que estos valores no son números, debemos convertirlos en float elemento por elemento
>>> for i in range(len(datos)):
    x.append(float(datos[i]))

Ahora ya estamos listos para invcar la función tabFrec
>>>tabFrec(x)

La gráfica


El gráfico circular no es tan bueno, pues el número de intervalos generados es muy grande, determinado por la regla de Sturges. La cantidad de datos: 640, es muy grande para ser una muestra.

La tabla emitida en la consola

 

 


Continuar en la siguiente sesión