Documento de estudo da US04

Introdução

Antes da criação das intents, actions e stories de cada tema selecionado são gerados documentos pela equipe de desenvolvimento que possuem abrangentemente do que aquele ele se trata. Selecionamos um breve conhecimento do tema, possíveis bibliotecas e até mesmo a forma de implementação.

Objetivo

Tendo em vista que os dados passados para o treinamento do bot devem ser bem claros e ter uma quantidade reduzida de informação para não poluir a caixa de mensagens do usuário, o desenvolvedor responsável pelo tema tem como objetivo extrair o máximo de informação e simplifica-la antes de passar para o usuário final. Isso torna a criação das intents, actions e stories mais rápidas e objetivas.

Dados Faltantes

O que são dados faltantes?

Consiste em valores vazios ou inesperados encontrados em um dataset antes da fase de pré processamento. Dentro do tratamento de dados para pré-processamento, a correção de dados faltantes é uma das tarefas que demandam maior tempo para preparação do modelo. Depois de coletado o dataset, é necessário essa limpeza de dados para que as predições sejam corretas posteriormente.

Motivos para que haja valores faltantes

1) Houve esquecimento no preenchimento de um campo por um usuário

2) Dados perdidos quando transferidos manualmente de uma base de dados

3) Erro no programa

Iniciando a detecção

Antes de limpar os dados, é recomendável agrupar os dados e responder perguntas como:

1) Quais são as features?

2) Quais são os tipos de dados esperados? (int, float, double, boolean e etc.)

3) Há dados faltantes facilmente detectáveis?

Checar o dataset através da biblioteca Pandas

import pandas as pd
arquivo = pd.read_csv("data property.csv")
print (arquivo.head())
Exemplo de dataset:
   ST_NUM    ST_NAME OWN_OCCUPIED  NUM_BEDROOMS
0   104.0     PUTNAM            Y           3.0
1   197.0  LEXINGTON            N           3.0
2     NaN  LEXINGTON            N           3.0
3   201.0   BERKELEY          NaN           1.0
4   203.0   BERKELEY            Y           3.0

Então podemos ver o csv sendo importado para dentro do dataframe da biblioteca pandas.

Features do dataset

ST_NUM: Número da rua

ST_NAME: Nome da rua

OWN_OCCUPIED: Residência ocupada

NUM_BEDROOMS: Número de banheiros

Tipos esperados para cada feature

ST_NUM: float or int

ST_NAME: string

OWN_OCCUPIED: string

NUM_BEDROOMS: float or int

Padrão de valores faltantes

Estes são os valores que o Pandas pode detectar. O Pandas quando imprime datasets com valores faltantes preenche com "NA" indicando que estes lugares estão vazios.

Com a função isnull(), é retornado verdadeiro caso haja um valor faltante e falso caso esteja de acordo para o valor.

# Looking at the ST_NUM column
print df['ST_NUM']
print df['ST_NUM'].isnull()
Out:
0    104.0
1    197.0
2      NaN
3    201.0
4    203.0
5    207.0
6      NaN
7    213.0
8    215.0

Out:
0    False
1    False
2     True
3    False
4    False
5    False
6     True
7    False
8    False

Valores faltantes não padronizados

É o caso onde há valores faltantes em diferente formatos.

# Looking at the NUM_BEDROOMS column
print df['NUM_BEDROOMS']
print df['NUM_BEDROOMS'].isnull()
Out:
0      3
1      3
2    n/a
3      1
4      3
5    NaN
6      2
7     --
8     na

Out:
0    False
1    False
2    False
3    False
4    False
5     True
6    False
7    False
8    False

Como observa-se, não foram reconhecidos todos os valores faltantes pelo pandas.

Para corrigir o problema, é necessário criar uma lista com tipos de valores faltantes

missing_values = ["n/a", "na", "--"]
df = pd.read_csv("property data.csv", na_values = missing_values)

Corrigindo dados faltantes

Substituindo por uma constante

df['ST_NUM'].fillna(125, inplace = True)

Imputação baseada no lugar

df.loc[2,'ST_NUM'] = 125

Subtituindo por mediana

median = df['NUM_BEDROOMS'].median()
df['NUM_BEDROOMS'].fillna(median, inplace=True)