<jupyter_start><jupyter_text>**Conhecendo a nossa base de consumidores**Esse conteúdo faz parte da aceleração de Data Science da [Codenation](https://https://www.codenation.dev/).**Objetivo**Queremos conhecer melhor nossos clientes por estado. Para isso, iniciamos uma análise na pontuação de crédito. Para realizar a verificação inicial, precisamos de alguns valores. Os valores são a média, a mediana, a moda e o desvio padrão da pontuação de crédito.<jupyter_code># importando bibliotecas
!pip install missingno

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import seaborn as sns
import missingno as msno 

# configurando gráficos
sns.set_style('darkgrid')
sns.set_palette('Accent')<jupyter_output>Requirement already satisfied: missingno in /usr/local/lib/python3.6/dist-packages (0.4.2)
Requirement already satisfied: seaborn in /usr/local/lib/python3.6/dist-packages (from missingno) (0.10.1)
Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from missingno) (1.4.1)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from missingno) (3.2.2)
Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from missingno) (1.18.5)
Requirement already satisfied: pandas>=0.22.0 in /usr/local/lib/python3.6/dist-packages (from seaborn->missingno) (1.0.5)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->missingno) (0.10.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->missingno) (1.2.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib[...]<jupyter_text>Analisando os Dados do dataset<jupyter_code># carregando o dataset e visualizando as 5 primeiras entradas
df = pd.read_csv('desafio1.csv')
df.head()
df.drop(['RowNumber'], axis=1, inplace=True)
df.head()<jupyter_output><empty_output><jupyter_text>Dicionário de variáveisid: Identificador do cliente    sobrenome: Sobrenome do clientepontuacao_credito: Pontuação de crédito do cliente (quanto maior, melhor o cliente geralmente)estado_residencia: Estado de residência do clientegenero: Gênero do clientenivel_estabilidade: Nível de estabilidade do clientesaldo_conta: Saldo disponível na conta do clientenumero_produtos: Número de produtos que o cliente consomepossui_cartao_de_credito: Possui um cartão de crédito cadastradomembro_ativo: Membro acessa e consome frequentemente<jupyter_code># dimensões do DataFrame
print(f'Linhas: {df.shape[0]}')
print(f'Colunas: {df.shape[1]}')
df.info()
# verificando a existência de valores NaN
df.isna().any()
# visualização que confirma que não temos linhas com missiging values (NaN)
msno.bar (df, figsize = (10,5))
# resumo estatístico
df.describe()
# analisando as relações entre as variáveis
corr = df.corr()
corr<jupyter_output><empty_output><jupyter_text>![image.png](https://i0.wp.com/www.abgconsultoria.com.br/blog/wp-content/uploads/img2-2.png?w=1500)<jupyter_code>corr = df.corr()
sns.set_context("notebook", font_scale=1.0, rc={"lines.linewidth": 2.5})
plt.figure(figsize=(13,7))

mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask, 1)] = True
a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')
rotx = a.set_xticklabels(a.get_xticklabels(), rotation=90)
roty = a.set_yticklabels(a.get_yticklabels(), rotation=30)<jupyter_output><empty_output><jupyter_text>**1. Analisando cada variável separadamente**<jupyter_code>df.head(10)<jupyter_output><empty_output><jupyter_text>**1.01 - Pontuação Crédito**Pontuação de crédito do cliente.<jupyter_code>print('Valores únicos: {}'.format(df['pontuacao_credito'].nunique()))
# resumo estatístico
display(pd.DataFrame(df['pontuacao_credito'].describe()))

ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(df['pontuacao_credito'])
ax.set_title('Boxplot Pontuação Crédito', fontsize=18);<jupyter_output><empty_output><jupyter_text>Média pontuação de crédito por estado:<jupyter_code>df.groupby('estado_residencia').agg({'pontuacao_credito' : 'mean'})<jupyter_output><empty_output><jupyter_text>Média pontuação de crédito por gênero:<jupyter_code>df.groupby('genero').agg({'pontuacao_credito' : 'mean'})<jupyter_output><empty_output><jupyter_text>**1.02 - Estado Residência**Estado de residência do cliente<jupyter_code># resumo estatístico
pd.DataFrame(df['estado_residencia'].describe())
display(df['estado_residencia'].value_counts())

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='estado_residencia', data=df)
ax.set_title('Estados', fontsize=18);<jupyter_output><empty_output><jupyter_text>Gêneros por estado:<jupyter_code>display(df.groupby(['estado_residencia', 'genero']).agg({'genero' : 'count'}))

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='estado_residencia', data=df, hue='genero')
ax.set_title('Gêneros por Estado', fontsize=18);<jupyter_output><empty_output><jupyter_text>Média de idade por estado:<jupyter_code>df.groupby(['estado_residencia']).agg({'idade' : 'mean'})<jupyter_output><empty_output><jupyter_text>**1.03 - Gênero**Gênero do cliente.<jupyter_code># resumo estatístico
pd.DataFrame(df['genero'].describe())
display(df['genero'].value_counts())

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='genero', data=df)
ax.set_title('Gêneros', fontsize=18);<jupyter_output><empty_output><jupyter_text>Média idade por gênero:<jupyter_code>df.groupby('genero').agg({'idade' : 'mean'})<jupyter_output><empty_output><jupyter_text>Membros ativos por gênero:<jupyter_code>df.groupby(['genero', 'membro_ativo']).agg({'membro_ativo' : 'count'})<jupyter_output><empty_output><jupyter_text>**1.04 - Idade**Idade do cliente.<jupyter_code># resumo estatístico
display(pd.DataFrame(df['idade'].describe()))

ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(df['idade'])
ax.set_title('Boxplot Idade', fontsize=18);
# criando intervalo de idade
intervalo_idade = pd.cut(df['idade'], 5)
print(intervalo_idade)

df ['intervalo_idade'] = intervalo_idade
display(intervalo_idade.value_counts())

ax = plt.subplots(figsize=(10,6))
ax = sns.countplot(x='intervalo_idade', data=df)
ax.set_title('Idades', fontsize=18);<jupyter_output><empty_output><jupyter_text>**1.05 - Nível Estabilidade**Nível de estabilidade do cliente.<jupyter_code># resumo estatístico
display(pd.DataFrame(df['nivel_estabilidade'].describe()))

ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(df['nivel_estabilidade'])
ax.set_title('Boxplot Nível Estabilidade', fontsize=18);
display(df['nivel_estabilidade'].value_counts())

ax = plt.subplots(figsize=(10,6))
ax = sns.countplot(x='nivel_estabilidade', data=df, palette='GnBu_d')
ax.set_title('Nível Estabilidade', fontsize=18);<jupyter_output><empty_output><jupyter_text>**1.06 - Saldo Conta**Saldo disponível na conta do cliente<jupyter_code>display(pd.DataFrame(df['saldo_conta'].describe()))

ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(df['saldo_conta'])
ax.set_title('Boxplot Saldo Conta', fontsize=18);<jupyter_output><empty_output><jupyter_text>Média saldo na conta por gênero:<jupyter_code>df.groupby('genero').agg({'saldo_conta' : 'mean'})<jupyter_output><empty_output><jupyter_text>Média saldo na conta por estado:<jupyter_code>df.groupby('estado_residencia').agg({'saldo_conta' : 'mean'})<jupyter_output><empty_output><jupyter_text>Média saldo na conta por pontuação de crédito:<jupyter_code>df.groupby('pontuacao_credito').agg({'saldo_conta' : 'mean'}).round(2)<jupyter_output><empty_output><jupyter_text>Média saldo na conta por intervalo de idade:<jupyter_code>df.groupby('intervalo_idade').agg({'saldo_conta' : 'mean'}).round(2)
# criando um intervalo de valores para saldo na conta
intervalo_saldo_conta = pd.cut(df['saldo_conta'], 5)

df['intervalo_saldo_conta'] = intervalo_saldo_conta
display(intervalo_saldo_conta.value_counts())

ax = plt.subplots(figsize=(14,9))
ax = sns.countplot(x='intervalo_saldo_conta', data=df)
ax.set_title('Intervalos Saldo Conta', fontsize=18);<jupyter_output><empty_output><jupyter_text>**1.07 - Possui Cartão de Crédito?**Possui um cartão de crédito cadastrado (0 = Não, 1 = Sim)<jupyter_code>display(df['possui_cartao_de_credito'].value_counts())

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='possui_cartao_de_credito', data=df)
ax.set_title('Possui Cartão de Crédito?', fontsize=18);<jupyter_output><empty_output><jupyter_text>Possui cartão de crédito por gênero:<jupyter_code>display(df.groupby(['genero', 'possui_cartao_de_credito']).agg({'possui_cartao_de_credito' : 'count'}))

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='genero', data=df, hue='possui_cartao_de_credito')
ax.set_title('Possui cartão de crédito por Gênero', fontsize=18);<jupyter_output><empty_output><jupyter_text>Possui cartão de crédito por intervalo de idade:<jupyter_code>display(df.groupby(['intervalo_idade', 'possui_cartao_de_credito']).agg({'possui_cartao_de_credito' : 'count'}))

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='intervalo_idade', data=df, hue='possui_cartao_de_credito')
ax.set_title('Possui cartão de crédito por Intervalo de Idade', fontsize=18);<jupyter_output><empty_output><jupyter_text>**1.08 - Membro Ativo**Membro acessa e consome frequentemente (0 = Não, 1 = Sim)<jupyter_code>display(df['membro_ativo'].value_counts())

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='membro_ativo', data=df)
ax.set_title('Membro Ativo', fontsize=18);<jupyter_output><empty_output><jupyter_text>Membro ativo por gênero:<jupyter_code>df.groupby(['genero', 'membro_ativo']).agg({'membro_ativo' : 'count'})<jupyter_output><empty_output><jupyter_text>Média de pontuação de crédito membro ativo:<jupyter_code>df.groupby(['membro_ativo']).agg({'pontuacao_credito' : 'mean'})<jupyter_output><empty_output><jupyter_text>Membro ativo por intervalo de idade:<jupyter_code>df.groupby(['intervalo_idade', 'membro_ativo']).agg({'membro_ativo' : 'count'})

ax = plt.subplots(figsize=(8,6))
ax = sns.countplot(x='intervalo_idade', data=df, hue='membro_ativo')
ax.set_title('Membro Ativo por Intervalo de Idade', fontsize=18);<jupyter_output><empty_output><jupyter_text>**2. Respostas do Desafio** A resposta deve conter os valores da média, mediana, moda e desvio padrão da pontuação de crédito para cada estado do dataset. **Média:**<jupyter_code>df.groupby('estado_residencia').agg({'pontuacao_credito': 'mean'})<jupyter_output><empty_output><jupyter_text>**Mediana:**<jupyter_code>df.groupby('estado_residencia').agg({'pontuacao_credito': 'median'})<jupyter_output><empty_output><jupyter_text>**Moda:**<jupyter_code>pr = df.query("estado_residencia == 'PR'")['pontuacao_credito'].mode()[0]
rs = df.query("estado_residencia == 'RS'")['pontuacao_credito'].mode()[0]
sc = df.query("estado_residencia == 'SC'")['pontuacao_credito'].mode()[0]

index = ['PR', 'RS', 'SC']
data = [pr, rs, sc]
columns = ['mode']

df_mode = pd.DataFrame(index=index, data=data, columns=columns)
df_mode<jupyter_output><empty_output><jupyter_text>**Desvio Padrão:**<jupyter_code>df.groupby('estado_residencia').agg({'pontuacao_credito': 'std'})<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1539635514857707, 'fraction_numerical': 0.0171469611275698, 'mean_word_length': 9.15496809480401, 'pattern_counts': {'":': 1, '<': 128, '<?xml version=': 0, '>': 135, 'https://': 3, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '32', 'dir': 'jupyter-structured-clean-dedup', 'id': '566875', 'license': 'MIT', 'n_tokens_mistral': 4531, 'n_tokens_neox': 4427, 'n_words': 695, 'path': 'Semana-3/analise_dados_desafio_codenation_semana3.ipynb', 'repo_name': 'beatrizmaiads/codenation-data-science', 'size': '11139'}