image_output_1.png
from matplotlib import style

from matplotlib.gridspec import GridSpec

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import seaborn as sns

arquivo = '../input/heart-failure-prediction/heart.csv'
dados = pd.read_csv(arquivo)
dados

trocar_nomes = {'Age': 'Idade', 'Sex': 'Sexo', 'ChestPainType': 'Tipo de dor', 'RestingBP': 'Pressão', 'Cholesterol': 'Colesterol', 'FastingBS': 'Glicemia', 'RestingECG': 'Eletro', 'MaxHR': 'BPM', 'ExerciseAngina': 'Dor por exec.', 'ST_Slope': 'Incl. ST', 'HeartDisease': 'DCV'}
dados = dados.rename(columns=trocar_nomes)
dados

dados.describe().T

dados = dados[dados['Colesterol'] != 0]
dados = dados[dados['Pressão'] != 0]

dados.describe().T

sns.set_theme()
style.use('fivethirtyeight')

cores = ['lightcoral', 'deepskyblue', 'orchid', 'tomato', 'teal', 'darkcyan', 'limegreen', 'darkorange']

# Definir a função do gráfico de pizza
def grafico_pizza(data_frame, coluna, cores, explode, titulo, fonte):
    # Fazer contagem dos valores da coluna selecionada
    df = data_frame[coluna].value_counts()
    
    # Determinar o tamannho da plotagem
    plt.figure(figsize=(15, 10))
    
    # Criar o gráfico de pizza
    _, _, pacotes = plt.pie(df,
                            colors=cores,
                            labels=df.index,
                            explode=explode,
                            shadow=True,
                            startangle=90,
                            autopct='%1.1f%%',
                            textprops={'fontsize': fonte,
                                      'color': 'black',
                                      'weight': 'bold',
                                      'family': 'serif'})
    
    # Plotar o gráfico de pizza
    plt.setp(pacotes, color='white')
    
    # Colocar o título do gráfico
    plt.title(titulo, size=45)
    
    # Desenhar o círculo interno
    circulo_centro = plt.Circle((0, 0), 0.40, fc='white')
    fig = plt.gcf()
    fig.gca().add_artist(circulo_centro)

# Definir o gráfico da função de distribuição
def grafico_distribuicao(data_frame, coluna, titulo):
    # Armazenar os dados da coluna
    dados = data_frame[coluna]
    
    # Determinar a figura e seu tamanho
    fig = plt.figure(figsize=(17, 7))
    
    # Criar a grade em que os gráficos serão plotados
    grade = GridSpec(nrows=2, ncols=1, figure=fig)
    
    # Escolher uma das cores para o gráfico
    cor = np.random.choice(cores, 1)[0]
    
    # Motrar o valor de assimetria dos dados
    print(f'Assimetria de {titulo}: {np.round(dados.skew(), 3)}')
    
    # Plotar o histograma
    ax0 = fig.add_subplot(grade[0, :])
    ax0.set_title(f'Histograma e BoxPlot de {titulo}', y=1.05)
    sns.histplot(data=dados, ax=ax0, color=cor)
    
    # Plotar o BoxPlot
    ax1 = fig.add_subplot(grade[1, :])
    plt.axis('off')
    sns.boxplot(x=dados, ax=ax1, color=cor)

grafico_distribuicao(dados, 'Idade', 'Idade')