Análisis de datos exploratorios en el conjunto de datos Iris

En este artículo, discutiremos cómo realizar un análisis exploratorio de datos en el conjunto de datos de Iris. Antes de continuar con este artículo, hemos utilizado dos términos, es decir, EDA e Iris Dataset. Veamos un resumen sobre estos conjuntos de datos.

¿Qué es el análisis exploratorio de datos?

El análisis exploratorio de datos (EDA) es una técnica para analizar datos utilizando algunas técnicas visuales. Con esta técnica podemos obtener información detallada sobre el resumen estadístico de los datos. También podremos tratar con los valores duplicados, valores atípicos y también ver algunas tendencias o patrones presentes en el conjunto de datos.

Ahora veamos un resumen sobre el conjunto de datos de Iris.

Conjunto de datos de iris

Si tiene experiencia en ciencia de datos, todos deben estar familiarizados con el conjunto de datos de Iris. Si no es así, no se preocupe, discutiremos esto aquí.

Iris Dataset es considerado como el Hola Mundo para la ciencia de datos. Contiene cinco columnas, a saber: Longitud del pétalo, Ancho del pétalo, Longitud del sépalo, Ancho del sépalo y Tipo de especie. Iris es una planta con flores, los investigadores midieron varias características de las diferentes flores de iris y las registraron digitalmente.

Nota: Este conjunto de datos se puede descargar desde aquí .

Puede descargar el archivo Iris.csv desde el enlace anterior. Ahora usaremos la biblioteca de Pandas para cargar este archivo CSV y lo convertiremos en el marco de datos . El método read_csv() se utiliza para leer archivos CSV.

Ejemplo:

Python3

import pandas as pd
  
# Reading the CSV file
df = pd.read_csv("Iris.csv")
  
# Printing top 5 rows
df.head()

Producción:

read csv eda iris

Obtener información sobre el conjunto de datos

Usaremos el parámetro de forma para obtener la forma del conjunto de datos.

Ejemplo:

Python3

df.shape

Producción:

(150, 6)

Podemos ver que el marco de datos contiene 6 columnas y 150 filas.

Ahora, veamos también las columnas y sus tipos de datos. Para ello, utilizaremos el método info() .

Ejemplo:

Python3

df.info()

Producción:

iris info EDA

Podemos ver que solo una columna tiene datos categóricos y todas las demás columnas son de tipo numérico con entradas no nulas.

Obtengamos un resumen estadístico rápido del conjunto de datos usando el método describe() . La función describe() aplica cálculos estadísticos básicos en el conjunto de datos, como valores extremos, conteo de puntos de datos, desviación estándar, etc. Cualquier valor faltante o valor de NaN se omite automáticamente. describe() da una buena imagen de la distribución de datos.

Ejemplo:

Python3

df.describe()

Producción:

iris describe EDA

Podemos ver el recuento de cada columna junto con su valor medio, desviación estándar, valores mínimo y máximo.

Comprobación de valores faltantes

Verificaremos si nuestros datos contienen valores faltantes o no. Los valores faltantes pueden ocurrir cuando no se proporciona información para uno o más elementos o para una unidad completa. Usaremos el método isnull() .

Ejemplo:

Python3

df.isnull().sum()

Producción:

missing value iris EDA

Podemos ver que ninguna columna tiene ningún valor faltante.

Nota: Para obtener más información, consulte Trabajar con datos faltantes en Pandas .

Comprobación de duplicados

Veamos si nuestro conjunto de datos contiene duplicados o no. El método pandas drop_duplicates() ayuda a eliminar duplicados del marco de datos.

Ejemplo:

Python3

data = df.drop_duplicates(subset ="Species",)
data

Producción:

iris duplicates EDA

Podemos ver que solo hay tres especies únicas. Veamos si el conjunto de datos está equilibrado o no, es decir, todas las especies contienen la misma cantidad de filas o no. Usaremos la función Series.value_counts() . Esta función devuelve una serie que contiene recuentos de valores únicos. 

Ejemplo:

Python3

df.value_counts("Species")

Producción:

value count iris EDA

Podemos ver que todas las especies contienen la misma cantidad de filas, por lo que no debemos eliminar ninguna entrada.

Visualización de datos

Visualización de la columna de destino

Nuestra columna objetivo será la columna Especie porque al final necesitaremos el resultado solo según la especie. Veamos un diagrama de conteo para especies.

Nota: Usaremos Matplotlib y la biblioteca Seaborn para la visualización de datos. Si desea conocer estos módulos, consulte los artículos: 

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.countplot(x='Species', data=df, )
plt.show()

Producción:

countplot iris EDA

Relación entre variables

Veremos la relación entre el largo y el ancho del sépalo y también entre el largo y el ancho del pétalo.

Ejemplo 1: Comparación de la longitud y el ancho del sépalo

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.scatterplot(x='SepalLengthCm', y='SepalWidthCm',
                hue='Species', data=df, )
  
# Placing Legend outside the Figure
plt.legend(bbox_to_anchor=(1, 1), loc=2)
  
plt.show()

Producción:

relation between variables iris EDA

De la gráfica anterior, podemos inferir que: 

  • La especie Setosa tiene longitudes de sépalos más pequeños pero anchos de sépalos más grandes.
  • La especie Versicolor se encuentra en el medio de las otras dos especies en términos de longitud y anchura del sépalo.
  • La especie Virginica tiene longitudes de sépalos más grandes pero anchos de sépalos más pequeños.

Ejemplo 2: Comparación de la longitud y el ancho de los pétalos

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.scatterplot(x='PetalLengthCm', y='PetalWidthCm',
                hue='Species', data=df, )
  
# Placing Legend outside the Figure
plt.legend(bbox_to_anchor=(1, 1), loc=2)
  
plt.show()

Producción:

relation between variables peta iris EDA

De la gráfica anterior, podemos inferir que: 

  • La especie Setosa tiene longitudes y anchos de pétalos más pequeños.
  • La especie Versicolor se encuentra en el medio de las otras dos especies en términos de largo y ancho de los pétalos.
  • La especie Virginica tiene la mayor longitud y anchura de pétalos.

Grafiquemos todas las relaciones de la columna usando un diagrama de pares. Se puede utilizar para el análisis multivariante.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.pairplot(df.drop(['Id'], axis = 1), 
             hue='Species', height=2)

Producción:

pairplot iris EDA

Podemos ver muchos tipos de relaciones en este diagrama, como que la especie Seotsa tiene los pétalos más pequeños de ancho y largo. También tiene la longitud de sépalo más pequeña pero el ancho de sépalo más grande. Dicha información se puede recopilar sobre cualquier otra especie.

Histogramas

Los histogramas permiten ver la distribución de datos para varias columnas. Se puede utilizar para análisis uni y bivariados.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
fig, axes = plt.subplots(2, 2, figsize=(10,10))
  
axes[0,0].set_title("Sepal Length")
axes[0,0].hist(df['SepalLengthCm'], bins=7)
  
axes[0,1].set_title("Sepal Width")
axes[0,1].hist(df['SepalWidthCm'], bins=5);
  
axes[1,0].set_title("Petal Length")
axes[1,0].hist(df['PetalLengthCm'], bins=6);
  
axes[1,1].set_title("Petal Width")
axes[1,1].hist(df['PetalWidthCm'], bins=6);

Producción:

histogram iris EDA

De la gráfica anterior, podemos ver que: 

  • La frecuencia más alta de la longitud del sépalo está entre 30 y 35 que está entre 5,5 y 6
  • La frecuencia más alta del ancho del sépalo es de alrededor de 70, que está entre 3,0 y 3,5.
  • La frecuencia más alta de la longitud del pétalo es alrededor de 50, que está entre 1 y 2
  • La frecuencia más alta del ancho del pétalo está entre 40 y 50, que está entre 0,0 y 0,5

Histogramas con Distplot Plot

Distplot se usa básicamente para el conjunto univariante de observaciones y lo visualiza a través de un histograma, es decir, solo una observación y, por lo tanto, elegimos una columna particular del conjunto de datos.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
plot = sns.FacetGrid(df, hue="Species")
plot.map(sns.distplot, "SepalLengthCm").add_legend()
  
plot = sns.FacetGrid(df, hue="Species")
plot.map(sns.distplot, "SepalWidthCm").add_legend()
  
plot = sns.FacetGrid(df, hue="Species")
plot.map(sns.distplot, "PetalLengthCm").add_legend()
  
plot = sns.FacetGrid(df, hue="Species")
plot.map(sns.distplot, "PetalWidthCm").add_legend()
  
plt.show()

Producción:

distplot iris EDAdisplot iris EDA

De las gráficas anteriores, podemos ver que: 

  • En el caso de Sepal Length, hay una gran cantidad de superposiciones.
  • En el caso de Sepal Width también, hay una gran cantidad de superposición.
  • En el caso de Longitud de pétalo, hay muy poca superposición.
  • En el caso de Petal Width también, hay muy poca superposición.

Entonces podemos usar la longitud del pétalo y el ancho del pétalo como característica de clasificación.

Correlación de manejo

Pandas dataframe.corr() se usa para encontrar la correlación por pares de todas las columnas en el marco de datos. Cualquier valor NA se excluye automáticamente. Para cualquier columna de tipo de datos no numérico en el marco de datos, se ignora.

Ejemplo:

Python3

data.corr(method='pearson')

Producción:

iris corr EDA

mapas de calor

El mapa de calor es una técnica de visualización de datos que se utiliza para analizar el conjunto de datos como colores en dos dimensiones. Básicamente, muestra una correlación entre todas las variables numéricas en el conjunto de datos. En términos más simples, podemos trazar la correlación encontrada anteriormente usando los mapas de calor.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.heatmap(df.corr(method='pearson').drop(
  ['Id'], axis=1).drop(['Id'], axis=0),
            annot = True);
  
plt.show()

Producción:

heatmap iris EDA

En el gráfico anterior, podemos ver que:

  • El ancho del pétalo y la longitud del pétalo tienen altas correlaciones. 
  • La longitud del pétalo y el ancho del sépalo tienen buenas correlaciones.
  • El ancho del pétalo y la longitud del sépalo tienen buenas correlaciones.

Diagramas de caja

Podemos usar diagramas de caja para ver cómo se distribuye el valor categórico con otros valores numéricos.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
def graph(y):
    sns.boxplot(x="Species", y=y, data=df)
  
plt.figure(figsize=(10,10))
      
# Adding the subplot at the specified
# grid position
plt.subplot(221)
graph('SepalLengthCm')
  
plt.subplot(222)
graph('SepalWidthCm')
  
plt.subplot(223)
graph('PetalLengthCm')
  
plt.subplot(224)
graph('PetalWidthCm')
  
plt.show()

Producción:

boxplot iris EDA

En el gráfico anterior, podemos ver que: 

  • La especie Setosa tiene las características más pequeñas y menos distribuidas con algunos valores atípicos.
  • La especie Versicolor tiene las características medias.
  • Especie Virginica tiene las características más altas

Manejo de valores atípicos

Un valor atípico es un elemento/objeto de datos que se desvía significativamente del resto de los objetos (llamados normales). Pueden ser causados ​​por errores de medición o de ejecución. El análisis para la detección de valores atípicos se denomina minería de valores atípicos. Hay muchas formas de detectar los valores atípicos, y el proceso de eliminación es el marco de datos igual que eliminar un elemento de datos del marco de datos del panda.

Consideremos el conjunto de datos del iris y tracemos el diagrama de caja para la columna SepalWidthCm.

Ejemplo:

Python3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
sns.boxplot(x='SepalWidthCm', data=df)

Producción:

En el gráfico anterior, los valores por encima de 4 y por debajo de 2 actúan como valores atípicos.

Eliminación de valores atípicos

Para eliminar el valor atípico, se debe seguir el mismo proceso de eliminar una entrada del conjunto de datos usando su posición exacta en el conjunto de datos porque en todos los métodos anteriores para detectar los valores atípicos, el resultado final es la lista de todos los elementos de datos que satisfacen la definición de valor atípico. según el método utilizado.

Ejemplo: Detectaremos los valores atípicos usando IQR y luego los eliminaremos. También dibujaremos el diagrama de caja para ver si se eliminan los valores atípicos o no.

Python3

# Importing
import sklearn
from sklearn.datasets import load_boston
import pandas as pd
import seaborn as sns
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
# IQR
Q1 = np.percentile(df['SepalWidthCm'], 25,
                interpolation = 'midpoint')
  
Q3 = np.percentile(df['SepalWidthCm'], 75,
                interpolation = 'midpoint')
IQR = Q3 - Q1
  
print("Old Shape: ", df.shape)
  
# Upper bound
upper = np.where(df['SepalWidthCm'] >= (Q3+1.5*IQR))
  
# Lower bound
lower = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR))
  
# Removing the Outliers
df.drop(upper[0], inplace = True)
df.drop(lower[0], inplace = True)
  
print("New Shape: ", df.shape)
  
sns.boxplot(x='SepalWidthCm', data=df)

Producción:

remove outliers EDA

Nota: para obtener más información, consulte Detectar y eliminar los valores atípicos mediante Python

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *