sábado, 25 de mayo de 2019

Tabla de frecuencias con python

Vamos a ver aspectos básicos de estadística como:
  • Frecuencia absoluta
  • Frecuencia absoluta acumulada
  • Frecuencia relativa
  • Frecuencia relativa absoluta
Vamos a tabular esa información y crear un pequeño gráfico con esos resultados, todo esto lo iremos elaborando con python usando un Notebook de Jupyter. También contestaremos preguntas que se encuentran en el problema que desarrollaremos para llevar a cabo todos los puntos anteriores. 

Tipo de valores
Trabajaremos con valores cuantitativos discretos, es decir, aquellos valores que han surgido a partir de un conteo previo, como un censo de un conjunto poblacional y que siempre son un numero entero como por ejemplo:
  • Cantidad de materias en un plan de estudios
  • Número de integrantes en una entidad
  • Número de casas de un desarrollo inmobiliario
Trabajadores
Una empresa que tiene 50 trabajadores se propone reestructurar las remuneraciones, se estudian los años de servicio para crear una tabla de frecuencias.

Carga y visualización de los datos
En primer instancia cargaremos las librerías que creemos necesitaremos, a veces durante el proceso de análisis se suele necesitar de más librerías que las que cargamos en un principio y simplemente se van agregando de acuerdo a la necesidad que se nos presente. En este caso empezaremos por cargas Pandas, Matplotlib y Numpy.
#Import libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#Cargamos el archivo CSV
data = pd.read_excel("/Users/julio/Desktop/alums.xlsx",sheet_name = "TabDiscreto")

#Vemos los primeros datos
data.head()
Vemos que es un dataframe con solo 2 columnas, el índice y los años de servicio de cada trabajador, el archivo cuenta con 50 registros pero aquí por la función head() solo vemos los primeros 5.
Ahora para poder empezar a crear nuestra tabla de frecuencias tenemos que obtener únicamente las clases de nuestro dataframa, para esto haremos otro dataframe de la siguiente manera.

#Dataframe que contendra las clases únicamente
#Sacamos los datos únicos de data
lis = data["Clases"].unique()
#Creamos el dataframe que contendrá las clases
dat = pd.DataFrame(lis, columns=["Clases"])
#Observamos las clases que tenemos
dat
Empecemos a construir nuestra tabla de frecuencias, empezando por la tabla de Frecuencia absoluta la cual nos dirá la cantidad de cada clase que hay en el dataframe.

#Tabla de frecuencias absolutas
#Obtenes las frecuencias absolutas de cada clase
datafi = pd.crosstab(index=data["Clases"], columns = "fi")
#Creamos una lista con los valores de las frecuencias
li = datafi.values
#Agregamos la columna al dataframe
dat["fi"] = li
#Observamos
dat
Seguiremos con la columna de frecuencia relativa, la columna de frecuencias relativas es la misma información que la columna de frecuencias abosolutas pero representada en porcentajes.

#Tabbla de frecuencia relativa
datahi = 100 * datafi["fi"] / 50
datahi = datahi.values
#Agregamos nueva columna de frecuentas relativas
dat["hi"] = datahi
Continuamos con la columna de frecuencias absolutas acumuladas, ésta en cada renglón se va sumando el dato de la columna de frecuencias absolutas, como se observa de la siguiente manera.
#Obtenemos las frecuencias absolutas acumuladas
#Sacamos una lista de los valores donde obtendremos la FI
Fi = dat["fi"].values

#Recorremos la lista para ir creando una nueva lista con las sumas
#Obtener la frecuencia absoluta acumulada
a = []
b = 0
for c in Fi:
b = c + b
a.append(b)

#Agregamos la nueva columna Fi al Dataframe dat
dat["Fi"] = a
Terminamos nuestra tabla de frecuencias con la columna de Frecuencias relativas acumuladas que se comparte de la misma manera que la columna de Frecuencias absolutas acumuladas pero en porcentaje.
#Recorremos lista para obtener la frecuencia relativa acumulada
Hi = dat["hi"].values
#Obtenemos Hi
a = []
b = 0
for c in Hi:
b = c + b
a.append(b)

#Agregamos la nueva columna Hi al Dataframe
dat["Hi"] = a
Ya tenemos nuestra tabla de frecuencias. Podemos terminar este análisis realizando una pequeña gráfica para que sea más representativa visualmente.
#Asignamos labels and sizes para el gráfico
labels = dat["Clases"]
sizes = dat["fi"]
#explode = (0,0.1,0,0)
#Dibujamos y creamos el gráfico
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels = labels,
autopct = '%1.1f%%', shadow = True, startangle = 90)
ax1.axis('equal')
#Mostramos y guardamos
plt.xlabel("Trabajadores")
plt.show()
plt.savefig("Trabajadores.png")

No hay comentarios.:

Publicar un comentario