1
resposta

Classificação IMC

import pandas as pd

# Dados das pessoas
dados = {
    'Pessoa': ['Ana', 'Bruno', 'Carla', 'Daniel', 'Eduarda', 'Felipe', 'Gabriela', 'Henrique'],
    'Peso': [50, 80, 70, 95, 60, 110, 45, 130],
    'Altura': [1.60, 1.75, 1.68, 1.80, 1.55, 1.90, 1.50, 1.85]
}

# Criando o DataFrame
df_saude = pd.DataFrame(dados)

# Criar uma função chamada categoriza_imc que classifique o IMC nas seguintes categorias:
def categoriza_imc(imc):
    if imc < 18.5:
        return 'Abaixo do peso'
    elif imc <= 24.9:
        return 'Peso normal'
    elif imc <= 29.9:
        return 'Sobrepeso'
    elif imc <= 34.9:
        return 'Obesidade grau 1'
    elif imc <= 39.9:
        return 'Obesidade grau 2'
    else:
        return 'Obesidade grau 3'   

# Calcular o IMC para cada pessoa usando a fórmula:
df_saude['IMC'] = df_saude['Peso'] / (df_saude['Altura'] ** 2)
df_saude['Categoria_IMC'] = df_saude['IMC'].apply(categoriza_imc)

print(df_saude[['Pessoa', 'Peso', 'Altura', 'IMC','Categoria_IMC']])

Nota, o resultado da Eduarda arredonda e o resultado dela fica diferente da Saída esperada. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Marcelo! Tudo bom?

Excelente! Siga praticando com os desafios e sempre compartilhe conosco.

Você soube aplicar a função categoriza_imc de forma eficiente para classificar cada registro, aproveitou o método apply do pandas para mapear as categorias automaticamente e entendeu como o cálculo do IMC é essencial para análises rápidas de saúde em um conjunto de dados.

Como dica adicional, experimente utilizar pd.cut quando precisar discretizar valores contínuos em faixas. Assim:

import pandas as pd

dados = {
    'Pessoa': ['Ana', 'Bruno', 'Carla', 'Daniel', 'Eduarda', 'Felipe', 'Gabriela', 'Henrique'],
    'Peso': [50, 80, 70, 95, 60, 110, 45, 130],
    'Altura': [1.60, 1.75, 1.68, 1.80, 1.55, 1.90, 1.50, 1.85]
}

df_saude = pd.DataFrame(dados)
df_saude['IMC'] = df_saude['Peso'] / (df_saude['Altura'] ** 2)

df_saude['Categoria_IMC'] = pd.cut(
    df_saude['IMC'],
    bins=[0, 18.5, 24.9, 29.9, 34.9, 39.9, float('inf')],
    labels=[
        'Abaixo do peso',
        'Peso normal',
        'Sobrepeso',
        'Obesidade grau 1',
        'Obesidade grau 2',
        'Obesidade grau 3'
    ]
)

print(df_saude[['Pessoa', 'Peso', 'Altura', 'IMC','Categoria_IMC']])

Resultado:

indexPessoaPesoAlturaIMCCategoria_IMC
0Ana501.619.531249999999996Peso normal
1Bruno801.7526.122448979591837Sobrepeso
2Carla701.6824.801587301587304Peso normal
3Daniel951.829.320987654320987Sobrepeso
4Eduarda601.5524.97398543184183Sobrepeso
5Felipe1101.930.470914127423825Obesidade grau 1
6Gabriela451.520.0Peso normal
7Henrique1301.8537.983929875821765Obesidade grau 2

Repare que, dessa forma, a Eduarda foi categorizada da maneira esperada.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!