# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Exploratory data Analysis

import pandas as pd

dados = pd.read_csv('dados/tips.csv')
dados.head(5)

dados.columns

traducao = {
    'total_bill' : 'valor_da_conta',
    'tip' : 'gorjeta',
    'dessert' : 'sobremesa',
    'day' : 'dia_da_semana',
    'time' : 'hora_do_dia',
    'size' : 'total_de_pessoas'
}

gorjetas = dados.rename(columns = traducao)

gorjetas

gorjetas.sobremesa.value_counts()

sim_nao = {
    'No' : 'Não',
    'Yes' : 'Sim'
}
gorjetas.sobremesa.replace(sim_nao, inplace = True)
gorjetas

gorjetas.sobremesa.value_counts(normalize = True)

gorjetas.dia_da_semana.unique()

dias = {'Sun' : 'domingo',
        'Sat' : 'Sábado',
        'Thur' : 'Quinta',
        'Fri' : 'Sexta'
}
gorjetas.dia_da_semana.replace(dias, inplace = True)

gorjetas.hora_do_dia.unique()

hora ={
    'Dinner' : 'Jantar',
    'Lunch' : 'Almoço'
}
gorjetas.hora_do_dia.replace(hora, inplace =True)
gorjetas

import seaborn as sns

sns.__version__

# # Análise 1: Valor da conta e gorjeta

sns.set_style('darkgrid')
ax = sns.scatterplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, hue = 'sobremesa')
ax.set_title('gráfico valor da conta x gorjeta', loc = 'left', fontsize = 18);
ax.figure.set_size_inches(7,5)

# Visualmente olhando o gráfico parace que quanto maior o valor da conta, também é maior o valor da gorjeta!
#

print(f'a nossa base de dados contém: {gorjetas.shape[0]} \n')
print(f'e ela apresenta um total de registros nulos igual a {gorjetas.isna().sum().sum()}')

gorjetas.info()

# ### Criando o atributo porcentagem, que será a divisão da gorjeta dada referente ao valor da conta

gorjetas['porcentagem'] = gorjetas.gorjeta / gorjetas.valor_da_conta

gorjetas.porcentagem = gorjetas.porcentagem.round(2)

gorjetas

ax = sns.scatterplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas)

# visualmente o valor da conta não é proporcional ao valor da gorjeta

# ### utilizando outros metodos do seaborn como relplot

ax = sns.relplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas, kind = 'line')

ax = sns.lmplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas)
ax.set_ylabels('olá')

grafico1 = ax.fig

grafico1.savefig('teste-salvando-gráfico.png')

ax.savefig('teste.png')

ax.fig

# # Análise 2 - Sobremesa

selecao = (gorjetas.sobremesa == 'Sim') 
gorjetas[selecao].describe()

gorjetas[~selecao].describe()

sns.catplot(x = 'sobremesa', y = 'gorjeta', data = gorjetas)

sns.relplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, hue = 'sobremesa')

import matplotlib.pyplot as plt

sns.relplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, col = 'sobremesa', hue = 'sobremesa')

sns.lmplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, col = 'sobremesa', hue = 'sobremesa')

sns.lmplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas, col = 'sobremesa', hue = 'sobremesa')

# visualmente existe uma diferença no valor da gorjeta dos que pediram sobremesa e dos que não pediram

sns.relplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, col = 'sobremesa', hue = 'sobremesa', kind = 'line')

# ## Teste de hipótese (gorjeta x sobremesa)

# ### H <sup>null</sup> -> **a distribuição da gorjeta é a mesma nos dois cenários da sobremesa**
# ### H <sup>alt</sup> -> **a distribuição da gorjeta não é a mesma nos dois cenários da sobremesa**

from scipy.stats import ranksums

sobremesa = gorjetas.query("sobremesa == 'Sim'").porcentagem
sem_sobremesa = gorjetas.query("sobremesa == 'Não'").porcentagem

ranksums(sobremesa, sem_sobremesa)

# olhando para o nosso p-valor vemos que nosso hipótese alternativa não tem relevância na nossa população pois o p=valor deu acima de 0.05

sns.catplot(x = 'dia_da_semana', y = 'valor_da_conta', data = gorjetas)

sns.relplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, hue = 'dia_da_semana')

sns.relplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, hue = 'dia_da_semana', col = 'dia_da_semana')

sns.lmplot(x = 'valor_da_conta', y = 'gorjeta', data = gorjetas, hue = 'dia_da_semana', col = 'dia_da_semana')

sns.relplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas, hue = 'dia_da_semana', col = 'dia_da_semana')

sns.lmplot(x = 'valor_da_conta', y = 'porcentagem', data = gorjetas, hue = 'dia_da_semana', col = 'dia_da_semana')

# # Análise descritiva dos dados

# **Média das gorjetas e média por dia das gorjetas**

round(gorjetas.gorjeta.mean(), 2)

gorjetas.groupby(['dia_da_semana']).mean()

print('Frequência dos dias da semana no conjunto de dados')
gorjetas.dia_da_semana.value_counts()

# ### Teste de hipótese

# #### H null - > a distribuição do valor da conta é igual no sábado e no domingo
# #### H alt - > a distribuição do valor da conta é não igual no sábado e no domingo

valor_da_conta_domingo = gorjetas.query("dia_da_semana == 'domingo'").valor_da_conta

valor_da_conta_sabado = gorjetas.query("dia_da_semana == 'Sábado'").valor_da_conta

ranksums(valor_da_conta_domingo, valor_da_conta_sabado)

# # Análise 4 - hora da refeição

sns.catplot(x = 'hora_do_dia', y = 'valor_da_conta', data = gorjetas)

sns.catplot(x = 'hora_do_dia', y = 'valor_da_conta', data = gorjetas, kind = 'swarm')

sns.violinplot(x = 'hora_do_dia', y = 'valor_da_conta', data = gorjetas)

sns.boxplot(x = 'hora_do_dia', y = 'valor_da_conta', data = gorjetas)

almoco = gorjetas.query("hora_do_dia == 'Almoço'").valor_da_conta
sns.histplot(almoco)

jantar = gorjetas.query("hora_do_dia == 'Jantar'").valor_da_conta
sns.histplot(jantar)



StarcoderdataJupyterScriptsDedupFiltered