Ciência de Dados - Preparação de Dados
Antes de analisar os dados, um Cientista de Dados deve extrair os dados e torná-los limpos e valiosos.
Extraia e leia dados com Pandas
Antes que os dados possam ser analisados, eles devem ser importados/extraídos.
No exemplo abaixo, mostramos como importar dados usando Pandas em Python.
Usamos a read_csv()
função para importar um arquivo CSV com os dados de saúde:
Exemplo
import pandas as pd
health_data = pd.read_csv("data.csv", header=0, sep=",")
print(health_data)
Exemplo explicado
- Importar a biblioteca do Pandas
- Nomeie o quadro de dados como
health_data
. header=0
significa que os cabeçalhos dos nomes das variáveis devem ser encontrados na primeira linha (observe que 0 significa a primeira linha em Python)sep=","
significa que "," é usado como separador entre os valores. Isso ocorre porque estamos usando o tipo de arquivo .csv (valores separados por vírgula)
Dica: se você tiver um arquivo CSV grande, poderá usar a
head()
função para mostrar apenas as 5 primeiras linhas:
Exemplo
import pandas as pd
health_data = pd.read_csv("data.csv", header=0, sep=",")
print(health_data.head())
Limpeza de dados
Observe os dados importados. Como você pode ver, os dados estão "sujos" com valores incorretos ou não registrados:
- Existem alguns campos em branco
- Pulso médio de 9.000 não é possível
- 9 000 serão tratados como não numéricos, devido ao separador de espaço
- Uma observação do pulso máximo é denotada como "AF", o que não faz sentido
Portanto, devemos limpar os dados para realizar a análise.
Remover linhas em branco
Vemos que os valores não numéricos (9 000 e AF) estão nas mesmas linhas com valores ausentes.
Solução: podemos remover as linhas com observações ausentes para corrigir esse problema.
Quando carregamos um conjunto de dados usando Pandas, todas as células em branco são automaticamente convertidas em valores "NaN".
Assim, remover as células NaN nos dá um conjunto de dados limpo que pode ser analisado.
Podemos usar a dropna()
função para remover os NaNs. axis=0 significa que queremos remover todas as linhas que possuem um valor NaN:
Exemplo
health_data.dropna(axis=0,inplace=True)
print(health_data)
O resultado é um conjunto de dados sem linhas NaN:
Categorias de dados
Para analisar dados, também precisamos conhecer os tipos de dados com os quais estamos lidando.
Os dados podem ser divididos em três categorias principais:
- Numérico - Contém valores numéricos. Pode ser dividido em duas categorias:
- Discreto: os números são contados como "todos". Exemplo: Você não pode ter treinado 2,5 sessões, são 2 ou 3
- Contínuo: Os números podem ser de precisão infinita. Por exemplo, você pode dormir por 7 horas, 30 minutos e 20 segundos ou 7,533 horas
- Categórico - Contém valores que não podem ser comparados entre si. Exemplo: Uma cor ou um tipo de treino
- Ordinal - Contém dados categóricos que podem ser comparados entre si. Exemplo: Notas escolares onde A é melhor que B e assim por diante
Ao conhecer o tipo de seus dados, você poderá saber qual técnica usar ao analisá-los.
Tipos de dados
Podemos usar a info()
função para listar os tipos de dados em nosso conjunto de dados:
Exemplo
print(health_data.info())
Resultado:
Vemos que esse conjunto de dados tem dois tipos diferentes de dados:
- Float64
- Objeto
Não podemos usar objetos para calcular e realizar análises aqui. Devemos converter o objeto de tipo para float64 (float64 é um número com um decimal em Python).
Podemos usar a astype()
função para converter os dados em float64.
O exemplo a seguir converte "Average_Pulse" e "Max_Pulse" no tipo de dados float64 (as outras variáveis já são do tipo float64):
Exemplo
health_data["Average_Pulse"]
= health_data['Average_Pulse'].astype(float)
health_data["Max_Pulse"] =
health_data["Max_Pulse"].astype(float)
print
(health_data.info())
Resultado:
Agora, o conjunto de dados tem apenas tipos de dados float64.
Analise os dados
Quando tivermos limpado o conjunto de dados, podemos começar a analisar os dados.
Podemos usar a describe()
função em Python para resumir dados:
Exemplo
print(health_data.describe())
Resultado:
Duração | Pulso_média | Max_Pulse | Caloria_Queima | Horas_Trabalho | Horas_Sono | |
---|---|---|---|---|---|---|
Contar | 10,0 | 10,0 | 10,0 | 10,0 | 10,0 | 10,0 |
Significar | 51,0 | 102,5 | 137,0 | 285,0 | 6.6 | 7,5 |
Padrão | 10,49 | 15,4 | 11h35 | 30,28 | 3,63 | 0,53 |
Mín. | 30,0 | 80,0 | 120,0 | 240,0 | 0,0 | 7,0 |
25% | 45,0 | 91,25 | 130,0 | 262,5 | 7,0 | 7,0 |
50% | 52,5 | 102,5 | 140,0 | 285,0 | 8,0 | 7,5 |
75% | 60,0 | 113,75 | 145,0 | 307,5 | 8,0 | 8,0 |
Máx. | 60,0 | 125,0 | 150,0 | 330,0 | 10,0 | 8,0 |
- Contagem - Conta o número de observações
- Média - O valor médio
- Std - Desvio padrão (explicado no capítulo de estatísticas)
- Min - O valor mais baixo
- 25% , 50% e 75% são percentis (explicados no capítulo de estatísticas)
- Max - O valor mais alto