Processamento Dados

A limpeza de dados é um processo essencial na análise de dados, pois garante a qualidade e a confiabilidade dos resultados obtidos. 

 
Envolve a identificação, remoção ou correção de erros, inconsistências e valores ausentes nos dados coletados ou armazenados. Algumas das razões pelas quais a limpeza de dados é importante para a análise de dados são: 
 
  1. Precisão dos resultados: Dados sujos ou inconsistentes podem levar a conclusões incorretas ou imprecisas. Ao limpar os dados, você elimina erros e inconsistências, garantindo que os resultados da análise sejam confiáveis e precisos. 
  2. Tomada de decisão confiável: Os dados são a base para a tomada de decisões informadas. Se os dados utilizados na análise não forem limpos, as decisões baseadas neles podem ser equivocadas, o que pode ter consequências negativas. A limpeza dos dados permite que você tome decisões confiáveis, baseadas em informações corretas e consistentes. 
  3. Melhoria da qualidade dos dados: A limpeza dos dados não apenas remove erros, mas também melhora a qualidade geral dos dados. Ao identificar e corrigir erros, você pode padronizar os formatos, corrigir valores inconsistentes e preencher lacunas nos dados ausentes. Isso resulta em conjuntos de dados mais completos e consistentes, permitindo análises mais robustas. 
  4. Eficiência na análise: Dados sujos podem dificultar a análise. Por exemplo, informações ausentes ou incompletas podem exigir tratamentos especiais durante a análise, consumindo tempo e recursos adicionais. Ao limpar os dados previamente, você economiza tempo e esforço durante a análise, tornando o processo mais eficiente. 
  5. Conformidade com regulamentos: Em muitos setores e áreas, existem regulamentos e normas específicas relacionadas à privacidade e segurança dos dados. A limpeza dos dados ajuda a garantir a conformidade com essas regulamentações, removendo informações sensíveis ou pessoalmente identificáveis, protegendo a privacidade dos indivíduos e evitando penalidades legais. 
  6. Preparação para análises avançadas: Em alguns casos, a limpeza dos dados é um passo necessário antes de aplicar técnicas de análise mais avançadas, como aprendizado de máquina ou mineração de dados. A qualidade e a consistência dos dados são fundamentais para o sucesso dessas análises, pois algoritmos complexos podem ser sensíveis a dados sujos. 

 

Em resumo, a limpeza de dados é um componente crítico na análise de dados, pois garante a confiabilidade, a precisão e a qualidade dos resultados. Ao investir tempo e esforço na limpeza dos dados, você estabelece uma base sólida para a análise, tornando-a mais eficiente, confiável e relevante para a tomada de decisões informadas.

Importando Dados

Para entender melhor esse módulo, podemos importar e trabalhar em cima de um dataframe: 

				
					# Importando bibliotecas
import seaborn as sns
import pandas as pd
import numpy as np
from scipy import stats

# Importar o conjunto de dados Titanic
titanic = sns.load_dataset('titanic')

# Visualizar as primeiras linhas do conjunto de dados
titanic.head()

# Visualizar as últimas linhas do conjunto de dados
titanic.tail()

# Ver estatística descritiva das colunas (média, devio padrão, mínimo, máximo)
titanic.describe()

# Mostrar os tipos de dados das colunas
titanic.dtypes

# Acessar as informações gerais (tipos de dados, nome das colunas, quantas linhas tem no df, quantos valores nulos tem em cada coluna além do uso de memória estimado pelo df)
titanic.info()
				
			

O dataset “titanic” do Seaborn contém informações sobre os passageiros a bordo do famoso navio RMS Titanic, que afundou em sua viagem inaugural em 1912.

Aqui está uma descrição das colunas do dataset:

  1. survived: Indica se o passageiro sobreviveu (1) ou não (0) ao naufrágio.
  2. pclass: Representa a classe em que o passageiro estava viajando, com valores 1, 2 e 3, indicando primeira, segunda e terceira classe, respectivamente.
  3. sex: O sexo do passageiro, que pode ser ‘male’ (masculino) ou ‘female’ (feminino).
  4. age: A idade do passageiro.
  5. sibsp: O número de irmãos/cônjuges a bordo do Titanic.
  6. parch: O número de pais/filhos a bordo do Titanic.
  7. fare: A tarifa paga pelo passageiro pela passagem.
  8. embarked: O porto de embarque do passageiro, com valores ‘C’ (Cherbourg), ‘Q’ (Queenstown) e ‘S’ (Southampton).
  9. class: Similar à coluna ‘pclass’, mas em formato de texto, representando a classe da passagem (primeira, segunda, terceira).
  10. who: Uma descrição da pessoa, podendo ser ‘man’ (homem), ‘woman’ (mulher) ou ‘child’ (criança).
  11. adult_male: Indica se o passageiro é um adulto do sexo masculino (True/False).
  12. deck: O deck onde estava localizada a cabine do passageiro.
  13. embark_town: O nome da cidade onde o passageiro embarcou.
  14. alive: Indica se o passageiro sobreviveu ou não, em formato de texto (‘yes’ ou ‘no’).
  15. alone: Indica se o passageiro estava viajando sozinho (True/False).

Essas colunas fornecem informações detalhadas sobre os passageiros do Titanic, permitindo análises e visualizações que podem ajudar a entender os fatores que influenciaram as chances de sobrevivência durante o trágico evento.

Podemos pegar o nome de todas as colunas do nosso dataframe ou criar uma lista com os nomes. Isso pode facilitar conforme trabalhamos, já que fica de forma acessível os nomes e pode ajudar a evitar possíveis erros de digitações. 

				
					# Imprimir nome de todas as colunas
print(titanic.columns)

# Criar lista com nome das colunas
colunas = titanic.columns.tolist()

# Agora, a variável 'colunas' conterá uma lista com os nomes das colunas do DataFrame 'titanic'
print(colunas)
				
			

Podemos criar um novo df filtrando apenas as colunas de interesse

Obs: caso você não queira criar um novo df, e sim trabalhar em cima do original, basta usar o nome do df original, assim as funções serão aplicadas em cima do df original. Entretanto, é sempre bom criar um novo df ou uma cópia, já que podemos fazer alterações erradas e ‘perder’ o df original, precisando importar novamente tudo de novo. 

Abaixo veremos como filtrar e fazer cópia do df original

				
					#Criar novo df com colunas do df original
lista_colunas = ['embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alive', 'alone']
titanic_2 = titanic[lista_colunas]

# Criar cópias do df original
titanic_3 = titanic.copy()
titanic_4 = titanic.copy()

#Para aparecer varias tabelas seguidas, e nao fazer blocos de código para cada
display(titanic)
display(titanic_2)
display(titanic_3)
display(titanic_4)

				
			

Excluindo dados

Podemos excluir dados da tabela que não julgamos ser necessário. 
Abaixo vamos usar 2 formas de excluir colunas. Uma é usando o argumento “axis=1”, onde axis é o eixo que queremos modificar (axis=1 é coluna e axis=0 é linha). E a outra forma é sinalizando que queremos excluir “coluna”.
				
					titanic_3 = titanic_3.drop(['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare'], axis=1)
#ou
titanic_4 = titanic_4.drop(columns=['embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alive', 'alone'])

display(titanic_3)
display(titanic_4)
				
			

Unindo DataFrames

No tópico acima, criamos 2 novos df, onde o primeiro (titanic_3) excluimos a primeira metade do df, e o segundo (titanic_4). 

Obs: repare que em ambas foi deixado a coluna “survived”

Podemos unir 2 dataframes. 

				
					titanic_5 = titanic_4.merge(titanic_3, on='survived')
titanic_5.head()
				
			

Outra forma de unir os df seria usando a concatenação. É usada para combinar dois DataFrames ao longo de um eixo específico (geralmente linhas ou colunas). Você pode usar a função pd.concat() para isso.

Exemplo de concatenação de dois DataFrames ao longo das linhas:

				
					# Dividindo o DataFrame em duas partes
titanic_6 = titanic.iloc[:500]  # Primeiras 500 linhas
titanic_7 = titanic.iloc[500:]  # Linhas restantes

# Concatenando ao longo das linhas (axis=0)
titanic_8 = pd.concat([titanic_6, titanic_7], axis=0)
				
			

Alterando nome da coluna

				
					titanic_5 = titanic_5.rename(columns={'survived': 'sobreviveu', 'pclass': 'classe', 'sex': 'sexo','age': 'idade', 'fare': 'tarifa', 'embarked': 'embarque', 'class': 'classe'})

titanic_5.head()
				
			

Agrupando

Para analisar um conjunto de dados específicos, podemos criar novo df agrupando por item/variável. 
				
					titanic_5_sobreviveu = titanic_5.groupby('sobreviveu').sum()
titanic_5_sexo = titanic_5.groupby('sexo').mean()

display(titanic_5_sobreviveu)
display(titanic_5_sexo)

				
			
Assim criamos um novo df apresentando os valores de outras colunas agrupado pela coluna de interesse.
Mas podemos filtrar apenas pelas colunas que queremos ver
				
					#colocar duplo colchete pra virar tabela e não series
titanic_6 = titanic_5[['sobreviveu', 'classe', 'sexo', 'idade']] #não precisa colocar a coluna q foi usada p agrupar pq ela vira indice

display(titanic_6)

				
			

Ordenando

				
					#Ordena por valores de uma coluna
titanic_6a = titanic_6.sort_values('idade')
titanic_6b = titanic_6.sort_values('idade', ascending=False) #decrescente

display(titanic_6a.head())
display(titanic_6b.head())
				
			

Filtrando

				
					# Filtrar apenas uma variável de uma coluna
titanic_6_sexo = titanic_6[titanic_6['sexo'] == 'male']

# Filtrar com base numa condição
titanic_6_idade = titanic_6[(titanic_6['idade'] > 10) & (titanic_6['idade'] < 50)]
## Obs: Você pode usar operadores lógicos (por exemplo, & para "E" lógico, | para "OU" lógico) para criar condições mais complexas.

# Filtrar com base em uma lista
valores_desejados = ['First', 'Second']
titanic_6_idade_classe = titanic_6[titanic_6['classe'].isin(valores_desejados)]


display(titanic_6_sexo)
display(titanic_6_idade)
display(titanic_6_idade_classe)

				
			

Modificando e Adicionando Colunas ao df

				
					# Concatenando as colunas 'sex' e 'alive' para criar uma nova coluna 'nova_coluna'
titanic_5['nova_coluna'] = titanic_5['sexo'] + ' ' + titanic_5['alive']

# Exibindo o DataFrame resultante
print(titanic_5[['sexo', 'alive', 'nova_coluna']])
				
			

Dependendo do tipo de dados que estamos trabalhando, precisamos modificar o nome de alguns dados ou variáveis. 

Ex: supondo que tenhamos 2 df, ambos com uma coluna ‘Resultados’. Mas em uma o resultado aparece como ‘Positivo’ e ‘Negativo’, e na outra aparece como ‘POSITIVO’ e ‘NEGATIVO’. Sabendo que isso pode influenciar nas análises, precisamos deixar todos com mesmo nome. 

Abaixo vamos ver uma forma modificar os valores de uma coluna específica (‘alive’) em um df com base em uma condição.

				
					# Renomear variaveis de uma coluna
titanic_5['alive'] = titanic_5.apply(lambda x: "not alive" if (x["alive"] ==  'no') else x["alive"], axis=1)

titanic_5['alive'] = titanic_5.apply(lambda x: "alive" if (x["alive"] ==  'yes') else x["alive"], axis=1)

titanic_5
				
			

No código acima, nos temos o nosso df (‘titanic_5’), a coluna que queremos estar mexendo (‘alive’).  

Então usamos a função ‘.apply(lambda x: … , axis=1)’. A função ‘apply’ permite aplicar uma função, que nesse caso é a função ‘lambda’ a cada linha daquela coluna (eixo = 1). 

No nosso código acima estamos querendo que a função ‘lambda’ verifique se o valor da coluna de cada linha é igual a “no”. Se o valor for igual a “no”, ela vai substituir o valor por “not alive”. Caso contrário, ela vai manter o valor original (que nesse caso é o “yes”). 

Na linha debaixo fazemos o mesmo, mas agora alterando o valor “yes” para “alive”. 

Assim, o resultado da função apply() é atribuído de volta à coluna ‘alive’ do df’. Portanto, todas as linhas que atenderem à condição terão seus valores substituídos, enquanto as outras linhas manterão seus valores originais.

 

Outro exemplo, aplicando o código de criar uma nova coluna e concatenar dois valores após modificar os dados: 

				
					# Concatenando as colunas 'sex' e 'alive' para criar uma nova coluna 'nova_coluna'
titanic_5['nova_coluna2'] = titanic_5['sexo'] + ' ' + titanic_5['alive']

# Exibindo o DataFrame resultante
print(titanic_5[['sexo', 'alive', 'nova_coluna2']])

				
			

Exercícios

1. Selecione apenas as colunas ‘sex’, ‘age’ e ‘fare’ do df ‘titanic’.

2.  Crie um novo df chamado ‘mulheres_titanic’ que contenha apenas as linhas onde ‘sex’ é igual a ‘female’.

3. Agrupe o df ‘titanic’ por ‘class’ e calcule a média da idade (‘age’) para cada classe.

4. Calcule o número total de sobreviventes (‘survived’) por sexo (‘sex’).

5. Renomeie as colunas ‘class’ e ‘age’ para ‘classe’ e ‘idade’, respectivamente, no df ‘titanic’.

6. Ordene o df ‘titanic’ com base na coluna ‘age’ em ordem decrescente.

Comentários

{{ reviewsTotal }}{{ options.labels.singularReviewCountLabel }}
{{ reviewsTotal }}{{ options.labels.pluralReviewCountLabel }}
{{ options.labels.newReviewButton }}
{{ userData.canReview.message }}