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.
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:
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