Baixe os dados
Em ambientes típicos, seus dados estariam disponíveis em um banco de dados relacional (ou algum outro armazenamento de dados comum) e espalhados por várias tabelas / documentos / arquivos. Para acessá-lo, primeiro você precisa obter suas credenciais e autorizações de acesso10 e se familiarizar com o esquema de dados.
Neste projeto, no entanto, as coisas são muito mais simples: você apenas fará o download de um único arquivo compactado, housing.tgz, que contém um arquivo de valores separados por vírgula (CSV) chamado housing.csv com todos os dados.
Você pode usar seu navegador da web para baixar o arquivo e executar tar xzf housing.tgz para descompactá-lo e extrair o arquivo CSV, mas é preferível criar uma pequena função para fazer isso. Ter uma função que baixa os dados é útil em particular se os dados mudam regularmente: você pode escrever um pequeno script que usa a função para buscar os dados mais recentes (ou você pode configurar um trabalho agendado para fazer isso automaticamente em intervalos regulares).
Automatizar o processo de busca de dados também é útil se você precisar instalar o conjunto de dados em várias máquinas. Aqui está a função para buscar os dados:
Quando você chama fetch_housing_data (), ele cria um diretório de conjuntos de dados / habitação em sua área de trabalho, baixa o arquivo habitação.tgz e extrai o arquivo habitação.csv deste diretório.
Agora vamos carregar os dados usando o pandas. Mais uma vez, você deve escrever uma pequena função para carregar os dados:
Esta função retorna um objeto DataFrame do pandas contendo todos os dados.
Cada linha representa um distrito.
Existem 10 atributos (você pode ver os 6 primeiros na captura de tela): longitude, latitude, housing_median_age, total_rooms, total_bedrooms, população, domicílios, median_income, median_house_value e ocean_proximity.
O método info() é útil para obter uma descrição rápida de os dados, em particular o número total de linhas, o tipo de cada atributo e o número de valores não nulos:
Existem 20.640 instâncias no conjunto de dados, o que significa que é bastante pequeno para os padrões de aprendizado de máquina, mas é perfeito para começar.
Observe que o atributo total_bedrooms tem apenas 20.433 valores não nulos, o que significa que 207 distritos estão sem esse recurso. Teremos que cuidar disso mais tarde.
Todos os atributos são numéricos, exceto o campo ocean_proximity. Seu tipo é objeto, portanto, pode conter qualquer tipo de objeto Python.
Mas como você carregou esses dados de um arquivo CSV, sabe que deve ser um atributo de texto. Quando você olhou para as cinco primeiras linhas, provavelmente percebeu que os valores na coluna ocean_proximity eram repetitivos, o que significa que provavelmente é um atributo categórico.
Você pode descobrir quais categorias existem e quantos distritos pertencem a cada categoria usando o método value_counts ():
Vejamos os outros campos. O método describe() mostra um resumo dos atributos numéricos:
As linhas de contagem, média, mínimo e máximo são autoexplicativas. Observe que os valores nulos são ignorados (então, por exemplo, a contagem de total_bedrooms é 20.433, não 20.640). A linha padrão mostra o desvio padrão, que mede o quão dispersos os valores estão.
As linhas de 25%, 50% e 75% mostram os percentis correspondentes: um percentil indica o valor abaixo do qual uma determinada porcentagem de observações em um grupo de observações outono. Por exemplo, 25% dos distritos têm habitação_median_age inferior a 18, enquanto 50% são inferiores a 29 e 75% são inferiores a 37.
Estes são frequentemente chamados de 25º percentil (ou primeiro quartil), mediana e 75º percentil (ou terceiro quartil). Outra maneira rápida de ter uma ideia do tipo de dados com os quais você está lidando é traçar um histograma para cada atributo numérico. Um histograma mostra o número de instâncias (no eixo vertical) que possuem um determinado intervalo de valores (no eixo horizontal).
Você pode plotar esse atributo de cada vez ou pode chamar o método hist () em todo o conjunto de dados (como mostrado no exemplo de código a seguir), e ele plotará um histograma para cada atributo numérico:
Existem algumas coisas que você pode notar nesses histogramas:
1 - Primeiro, o atributo de renda mediana não parece ser expresso em dólares americanos (USD). Depois de verificar com a equipe que coletou os dados, você é informado de que os dados foram dimensionados e limitados a 15 (na verdade, 15.0001) para rendas medianas mais altas e a 0,5 (na verdade, 0,4999) para rendas medianas mais baixas. Os números representam cerca de dezenas de milhares de dólares (por exemplo, 3 significa na verdade cerca de $ 30.000). Trabalhar com atributos pré-processados é comum no Machine Learning e não é necessariamente um problema, mas você deve tentar entender como os dados foram calculados.
2 - A idade média da moradia e o valor médio da casa também foram limitados. O último pode ser um problema sério, pois é o atributo de destino (seus rótulos). Seus algoritmos de aprendizado de máquina podem aprender que os preços nunca vão além desse limite. Você precisa verificar com a equipe do cliente (a equipe que usará a saída do seu sistema) para ver se isso é um problema ou não. Se eles disserem que precisam de previsões precisas, mesmo além de US $ 500.000, você tem duas opções:
- Colete rótulos apropriados para os distritos cujos rótulos foram limitados.
- Remova esses distritos do conjunto de treinamento (e também do conjunto de teste, já que seu sistema não deve ser avaliado mal se prever valores acima de $ 500.000).
3 - Esses atributos têm escalas muito diferentes. Discutiremos isso mais tarde neste capítulo, quando explorarmos o dimensionamento de recursos.
4 - Finalmente, muitos histogramas são pesados na cauda: eles se estendem muito mais para a direita da mediana do que para a esquerda. Isso pode tornar um pouco mais difícil para alguns algoritmos de aprendizado de máquina detectar padrões. Tentaremos transformar esses atributos mais tarde para ter mais distribuições em forma de sino.
Esperamos que agora você tenha um melhor entendimento do tipo de dados com os quais está lidando.
Atenção! Antes de examinar os dados mais a fundo, você precisa criar um conjunto de teste, colocá-lo de lado e nunca examiná-lo. Faremos isso no
próximo artigo.
Nenhum comentário:
Postar um comentário