Análise de dados exploratórios: Iris Flower Dataset

Marcelo Nogueira
5 min readJul 23, 2021

--

O que é análise exploratória de dados?

Em simples palavras: EDA (Exploratory Data Analysis) é um processo ou abordagem para descobrir as características mais úteis do conjunto de dados de acordo com o seu problema, que o ajude a escolher o algoritmo correto e eficiente para a sua solução.

Qual é o valor da análise de dados exploratórios?

Como sabemos, existem alguns pré-requisitos para cada projeto e podemos dizer que a análise exploratória de dados (vamos chamar apenas de EDA daqui por diante) é um processo necessário em qualquer projeto de ciência de dados ou aprendizado de máquina. Se por algum motivo pular esta etapa do processo, enfrentará alguns problemas como valores fora do padrão dos dados, valores nulos ou em falta o que pode interferir na escolha errada do modelo, escolha correta do modelo trabalhando em cima de dados errados, seleção de parâmetros errados para a construção do modelo.

Como fazer Análise Exploratória de Dados?

A EDA pode ser feita com linguagens de programação e ferramentas de visualização de dados.
As linguagens de programação mais utilizadas são:

  • Python
  • R

As ferramentas de visualização de dados mais populares são:

  • Tableau
  • Plotly
  • Seaborn
  • Matplotlib

Vamos conhecer melhor o dataset.

O conjunto de dados de flores Iris é um conjunto de dados multivariados introduzido pelo estatístico e biólogo britânico Ronald Fisher e consiste em 50 amostras de cada uma de três espécies de Iris (Iris Setosa, Iris virginica, e Iris versicolor). Foram medidas quatro características de cada amostra: o comprimento e a largura das sépalas e pétalas, em centímetros.

Este conjunto de dados tornou-se um caso típico de teste para muitas técnicas de classificação estatística na aprendizagem de máquinas, tais como máquinas vectoriais de suporte.

Para download do dataset: Iris Flower Dataset | Kaggle

Espécies da Flor de Iris

Faremos nossa EDA com a linguagem de programação Python.
Recomendação de Kaggle para as próximas etapas.

Importando as bibliotecas que serão usadas.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Nosso próximo passo será importar o dataset e deixá-lo guardado em uma variável chamada iris_data

iris_data = pd.read_csv("iris.csv")

Para observação básica das cinco primeiras linhas do dataset:

iris_data.head()

Para ver um número de linhas específicas de linhas, basta passar por parâmetro a quantidade de linhas que deseja visualizar: iris_data.head(10)
Para o mesmo vale para visualizar os últimos itens da tabla, basta trocar o head por tail.
Ex.: iris_data.tail(10)

Para exibir o “shape” do dataset que é o número de linhas, número de colunas, utilizamos:

iris_data.shape

O shape do dataset é (150, 6)

Para checarmos os nomes das colunas, utilizamos:

iris_data.columns
Colunas

Para verificar a quantidade de dados de cada espécie de Iris

iris_data['Species'].value_counts()
value_counts()

Como podemos observar, as três classes estão igualmente distribuídas em termos de contagem de cada classe e podemos verificar um conceito muito interessante chamado conjunto de dados e equilibrado.

O conjunto de dados equilibrado possui classes com o mesmo número (que é o nosso caso) ou quantidades similares de cada categoria, exemplificando, supomos um dataset com 1000 linhas e possui duas classes. A classe 1 corresponde a 400 linhas e a classe 2 a 600 linhas. Outros exemplos de dados equilibrados, seria 450 classe 1 e 550 classe 2.

Em casos onde a Classe 1 possua 800 linhas e a classe 2 200 linhas ou segue uma discrepância grande com relação as classes, chamamos de conjunto de dados desiquilibrados e nesse tipo de caso, o aprendizado pode ficar tendencioso à classe que possui um número maior de linhas e consequentemente “forçará” predições a esta classe.

Mais uma informação importante que devemos saber no dataset, é se possui dados faltantes e/ou nulos.

iris_data.isna().sum().sort_values(ascending=False)iris_data.isnull().sum().sort_values(ascending=False)

Os comandos retornaram a soma da ausência de valores em cada coluna que em nosso caso não possui.

Caso haja valores faltantes, é extremamente recomendado fazer a tratativa desses dados antes de seguir para o próximo passo. Nessa situação, não há uma receita de bolo, visto que cada caso é um caso e há diferentes formas de tratar os dados faltantes. Uma das formas é excluindo as linhas que possuem dados faltantes, porém, é uma tratativa um tanto quanto perigosa, pois pode-se reduzir o dataset a uma quantidade bem menor de dados que por consequência diminuirá a assertividade no nosso modelo, então siga nesse caminho com sabedoria.
Outros tipos de tratativa ( e isso vai depender do dataset) é calcular a média ou mediana da coluna e preencher os dados faltantes com esse resultado. Mas mas uma vez também é uma abordagem que precisa de cuidado, pois pode colocar valores que não corresponde à classe indicada em determinada linha.

Vamos plotar nosso dataset

# primeiro plot
plt.plot(iris_data['Species'])
plt.xlabel("Qntde. de linhas")
plt.show()
# segundo plot
plt.hist(iris["species"],color="green") # to plot a histogram
plt.show()
histograma

Podemos verificar a quantidade de linhas de cada classe que possuímos. em dois diferentes tipos de plot.

sns.set_style('whitegrid');
sns.FacetGrid(iris_data,hue='Species',size=5).map(plt.scatter,
'SepalLengthCm', 'SepalWidthCm').add_legend();
plt.show();
scaterplot

Neste segundo plot, vemos as duas característica, SepalLengthCm e SepalWidthCm, de cada classe.

sns.boxplot(x='Species',y='PetalLengthCm',data=iris_data)
plt.grid()
plt.show()
boxplot

Esse boxplot mostra a classe de acordo com os dados da coluna PetalLengthCm. Nele podemos observar se há outliers. Gosto de utilizar esse plot em cada coluna do dataset.

Outliers são dados discrepantes que aparecem fora das linhas de mínimo e máximo e podendo alterar muito os testes do nosso modelo.
É recomendo verificar os outliers se o dado faz sentido e é um caso à parte ou se está errado precisando ser tratado. Nesse caso, voltamos ao passo de tratamento dos dados e refazemos os passo até aqui.

Visualização do boxplot.
sns.set_style('whitegrid')
sns.pairplot(iris_data,hue='Species',size=1.5)
plt.show()

Há diversos tipos de plots para visualizar e analisar seu conjunto de dados e este passo é muito importante para tirar conclusões sobre e como aonde quer chegar. É muito importante para reorganizar seu dataset e otimizar para obter um melhor desempenho do seu modelo.

Se quiser conhecer mais sobre os plots disponíveis para visualização de seus dados, recomendo as seguintes bibliotecas:

Para dar continuidade, farei a modelagem desse conjunto de dados por Regresssão Linear e KNN com predição.

--

--

Marcelo Nogueira

Engenheiro de computação e estudante de ciência de dados.