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)

# Definir o gráfico de influência
def grafico_influencia(data_frame, coluna, bins, labels, com_bins=True):
    # Armazenar os dados da coluna
    influencia = data_frame.loc[:, [coluna, 'DCV']]
    
    # Se os dados de "coluna" não forem como classe, então terá intervalos ("bins" e "labels")
    if com_bins:
        influencia[coluna] = pd.cut(influencia[coluna],
                                   bins=bins,
                                   labels=labels)
        
    # Escolher uma das cores para o gráfico
    cor = np.random.choice(cores, 1)[0]
    
    # Determinar o tamanho da figura
    plt.figure(figsize=(15, 5))
    
    # Criar o gráfico
    grafico = sns.pointplot(x=coluna, y='DCV', dodge=0.1, capsize=.1, data=influencia, color=cor)
    
    # Colocar o título do gráfico
    grafico.set_title(f'{coluna} influência', fontsize=25)

grafico_influencia(dados, 'Colesterol', [0, 150, 200, 250, 300, 350, 400, 1000], ['0-150', '150-200', '200-250', '250-300', '300-350', '350-400', '400+'])