.

Explorando Estadística Descriptiva a través de Python

¡Te damos la bienvenida a nuestra  guia de Python y estadística descriptiva!

Estamos emocionados de tenerte a bordo en este curso basado en proyectos que te guiará a través de un emocionante viaje de aprendizaje. Antes de embarcarte en esta experiencia educativa, es esencial que tengas una visión clara de lo que te espera. Echemos un vistazo a los objetivos y la estructura de este curso:

Objetivos del curso

En este curso, dirigiremos nuestro enfoque hacia dos objetivos clave de aprendizaje:

Creación de Tablas y Gráficos Estadísticos: Aprenderás a generar tablas y gráficos estadísticos que representen medidas de tendencia central y dispersión de variables como alturas, pesos e índices de masa corporal.

Exploración de Python para Estadísticas: Explorarás los conceptos fundamentales de objetos, sentencias, funciones, métodos y bibliotecas de Python que son esenciales para el procesamiento de datos numéricos y estadísticos.

Una vez que completes este proyecto, tendrás la capacidad de utilizar Python para tabular y visualizar datos y estadísticas descriptivas de muestras y poblaciones, lo que te abrirá un mundo de posibilidades en el análisis estadístico y la visualización de datos. ¡Vamos a empezar!

Estructura del proyecto

El proyecto guiado "Explorando Estadística Descriptiva a través de Python" se divide en las siguientes etapas:

Etapa 1: Procesamiento de Datos Numéricos

Objetivo de aprendizaje: Al completar esta etapa, tendrás la capacidad de procesar listas de datos numéricos utilizando objetos y funciones de Python.

Etapa 2: Tabulación de Datos

Objetivo de aprendizaje: Al finalizar esta etapa, serás capaz de crear tablas de frecuencias para organizar tus datos.

Etapa 3: Creación de Gráficos de Datos

Objetivo de aprendizaje: Al finalizar esta etapa, podrás visualizar tus datos a través de la creación de histogramas y gráficos informativos.

Etapa 4: Cálculo de Tendencias Centrales

Objetivo de aprendizaje: Al completar esta etapa, serás capaz de calcular medidas de tendencia central, como promedios, medianas y modas, y representarlos gráficamente.

Etapa 5: Cálculo de Dispersión de Datos

Objetivo de aprendizaje: Al finalizar esta etapa, podrás calcular medidas de dispersión, como varianzas y desviaciones estándar, y mostrar diagramas de caja para analizar la variabilidad de tus datos.

Etapa 6: Comparación de Grupos de Datos

Objetivo de aprendizaje: Al completar esta etapa, serás capaz de comparar las condiciones de salud entre grupos de deportistas utilizando tus habilidades en estadística descriptiva.

Etapa 7: Almacenamiento y Recuperación de Archivos

Objetivo de aprendizaje: Al finalizar esta etapa, podrás guardar y cargar archivos de datos, así como descargar datos desde fuentes en línea para su análisis.


Preparación antes del Proyecto

El siguiente material proporciona información esencial para la preparación del proyecto, además de enlaces a recursos clave.


Una vez realizada la lectura estaras list@ para iniciar el proyecto guiado para el cual dejare una estructura documentada típica para realizar estadística descriptiva en un proyecto de Colab (Google Colab). Ten en cuenta que esta es una guía general y puedes personalizarla según tus necesidades y el contexto de tu proyecto. Asegúrate de importar las bibliotecas necesarias al comienzo de tu cuaderno de Colab:

# Proyecto de Estadística Descriptiva en Google Colab

1. Procesamiento de datos numericos

1.1 Objetos y operaciones

Asignacion y visualizacion

a = 10
print(a)
10

type(a)  #retorna el tipo del objeto
int

Expresiones numericas

a = 10                                # a es el objeto entero 10
b = 3 + 4                            # b es el objeto entero 7, la suma de 3 y 4
c = 7 * 2                             # c es el objeto entero 14, el producto de 7 y 2
d = 20 / a                            # d es el objeto entero 2.0, el cociente de 20 y a

print(a, b, c, d)                    # muestra los valores de los objeros separados por espacios
10 7 14 2.0

e = 20 // a                            # e es el objeto entero 2, el cociente de 20 y 10
f = 20 % b                           # f es el objeto entero 6, el residuo de 20 y 7
g = 5**3                              # g es el objeto entero 125, 5 al cubo
h = 36**0.5                         # h es el objeto decimal 6.0, la raiz cuadrada de 36

print(e, f, g, h)             
2 6 125 6.0

a, b, c, d                      # muestra una tupla: valores entre parentesis y seprados por comas
(10, 7, 14, 2.0)

Aproximacion decimal y funcion round

round(40.456, 2)  # aproximacion a dos cifras decimales
10.46
round(10.8)          # aproximacion a entero
11
0.8 + 0.4               # no resulta en 1.2
1.200000000000000002
round(0.8 + 0.4)   # resondea a una cifra decimal 
1.2
round(10.45, 1)    # el resultado es correcto (utiliza otro metodo de redondeo)
10.4

Buscando ayuda

help(round)          # informacion sobre round
 Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.
    
    The return value is an integer if ndigits is omitted or None.  Otherwise
    the return value has the same type as the number.  ndigits may be negative.

1.2 Listas

lista = [10, b, 'treinta', c + d]  # una lista de cuatro elementos 
print(lista)                               # muestra la lista
[10, 7, 'treinta', 16.0]

lista[0], lista[1], lista[2], lista[3] # muestra los elementos
(10, 7, 'treinta', 16.0)

lista[-1]            # ultimo elemento
16.0

lista[2] = 30  # el elemento en la posicion 2 (tercer elemento) es 30
lista
[10, 7, 30, 16.0]

Metodo append

lista.append(1.72)            # agrega el objeto decimal 1.72 a lista
lista.append(0)                # agrega el objeto 0 a la lista
lista
[10, 7, 30, 16.0, 1.72, 0]

Funcion sum y len

sum(lista)      # suma de los numeros en lista
64.72
len(lista)         # numero de elementos de lista
6

Funcion sorted, min y max

sorted(lista)    # una lista con valores ordenados de menor a mayor
[0, 1.72, 7, 10, 16.0, 30]

min(lista), max(lista)   # minima y maximo valor de la lista
(0, 30)

1.3 Biblioteca Numpy

Procesamiento de vectores y matrices

import numpy as np

arreglo = np.array([1, 2, 3, 4])   # arreglo o vector de numeros
arreglo
array([1, 2, 3, 4])

np.arange(0, 2.1, 0.4)       # un arreglo de numeros mayores o iguales que 0,
                                          # menores que 2.1 e incrementando en 0.4
array([0. , 0.4, 0.8, 1.2, 1.6, 2. ])

1.4 Sentencia for

for i in [1, 2.0, '3', 'cuatro']:    # cada objeto de la lista es asignado consecutivamente al objeto i 
        print(i)  # muestra el valor del objeto i seguido de un espacio
1
2.0
3
cuatro  

Objeto range
 for i in range(-5, 6):  # para cada valor entero i entre -5 y 5 (el mayor entero menor que 6)
        print(i, end = '  ') # muestra el valor del objeto i seguido de un espacio
-5  -4  -3  -2  -1  0  1  2  3  4  5  

1.5 Sentenci if

a = 10    # a es 10
b = 5      # b es 5

# si a es mayor que b
        # mostrar que a es mayor que b
# sino, si los valores son iguales
        # mostrar que a y b son iguales
# sino, 
        # mostrar que a es menor que b

if a > b:
    print(a, "es mayor que", b)     # las instrucciones de cada bloque comienzan con sangrias
elif a == b:
    print("Los numeros son iguales a", a)
else:
    print(a, "es menor que", b)
10 es mayor que 5

1.6 Creacion de funciones

def promedio(lista):   # def nombre(parametros):
    """
    Toma una secuencia de numeros y retorna el promedio
    """
    suma = sum(lista)   # suma de los numeros de lista
    casos = len(lista)    # numero de elementos de la lista
    media = suma / casos  # promedio

    return media


p = promedio(lista)
print(p)
10.786666666666667

casos
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-35-60bc0e5130ae> in <cell line: 1>()
----> 1 casos

NameError: name 'casos' is not defined


help(promedio)
Help on function promedio in module __main__:

promedio(lista)
    Toma una secuencia de numeros y retorna el promedio

2. Tabulacion de datos

2.1 La biblioteca o modulo Panda

Procesamiento de tablas de datos numericos y categoricos
import pandas as pd

# Crear tabla llamada df
df = pd.DataFrame()

# crea una columna numeros
df ['numeros'] = [1, 2, 3, 4]

# columna letras
df['letras'] = ['a', 'b', 'c', 'd']

df

numeros letras
0 1 a
1 2 b
2 3 c
3 4 d

# muestra la columna numeros
df['numeros']

0    1
1    2
2    3
3    4
Name: numeros, dtype: int64

# DataFrame: tabla de datos
# Series: serie de datos
type(df), type(df['numeros'])
(pandas.core.frame.DataFrame, pandas.core.series.Series)

# crea una columna cuadrada con los 
# valores de la columna numeros al cuadrado
df['cuadrados'] = df['numeros'] ** 2

df
    numeros letras cuadrados
0      1       a 1
1      2       b 4
2      3       c 9
3      4       d 16

Lista de valores acumulados

acumulados = []     # una lista vacia
suma = 0                 # una suma en cero

for i in df['numeros']   # para cada dato i en la columna de numeros
      suma = suma + i    # suma e i se adicionan y el resultado va a suma
       acumulados.appen(suma)  # agreaga suma a la lista

# metodo cumsum de pd.Series
df['numeros'].sumsum()
0     1
1     3
2     6
3    10
Name: numeros, dtype: int64

# conversion a lista
df['numeros'].cumsum().tolist()
[1, 3, 6, 10]

# nueva columna de tabla con el nombre acumulados
df['acumulados'] = df['numeros'].cumsum()

df

   numeros letras cuadrados acumulados
0 1               a               1 1
1 2               b               4 3
2 3               c               9 6
3 4               d              16 10


Estatura y pesos 

# Lee el archivo CSV desde Google Drive
df = pd.read_csv("/content/drive/MyDrive/Python/Proy_1/bodyPerformance.csv", sep=';')

# Mostrar las primeras filas de datos
print(df.head())

  age,gender,height_cm,weight_kg,body fat_%,diastolic,systolic,gripForce,sit and bend forward_cm,sit-ups counts,broad jump_cm,class
0  27.0,M,172.3,75.24,21.3,80.0,130.0,54.9,18.4,6...                                                       
1  25.0,M,165.0,55.8,15.7,77.0,126.0,36.4,16.3,53...                                                       
2  31.0,M,179.6,78.0,20.1,92.0,152.0,44.8,12.0,49...                                                       
3  32.0,M,174.5,71.1,18.4,76.0,147.0,41.4,15.2,53...                                                       
4  28.0,M,173.8,67.7,17.1,70.0,127.0,43.5,27.1,45...                                                                               
# Importa StringIO desde el módulo io
from io import StringIO  

# Datos en formato CSV
df_csv = """age,gender,height_cm,weight_kg,body_fat_%,diastolic,systolic,gripForce,sit and bend forward_cm,sit-ups counts,broad jump_cm,class
27.0,M,172.3,75.24,21.3,80.0,130.0,54.9,18.4,6,150
25.0,M,165.0,55.8,15.7,77.0,126.0,36.4,16.3,53,150
31.0,M,179.6,78.0,20.1,92.0,152.0,44.8,12.0,49,170
32.0,M,174.5,71.1,18.4,76.0,147.0,41.4,15.2,53,140
28.0,M,173.8,67.7,17.1,70.0,127.0,43.5,27.1,45,140"""

# Crea un DataFrame con los datos
df = pd.read_csv(StringIO(df_csv))

# Visualiza los primeros registros para verificar que los datos se han cargado correctamente
print(df.head())
        age gender  height_cm  weight_kg  body fat_%  diastolic  systolic  \
0  0   27.0      M      172.3      75.24        21.3       80.0     130.0   
1  1   25.0      M      165.0      55.80        15.7       77.0     126.0   
2  2   31.0      M      179.6      78.00        20.1       92.0     152.0   
3  3   32.0      M      174.5      71.10        18.4       76.0     147.0   
4  4   28.0      M      173.8      67.70        17.1       70.0     127.0   

   gripForce sit and bend forward_cm  \
0       54.9                    18.4   
1       36.4                    16.3   
2       44.8                    12.0   
3       41.4                    15.2   
4       43.5                    27.1   

                                      sit-ups counts  broad jump_cm  class  
0  6...                                          ...            NaN    NaN  
1  53...                                         ...            NaN    NaN  
2  49...                                         ...            NaN    NaN  
3  53...                                         ...            NaN    NaN  
4  45...                                         ...            NaN    NaN  

Donde
- age = edad
- gender  = genero
- height_cm  = altura en cm
- weight_kg  =  pero en kg
- body_fat_%  = grasa corporal
- diastolic  = presion arterial diatolica (min)
- systolic = presion arterial sitolica (min)
- gripForce  = fuerza de agrarre
- sit and bend forward_cm  = sentarse e inclinarse hacia adelante
- sit-ups counts  = conteo abdominales
- broad jump_cm  = salto cm
- class = clase A, B, C, D (A: mejor)/estratificado

# Muestra la columna 'altura'
print(df['altura'])

# Muestra la columna 'peso'
print(df['peso'])

Para mostrar una tabla con altura y peso ejecuto: 
# Selecciona las columnas 'height_cm' y 'weight_kg'
nuevo_df = df[['height_cm', 'weight_kg']]

# Imprime el nuevo DataFrame
print(nuevo_df)

 height_cm  weight_kg
0      172.3      75.24
1      165.0      55.80
2      179.6      78.00
3      174.5      71.10
4      173.8      67.70


#numero de datos de las filas y columnas
num_filas, num_columnas = df.shape
print(f"El DataFrame tiene {num_filas} filas y {num_columnas} columnas.")

El DataFrame tiene 100 filas y 12 columnas.

2.2 Tabla de frecuencias por valores

#numero de datos de la columna  de pesos
df['height_cm'].count()
100

# cuenta las ocurrencias de los pesos
tabla = df.groupby('height_cm').count()
tabla
1 to 25 of 86 entries
Filter

height_cm age gender weight_kg body fat_% diastolic systolic gripForce sit and bend forward_cm sit-ups counts broad jump_cm class
146.5 1 1 1 1 1 1 1 1 1 0 0
150.5 1 1 1 1 1 1 1 1 1 0 0
151.5 1 1 1 1 1 1 1 1 1 0 0
153.0 1 1 1 1 1 1 1 1 1 0 0
155.9 1 1 1 1 1 1 1 1 1 0 0
156.0 1 1 1 1 1 1 1 1 1 0 0
156.3 1 1 1 1 1 1 1 1 1 0 0
156.7 1 1 1 1 1 1 1 1 1 0 0
157.0 1 1 1 1 1 1 1 1 1 0 0
157.2 1 1 1 1 1 1 1 1 1 0 0
158.1 2 2 2 2 2 2 2 2 1 0 0
158.3 1 1 1 1 1 1 1 1 1 0 0
158.4 1 1 1 1 1 1 1 1 1 0 0
158.6 1 1 1 1 1 1 1 1 1 0 0
# cuenta las ocurrencias de los altura
tabla = df.groupby('weight_kg').count()
tabla
age gender height_cm body fat_% diastolic systolic gripForce sit and bend forward_cm sit-ups counts broad jump_cm class
weight_kg
45.50 1 1 1 1 1 1 1 1 1 0 0
46.40 1 1 1 1 1 1 1 1 1 0 0
47.20 1 1 1 1 1 1 1 1 1 0 0
49.00 1 1 1 1 1 1 1 1 1 0 0
50.60 1 1 1 1 1 1 1 1 1 0 0
50.80 1 1 1 1 1 1 1 1 1 0 0
51.00 1 1 1 1 1 1 1 1 1 0 0
51.30 1 1 1 1 1 1 1 1 1 0 0
51.54 1 1 1 1 1 1 1 1 1 0 0
51.70 1 1 1 1 1 1 1 1 1 0 0
52.00 1 1 1 1 1 1 1 1 1 0 0


# Lista de las columnas para las que deseas calcular tablas de frecuencia
columnas_de_interes = ['height_cm']

# Itera a través de las columnas de interés
for columna in columnas_de_interes:
    tabla_frecuencia = df[columna].value_counts().reset_index()
    tabla_frecuencia.columns = [columna, 'Frecuencia']

....# Imprime la tabla de frecuencia para la columna actual
    print(f"Tabla de Frecuencia para la columna '{columna}':")
    print(tabla_frecuencia)
    print("\n")

Tabla de Frecuencia para la columna 'height_cm':
    height_cm  Frecuencia
0       166.7           3
1       175.8           2
2       164.2           2
3       180.1           2
4       165.0           2
5       158.1           2
6       170.0           2
7       159.5           2
8       169.2           2
9       172.1           2
10      177.6           2

# Lista de las columnas para las que deseas calcular tablas de frecuencia
columnas_de_interes = ['weight_kg']

# Itera a través de las columnas de interés
for columna in columnas_de_interes:
    tabla_frecuencia = df[columna].value_counts().reset_index()
    tabla_frecuencia.columns = [columna, 'Frecuencia']

....# Imprime la tabla de frecuencia para la columna actual
    print(f"Tabla de Frecuencia para la columna '{columna}':")
    print(tabla_frecuencia)
    print("\n")

2.3 Tabla de frecuencia por intervalos

# muestra los pesos ordenados de menor a mayor
print(sorted(df['weight_kg']))

[146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

Lista de numeros de pesos por intervalos 

#  Intervalos de altura
# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Crea un DataFrame con los datos de altura
df = pd.DataFrame({'Altura': altura_datos})

# Define la cantidad de intervalos (en este caso, 5 intervalos)
num_intervalos = 5

# Utiliza la función cut para crear las categorías de altura
categorias_altura = pd.cut(df['Altura'], bins=num_intervalos)

# Calcula la tabla de frecuencia con value_counts()
tabla_frecuencia = pd.value_counts(categorias_altura).reset_index()
tabla_frecuencia.columns = ['Intervalo', 'Frecuencia']

# Ordena los intervalos
tabla_frecuencia = tabla_frecuencia.sort_values(by='Intervalo')

# Calcula la suma de las frecuencias
total_frecuencia = tabla_frecuencia['Frecuencia'].sum()

# Agrega una fila con el total
tabla_frecuencia = tabla_frecuencia.append({'Intervalo': 'Total', 'Frecuencia': total_frecuencia}, ignore_index=True)


# Imprime la tabla de frecuencia con los intervalos y las frecuencias
print(tabla_frecuencia)


[2]
0 s
import pandas as pd

# Crear tabla llamada df
df = pd.DataFrame()

# crea una columna numeros
df ['numeros'] = [1, 2, 3, 4]

# columna letras
df['letras'] = ['a', 'b', 'c', 'd']

output

[ ]
# muestra la columna numeros
df['numeros']
output
0    1
1    2
2    3
3    4
Name: numeros, dtype: int64
[ ]

# DataFrame: tabla de datos
# Series: serie de datos
type(df), type(df['numeros'])
output
(pandas.core.frame.DataFrame, pandas.core.series.Series)
[ ]
# crea una columna cuadrada con los 
# valores de la columna numeros al cuadrado
df['cuadrados'] = df['numeros'] ** 2

df
output

[ ]
acumulados = []     # una lista vacia
suma = 0                 # una suma en cero

for i in df['numeros']:   # para cada dato i en la columna de numeros
      suma = suma + i    # suma e i se adicionan y el resultado va a suma
      acumulados.append(suma)  # agreaga suma a la lista
[ ]
# metodo cumsum de pd.Series
df['numeros'].cumsum()
output
0     1
1     3
2     6
3    10
Name: numeros, dtype: int64
[ ]
# conversion a lista
df['numeros'].cumsum().tolist()
output
[1, 3, 6, 10]
[ ]
# nueva columna de tabla con el nombre acumulados
df['acumulados'] = df['numeros'].cumsum()

df
output

[59]
0 s
# Lee el archivo CSV desde Google Drive
df = pd.read_csv("/content/drive/MyDrive/Python/Proy_1/bodyPerformance.csv", sep=';')
[60]
0 s
print(df.head(100))

output
   age,gender,height_cm,weight_kg,body fat_%,diastolic,systolic,gripForce,sit and bend forward_cm,sit-ups counts,broad jump_cm,class
0   27.0,M,172.3,75.24,21.3,80.0,130.0,54.9,18.4,6...                                                                               
1   25.0,M,165.0,55.8,15.7,77.0,126.0,36.4,16.3,53...                                                                               
2   31.0,M,179.6,78.0,20.1,92.0,152.0,44.8,12.0,49...                                                                               
3   32.0,M,174.5,71.1,18.4,76.0,147.0,41.4,15.2,53...                                                                               
4   28.0,M,173.8,67.7,17.1,70.0,127.0,43.5,27.1,45...                                                                               
5   36.0,F,165.4,55.4,22.0,64.0,119.0,23.8,21.0,27...                                                                               
6   42.0,F,164.5,63.7,32.2,72.0,135.0,22.7,0.8,18....                                                                               
7   33.0,M,174.9,77.2,36.9,84.0,137.0,45.9,12.3,42...                                                                               
8   54.0,M,166.8,67.5,27.6,85.0,165.0,40.4,18.6,34...                                                                               
9   28.0,M,185.0,84.6,14.4,81.0,156.0,57.9,12.1,55...                                                                               
10  42.0,M,169.2,65.4,19.3,63.0,110.0,43.5,16.0,68...                                                                               
11  57.0,F,153.0,49.0,20.9,69.0,106.0,21.5,30.0,0....                                                                               
12  27.0,F,156.0,53.9,35.5,69.0,116.0,23.1,13.1,28...                                                                               
13  22.0,M,175.7,67.9,11.3,71.0,103.0,52.5,19.2,55...                                                                               
14  24.0,M,181.0,84.4,20.4,80.0,120.0,48.9,7.2,54....                                                                               
15  45.0,F,159.0,63.1,30.9,93.0,144.0,34.1,19.0,30...                                                                               
16  25.0,F,164.2,66.6,30.2,82.0,120.0,25.7,22.9,39...                                                                               
17  26.0,M,179.9,71.5,9.7,64.0,135.0,59.6,17.8,61....                                                                               
18  26.0,M,169.2,70.6,21.0,63.0,129.0,41.3,15.1,53...                                                                               
19  21.0,F,162.7,47.2,18.9,78.0,133.0,25.4,20.5,36...                                                                               
20  25.0,F,161.7,63.36,31.3,89.0,128.0,25.0,10.7,3...                                                                               
21  59.0,F,155.9,62.7,30.2,76.0,143.0,36.8,29.1,25...                                                                               
22  38.0,M,166.7,67.3,23.2,70.0,111.0,26.1,19.7,62...                                                                               
23  44.0,M,170.0,63.3,12.9,65.0,115.0,44.5,11.6,49...                                                                               
24  23.0,F,164.1,59.4,29.6,91.0,126.0,24.6,27.5,32...                                                                               
25  62.0,M,169.0,70.7,30.5,96.0,146.0,39.3,4.0,43....                                                                               
26  47.0,F,158.3,53.5,29.2,70.0,117.0,25.9,8.1,32....                                                                               
27  48.0,M,175.8,84.5,31.4,83.0,125.0,33.8,3.7,24....                                                                               
28  36.0,M,176.0,81.3,24.5,81.0,139.0,46.2,8.1,54....                                                                               
29  50.0,F,159.8,57.1,24.4,63.0,103.0,30.8,24.4,30...                                                                               
30  25.0,M,170.9,70.7,15.7,80.0,127.0,36.4,26.4,38...                                                                               
31  26.0,M,176.7,77.2,16.3,66.0,129.0,50.0,9.1,51....                                                                               
32  28.0,F,159.5,51.54,24.5,82.0,123.0,37.2,23.0,3...                                                                               
33  30.0,M,172.1,79.5,26.7,91.0,148.0,34.7,-2.0,40...                                                                               
34  49.0,F,151.5,52.0,27.6,77.0,144.0,23.8,21.3,39...                                                                               
35  40.0,M,177.6,88.6,20.3,93.0,138.0,51.5,12.1,54...                                                                               
36  21.0,M,172.5,66.4,12.5,82.0,130.0,51.2,6.3,46....                                                                               
37  31.0,M,177.5,79.5,23.0,90.0,148.0,51.2,18.4,62...                                                                               
38  32.0,M,178.0,84.5,21.2,68.0,130.0,52.3,16.2,62...                                                                               
39  27.0,M,177.6,79.7,22.8,59.0,108.0,48.0,1.8,59....                                                                               
40  42.0,M,168.0,61.0,14.9,94.0,151.0,28.9,1.0,32....                                                                               
41  52.0,M,173.6,84.9,30.3,93.0,144.0,42.0,9.0,43....                                                                               
42  39.0,M,173.3,69.8,23.8,76.0,137.0,40.0,18.2,38...                                                                               
43  33.0,F,159.6,60.5,32.1,62.0,106.0,21.9,22.2,24...                                                                               
44  25.0,F,161.8,57.7,21.7,74.0,115.0,29.3,26.6,50...                                                                               
45  31.0,M,169.9,73.1,19.2,97.0,145.0,45.0,14.5,37...                                                                               
46  34.0,M,183.6,76.82,16.3,80.0,120.0,46.3,14.2,5...                                                                               
47  26.0,M,172.1,66.1,24.9,62.0,102.0,19.9,-9.9,44...                                                                               
48  28.0,M,180.1,82.1,15.0,83.0,147.0,52.6,18.8,55...                                                                               
49  58.0,M,164.2,64.0,19.8,93.0,150.0,36.8,18.3,38...                                                                               
50  48.0,M,169.8,75.4,14.7,94.0,149.0,51.4,24.7,55...                                                                               
51  23.0,M,180.1,65.9,14.4,72.0,130.0,45.4,18.1,56...                                                                               
52  38.0,F,157.2,51.7,27.3,64.0,106.0,25.1,14.7,19...                                                                               
53  43.0,F,168.3,69.3,31.9,88.0,139.0,32.1,20.2,33...                                                                               
54  21.0,F,159.5,51.3,35.8,80.0,122.0,16.6,2.1,5.0...                                                                               
55  56.0,M,166.7,56.9,16.5,90.0,147.0,41.6,17.8,30...                                                                               
56  24.0,M,164.4,66.2,17.1,63.0,110.0,40.2,16.2,43...                                                                               
57  58.0,F,146.5,46.4,32.9,71.0,127.0,18.7,17.4,20...                                                                               
58  42.0,M,174.1,103.1,30.5,78.0,123.0,50.7,3.6,25...                                                                               
59  45.0,M,185.4,80.0,21.9,93.0,144.0,46.2,7.1,22....                                                                               
60  37.0,M,168.9,78.8,23.4,88.0,144.0,42.1,20.9,47...                                                                               
61  31.0,M,175.3,83.6,30.1,93.0,152.0,45.9,7.2,55....                                                                               
62  43.0,F,164.0,50.8,22.4,88.0,124.0,24.0,13.5,28...                                                                               
63  23.0,F,162.4,58.9,29.6,71.0,119.0,28.1,25.5,48...                                                                               
64  59.0,F,165.0,63.7,31.4,77.0,120.0,20.8,25.5,30...                                                                               
65  63.0,M,166.6,75.5,31.6,62.0,122.0,34.1,6.7,17....                                                                               
66  40.0,M,174.2,77.6,17.8,85.0,133.0,49.5,12.1,48...                                                                               
67  27.0,F,150.5,55.7,39.6,66.0,114.0,29.7,13.4,23...                                                                               
68  56.0,F,160.2,62.4,33.3,67.0,103.0,28.8,20.7,15...                                                                               
69  35.0,M,179.0,75.0,10.7,74.0,129.0,47.7,16.6,54...                                                                               
70  30.0,M,172.7,78.0,26.6,79.0,140.0,36.9,3.4,25....                                                                               
71  56.0,M,160.2,62.7,30.2,85.0,140.0,35.4,9.5,27....                                                                               
72  36.0,M,171.5,80.5,21.5,86.0,153.0,46.7,16.8,53...                                                                               
73  60.0,M,175.1,66.5,17.3,85.0,125.0,40.4,13.9,31...                                                                               
74  22.0,M,172.2,70.6,24.3,70.0,118.0,36.7,9.8,50....                                                                               
75  22.0,M,171.9,78.46,22.9,64.0,116.0,43.6,-9.3,4...                                                                               
76  37.0,M,174.0,75.2,18.5,82.0,142.0,39.7,20.5,50...                                                                               
77  21.0,F,158.1,53.6,27.63524,70.0,115.0,18.9,12....                                                                               
78  21.0,M,170.4,74.3,19.5,82.0,157.0,45.6,12.7,54...                                                                               
79  60.0,F,158.6,62.7,34.6,80.0,137.0,29.3,18.4,12...                                                                               
80  27.0,F,168.5,64.2,26.2,76.0,108.0,25.2,23.1,18...                                                                               
81  59.0,F,156.3,60.5,33.6,79.0,130.0,29.6,22.4,23...                                                                               
82  47.0,F,157.0,54.1,26.8,72.0,117.0,25.1,18.2,25...                                                                               
83  21.0,F,161.3,50.6,23.5,69.0,127.0,27.5,29.4,39...                                                                               
84  51.0,M,177.0,68.7,18.3,84.0,140.0,39.3,11.3,35...                                                                               
85  48.0,M,171.0,66.2,17.3,99.0,144.0,48.8,16.0,49...                                                                               
86  49.0,M,170.0,66.2,18.0,82.0,130.0,39.5,20.0,39...                                                                               
87  41.0,F,158.1,51.0,21.7,86.0,127.0,23.1,28.6,46...                                                                               
88  24.0,F,159.0,45.5,24.5,85.0,135.0,28.5,22.9,57...                                                                               
89  35.0,M,178.4,79.0,15.4,73.0,127.0,52.7,14.7,68...                                                                               
90  26.0,F,156.7,56.3,32.8,78.0,123.0,19.7,22.9,28...                                                                               
91  35.0,M,178.5,78.4,13.8,81.0,136.0,51.5,17.1,64...                                                                               
92  25.0,M,171.2,65.1,11.8,67.0,127.0,45.1,22.2,54...                                                                               
93  30.0,M,176.4,71.7,17.9,68.0,130.0,53.4,24.3,56...                                                                               
94  27.0,M,175.4,86.4,19.8,76.0,135.0,47.6,20.6,48...                                                                               
95  41.0,M,166.7,65.7,21.5,90.0,151.0,49.6,18.7,54...                                                                               
96  50.0,F,158.4,57.2,32.0,69.0,134.0,21.1,18.6,17...                                                                               
97  22.0,M,175.8,72.0,30.4,75.0,115.0,34.6,19.0,54...                                                                               
98  56.0,M,173.0,70.9,19.5,83.0,135.0,47.9,11.1,44...                                                                               
99  46.0,F,159.1,52.2,27.2,84.0,127.0,22.9,17.9,30...                                                                               
[68]
0 s
from io import StringIO  # Importa StringIO desde el módulo io

# Datos en formato CSV
df_csv = """
   age,gender,height_cm,weight_kg,body fat_%,diastolic,systolic,gripForce,sit and bend forward_cm,sit-ups counts,broad jump_cm,class
0   27.0,M,172.3,75.24,21.3,80.0,130.0,54.9,18.4,6...                                                                               
1   25.0,M,165.0,55.8,15.7,77.0,126.0,36.4,16.3,53...                                                                               
2   31.0,M,179.6,78.0,20.1,92.0,152.0,44.8,12.0,49...                                                                               
3   32.0,M,174.5,71.1,18.4,76.0,147.0,41.4,15.2,53...                                                                               
4   28.0,M,173.8,67.7,17.1,70.0,127.0,43.5,27.1,45...                                                                               
5   36.0,F,165.4,55.4,22.0,64.0,119.0,23.8,21.0,27...                                                                               
6   42.0,F,164.5,63.7,32.2,72.0,135.0,22.7,0.8,18....                                                                               
7   33.0,M,174.9,77.2,36.9,84.0,137.0,45.9,12.3,42...                                                                               
8   54.0,M,166.8,67.5,27.6,85.0,165.0,40.4,18.6,34...                                                                               
9   28.0,M,185.0,84.6,14.4,81.0,156.0,57.9,12.1,55...                                                                               
10  42.0,M,169.2,65.4,19.3,63.0,110.0,43.5,16.0,68...                                                                               
11  57.0,F,153.0,49.0,20.9,69.0,106.0,21.5,30.0,0....                                                                               
12  27.0,F,156.0,53.9,35.5,69.0,116.0,23.1,13.1,28...                                                                               
13  22.0,M,175.7,67.9,11.3,71.0,103.0,52.5,19.2,55...                                                                               
14  24.0,M,181.0,84.4,20.4,80.0,120.0,48.9,7.2,54....                                                                               
15  45.0,F,159.0,63.1,30.9,93.0,144.0,34.1,19.0,30...                                                                               
16  25.0,F,164.2,66.6,30.2,82.0,120.0,25.7,22.9,39...                                                                               
17  26.0,M,179.9,71.5,9.7,64.0,135.0,59.6,17.8,61....                                                                               
18  26.0,M,169.2,70.6,21.0,63.0,129.0,41.3,15.1,53...                                                                               
19  21.0,F,162.7,47.2,18.9,78.0,133.0,25.4,20.5,36...                                                                               
20  25.0,F,161.7,63.36,31.3,89.0,128.0,25.0,10.7,3...                                                                               
21  59.0,F,155.9,62.7,30.2,76.0,143.0,36.8,29.1,25...                                                                               
22  38.0,M,166.7,67.3,23.2,70.0,111.0,26.1,19.7,62...                                                                               
23  44.0,M,170.0,63.3,12.9,65.0,115.0,44.5,11.6,49...                                                                               
24  23.0,F,164.1,59.4,29.6,91.0,126.0,24.6,27.5,32...                                                                               
25  62.0,M,169.0,70.7,30.5,96.0,146.0,39.3,4.0,43....                                                                               
26  47.0,F,158.3,53.5,29.2,70.0,117.0,25.9,8.1,32....                                                                               
27  48.0,M,175.8,84.5,31.4,83.0,125.0,33.8,3.7,24....                                                                               
28  36.0,M,176.0,81.3,24.5,81.0,139.0,46.2,8.1,54....                                                                               
29  50.0,F,159.8,57.1,24.4,63.0,103.0,30.8,24.4,30...                                                                               
30  25.0,M,170.9,70.7,15.7,80.0,127.0,36.4,26.4,38...                                                                               
31  26.0,M,176.7,77.2,16.3,66.0,129.0,50.0,9.1,51....                                                                               
32  28.0,F,159.5,51.54,24.5,82.0,123.0,37.2,23.0,3...                                                                               
33  30.0,M,172.1,79.5,26.7,91.0,148.0,34.7,-2.0,40...                                                                               
34  49.0,F,151.5,52.0,27.6,77.0,144.0,23.8,21.3,39...                                                                               
35  40.0,M,177.6,88.6,20.3,93.0,138.0,51.5,12.1,54...                                                                               
36  21.0,M,172.5,66.4,12.5,82.0,130.0,51.2,6.3,46....                                                                               
37  31.0,M,177.5,79.5,23.0,90.0,148.0,51.2,18.4,62...                                                                               
38  32.0,M,178.0,84.5,21.2,68.0,130.0,52.3,16.2,62...                                                                               
39  27.0,M,177.6,79.7,22.8,59.0,108.0,48.0,1.8,59....                                                                               
40  42.0,M,168.0,61.0,14.9,94.0,151.0,28.9,1.0,32....                                                                               
41  52.0,M,173.6,84.9,30.3,93.0,144.0,42.0,9.0,43....                                                                               
42  39.0,M,173.3,69.8,23.8,76.0,137.0,40.0,18.2,38...                                                                               
43  33.0,F,159.6,60.5,32.1,62.0,106.0,21.9,22.2,24...                                                                               
44  25.0,F,161.8,57.7,21.7,74.0,115.0,29.3,26.6,50...                                                                               
45  31.0,M,169.9,73.1,19.2,97.0,145.0,45.0,14.5,37...                                                                               
46  34.0,M,183.6,76.82,16.3,80.0,120.0,46.3,14.2,5...                                                                               
47  26.0,M,172.1,66.1,24.9,62.0,102.0,19.9,-9.9,44...                                                                               
48  28.0,M,180.1,82.1,15.0,83.0,147.0,52.6,18.8,55...                                                                               
49  58.0,M,164.2,64.0,19.8,93.0,150.0,36.8,18.3,38...                                                                               
50  48.0,M,169.8,75.4,14.7,94.0,149.0,51.4,24.7,55...                                                                               
51  23.0,M,180.1,65.9,14.4,72.0,130.0,45.4,18.1,56...                                                                               
52  38.0,F,157.2,51.7,27.3,64.0,106.0,25.1,14.7,19...                                                                               
53  43.0,F,168.3,69.3,31.9,88.0,139.0,32.1,20.2,33...                                                                               
54  21.0,F,159.5,51.3,35.8,80.0,122.0,16.6,2.1,5.0...                                                                               
55  56.0,M,166.7,56.9,16.5,90.0,147.0,41.6,17.8,30...                                                                               
56  24.0,M,164.4,66.2,17.1,63.0,110.0,40.2,16.2,43...                                                                               
57  58.0,F,146.5,46.4,32.9,71.0,127.0,18.7,17.4,20...                                                                               
58  42.0,M,174.1,103.1,30.5,78.0,123.0,50.7,3.6,25...                                                                               
59  45.0,M,185.4,80.0,21.9,93.0,144.0,46.2,7.1,22....                                                                               
60  37.0,M,168.9,78.8,23.4,88.0,144.0,42.1,20.9,47...                                                                               
61  31.0,M,175.3,83.6,30.1,93.0,152.0,45.9,7.2,55....                                                                               
62  43.0,F,164.0,50.8,22.4,88.0,124.0,24.0,13.5,28...                                                                               
63  23.0,F,162.4,58.9,29.6,71.0,119.0,28.1,25.5,48...                                                                               
64  59.0,F,165.0,63.7,31.4,77.0,120.0,20.8,25.5,30...                                                                               
65  63.0,M,166.6,75.5,31.6,62.0,122.0,34.1,6.7,17....                                                                               
66  40.0,M,174.2,77.6,17.8,85.0,133.0,49.5,12.1,48...                                                                               
67  27.0,F,150.5,55.7,39.6,66.0,114.0,29.7,13.4,23...                                                                               
68  56.0,F,160.2,62.4,33.3,67.0,103.0,28.8,20.7,15...                                                                               
69  35.0,M,179.0,75.0,10.7,74.0,129.0,47.7,16.6,54...                                                                               
70  30.0,M,172.7,78.0,26.6,79.0,140.0,36.9,3.4,25....                                                                               
71  56.0,M,160.2,62.7,30.2,85.0,140.0,35.4,9.5,27....                                                                               
72  36.0,M,171.5,80.5,21.5,86.0,153.0,46.7,16.8,53...                                                                               
73  60.0,M,175.1,66.5,17.3,85.0,125.0,40.4,13.9,31...                                                                               
74  22.0,M,172.2,70.6,24.3,70.0,118.0,36.7,9.8,50....                                                                               
75  22.0,M,171.9,78.46,22.9,64.0,116.0,43.6,-9.3,4...                                                                               
76  37.0,M,174.0,75.2,18.5,82.0,142.0,39.7,20.5,50...                                                                               
77  21.0,F,158.1,53.6,27.63524,70.0,115.0,18.9,12....                                                                               
78  21.0,M,170.4,74.3,19.5,82.0,157.0,45.6,12.7,54...                                                                               
79  60.0,F,158.6,62.7,34.6,80.0,137.0,29.3,18.4,12...                                                                               
80  27.0,F,168.5,64.2,26.2,76.0,108.0,25.2,23.1,18...                                                                               
81  59.0,F,156.3,60.5,33.6,79.0,130.0,29.6,22.4,23...                                                                               
82  47.0,F,157.0,54.1,26.8,72.0,117.0,25.1,18.2,25...                                                                               
83  21.0,F,161.3,50.6,23.5,69.0,127.0,27.5,29.4,39...                                                                               
84  51.0,M,177.0,68.7,18.3,84.0,140.0,39.3,11.3,35...                                                                               
85  48.0,M,171.0,66.2,17.3,99.0,144.0,48.8,16.0,49...                                                                               
86  49.0,M,170.0,66.2,18.0,82.0,130.0,39.5,20.0,39...                                                                               
87  41.0,F,158.1,51.0,21.7,86.0,127.0,23.1,28.6,46...                                                                               
88  24.0,F,159.0,45.5,24.5,85.0,135.0,28.5,22.9,57...                                                                               
89  35.0,M,178.4,79.0,15.4,73.0,127.0,52.7,14.7,68...                                                                               
90  26.0,F,156.7,56.3,32.8,78.0,123.0,19.7,22.9,28...                                                                               
91  35.0,M,178.5,78.4,13.8,81.0,136.0,51.5,17.1,64...                                                                               
92  25.0,M,171.2,65.1,11.8,67.0,127.0,45.1,22.2,54...                                                                               
93  30.0,M,176.4,71.7,17.9,68.0,130.0,53.4,24.3,56...                                                                               
94  27.0,M,175.4,86.4,19.8,76.0,135.0,47.6,20.6,48...                                                                               
95  41.0,M,166.7,65.7,21.5,90.0,151.0,49.6,18.7,54...                                                                               
96  50.0,F,158.4,57.2,32.0,69.0,134.0,21.1,18.6,17...                                                                               
97  22.0,M,175.8,72.0,30.4,75.0,115.0,34.6,19.0,54...                                                                               
98  56.0,M,173.0,70.9,19.5,83.0,135.0,47.9,11.1,44...                                                                               
99  46.0,F,159.1,52.2,27.2,84.0,127.0,22.9,17.9,30... """

# Crea un DataFrame con los datos
df = pd.read_csv(StringIO(df_csv))
[77]
0 s
# Visualiza los primeros registros para verificar que los datos se han cargado correctamente
print(df.head())
output
        age gender  height_cm  weight_kg  body fat_%  diastolic  systolic  \
0  0   27.0      M      172.3      75.24        21.3       80.0     130.0   
1  1   25.0      M      165.0      55.80        15.7       77.0     126.0   
2  2   31.0      M      179.6      78.00        20.1       92.0     152.0   
3  3   32.0      M      174.5      71.10        18.4       76.0     147.0   
4  4   28.0      M      173.8      67.70        17.1       70.0     127.0   

   gripForce sit and bend forward_cm  \
0       54.9                    18.4   
1       36.4                    16.3   
2       44.8                    12.0   
3       41.4                    15.2   
4       43.5                    27.1   

                                      sit-ups counts  broad jump_cm  class  
0  6...                                          ...            NaN    NaN  
1  53...                                         ...            NaN    NaN  
2  49...                                         ...            NaN    NaN  
3  53...                                         ...            NaN    NaN  
4  45...                                         ...            NaN    NaN  
[71]
0 s
print(df.columns)

output
Index(['   age', 'gender', 'height_cm', 'weight_kg', 'body fat_%', 'diastolic',
       'systolic', 'gripForce', 'sit and bend forward_cm', 'sit-ups counts',
       'broad jump_cm', 'class'],
      dtype='object')
[72]
altura = df['height_cm']
peso = df['weight_kg']
[73]
0 s
print(peso)
output
0      75.24
1      55.80
2      78.00
3      71.10
4      67.70
5      55.40
6      63.70
7      77.20
8      67.50
9      84.60
10     65.40
11     49.00
12     53.90
13     67.90
14     84.40
15     63.10
16     66.60
17     71.50
18     70.60
19     47.20
20     63.36
21     62.70
22     67.30
23     63.30
24     59.40
25     70.70
26     53.50
27     84.50
28     81.30
29     57.10
30     70.70
31     77.20
32     51.54
33     79.50
34     52.00
35     88.60
36     66.40
37     79.50
38     84.50
39     79.70
40     61.00
41     84.90
42     69.80
43     60.50
44     57.70
45     73.10
46     76.82
47     66.10
48     82.10
49     64.00
50     75.40
51     65.90
52     51.70
53     69.30
54     51.30
55     56.90
56     66.20
57     46.40
58    103.10
59     80.00
60     78.80
61     83.60
62     50.80
63     58.90
64     63.70
65     75.50
66     77.60
67     55.70
68     62.40
69     75.00
70     78.00
71     62.70
72     80.50
73     66.50
74     70.60
75     78.46
76     75.20
77     53.60
78     74.30
79     62.70
80     64.20
81     60.50
82     54.10
83     50.60
84     68.70
85     66.20
86     66.20
87     51.00
88     45.50
89     79.00
90     56.30
91     78.40
92     65.10
93     71.70
94     86.40
95     65.70
96     57.20
97     72.00
98     70.90
99     52.20
Name: weight_kg, dtype: float64
[74]
0 s
# Selecciona las columnas 'height_cm' y 'weight_kg'
nuevo_df = df[['height_cm', 'weight_kg']]

# Imprime el nuevo DataFrame
print(nuevo_df)

output
    height_cm  weight_kg
0       172.3      75.24
1       165.0      55.80
2       179.6      78.00
3       174.5      71.10
4       173.8      67.70
5       165.4      55.40
6       164.5      63.70
7       174.9      77.20
8       166.8      67.50
9       185.0      84.60
10      169.2      65.40
11      153.0      49.00
12      156.0      53.90
13      175.7      67.90
14      181.0      84.40
15      159.0      63.10
16      164.2      66.60
17      179.9      71.50
18      169.2      70.60
19      162.7      47.20
20      161.7      63.36
21      155.9      62.70
22      166.7      67.30
23      170.0      63.30
24      164.1      59.40
25      169.0      70.70
26      158.3      53.50
27      175.8      84.50
28      176.0      81.30
29      159.8      57.10
30      170.9      70.70
31      176.7      77.20
32      159.5      51.54
33      172.1      79.50
34      151.5      52.00
35      177.6      88.60
36      172.5      66.40
37      177.5      79.50
38      178.0      84.50
39      177.6      79.70
40      168.0      61.00
41      173.6      84.90
42      173.3      69.80
43      159.6      60.50
44      161.8      57.70
45      169.9      73.10
46      183.6      76.82
47      172.1      66.10
48      180.1      82.10
49      164.2      64.00
50      169.8      75.40
51      180.1      65.90
52      157.2      51.70
53      168.3      69.30
54      159.5      51.30
55      166.7      56.90
56      164.4      66.20
57      146.5      46.40
58      174.1     103.10
59      185.4      80.00
60      168.9      78.80
61      175.3      83.60
62      164.0      50.80
63      162.4      58.90
64      165.0      63.70
65      166.6      75.50
66      174.2      77.60
67      150.5      55.70
68      160.2      62.40
69      179.0      75.00
70      172.7      78.00
71      160.2      62.70
72      171.5      80.50
73      175.1      66.50
74      172.2      70.60
75      171.9      78.46
76      174.0      75.20
77      158.1      53.60
78      170.4      74.30
79      158.6      62.70
80      168.5      64.20
81      156.3      60.50
82      157.0      54.10
83      161.3      50.60
84      177.0      68.70
85      171.0      66.20
86      170.0      66.20
87      158.1      51.00
88      159.0      45.50
89      178.4      79.00
90      156.7      56.30
91      178.5      78.40
92      171.2      65.10
93      176.4      71.70
94      175.4      86.40
95      166.7      65.70
96      158.4      57.20
97      175.8      72.00
98      173.0      70.90
99      159.1      52.20
[75]
0 s
num_filas, num_columnas = df.shape
print(f"El DataFrame tiene {num_filas} filas y {num_columnas} columnas.")

output
El DataFrame tiene 100 filas y 12 columnas.
[76]
0 s
#numero de datos de la columna  de pesos
nuevo_df['height_cm'].count()
output
100
[79]
0 s
# cuenta las ocurrencias de los pesos
tabla = df.groupby('height_cm').count()
tabla
output

[88]
0 s
# Lista de las columnas para las que deseas calcular tablas de frecuencia
columnas_de_interes = ['height_cm']

# Itera a través de las columnas de interés
for columna in columnas_de_interes:
    tabla_frecuencia = df[columna].value_counts().reset_index()
    tabla_frecuencia.columns = [columna, 'Frecuencia']

    # Imprime la tabla de frecuencia para la columna actual
    print(f"Tabla de Frecuencia para la columna '{columna}':")
    print(tabla_frecuencia)
    print("\n")
output
Tabla de Frecuencia para la columna 'height_cm':
    height_cm  Frecuencia
0       166.7           3
1       175.8           2
2       164.2           2
3       180.1           2
4       165.0           2
5       158.1           2
6       170.0           2
7       159.5           2
8       169.2           2
9       172.1           2
10      177.6           2
11      160.2           2
12      159.0           2
13      171.5           1
14      172.7           1
15      179.0           1
16      172.3           1
17      175.1           1
18      174.2           1
19      166.6           1
20      162.4           1
21      164.0           1
22      175.3           1
23      168.9           1
24      185.4           1
25      174.1           1
26      150.5           1
27      174.0           1
28      172.2           1
29      171.9           1
30      173.0           1
31      158.4           1
32      175.4           1
33      176.4           1
34      171.2           1
35      178.5           1
36      156.7           1
37      178.4           1
38      171.0           1
39      177.0           1
40      161.3           1
41      157.0           1
42      156.3           1
43      168.5           1
44      158.6           1
45      170.4           1
46      164.4           1
47      146.5           1
48      169.9           1
49      168.3           1
50      164.1           1
51      161.7           1
52      162.7           1
53      179.9           1
54      181.0           1
55      175.7           1
56      156.0           1
57      153.0           1
58      185.0           1
59      166.8           1
60      174.9           1
61      164.5           1
62      165.4           1
63      173.8           1
64      174.5           1
65      179.6           1
66      155.9           1
67      169.0           1
68      157.2           1
69      158.3           1
70      169.8           1
71      183.6           1
72      161.8           1
73      159.6           1
74      173.3           1
75      173.6           1
76      168.0           1
77      178.0           1
78      177.5           1
79      172.5           1
80      151.5           1
81      176.7           1
82      170.9           1
83      159.8           1
84      176.0           1
85      159.1           1


[87]
0 s
# Lista de las columnas para las que deseas calcular tablas de frecuencia
columnas_de_interes = ['weight_kg']

# Itera a través de las columnas de interés
for columna in columnas_de_interes:
    tabla_frecuencia = df[columna].value_counts().reset_index()
    tabla_frecuencia.columns = [columna, 'Frecuencia']

    # Imprime la tabla de frecuencia para la columna actual
    print(f"Tabla de Frecuencia para la columna '{columna}':")
    print(tabla_frecuencia)
    print("\n")
output
Tabla de Frecuencia para la columna 'weight_kg':
    weight_kg  Frecuencia
0       66.20           3
1       62.70           3
2       78.00           2
3       70.70           2
4       63.70           2
5       77.20           2
6       79.50           2
7       60.50           2
8       84.50           2
9       70.60           2
10      75.24           1
11      55.70           1
12      66.50           1
13      80.50           1
14      75.00           1
15      62.40           1
16      50.80           1
17      77.60           1
18      75.50           1
19      58.90           1
20      83.60           1
21      78.80           1
22      80.00           1
23     103.10           1
24      46.40           1
25      56.90           1
26      78.46           1
27      53.60           1
28      75.20           1
29      69.30           1
30      70.90           1
31      72.00           1
32      57.20           1
33      65.70           1
34      86.40           1
35      71.70           1
36      65.10           1
37      78.40           1
38      56.30           1
39      79.00           1
40      45.50           1
41      51.00           1
42      68.70           1
43      50.60           1
44      54.10           1
45      64.20           1
46      74.30           1
47      51.30           1
48      82.10           1
49      51.70           1
50      67.90           1
51      67.30           1
52      63.36           1
53      47.20           1
54      71.50           1
55      66.60           1
56      63.10           1
57      84.40           1
58      53.90           1
59      59.40           1
60      49.00           1
61      65.40           1
62      84.60           1
63      67.50           1
64      55.40           1
65      67.70           1
66      71.10           1
67      63.30           1
68      53.50           1
69      65.90           1
70      69.80           1
71      75.40           1
72      64.00           1
73      55.80           1
74      66.10           1
75      76.82           1
76      73.10           1
77      57.70           1
78      84.90           1
79      81.30           1
80      61.00           1
81      79.70           1
82      66.40           1
83      88.60           1
84      52.00           1
85      51.54           1
86      57.10           1
87      52.20           1


[90]
0 s
# muestra los pesos ordenados de menor a mayor
print(sorted(df['height_cm']))
output
[146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
[91]
0 s
print(sorted(df['weight_kg']))
output
[45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
[102]
0 s
## Intervalos de peso
# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Crea un DataFrame con los datos de peso
df = pd.DataFrame({'Peso': peso_datos})

# Define la cantidad de intervalos (en este caso, 5 intervalos)
num_intervalos = 5

# Utiliza la función cut para crear las categorías
categorias_peso = pd.cut(df['Peso'], bins=num_intervalos)

# Genera una tabla de frecuencia de las categorías
tabla_frecuencia = pd.crosstab(index=categorias_peso, columns="Frecuencia")

# Calcula la suma de las frecuencias
total = tabla_frecuencia['Frecuencia'].sum()

# Agrega una fila con el total
tabla_frecuencia = tabla_frecuencia.append({'Frecuencia': total}, ignore_index=True)

# Asigna un nombre a la fila del total
tabla_frecuencia = tabla_frecuencia.rename(index={num_intervalos: 'Total'})

# Imprime la tabla de frecuencia con el total
print(tabla_frecuencia)

output
       Frecuencia
0              21
1              34
2              33
3              11
4               1
Total         100
<ipython-input-102-60d6335fb995>:21: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  tabla_frecuencia = tabla_frecuencia.append({'Frecuencia': total}, ignore_index=True)
[100]
0 s

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Crea un DataFrame con los datos de peso
df = pd.DataFrame({'Peso': peso_datos})

# Define el intervalo de interés
intervalo_interes = [68.54, 80.06]

# Utiliza la función loc para seleccionar los pesos en ese intervalo
pesos_en_intervalo = df.loc[df['Peso'].between(intervalo_interes[0], intervalo_interes[1])]

# Imprime los pesos en el intervalo
print(pesos_en_intervalo)

output
     Peso
55  68.70
56  69.30
57  69.80
58  70.60
59  70.60
60  70.70
61  70.70
62  70.90
63  71.10
64  71.50
65  71.70
66  72.00
67  73.10
68  74.30
69  75.00
70  75.20
71  75.24
72  75.40
73  75.50
74  76.82
75  77.20
76  77.20
77  77.60
78  78.00
79  78.00
80  78.40
81  78.46
82  78.80
83  79.00
84  79.50
85  79.50
86  79.70
87  80.00
[117]
0 s

# Calcula la suma de las frecuencias
total_frecuencia = tabla_frecuencia['Frecuencia'].sum()

# Agrega una fila con el total
tabla_frecuencia = tabla_frecuencia.append({'Intervalo': 'Total', 'Frecuencia': total_frecuencia}, ignore_index=True)


# Imprime la tabla de frecuencia con los intervalos y las frecuencias
print(tabla_frecuencia)

output
           Intervalo                    Frecuencia
0  (146.461, 154.28]           4
1   (154.28, 162.06]          23
2   (162.06, 169.84]          24
3   (169.84, 177.62]          37
4    (177.62, 185.4]          12
5              Total         100
<ipython-input-117-3ee7f1ddf013>:25: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  tabla_frecuencia = tabla_frecuencia.append({'Intervalo': 'Total', 'Frecuencia': total_frecuencia}, ignore_index=True)


## Intervalos de peso
# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Crea un DataFrame con los datos de peso
df = pd.DataFrame({'Peso': peso_datos})

# Define la cantidad de intervalos (en este caso, 5 intervalos)
num_intervalos = 5

# Utiliza la función cut para crear las categorías
categorias_peso = pd.cut(df['Peso'], bins=num_intervalos)

# Genera una tabla de frecuencia de las categorías
tabla_frecuencia = pd.crosstab(index=categorias_peso, columns="Frecuencia")

# Agrega una fila con el total de los datos
tabla_frecuencia.loc['Total'] = tabla_frecuencia['Frecuencia'].sum()

# Imprime la tabla de frecuencia con los intervalos y el total
print(tabla_frecuencia)

col_0            Frecuencia
Peso                       
(45.442, 57.02]          21
(57.02, 68.54]           34
(68.54, 80.06]           33
(80.06, 91.58]           11
(91.58, 103.1]            1
Total                       100

Pesos en el intervalo [68.54, 80.06]
# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Crea un DataFrame con los datos de peso
df = pd.DataFrame({'Peso': peso_datos})

# Define el intervalo de interés
intervalo_interes = [68.54, 80.06]

# Utiliza la función loc para seleccionar los pesos en ese intervalo
pesos_en_intervalo = df.loc[df['Peso'].between(intervalo_interes[0], intervalo_interes[1])]

# Imprime los pesos en el intervalo
print(pesos_en_intervalo)

     Peso
55  68.70
56  69.30
57  69.80
58  70.60
59  70.60
60  70.70
61  70.70
62  70.90
63  71.10
64  71.50
65  71.70
66  72.00
67  73.10
68  74.30
69  75.00
70  75.20
71  75.24
72  75.40
73  75.50
74  76.82
75  77.20
76  77.20
77  77.60
78  78.00
79  78.00
80  78.40
81  78.46
82  78.80
83  79.00
84  79.50
85  79.50
86  79.70
87  80.00

Esta función toma los datos, el rango, el intervalo y el nombre del índice como argumentos, calcula la tabla de frecuencia, los porcentajes y los porcentajes acumulados, y devuelve un DataFrame con los resultados. Puedes personalizar los argumentos según tus necesidades.

def tabla_frecuencia_con_porcentajes(datos, inicio, fin, intervalo, nombre_indice, decimales=2):
    # Crea un DataFrame con los datos
    df = pd.DataFrame({nombre_indice: datos})

    # Define los intervalos usando el rango especificado
    intervalos = list(range(int(inicio), int(fin) + intervalo, intervalo))
    labels = [f"{intervalo} - {intervalo + intervalo}" for intervalo in intervalos[:-1]]

    # Utiliza la función cut para crear las categorías
    categorias = pd.cut(df[nombre_indice], bins=intervalos, labels=labels, right=False)

    # Genera una tabla de frecuencia de las categorías
    tabla_frecuencia = pd.crosstab(index=categorias, columns="Frecuencia")

    # Calcula los porcentajes y porcentajes acumulados
    tabla_frecuencia['Porcentaje (%)'] = (tabla_frecuencia['Frecuencia'] / len(datos) * 100).round(decimales)
    tabla_frecuencia['Porcentaje Acumulado (%)'] = tabla_frecuencia['Porcentaje (%)'].cumsum().round(decimales)

    return tabla_frecuencia

# Ejemplo de uso:
datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
inicio = 146.5
fin = 185.4
intervalo = 5
nombre_indice = 'Altura'
decimales = 2

tabla = tabla_frecuencia_con_porcentajes(datos, inicio, fin, intervalo, nombre_indice, decimales)
print(tabla)

col_0      Frecuencia  Porcentaje (%)  Porcentaje Acumulado (%)
Altura                                                         
146 - 292           2             2.0                       2.0
151 - 302           3             3.0                       5.0
156 - 312          19            19.0                      24.0
161 - 322          14            14.0                      38.0
166 - 332          18            18.0                      56.0
171 - 342          25            25.0                      81.0
176 - 352          15            15.0                      96.0
181 - 362           4             4.0                     100.0

3. Graficar datos

# biblioteca de funciones graficas 
import matplotlib.pyplot as plt

3.1 Histogramas

Barras de alturas proporcionales a las frecuencias de los datos (represntacion grafica de las tablas de frecuencias)

import matplotlib.pyplot as plt

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Crear el DataFrame con los datos de altura
df_altura = pd.DataFrame({'Altura': altura_datos})

# Definir la cantidad de intervalos (en este caso, 5 intervalos)
num_intervalos = 5

# Utilizar la función cut para crear las categorías de altura
categorias_altura = pd.cut(df_altura['Altura'], bins=num_intervalos)

# Generar una tabla de frecuencia de las categorías
tabla_frecuencia = pd.crosstab(index=categorias_altura, columns="Frecuencia")

# Extraer los límites de los intervalos
intervalos = [str(intervalo) for intervalo in tabla_frecuencia.index]

# Calcular los valores necesarios para el histograma
frecuencias = tabla_frecuencia['Frecuencia']

# Crear el histograma
plt.figure(figsize=(10, 6))
plt.bar(intervalos, frecuencias, width=0.8, align='center', alpha=0.7, color='skyblue')

# Personalizar el gráfico
plt.xlabel('Intervalos de Altura')
plt.ylabel('Frecuencia')
plt.title('Histograma de Altura')
plt.xticks(rotation=45, ha='right')

# Mostrar el gráfico
plt.show()




# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Crear el DataFrame con los datos de peso
df_peso = pd.DataFrame({'Peso': peso_datos})

# Definir la cantidad de intervalos
intervalos = [
    "(45.442, 57.02]", 
    "(57.02, 68.54]", 
    "(68.54, 80.06]", 
    "(80.06, 91.58]", 
    "(91.58, 103.1]"
]

# Crear un histograma
plt.figure(figsize=(10, 6))
plt.bar(intervalos, df_peso.groupby(pd.cut(df_peso['Peso'], bins=len(intervalos))).count().values[:, 0], width=0.8, align='center', alpha=0.7, color='#FF00FF')

# Personalizar el gráfico
plt.xlabel('Intervalos de Peso')
plt.ylabel('Frecuencia')
plt.title('Histograma de Peso')
plt.xticks(rotation=45, ha='right')

# Mostrar el gráfico
plt.show()


Este código generará un gráfico de dispersión que muestra la relación entre la altura (en el eje x) y el peso (en el eje y) utilizando los datos proporcionados. Puedes ajustar el tamaño y el estilo del gráfico según tus preferencias.

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Crear DataFrames con los datos
df_peso = pd.DataFrame({'Peso': peso_datos})
df_altura = pd.DataFrame({'Altura': altura_datos})

# Crear el gráfico de dispersión
plt.figure(figsize=(10, 6))
plt.scatter(df_altura, df_peso, color='blue', alpha=0.6)
plt.title('Gráfico de Dispersión de Altura vs. Peso')
plt.xlabel('Altura (cm)')
plt.ylabel('Peso (kg)')
plt.grid(True)

# Mostrar el gráfico
plt.show()

Este código combina los DataFrames de altura y peso en uno solo y muestra una tabla con dos columnas que representan la altura y el peso de los datos.

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Crear DataFrames con los datos
df_peso = pd.DataFrame({'Peso': peso_datos})
df_altura = pd.DataFrame({'Altura': altura_datos})

# Combinar los DataFrames en uno solo
df_combinado = pd.concat([df_altura, df_peso], axis=1)

# Mostrar el DataFrame combinado
print(df_combinado)
    Altura   Peso
0    146.5   45.5
1    150.5   46.4
2    151.5   47.2
3    153.0   49.0
4    155.9   50.6
..     ...    ...
95   180.1   84.6
96   181.0   84.9
97   183.6   86.4
98   185.0   88.6
99   185.4  103.1

[100 rows x 2 columns]

En este ejemplo, primero creamos dos listas, una para la altura y otra para el peso. Luego, utilizamos zip para combinar las dos listas en datos_combinados. Finalmente, recorremos datos_combinados en un bucle for para mostrar los pares de altura y peso.

Ten en cuenta que zip crea un objeto iterable, por lo que a menudo se convierte en una lista o se utiliza en un bucle para acceder a los elementos emparejados.

altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Usar la función zip para combinar las listas
datos_combinados = list(zip(altura_datos, peso_datos))

# Mostrar los datos combinados
for altura, peso in datos_combinados:
    print(f"Altura: {altura} cm, Peso: {peso} kg")

Altura: 146.5 cm, Peso: 45.5 kg
Altura: 150.5 cm, Peso: 46.4 kg
Altura: 151.5 cm, Peso: 47.2 kg
Altura: 153.0 cm, Peso: 49.0 kg
Altura: 155.9 cm, Peso: 50.6 kg
Altura: 156.0 cm, Peso: 50.8 kg
Altura: 156.3 cm, Peso: 51.0 kg
Altura: 156.7 cm, Peso: 51.3 kg
Altura: 157.0 cm, Peso: 51.54 kg
Altura: 157.2 cm, Peso: 51.7 kg
Altura: 158.1 cm, Peso: 52.0 kg
Altura: 158.1 cm, Peso: 52.2 kg
Altura: 158.3 cm, Peso: 53.5 kg
Altura: 158.4 cm, Peso: 53.6 kg
Altura: 158.6 cm, Peso: 53.9 kg

3.3 Linea de tendencia o regresion

Metodo escalar 
En este código, primero convertimos los datos de altura y peso en arrays de numpy. Luego, utilizamos np.polyfit para calcular los coeficientes de la regresión lineal. Creamos una función regresion_lineal que calcula los valores de la línea de tendencia, y finalmente trazamos el gráfico de dispersión de los datos junto con la línea de tendencia.

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular la regresión lineal
coeficientes = np.polyfit(altura, peso, 1)
pendiente = coeficientes[0]
intercepto = coeficientes[1]

# Crear una función de regresión lineal
def regresion_lineal(x):
    return pendiente * x + intercepto

# Crear un gráfico de dispersión de los datos
plt.scatter(altura, peso, color='blue', label='Datos')

# Agregar la línea de tendencia
plt.plot(altura, regresion_lineal(altura), color='red', label='Línea de Tendencia')

# Etiquetas y leyendas
plt.xlabel('Altura (cm)')
plt.ylabel('Peso (kg)')
plt.legend()

# Mostrar el gráfico
plt.show()



En este código, primero convertimos los datos de altura y peso en arrays de numpy. Luego, utilizamos np.polyfit para calcular los coeficientes de la regresión lineal. Creamos una función regresion_lineal que calcula los valores de la línea de tendencia, y finalmente trazamos el gráfico de dispersión de los datos junto con la línea de tendencia.


# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular la regresión lineal utilizando la fórmula vectorial
X = np.vstack([altura, np.ones(len(altura))]).T
y = peso
m, c = np.linalg.lstsq(X, y, rcond=None)[0]

# Crear una función de regresión lineal
def regresion_lineal(x):
    return m * x + c

# Crear un gráfico de dispersión de los datos
plt.scatter(altura, peso, color='blue', label='Datos')

# Agregar la línea de tendencia
plt.plot(altura, regresion_lineal(altura), color='red', label='Línea de Tendencia')

# Etiquetas y leyendas
plt.xlabel('Altura (cm)')
plt.ylabel('Peso (kg)')
plt.legend()

# Mostrar el gráfico
plt.show()

La diferencia principal entre los métodos de regresión lineal vectorial y escalar radica en cómo se expresan y calculan los coeficientes de la regresión. Ambos métodos se utilizan para ajustar una línea de tendencia a un conjunto de datos, pero emplean enfoques ligeramente diferentes.

Método Escalar (Simple o Univariable):

En el método escalar, se calcula la pendiente (coeficiente de la variable independiente) y el intercepto (coeficiente constante) de la línea de tendencia utilizando fórmulas matemáticas específicas. Por ejemplo, en una regresión lineal simple (univariable) con una sola variable independiente (X), la pendiente se calcula como la covarianza de X e Y dividida por la varianza de X, y el intercepto se calcula como la media de Y menos la pendiente por la media de X.

Este método es más común en el contexto de la regresión lineal simple y es fácil de entender. Se utiliza cuando tienes una sola variable independiente que influye en la variable dependiente.

Método Vectorial (Múltiple o Multivariable):

El método vectorial es una generalización del método escalar y se utiliza en regresiones lineales múltiples o multivariables, donde tienes múltiples variables independientes (X1, X2, X3, etc.). En lugar de calcular la pendiente e intercepto directamente, se utiliza el álgebra lineal y una matriz de diseño (matriz de características) para calcular los coeficientes.

El método vectorial es más eficiente y versátil cuando se trata de regresiones múltiples, ya que puede manejar múltiples variables independientes de manera simultánea.

La principal diferencia es que el método escalar se utiliza para regresiones simples con una sola variable independiente, mientras que el método vectorial se aplica a regresiones múltiples con múltiples variables independientes. El método vectorial generaliza y extiende el método escalar para manejar casos más complejos. La elección del método a utilizar dependerá de la naturaleza de tus datos y de si tienes una o varias variables independientes.

4. Calculo de tendencias centrales: media, mediana y moda

4.1 Media

El promedio de una lista de valores o datos

En este código, primero convertimos los datos de altura y peso en arrays de numpy. Luego, utilizamos np.mean para calcular la media de altura y peso. Los resultados se imprimen en la consola con las líneas Media de Altura: y Media de Peso:.

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular la media de altura y peso
media_altura = np.mean(altura)
media_peso = np.mean(peso)

# Redondear las medias a dos decimales
media_altura = round(media_altura, 2)
media_peso = round(media_peso, 2)

# Imprimir las medias
print("Media de Altura:", media_altura)
print("Media de Peso:", media_peso)

Media de Altura: 168.4
Media de Peso: 67.57

4.2 Barras

Barras verticales

Este código crea un gráfico de barras verticales con las medias de altura y peso representadas como barras en el eje y etiquetadas como "Altura" y "Peso" en el eje x.

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Calcular la media de altura y peso
media_altura = altura.mean()
media_peso = peso.mean()

# Etiquetas para las barras
etiquetas = ['Altura', 'Peso']
valores = [media_altura, media_peso]

# Crear el gráfico de barras
plt.bar(etiquetas, valores)

# Etiquetas y título del gráfico
plt.xlabel('Variable')
plt.ylabel('Media')
plt.title('Media de Altura y Peso')

# Mostrar el gráfico
plt.show()

Barras horizontales
Este código utiliza la función plt.barh para crear un gráfico de barras horizontales con las medias de altura y peso representadas como barras en el eje x y etiquetadas como "Altura" y "Peso" en el eje y.

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Calcular la media de altura y peso
media_altura = altura.mean()
media_peso = peso.mean()

# Etiquetas para las barras
etiquetas = ['Altura', 'Peso']
valores = [media_altura, media_peso]

# Crear el gráfico de barras horizontales
plt.barh(etiquetas, valores)

# Etiquetas y título del gráfico
plt.xlabel('Media')
plt.ylabel('Variable')
plt.title('Media de Altura y Peso')

# Mostrar el gráfico
plt.show()

4.3 Mediana
En este código, primero convertimos los datos de altura y peso en arrays de numpy. Luego, utilizamos la función np.median para calcular la mediana de altura y peso. Los resultados se imprimen en la consola con las líneas "Mediana de Altura:" y "Mediana de Peso:"
# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular la mediana de altura y peso
mediana_altura = np.median(altura)
mediana_peso = np.median(peso)

# Imprimir las medianas
print("Mediana de Altura:", mediana_altura)
print("Mediana de Peso:", mediana_peso)

Mediana de Altura: 169.5
Mediana de Peso: 66.55

4.4 Barras emparejadas

En este código, primero calculamos la media y la mediana de altura y peso utilizando numpy y statistics. Luego, creamos un gráfico de barras emparejadas con barras que representan el promedio y la mediana de cada variable.

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular la media y la mediana de altura y peso
media_altura = altura.mean()
media_peso = peso.mean()
mediana_altura = np.median(altura)
mediana_peso = np.median(peso)

# Etiquetas para las barras
etiquetas = ['Altura', 'Peso']
promedios = [media_altura, media_peso]
medianas = [mediana_altura, mediana_peso]

# Posiciones para las barras
x = np.arange(len(etiquetas))
ancho = 0.35

# Crear el gráfico de barras emparejadas
fig, ax = plt.subplots()
bar1 = ax.bar(x - ancho/2, promedios, ancho, label='Promedio')
bar2 = ax.bar(x + ancho/2, medianas, ancho, label='Mediana')

# Etiquetas y título del gráfico
ax.set_xlabel('Variable')
ax.set_ylabel('Valor')
ax.set_title('Promedio y Mediana de Altura y Peso')
ax.set_xticks(x)
ax.set_xticklabels(etiquetas)
ax.legend()

# Mostrar el gráfico
plt.show()



4.5 Moda
El valor o valores que mas se repite

En este código, primero importamos la biblioteca statistics. Luego, calculamos la moda de los datos de altura y peso utilizando la función statistics.mode. Ten en cuenta que si hay más de un valor que se repite con la misma frecuencia máxima, la función mode devolverá uno de esos valores, pero no todos. Los resultados se imprimen en la consola con las líneas "Moda de Altura:" y "Moda de Peso:"

import statistics

# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Calcular la moda de altura y peso
moda_altura = statistics.mode(altura_datos)
moda_peso = statistics.mode(peso_datos)

# Imprimir las modas
print("Moda de Altura:", moda_altura)
print("Moda de Peso:", moda_peso)

Moda de Altura: 166.7
Moda de Peso: 62.7

5. Calculo de dispersiones: rango, varianza y desviacion estandar

La diferrencia entre el valor maximo y el valor minimo de los datos

5.1 Rango

Este código creará un DataFrame con las columnas "Variable", "Máximo", "Mínimo" y "Rango" para Altura y Peso. Luego, imprimirá el DataFrame que muestra el máximo, mínimo y rango de ambas variables. Asegúrate de tener la biblioteca pandas instalada para ejecutar este código.
# Datos de altura y peso
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en arrays de numpy
altura = np.array(altura_datos)
peso = np.array(peso_datos)

# Calcular el máximo y mínimo de altura y peso
max_altura = np.max(altura)
min_altura = np.min(altura)
max_peso = np.max(peso)
min_peso = np.min(peso)

# Calcular el rango de altura y peso
rango_altura = max_altura - min_altura
rango_peso = max_peso - min_peso

# Crear un DataFrame con los resultados
data = {'Variable': ['Altura', 'Peso'],
        'Máximo': [max_altura, max_peso],
        'Mínimo': [min_altura, min_peso],
        'Rango': [rango_altura, rango_peso]}

df = pd.DataFrame(data)

# Imprimir el DataFrame
print(df)

 Variable  Máximo  Mínimo  Rango
0   Altura   185.4   146.5   38.9
1     Peso   103.1    45.5   57.6

5.2 Rango intercuartil

La diferencia entre el dato del tercer cuartil y e dato del primer cuartil 

Este código calcula el IQR de los datos de peso utilizando los percentiles Q1 y Q3 y luego imprime el resultado. El IQR es una medida de dispersión que indica la variabilidad en el conjunto de datos.

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en un array de numpy
peso = np.array(peso_datos)

# Calcular el primer cuartil (Q1)
q1 = np.percentile(peso, 25)

# Calcular el tercer cuartil (Q3)
q3 = np.percentile(peso, 75)

# Calcular la mediana (Q2)
q2 = np.percentile(peso, 50)

# Calcular el rango intercuartil (IQR)
iqr = q3 - q1

# Redondear los valores a dos decimales
q1 = round(q1, 2)
q2 = round(q2, 2)
q3 = round(q3, 2)
iqr = round(iqr, 2)

# Imprimir los valores de los cuartiles y el IQR
print("Primer Cuartil (Q1):", q1)
print("Segundo Cuartil (Q2 o Mediana):", q2)
print("Tercer Cuartil (Q3):", q3)
print("Rango Intercuartil (IQR):", iqr)

Primer Cuartil (Q1): 59.28
Segundo Cuartil (Q2 o Mediana): 66.55
Tercer Cuartil (Q3): 76.91
Rango Intercuartil (IQR): 17.64


Este código calcula y muestra los valores de los cuartiles Q1, Q2 (que es la mediana) y Q3 de s datos de altura. Los resultados se imprimen en la consola.

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en un array de numpy
altura = np.array(altura_datos)

# Calcular el primer cuartil (Q1)
q1 = np.percentile(altura, 25)

# Calcular el tercer cuartil (Q3)
q3 = np.percentile(altura, 75)

# Calcular la mediana (Q2)
q2 = np.percentile(altura, 50)

# Calcular el rango intercuartil (IQR)
iqr = q3 - q1

# Redondear los valores a dos decimales
q1 = round(q1, 2)
q2 = round(q2, 2)
q3 = round(q3, 2)
iqr = round(iqr, 2)

# Imprimir los valores de los cuartiles y el IQR redondeados
print("Primer Cuartil (Q1):", q1)
print("Segundo Cuartil (Q2 o Mediana):", q2)
print("Tercer Cuartil (Q3):", q3)
print("Rango Intercuartil (IQR):", iqr)

Primer Cuartil (Q1): 161.6
Segundo Cuartil (Q2 o Mediana): 169.5
Tercer Cuartil (Q3): 174.95
Rango Intercuartil (IQR): 13.35

5.3 Diagrama intercuartil

Este código creará dos gráficos de caja separados para los datos de peso y altura, mostrando la distribución de los datos y los valores atípicos si los hubiera.

# Datos de peso y altura
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Crear un gráfico de caja para los datos de peso
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.boxplot(peso_datos)
plt.title("Diagrama de Caja de Peso")
plt.ylabel("Peso")

# Crear un gráfico de caja para los datos de altura
plt.subplot(1, 2, 2)
plt.boxplot(altura_datos)
plt.title("Diagrama de Caja de Altura")
plt.ylabel("Altura")

plt.tight_layout()
plt.show()


5.4 Valores atipicos

Los valores fuera del intervalo [Q1-1.5 IQR, Q3 + 1.5 IQR]

Este código calculará y mostrará los valores atípicos en los datos de peso y altura utilizando la regla del rango intercuartil (IQR). También mostrará un gráfico de caja para visualizar la distribución de los datos y los valores atípicos si los hubiera.

# Datos de peso y altura
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en arrays de numpy
peso = np.array(peso_datos)
altura = np.array(altura_datos)

# Calcular el rango intercuartil (IQR) para peso y altura
iqr_peso = np.percentile(peso, 75) - np.percentile(peso, 25)
iqr_altura = np.percentile(altura, 75) - np.percentile(altura, 25)

# Calcular los límites para identificar valores atípicos
limite_inferior_peso = np.percentile(peso, 25) - 1.5 * iqr_peso
limite_superior_peso = np.percentile(peso, 75) + 1.5 * iqr_peso
limite_inferior_altura = np.percentile(altura, 25) - 1.5 * iqr_altura
limite_superior_altura = np.percentile(altura, 75) + 1.5 * iqr_altura

# Encontrar valores atípicos
valores_atipicos_peso = (peso < limite_inferior_peso) | (peso > limite_superior_peso)
valores_atipicos_altura = (altura < limite_inferior_altura) | (altura > limite_superior_altura)

# Mostrar los valores atípicos
print("Valores atípicos en Peso:")
print(peso[valores_atipicos_peso])

print("\nValores atípicos en Altura:")
print(altura[valores_atipicos_altura])

# Crear un gráfico de caja para peso y altura
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.boxplot(peso_datos)
plt.title("Diagrama de Caja de Peso")

plt.subplot(1, 2, 2)
plt.boxplot(altura_datos)
plt.title("Diagrama de Caja de Altura")

plt.tight_layout()
plt.show()

Valores atípicos en Peso:
[]

Valores atípicos en Altura:
[]

5.5 Varianza 

Este código calculará y mostrará la varianza de los datos de peso y altura. La varianza representa la dispersión de los datos en relación con su media.
# Datos de peso y altura
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en arrays de numpy
peso = np.array(peso_datos)
altura = np.array(altura_datos)

# Calcular la varianza de peso y altura
varianza_peso = np.var(peso, ddof=0)  # ddof=0 para población completa
varianza_altura = np.var(altura, ddof=0)

# Redondear la varianza a dos decimales
varianza_peso = round(varianza_peso, 2)
varianza_altura = round(varianza_altura, 2)

# Mostrar la varianza redondeada
print("Varianza de Peso:", varianza_peso)
print("Varianza de Altura:", varianza_altura)

Varianza de Peso: 125.5
Varianza de Altura: 68.9

Este código calculará la varianza poblacional y muestral para los datos de peso, y los resultados estarán redondeados a dos decimales.

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en un array de numpy
peso = np.array(peso_datos)

# Calcular la media
media_peso = np.mean(peso)

# Calcular la varianza poblacional y muestral
varianza_poblacional = np.var(peso)
varianza_muestral = np.var(peso, ddof=1)  # ddof=1 para muestra

# Redondear las varianzas a dos decimales
varianza_poblacional = round(varianza_poblacional, 2)
varianza_muestral = round(varianza_muestral, 2)

# Mostrar las varianzas redondeadas
print("Varianza Poblacional de Peso:", varianza_poblacional)
print("Varianza Muestral de Peso:", varianza_muestral)

Varianza Poblacional de Peso: 125.5
Varianza Muestral de Peso: 126.77


Este código calculará la varianza poblacional y muestral para los datos de altura y los resultados estarán redondeados a dos decimales.

# Convertir los datos en un array de numpy
altura = np.array(altura_datos)

# Calcular la varianza poblacional y muestral
varianza_poblacional_altura = np.var(altura)
varianza_muestral_altura = np.var(altura, ddof=1)  # ddof=1 para muestra

# Redondear las varianzas a dos decimales
varianza_poblacional_altura = round(varianza_poblacional_altura, 2)
varianza_muestral_altura = round(varianza_muestral_altura, 2)

# Mostrar las varianzas redondeadas
print("Varianza Poblacional de Altura:", varianza_poblacional_altura)
print("Varianza Muestral de Altura:", varianza_muestral_altura)

Varianza Poblacional de Altura: 68.9
Varianza Muestral de Altura: 69.59

5.6 Desviacion estandar 

Este código calculará la desviación estándar poblacional y muestral para los datos de peso y los resultados estarán redondeados a dos decimales.
# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Convertir los datos en un array de numpy
peso = np.array(peso_datos)

# Calcular la desviación estándar poblacional y muestral
desviacion_poblacional_peso = np.std(peso)
desviacion_muestral_peso = np.std(peso, ddof=1)  # ddof=1 para muestra

# Redondear las desviaciones estándar a dos decimales
desviacion_poblacional_peso = round(desviacion_poblacional_peso, 2)
desviacion_muestral_peso = round(desviacion_muestral_peso, 2)

# Mostrar las desviaciones estándar redondeadas
print("Desviación Estándar Poblacional de Peso:", desviacion_poblacional_peso)
print("Desviación Estándar Muestral de Peso:", desviacion_muestral_peso)

Desviación Estándar Poblacional de Peso: 11.2
Desviación Estándar Muestral de Peso: 11.26

Este código calculará la desviación estándar poblacional y muestral para los datos de altura y los resultados estarán redondeados a dos decimales.

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en un array de numpy
altura = np.array(altura_datos)

# Calcular la desviación estándar poblacional y muestral
desviacion_poblacional_altura = np.std(altura)
desviacion_muestral_altura = np.std(altura, ddof=1)  # ddof=1 para muestra

# Redondear las desviaciones estándar a dos decimales
desviacion_poblacional_altura = round(desviacion_poblacional_altura, 2)
desviacion_muestral_altura = round(desviacion_muestral_altura, 2)

# Mostrar las desviaciones estándar redondeadas
print("Desviación Estándar Poblacional de Altura:", desviacion_poblacional_altura)
print("Desviación Estándar Muestral de Altura:", desviacion_muestral_altura)

Desviación Estándar Poblacional de Altura: 8.3
Desviación Estándar Muestral de Altura: 8.34


Este código creará una tabla que muestra la varianza poblacional y muestral para los datos de peso y altura, con los valores redondeados a dos decimales.

# Datos de peso y altura
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en arrays de numpy
peso = np.array(peso_datos)
altura = np.array(altura_datos)

# Calcular la varianza poblacional y muestral para peso y altura
varianza_poblacional_peso = np.var(peso)
varianza_muestral_peso = np.var(peso, ddof=1)  # ddof=1 para muestra
varianza_poblacional_altura = np.var(altura)
varianza_muestral_altura = np.var(altura, ddof=1)  # ddof=1 para muestra

# Crear un DataFrame para mostrar los resultados
data = {
    'Variable': ['Peso', 'Peso', 'Altura', 'Altura'],
    'Tipo de Varianza': ['Poblacional', 'Muestral', 'Poblacional', 'Muestral'],
    'Valor de Varianza': [varianza_poblacional_peso, varianza_muestral_peso, varianza_poblacional_altura, varianza_muestral_altura]
}

tabla_varianza = pd.DataFrame(data)

# Redondear los valores a dos decimales
tabla_varianza['Valor de Varianza'] = tabla_varianza['Valor de Varianza'].round(2)

# Mostrar la tabla de varianza
print(tabla_varianza)


  Variable Tipo de Varianza  Valor de Varianza
0     Peso      Poblacional             125.50
1     Peso         Muestral             126.77
2   Altura      Poblacional              68.90
3   Altura         Muestral              69.59


Este código calculará la desviación estándar de los datos de altura y luego aplicará la regla 68-95-99.7 para mostrar cuántos datos caen dentro de una, dos y tres desviaciones estándar de la media.

# Datos de altura
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Convertir los datos en un array de numpy
altura = np.array(altura_datos)

# Calcular la desviación estándar
desviacion_estandar_altura = np.std(altura)

# Aplicar la regla 68-95-99.7
un_desviacion = desviacion_estandar_altura
dos_desviaciones = 2 * desviacion_estandar_altura
tres_desviaciones = 3 * desviacion_estandar_altura

print("Desviación Estándar de Altura:", desviacion_estandar_altura)
print("Aproximadamente el 68% de los datos caen dentro de {:.2f} cm de la media.".format(un_desviacion))
print("Alrededor del 95% de los datos caen dentro de {:.2f} cm de la media.".format(dos_desviaciones))
print("Casi el 99.7% de los datos caen dentro de {:.2f} cm de la media.".format(tres_desviaciones))

Desviación Estándar de Altura: 8.300391014885987
Aproximadamente el 68% de los datos caen dentro de 8.30 cm de la media.
Alrededor del 95% de los datos caen dentro de 16.60 cm de la media.
Casi el 99.7% de los datos caen dentro de 24.90 cm de la media.


Este código calculará la desviación estándar para los datos de peso, aplicará la regla 68-95-99.7 y redondeará los valores a dos decimales.

# Datos de peso
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]

# Calcular la desviación estándar
desviacion_estandar_peso = np.std(peso_datos, ddof=0)  # Desviación estándar poblacional

# Calcular los valores para la regla 68-95-99.7
un_desviacion = desviacion_estandar_peso
dos_desviaciones = 2 * desviacion_estandar_peso
tres_desviaciones = 3 * desviacion_estandar_peso

# Redondear los valores a dos decimales
desviacion_estandar_peso = round(desviacion_estandar_peso, 2)
un_desviacion = round(un_desviacion, 2)
dos_desviaciones = round(dos_desviaciones, 2)
tres_desviaciones = round(tres_desviaciones, 2)

# Mostrar los resultados
print("Desviación Estándar de Peso:", desviacion_estandar_peso)
print("Aproximadamente el 68% de los datos caen dentro de ±{} del valor medio.".format(un_desviacion))
print("Aproximadamente el 95% de los datos caen dentro de ±{} del valor medio.".format(dos_desviaciones))
print("Casi el 99.7% de los datos caen dentro de ±{} del valor medio.".format(tres_desviaciones))

Desviación Estándar de Peso: 11.2
Aproximadamente el 68% de los datos caen dentro de ±11.2 del valor medio.
Aproximadamente el 95% de los datos caen dentro de ±22.41 del valor medio.
Casi el 99.7% de los datos caen dentro de ±33.61 del valor medio.

6. Comparacion indices de masa corporal

6.1 Indices de masa corporal (IMC)

El peso dividido entre el cuadrado de la altura 

El siguiente código toma tus datos de IMC, calcula el promedio utilizando np.mean y luego imprime el resultado. Puedes ajustar los datos de IMC según tus necesidades antes de ejecutar el código.
# Ejemplo con tus datos de IMC
imc = [round(peso / ((altura / 100) ** 2), 2) for peso, altura in zip(peso_datos, altura_datos)]

# Calcular el promedio de IMC
promedio_imc = np.mean(imc)

# Imprimir el promedio
print("Promedio de IMC:", round(promedio_imc, 2))

Promedio de IMC: 23.62

6.2 Rangos de IMC

Este código mostrará las categorías de IMC junto con las etiquetas numéricas de los jugadores. 
def clasificar_imc(imc):
    if imc < 18.5:
        return "Bajo peso"
    elif 18.5 <= imc < 25:
        return "Peso saludable"
    elif 25 <= imc < 30:
        return "Sobrepeso"
    else:
        return "Obesidad"

# Ejemplo con tus datos de IMC
imc = [round(peso / ((altura / 100) ** 2), 2) for peso, altura in zip(peso_datos, altura_datos)]

# Clasificar los valores de IMC en categorías
categorias_imc = [clasificar_imc(valor) for valor in imc]

# Mostrar las categorías correspondientes junto con las etiquetas numéricas
for i, categoria in enumerate(categorias_imc):
    print(f"Jugador {i+1}: IMC {imc[i]} - Categoría: {categoria}")
Jugador 1: IMC 21.2 - Categoría: Peso saludable
Jugador 2: IMC 20.49 - Categoría: Peso saludable
Jugador 3: IMC 20.56 - Categoría: Peso saludable
Jugador 4: IMC 20.93 - Categoría: Peso saludable
Jugador 5: IMC 20.82 - Categoría: Peso saludable
Jugador 6: IMC 20.87 - Categoría: Peso saludable
Jugador 7: IMC 20.88 - Categoría: Peso saludable
Jugador 8: IMC 20.89 - Categoría: Peso saludable
Jugador 9: IMC 20.91 - Categoría: Peso saludable
Jugador 10: IMC 20.92 - Categoría: Peso saludable
Jugador 11: IMC 20.8 - Categoría: Peso saludable
Jugador 12: IMC 20.88 - Categoría: Peso saludable
Jugador 13: IMC 21.35 - Categoría: Peso saludable......

Ahora, el código corregido crea tanto la tabla tabla_imc como su versión transpuesta. 
# Ejemplo con los datos de IMC
imc = [round(peso / ((altura / 100) ** 2), 2) for peso, altura in zip(peso_datos, altura_datos)]

# Definir los límites de los rangos de IMC
rangos_imc = [0, 17.5, 24, 29, 30, max(imc) + 1]

# Etiquetas de clasificación correspondientes a cada rango de IMC (incluyendo el último rango)
clasificacion_imc = ["Bajo peso", "Peso normal", "Sobrepeso", "Obesidad", "Obesidad"]

# Calcular el conteo en cada rango de IMC
conteo_imc, _ = np.histogram(imc, bins=rangos_imc)

# Calcular los porcentajes
porcentajes_imc = [(conteo / len(imc)) * 100 for conteo in conteo_imc]

# Crear un DataFrame de pandas para mostrar los resultados
tabla_imc = pd.DataFrame({
    'Rango de IMC': [f"{rangos_imc[i]}-{rangos_imc[i+1]-0.01}" for i in range(len(rangos_imc) - 1)],
    'Clasificación de IMC': clasificacion_imc,
    'Porcentaje': porcentajes_imc
})

# Mostrar la tabla
print(tabla_imc)

# Transponer la tabla
tabla_imc_transpuesta = tabla_imc.transpose()

# Mostrar la tabla transpuesta
print(tabla_imc_transpuesta)

            Rango de IMC Clasificación de IMC  Porcentaje
0                0-17.49            Bajo peso                0.0
1             17.5-23.99          Peso normal            63.0
2               24-28.99           Sobrepeso               36.0
3               29-29.99           Obesidad                 1.0
4  30-30.979999999999997             Obesidad         0.0
                              0            1          2         3  \
Rango de IMC            0-17.49   17.5-23.99   24-28.99  29-29.99   
Clasificación de IMC  Bajo peso  Peso normal  Sobrepeso  Obesidad   
Porcentaje                  0.0         63.0       36.0       1.0   

                                          4  
Rango de IMC          30-30.979999999999997  
Clasificación de IMC               Obesidad  
Porcentaje                              0.0  

6.3 Barras apiladas 

Este código genera un gráfico de barras apiladas con los datos proporcionados, teniendo en cuenta las etiquetas de Clasificación de IMC y los porcentajes correspondientes.

import matplotlib.pyplot as plt
import pandas as pd

def grafico_barras_apiladas(datos):
    etiquetas_imc = datos['Clasificación de IMC'].unique()
    colores = ['b', 'g', 'r', 'c', 'm']
    indices = range(len(etiquetas_imc))
    
    datos = datos.pivot(index='Rango de IMC', columns='Clasificación de IMC', values='Porcentaje')

    datos.plot(kind='bar', stacked=True, color=colores, width=0.7)
    
    plt.xticks(indices, etiquetas_imc, rotation=0)
    plt.xlabel('Rango de IMC')
    plt.ylabel('Porcentaje')
    plt.title('Porcentajes por Clasificación de IMC')
    
    plt.legend(title='Clasificación de IMC')
    
    plt.show()

# Ejemplo de uso con los datos proporcionados
datos = pd.DataFrame({
    'Rango de IMC': ['0-17.49', '17.5-23.99', '24-28.99', '29-29.99', '30-30.98'],
    'Clasificación de IMC': ['Bajo peso', 'Peso normal', 'Sobrepeso', 'Obesidad', 'Obesidad'],
    'Porcentaje': [0.0, 63.0, 36.0, 1.0, 0.0]
})

grafico_barras_apiladas(datos)


7. Almacenado 

7.1 Guardado de archivos

Este código creará un archivo CSV llamado "datos_imc.csv" en el directorio actual y guardará los datos de peso, altura e IMC en ese archivo. 

# Datos de peso y altura
peso_datos = [45.5, 46.4, 47.2, 49.0, 50.6, 50.8, 51.0, 51.3, 51.54, 51.7, 52.0, 52.2, 53.5, 53.6, 53.9, 54.1, 55.4, 55.7, 55.8, 56.3, 56.9, 57.1, 57.2, 57.7, 58.9, 59.4, 60.5, 60.5, 61.0, 62.4, 62.7, 62.7, 62.7, 63.1, 63.3, 63.36, 63.7, 63.7, 64.0, 64.2, 65.1, 65.4, 65.7, 65.9, 66.1, 66.2, 66.2, 66.2, 66.4, 66.5, 66.6, 67.3, 67.5, 67.7, 67.9, 68.7, 69.3, 69.8, 70.6, 70.6, 70.7, 70.7, 70.9, 71.1, 71.5, 71.7, 72.0, 73.1, 74.3, 75.0, 75.2, 75.24, 75.4, 75.5, 76.82, 77.2, 77.2, 77.6, 78.0, 78.0, 78.4, 78.46, 78.8, 79.0, 79.5, 79.5, 79.7, 80.0, 80.5, 81.3, 82.1, 83.6, 84.4, 84.5, 84.5, 84.6, 84.9, 86.4, 88.6, 103.1]
altura_datos = [146.5, 150.5, 151.5, 153.0, 155.9, 156.0, 156.3, 156.7, 157.0, 157.2, 158.1, 158.1, 158.3, 158.4, 158.6, 159.0, 159.0, 159.1, 159.5, 159.5, 159.6, 159.8, 160.2, 160.2, 161.3, 161.7, 161.8, 162.4, 162.7, 164.0, 164.1, 164.2, 164.2, 164.4, 164.5, 165.0, 165.0, 165.4, 166.6, 166.7, 166.7, 166.7, 166.8, 168.0, 168.3, 168.5, 168.9, 169.0, 169.2, 169.2, 169.8, 169.9, 170.0, 170.0, 170.4, 170.9, 171.0, 171.2, 171.5, 171.9, 172.1, 172.1, 172.2, 172.3, 172.5, 172.7, 173.0, 173.3, 173.6, 173.8, 174.0, 174.1, 174.2, 174.5, 174.9, 175.1, 175.3, 175.4, 175.7, 175.8, 175.8, 176.0, 176.4, 176.7, 177.0, 177.5, 177.6, 177.6, 178.0, 178.4, 178.5, 179.0, 179.6, 179.9, 180.1, 180.1, 181.0, 183.6, 185.0, 185.4]

# Calcular el IMC para cada par de peso y altura
imc_datos = [round(peso / ((altura / 100) ** 2), 2) for peso, altura in zip(peso_datos, altura_datos)]

# Crear un DataFrame
data = {'Peso (kg)': peso_datos, 'Altura (cm)': altura_datos, 'IMC': imc_datos}
df = pd.DataFrame(data)

# Guardar en un archivo CSV
df.to_csv('datos_imc.csv', index=False)

Asegúrate de especificar la ruta correcta del archivo CSV en la variable ruta_archivo para que el código funcione correctamente. El código anterior leerá los datos del archivo CSV y los almacenará en un DataFrame de pandas, lo que te permitirá trabajar con los datos de manera eficiente. Puedes utilizar el DataFrame df para realizar diversas operaciones y análisis de datos según tus necesidades.

# Especifica la ruta del archivo CSV
ruta_archivo = 'datos_imc.csv'

# Lee el archivo CSV en un DataFrame
df = pd.read_csv(ruta_archivo)

# Muestra el contenido del DataFrame
print(df)
output
    Peso (kg)  Altura (cm)    IMC
0        45.5        146.5  21.20
1        46.4        150.5  20.49
2        47.2        151.5  20.56
3        49.0        153.0  20.93
4        50.6        155.9  20.82
..        ...          ...    ...
95       84.6        180.1  26.08
96       84.9        181.0  25.91
97       86.4        183.6  25.63
98       88.6        185.0  25.89
99      103.1        185.4  29.99

[100 rows x 3 columns]


Referencias 

Batanero, C. y Díaz, C. (2011). Estadística con proyectos. Granada, España: Universidad de Granada. Versión en línea: http://www.ugr.es/~batanero/pages/ARTICULOS/Libroproyectos.pdf 

Batanero, C., Garfield, J., Ottaviani, M. y Truran, A. (s.f). Investigación en Educación Estadística: Algunas Cuestiones Prioritarias. Consultado en: www.ugr.es/~batanero/pages/ARTICULOS/Investiga.pdf 

Gamboa, R. (2007). Uso de la tecnología en la enseñanza de las matemáticas. Cuadernos en investigación y formación en educación matemática, 2 (3), 11-44 

Monge, C. y Sánchez, S. (2015). Enseñanza de la inferencia estadística usando GeoGebra. Acapulco, México: Memorias del XXX Foro Internacional de Estadística


No hay comentarios:

Publicar un comentario