Análise Exploratória de Dados (EDA)
Conjunto de dados Iris em Machine Learning
O conjunto de dados Iris serve como uma referência padrão para testar e comparar o desempenho de vários algoritmos de classificação. Ele contém 150 pontos de dados, cada um representando uma flor de Iris. O conjunto de dados rotula esses 150 exemplos de Iris em três espécies distintas: Iris setosa, Iris versicolor e Iris virginica. As três classes de Iris (setosa, versicolor, virginica) apresentam um desafio de classificação adequado. Os dados são separáveis, mas não perfeitamente distintos, permitindo a exploração de vários algoritmos de classificação para avaliações de desempenho. Cada ponto de dados do conjunto tem quatro recursos numéricos: comprimento das sépalas, largura das sépalas, comprimento das pétalas e largura das pétalas (todos em centímetros).
A estrutura clara e os recursos bem definidos do conjunto de dados Iris facilitam a compreensão dos conceitos de manipulação de dados e algoritmos de machine learning para iniciantes na área. Para desenvolvedores avançados, esse conjunto é muito utilizado para avaliar a precisão e desempenho de um algoritmo. Para esse post, apresentaremos o conjunto de dados Iris realizando a EDA, uma etapa essencial para o treinamento de modelos de machine learning.
EDA com o Conjunto de Dados Iris
A EDA é uma primeira etapa crítica em machine learning e costuma envolver estatística descritiva e técnicas de visualização de dados. Ela atua como uma ferramenta de diagnóstico inicial. Através dela, entendemos as características dos dados e identificamos possíveis problemas como valores ausentes e outliers. A EDA também auxilia na identificação de padrões ocultos e relacionamentos entre recursos. Esse conhecimento orienta a seleção e a engenharia de recursos para preparar os dados para serem usados em um modelo. Para realizar EDA no conjunto de dados Iris, usaremos bibliotecas tradicionais de ciência de dados e visualização:
- Pandas
- Matplotlib
Seaborn
Em código, importe os pacotes necessários:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
Como o dataset Iris é muito comum em machine learning, várias bibliotecas da área fornecem acesso direto a ele. Usaremos o conjunto de dados Iris do Seaborn:
# carrega conjunto de dados
df = sns.load_dataset('iris')
Análise Exploratória Inicial
O primeiro passo de qualquer análise consiste em olhar os dados. Isso pode ser feito com os comandos head() e tail() que mostram as primeiras e últimas linhas dos dados, respectivamente.
# imprime linhas iniciais
print(df.head())
# Resultados
# sepal_length sepal_width petal_length petal_width species
# 0 5.1 3.5 1.4 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 3 4.6 3.1 1.5 0.2 setosa
# 4 5.0 3.6 1.4 0.2 setosa
# imprime linhas finais
print(df.tail())
# Resultados
# sepal_length sepal_width petal_length petal_width species
# 145 6.7 3.0 5.2 2.3 virginica
# 146 6.3 2.5 5.0 1.9 virginica
# 147 6.5 3.0 5.2 2.0 virginica
# 148 6.2 3.4 5.4 2.3 virginica
# 149 5.9 3.0 5.1 1.8 virginica
Para o conjunto de dados Iris, esses comandos mostram alguns exemplos dos quatro atributos numéricos do conjunto com seus respectivos rótulos.
Tipos de dados, dados ausentes e estatística descritiva básica
A função info() ajuda a entender os tipos de dados e possíveis valores ausentes:
print(df.info())
# Resultados
#
# RangeIndex: 150 entries, 0 to 149
# Data columns (total 5 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 sepal_length 150 non-null float64
# 1 sepal_width 150 non-null float64
# 2 petal_length 150 non-null float64
# 3 petal_width 150 non-null float64
# 4 species 150 non-null object
# dtypes: float64(4), object(1)
# memory usage: 6.0+ KB
# None
O dataset Iris não possui dados ausentes, seus atributos são dados do tipo float e os rótulos são do tipo object. O total de valores ausentes também podem ser verificados com a função isnull() do Pandas em combinação com a função sum().
# verifica valores ausentes
print(df.isnull().sum())
# resultados
# sepal_length 0
# sepal_width 0
# petal_length 0
# petal_width 0
# species 0
Como é possível observar, não existem valores ausentes no conjunto de dados Iris.
A função describe() retorna um resumo estatístico para os recursos numéricos dos dados, como médias e desvios. Esses valores já dão pistas sobre a possível presença de outliers.
# cria um resumo estatístico
print(df.describe())
# Resultados
# sepal_length sepal_width petal_length petal_width
# count 150.000000 150.000000 150.000000 150.000000
# mean 5.843333 3.057333 3.758000 1.199333
# std 0.828066 0.435866 1.765298 0.762238
# min 4.300000 2.000000 1.000000 0.100000
# 25% 5.100000 2.800000 1.600000 0.300000
# 50% 5.800000 3.000000 4.350000 1.300000
# 75% 6.400000 3.300000 5.100000 1.800000
# max 7.900000 4.400000 6.900000 2.500000
A função describe() pode destacar valores extremos (min e max) que podem ser outliers. Grandes diferenças entre esses valores e o restante dos dados podem justificar uma investigação mais aprofundada com técnicas de visualização.
Distribuição das variáveis-alvo
A função value_counts() deve ser usada para analisar a distribuição das variáveis-alvo (espécies de Iris).
# analisa a distribuição das variáveis-alvo
print(df['species'].value_counts())
# resultados:
# setosa 50
# versicolor 50
# virginica 50
# Name: count, dtype: int64
O conjunto de dados Iris possui exatamente 50 pontos de dados para cada classe.
Técnicas de Visualização de Dados
EDA usa várias técnicas de visualização de dados para analisar suas distribuições, presenças de outliers e relações entre atributos.
Pairplots
Pairplots são matrizes de gráficos de dispersão. Cada elemento de uma matriz pairplot mostra a relação entre duas variáveis, com pontos de dados coloridos com base nas espécies de Iris. Essa representação visual permite uma fácil observação de como as variáveis se correlacionam entre si e com as variáveis-alvo, fornecendo insights valiosos para análise e modelagem de dados. Veja como eles podem ser plotados facilmente com Seaborn:
# Pairplot
sns.pairplot(df, hue='species')
plt.show()
Pairplots do conjunto de dados Iris
Gráficos de distribuição: Histogramas e KDEs
Criar gráficos de distribuição é uma etapa vital no processo de análise exploratória de dados em Python. Gráficos como histogramas e KDEs fornecem uma representação visual da distribuição das variáveis numéricas de um conjunto de dados, como o comprimento das sépalas, largura das sépalas, comprimento das pétalas e largura das pétalas. As representações visuais ajudam a entender a distribuição de frequência dessas medições no conjunto de dados do Iris. Python oferece ferramentas eficientes para este fim, notavelmente Matplotlib e Seaborn. Essas bibliotecas permitem a geração fácil de histogramas e KDEs, oferecendo insights sobre a forma, a dispersão e a tendência central dos dados. O código Python para criar histogramas para os atributos do conjunto Iris é mostrado abaixo.
# Histograma dos atributos
df.hist(figsize=(10,6))
plt.show()
Histogramas do conjunto de dados Iris
Os KDEs podem ser gerados assim:
# KDE plot
features = list(df.select_dtypes(include=['float']).columns) # isola os atributos pelo tipo de dados
# faz um for loop para plotar o KDE para cada atributo
fig, ax = plt.subplots(len(features), 1, figsize=(4, 6))
for i in range(len(features)):
sns.kdeplot(ax=ax[i], x=features[i], data=df, fill = True)
fig.tight_layout(pad=1)
plt.show()
KDEs do conjunto de dados Iris
Gráficos Boxplots
Gráficos do tipo boxplot também podem ser usados durante a EDA. Esses gráficos permitem a identificação visual de outliers, pois eles aparecem como pontos fora dos bigodes do plot. Lidar com esses outliers adequadamente, seja removendo-os ou ajustando-os, garante uma análise mais precisa e confiável. Veja como plotar boxplots com Python:
#Box Plot
features = list(df.select_dtypes(include=['float']).columns) # isola os atributos pelo tipo de dados
fig, ax = plt.subplots(len(features), 1, figsize=(4, 6))
for i in range(len(features)):
sns.boxplot(ax=ax[i], x=features[i], data=df)
fig.tight_layout(pad=1)
plt.show()
Boxplots do conjunto de dados Iris
Os boxplots mostram a presença de outliers para o atributo com o comprimento das pétalas (petal_length).
Heatmap
A verificação de correlações em um conjunto de dados é um componente crítico da EDA em Python. Ela ajuda a entender as relações entre diferentes atributos numéricos (comprimento das sépalas, largura das sépalas, comprimento das pétalas e largura das pétalas). Identificar essas relações é essencial para a seleção de recursos para modelagem preditiva. Em Python, as bibliotecas Pandas e Seaborn são comumente usadas para calcular e visualizar correlações. O método do Pandas corr() calcula rapidamente a correlação par a par de colunas, enquanto o heatmap do Seaborn fornece uma representação visual dessas correlações.
# Heatmap para entender as relações entre diferentes recursos numéricos
correlation_matrix = df.select_dtypes(exclude=['object']).corr() # exclui variáveis-alvo
sns.heatmap(correlation_matrix, cmap = 'RdYlBu', annot=True, fmt=".2f", square=True, linewidths=.5)
plt.show()
Heatmap do conjunto de dados Iris
Conclusões
Neste post, apresentamos as etapas padrões para executar efetivamente a EDA no conjunto de dados Iris. Essas etapas permitem entender a distribuição de dados, identificar possíveis relações entre os recursos e as variáveis-alvo e obter insights antes de aplicar algoritmos de machine learning. Para um problema mais complexo, visualizações adicionais e análises mais aprofundadas de relacionamentos podem ser necessárias.
Veja também:
O que é machine learning (aprendizado de máquina)?
Como machine learning (aprendizado de máquina) funciona?
Como machine learning (aprendizado de máquina) aprende?
Como implementar um modelo de machine learning?
Como escolher um bom modelo de machine learning?
Classificação e regressão em machine learning
O que é conjunto de dados (dataset) em machine learning?
Onde conseguir conjuntos de dados para machine learning?
Salve localmente conjuntos de dados para machine learning
Pré-processamento de dados em machine learning
Regressão Linear e Machine Learning
Conjuntos de treinamento e teste em machine learning
Função de perda em machine learning
Scikit-learn para machine learning
Matrizes de Confusão em Machine Learning
Floresta aleatória com Scikit-learn
Detecção de anomalias com Isolation Forest
Máquinas de vetores de suporte (SVMs)
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.