<jupyter_start><jupyter_text>Importando bibliotecas<jupyter_code>import pandas as pd<jupyter_output><empty_output><jupyter_text>Criando o dataframe através do arquivo .csv fornecido<jupyter_code>df = pd.read_csv("/content/drive/MyDrive/dados/marketing_campaign.csv", sep=",", parse_dates = ["Dt_Customer"], dayfirst=True)
df<jupyter_output><empty_output><jupyter_text>Analisando a base de dados<jupyter_code>print(df.info())<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 2240 entries, 0 to 2239
Data columns (total 29 columns):
 #   Column               Non-Null Count  Dtype         
---  ------               --------------  -----         
 0   ID                   2240 non-null   int64         
 1   Year_Birth           2240 non-null   int64         
 2   Education            2240 non-null   object        
 3   Marital_Status       2240 non-null   object        
 4   Income               2216 non-null   float64       
 5   Kidhome              2240 non-null   int64         
 6   Teenhome             2240 non-null   int64         
 7   Dt_Customer          2240 non-null   datetime64[ns]
 8   Recency              2240 non-null   int64         
 9   MntWines             2240 non-null   int64         
 10  MntFruits            2240 non-null   int64         
 11  MntMeatProducts      2240 non-null   int64         
 12  MntFishProducts      2240 non-null   int64         
 13  MntSweetProducts     2240 non-nul[...]<jupyter_text>Através da função info usada acima, podemos verificar que temos 2 colunas do tipo object, uma coluna do tipo datatime, 25 colunas do tipo int e uma coluna do tipo float.A coluna "Income" está com 24 dados faltantes   Traduzindo o Schema para Português-BR<jupyter_code>df.rename(columns={'Year_Birth': 'ano_de_nascimento',
                   'Education': 'graduacao', #grau de instrução do cliente
                   'Marital_Status': 'estado_civil',
                   'Income': 'renda_anual', #renda familiar anual do cliente
                   'Kidhome': 'criancas_em_casa', #número de crianças pequenas na família do cliente
                   'Teenhome': 'adolescentes_em_casa', #número de adolescentes na família do cliente
                   'Dt_Customer': 'data_cliente', #data de inscrição do cliente na empresa
                   'Recency': 'recencia', #número de dias desde a última compra
                   'MntWines': 'qts_vinhos', #valor gasto em produtos vínicos nos últimos 2 anos
                   'MntFruits': 'qts_frutas', #montante gasto em produtos de frutas nos últimos 2 anos
                   'MntMeatProducts': 'qts_produtos_carne', #quantia gasta em produtos de carne nos últimos 2 anos
                   'MntFishProducts': 'qts_produtos_peixe', #quantia gasta em produtos de peixe nos últimos 2 anos
                   'MntSweetProducts': 'qts_produtos_doces', #valor gasto em produtos doces nos últimos 2 anos
                   'MntGoldProds': 'qts_produtos_ouro', #valor gasto em produtos de ouro nos últimos 2 anos
                   'NumDealsPurchases': 'num_compras_desconto', #número de compras feito com desconto
                   'NumWebPurchases': 'num_compras_web', #número de compras feitas através do site da empresa
                   'NumCatalogPurchases': 'num_compras_catalogo', #número de compras feitas usando o catálogo
                   'NumStorePurchases': 'num_compras_loja', #número de compras feitas diretamente nas lojas
                   'NumWebVisitsMonth': 'num_visitas_web_mes', #número de visitas ao site da empresa no último mês
                   'Complain': 'reclamacoes', #1 se o cliente reclamou nos últimos 2 anos
                   'AcceptedCmp1': 'campanha1', #1 se o cliente aceitou a oferta na 1ª campanha, 0 caso contrário
                   'AcceptedCmp2': 'campanha2', #1 se o cliente aceitou a oferta na 2ª campanha, 0 caso contrário
                   'AcceptedCmp3': 'campanha3', #1 se o cliente aceitou a oferta na 3ª campanha, 0 caso contrário
                   'AcceptedCmp4': 'campanha4', #1 se o cliente aceitou a oferta na 4ª campanha, 0 caso contrário
                   'AcceptedCmp5': 'campanha5', #1 se o cliente aceitou a oferta na 5ª campanha, 0 caso contrário
                   'Response': 'resposta_alvo' #1 se o cliente aceitou a oferta na última campanha, 0 caso contrário
                   }, inplace = True)<jupyter_output><empty_output><jupyter_text>Deletando colunas desnecessárias<jupyter_code>df.drop(['Z_CostContact', 'Z_Revenue'], axis = 1, inplace = True)
df.head()<jupyter_output><empty_output><jupyter_text>Verificando quais dados estão contidos de maneira única<jupyter_code>sorted(pd.unique(df.ano_de_nascimento))
pd.unique(df.estado_civil)
pd.unique(df.graduacao)<jupyter_output><empty_output><jupyter_text>Deletando os anos de nascimento que não fazem sentido com o dataframe<jupyter_code>df.drop(df.loc[df.ano_de_nascimento == 1893].index, inplace = True)
df.drop(df.loc[df.ano_de_nascimento == 1899].index, inplace = True)
df.drop(df.loc[df.ano_de_nascimento == 1900].index, inplace = True)<jupyter_output><empty_output><jupyter_text>Localizando e traduzindo os dados para Português-BR<jupyter_code>#graduacao
df.loc[df.graduacao == "Graduation", ['graduacao']] = 'Ensino Superior'
df.loc[df.graduacao == "Master", ['graduacao']] = 'Mestrado'
df.loc[df.graduacao == "Basic", ['graduacao']] = 'Ensino Médio'
df.loc[df.graduacao == "2n Cycle", ['graduacao']] = 'Cursando Mestrado'

#estado_civil
df.loc[df.estado_civil == "Single", ['estado_civil']] = 'Solteiro(a)'
df.loc[df.estado_civil == "Together", ['estado_civil']] = 'União Estável'
df.loc[df.estado_civil == "Married", ['estado_civil']] = 'Casado(a)'
df.loc[df.estado_civil == "Divorced", ['estado_civil']] = 'Divorciado(a)'
df.loc[df.estado_civil == "Widow", ['estado_civil']] = 'Viúvo(a)'
df.loc[df.estado_civil == "Alone", ['estado_civil']] = 'Sozinho(a)'
df.loc[df.estado_civil == "YOLO", ['estado_civil']] = 'Aproveitando a vida'

# Transformando o estado civil Absurd em NA
df.replace(['Absurd'], pd.NA, inplace = True)
df.head()<jupyter_output><empty_output><jupyter_text>Deletando os NA somente das colunas informadas<jupyter_code>df.dropna(subset=['estado_civil'], inplace = True)
df.dropna(subset=['renda_anual'], inplace = True)<jupyter_output><empty_output><jupyter_text>Verificando se os dados  foram deletados<jupyter_code>df.isna().sum()<jupyter_output><empty_output><jupyter_text>Analisando o dataframe após as mudanças e transformações<jupyter_code>print(df.info())<jupyter_output><class 'pandas.core.frame.DataFrame'>
Int64Index: 2211 entries, 0 to 2239
Data columns (total 27 columns):
 #   Column                Non-Null Count  Dtype         
---  ------                --------------  -----         
 0   ID                    2211 non-null   int64         
 1   ano_de_nascimento     2211 non-null   int64         
 2   graduacao             2211 non-null   object        
 3   estado_civil          2211 non-null   object        
 4   renda_anual           2211 non-null   float64       
 5   criancas_em_casa      2211 non-null   int64         
 6   adolescentes_em_casa  2211 non-null   int64         
 7   data_cliente          2211 non-null   datetime64[ns]
 8   recencia              2211 non-null   int64         
 9   qts_vinhos            2211 non-null   int64         
 10  qts_frutas            2211 non-null   int64         
 11  qts_produtos_carne    2211 non-null   int64         
 12  qts_produtos_peixe    2211 non-null   int64         
 13  qts_produtos_doces[...]<jupyter_text>Após as transformações realizadas, podemos verificar que as colunas foram todas traduzidas para o Português-BR, não há mais nenhum dado faltante após a realização da limpeza dos NA  Exportando o arquivo .csv com as alterações<jupyter_code>df.to_csv('mini_projeto_final.csv', index=False)
teste = pd.read_csv('/content/mini_projeto_final.csv')
teste<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09752712591471108, 'fraction_numerical': 0.033560434014635376, 'mean_word_length': 2.792822966507177, 'pattern_counts': {'":': 0, '<': 49, '<?xml version=': 0, '>': 49, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '563845', 'license': 'MIT', 'n_tokens_mistral': 2970, 'n_tokens_neox': 2744, 'n_words': 678, 'path': 'Mini_Projeto_Final_Pandas.ipynb', 'repo_name': 'vitor-siqueira/soulcode_mini_projeto_final', 'size': '7926'}