Olá, esse guia tem como objetivo apresentar algumas formas de tratamento de dados com a biblioteca pandas do Python, umas das mais utilizadas por profissionais na área de dados.
Primeiro, vamos fazer a importação das respectivas bibliotecas que utilizaremos
`
import pandas as pd
import matplotlib.pylab as plt
Agora, faremos a leitura da nossa base de dados
url= "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/Data%20files/auto.csv"
Note que, ao fazermos a importação da base de dados, a mesma não tem cabeçalho, então para criar o cabeçalho faremos o processo abaixo:
Criacao do cabeçalho em uma lista com seus respectivos valores
cabecalho = ["symboling","normalized-losses","make","fuel-type","aspiration", "num-of-doors","body-style",
"drive-wheels","engine-location","wheel-base", "length","width","height","curb-weight","engine-type",
"num-of-cylinders", "engine-size","fuel-system","bore","stroke","compression-ratio","horsepower",
"peak-rpm","city-mpg","highway-mpg","price"]
Adicionando o cabeçalho ao dataset que não tem cabeçalho + leitura do dataset no formato csv
df = pd.read_csv(url, names = cabecalho)
`
Nesse exemplo, o valores pendentes vão estar como “?” (interrogação). Alguma dúvidas podem surgir: o que fazer com esses valores que não vieram ? Como tratar ? Posso deletar ? …
A resposta é: Depende.. Existe algumas técnicas que podemos utilizar:
- Apagar a coluna completa que está sem as informações;
- Apagar a linha completa que está sem as informações;
- Substituir os dados pela média/frequência/etc;
Essas são algumas, existem várias outras forma de lidarmos com esses dados pendentes
#Para visualizar alguns dados,usarmos o comando abaixo df.head()
Note que, como havia informado anteriormente, alguns dados pendentes estão como “?” , agora, vamos substituir esses valores por NaN (Not a number)
`
import numpy as np
O comando abaixo substituirá ? por NaN;
O parâmetro inplace = True, salva as alterações realizadas no dataframe que estamos usando (df)
df.replace('?', np.nan, inplace = True)
Ao executar o head(), você notará que o símbolo de interrogação foi substituido por NaN
df.head()
`
Tratando (substituindo) os dados pendentes
No algoritmo abaixo, iremos substituir os valores NaN da coluna normalized-losses pela média, depois que convertermos para o tipo float
`avg_norm_loss = df["normalized-losses"].astype("float").mean(axis=0)
print("Média da normalized-losses:", avg_norm_loss)
substituir os valores NaN da coluna normalized-losses pela média
df["normalized-losses"].replace(np.nan, avg_norm_loss, inplace=True)
`
E assim podemos dar prosseguimento para todas as outras colunas que tiverem informações pendentes. Algumas dúvidas podem surgir, porque foi feita a conversão da normalized-losses para float ? A respota é: Normalized-losses é do tipo objetct, que seria semelhante a “string”, dessa forma não é possível realizarmos operações matemáticas nesse tipo de objeto, por isso fizemos a conversão.
`avg_bore=df['bore'].astype('float').mean(axis=0)
print("Média da bore:", avg_bore)
Substituindo valores NaN da coluna Bore pela média
df["bore"].replace(np.nan, avg_bore, inplace=True)
Substituindo valores NaN da coluna stroke pela média
stroke_mean = df['stroke'].astype('float').mean(axis=0)
df['stroke'].replace(np.nan, stroke_mean, inplace=True)
avg_horsepower = df['horsepower'].astype('float').mean(axis=0)
Substituindo os valores NaN da coluna 'horsepower' pela média
df['horsepower'].replace(np.nan, avg_horsepower, inplace=True)
`
No exemplo abaixo, vamos deletar todos os registros (linhas) que não tem dados da coluna price:
df.dropna(subset=["price"], axis=0, inplace=True)
Algumas informações que podem ser importantes:
- axis = 0 >> O zero refere-se as linha .. 1 refere-se as colunas
- inplace >> Salva as alterações realizadas no dataframe
Conversão de dados
Como já foi apresentado anteriormente, outra parte fundamental do tratamento dos dados são os tipos de dados na biblioteca pandas: object, float, int,datetime, etc. Afinal, não conseguimos calcular a média de uma variável do tipo string, certo ? Então, precisamos converter o seu data type para que isso seja possível.
Para analisarmos os tipos de dados em pandas, podemos usar a função dtype
`#Verificando o datype em python
Ela retornara o datatype de todas as variáveis (colunas) do nosso data frame
df.dtypes
Abaixo, realizamos a conversão dos data types para float, int e atribuimos a conversão a propria
variável para "salvar" as alterações. Passamos no parâmetro astype("valordavariável")
df[["bore", "stroke"]] = df[["bore", "stroke"]].astype("float")
df[["normalized-losses"]] = df[["normalized-losses"]].astype("int")
df[["price"]] = df[["price"]].astype("float")
df[["peak-rpm"]] = df[["peak-rpm"]].astype("float")`
Antes de fazer a conversão, sempre procure análisar o data type atual da variável com (dtypes) e analisar novamente após a conversão, para garantir que a alteração foi realizada com sucesso.
Esse foi um guia básico e prático de como trabalhar com tratamento de dados utilizando a biblioteca Python, as informações disponibilizadas aqui foram colhidas do curso de Análise de dados com Python — IBM da Cousera, recomendo a todos que estão estudando e procurando ampliar o seu conhecimento nessa área darem uma olhada ou até mesmo realizarem o curso, que apesar de básico é muito bom ! Obrigado a todos por lerem até aqui !
for column in missing_data.columns.values.tolist():
print(column)
print (missing_data[column].value_counts())
print("")
Top comments (0)