Limpeza e Transformação de Dados
A limpeza e transformação de dados são processos essenciais na análise de dados, que envolvem a preparação e organização dos dados brutos para que possam ser usados efetivamente em análises e modelagem estatística
Remoção de valores
Vamos usar a fonte de dados Video Game Sales with Ratings com (/assets/content/video_games_sales.zip) encontrada na área de Downloads
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print(notas)
Podemos observar vários valores como NaN
ou seja Not a Number, podemos visualizar somente as informações nulas
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print(notas.isnull())
Remover as informações de somente uma coluna
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print('Notas:', notas['Critic_Score'])
print('NaN removidos:', notas['Critic_Score'].dropna())
Ou podemos remover linhas ou colunas
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print('Notas:\n', notas, '\n\n')
linhas = notas.dropna(axis="rows")
print('Linhas limpas:\n', notas)
colunas = notas.dropna(axis="columns")
print('Colunas limpas:\n', colunas)
Uma alternativa é informar os valores valores nulos com outro conteúdo
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
preenchidas = notas.fillna(0)
print('Linhas limpas:\n', preenchidas)
Podemos limpar valores duplicados, primeiro vamos identificá-los
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression='zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
notas = notas.append(
{"Name": "Wii Sports", "Critic_Score": 76, "User_Score": 8}, ignore_index=True)
notas = notas.append(
{"Name": "Wii Sports", "Critic_Score": 38, "User_Score": 20}, ignore_index=True)
print('Notas\n', notas, '\n\n')
print('Duplicados\n', notas.duplicated(), '\n\n')
print('Nome\n', notas.duplicated(subset=['Name']), '\n\n')
Depois podemos remover os duplicados
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression='zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
notas = notas.append(
{"Name": "Wii Sports", "Critic_Score": 76, "User_Score": 8}, ignore_index=True)
notas = notas.append(
{"Name": "Wii Sports", "Critic_Score": 38, "User_Score": 20}, ignore_index=True)
print('Notas\n', notas, '\n\n')
notas_semduplicados = notas.drop_duplicates(subset=['Name'])
print('Únicos\n', notas_semduplicados)
Transformação de dados
Atualizar os valores com conta matemática
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression='zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print('Notas\n', notas, '\n\n')
notas['Critic_Score'] = notas['Critic_Score'] / 10
print('Notas\n', notas, '\n\n')
Alteração do tipo de valores
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression='zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
print('Notas\n', notas.info(), '\n\n')
notas['User_Score'] = notas['User_Score'].astype(float)
print('Notas\n', notas.info())
Completar os valores nulos com as médias
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression='zip')
notas = dados[['Name', 'Critic_Score', 'User_Score']][:10]
notas['Critic_Score'] = notas['Critic_Score'] / 10
notas['User_Score'] = notas['User_Score'].astype(float)
criticos = notas['Critic_Score'].mean()
usuarios = notas['User_Score'].mean()
notas.fillna(value={'Critic_Score': criticos, 'User_Score':usuarios}, inplace=True)
print('Notas\n', notas, '\n\n')
Gerar fonte de dados
Vamos usar a fonte de dados Video Game Sales with Ratings com (/assets/content/video_games_sales.zip) encontrada na área de Downloads
import pandas as pd
dados = pd.read_csv('video_games_sales.zip', compression = 'zip')
Fazer uso somente dos campos de nome e pontuações
notas = dados[['Name', 'Critic_Score', 'User_Score']]
Remover as linhas com valores não numéricos
notas = notas.dropna(axis=0)
Remover os valores de “To be announced” (tbd)
notas = notas.query('User_Score != "tbd"')
Normalizar as notas de críticos para uma escala de 0 a 10
notas['Critic_Score'] = notas['Critic_Score'] / 10
Salvar os valores organizados
notas.to_csv('./video_games_scores.csv')