Полный гид: как работать с iris dataset в формате CSV – анализ данных

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • начинающие аналитики данных
  • преподаватели и студенты курсов по data science
  • профессионалы, желающие улучшить свои навыки анализа данных и машинного обучения

    Набор данных Iris — настоящая легенда в мире анализа данных. 📊 Эта небольшая, но невероятно информативная коллекция измерений цветков ириса стала первым шагом для тысяч аналитиков. Когда я впервые столкнулся с ним, именно его простота и многогранность открыли для меня дверь в увлекательный мир data science. Представьте: всего 150 записей о цветках, но они могут научить вас визуализации, статистическому анализу и даже построению прогнозных моделей! От загрузки CSV-файла до создания сложных классификаторов — этот гид проведет вас через весь путь освоения фундаментальных техник анализа данных.

Многие начинают путь в аналитику с теоретических знаний, но быстро теряются при работе с реальными данными. Курс «Аналитик данных» с нуля от Skypro устраняет этот разрыв, используя практические задания на таких классических наборах, как Iris Dataset. На курсе вы научитесь не только работать с разными форматами данных, но и строить интерпретируемые модели, способные принести реальную пользу бизнесу — именно те навыки, которые ищут работодатели в 2025 году.

Что такое Iris Dataset: основные характеристики набора данных

Iris Dataset — это многомерный набор данных, введенный статистиком и биологом Рональдом Фишером в 1936 году для демонстрации дискриминантного анализа. Он содержит 150 образцов трех видов ирисов (Iris setosa, Iris versicolor и Iris virginica), по 50 образцов каждого вида.

Для каждого образца измерены четыре характеристики:

  • Длина чашелистика (sepal length) в см
  • Ширина чашелистика (sepal width) в см
  • Длина лепестка (petal length) в см
  • Ширина лепестка (petal width) в см

На основе этих измерений можно классифицировать вид ириса. Интересно, что один вид (Iris setosa) линейно отделим от двух других, в то время как два остальных вида не являются линейно разделимыми друг от друга. Это делает набор данных идеальным для демонстрации алгоритмов классификации.

Особенность Описание
Размер набора 150 образцов
Количество классов 3 вида (по 50 образцов каждого)
Признаки 4 числовых показателя
Задача Классификация видов по измерениям
Сложность разделения Один класс легко отделим, два других перекрываются

Структура CSV-файла предельно проста: пять столбцов, где первые четыре содержат числовые измерения, а пятый — название вида. Отсутствие пропущенных значений и аномалий делает этот набор отличным стартовым материалом для новичков в data science. 🌸

Максим Соколов, преподаватель Data Science

Когда я только начинал свою карьеру аналитика, я не понимал важности "простых" наборов данных. На первом рабочем проекте мне поручили анализ поведения пользователей на сайте — огромный массив кликстрима с десятками различных метрик. Я погрузился в данные и... совершенно запутался.

Тогда мой руководитель посоветовал начать с основ и дал мне домашнее задание — полностью проанализировать Iris Dataset. "Это же примитив!" — подумал я. Но когда я методично прошел путь от загрузки CSV до построения моделей, я понял, насколько был неправ. Именно этот "простой" датасет научил меня правильно визуализировать распределения, проверять гипотезы и интерпретировать результаты классификации. Теперь я сам начинаю обучение своих студентов именно с этого набора данных.

Пошаговый план для смены профессии

Загрузка и первичная обработка Iris Dataset CSV

Прежде чем погрузиться в анализ, необходимо правильно загрузить и подготовить данные. В этом разделе мы рассмотрим основные шаги первичной обработки Iris Dataset в формате CSV.

Существует несколько способов получить Iris Dataset:

  • Загрузить из официального репозитория UCI Machine Learning Repository
  • Использовать встроенные наборы данных в библиотеках (scikit-learn, seaborn)
  • Скачать CSV-файл с GitHub или других ресурсов

Для загрузки CSV-файла в Python можно использовать библиотеку pandas:

Python
Скопировать код
import pandas as pd

# Вариант 1: Загрузка из локального файла
iris_df = pd.read_csv('iris.csv')

# Вариант 2: Загрузка напрямую из URL
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
column_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris_df = pd.read_csv(url, header=None, names=column_names)

# Просмотр первых 5 строк
print(iris_df.head())

После загрузки необходимо выполнить первичную обработку данных:

  1. Изучить структуру датасета — проверить размерность, типы данных и уникальные значения
  2. Проверить наличие пропущенных значений — в Iris Dataset их обычно нет, но это важный шаг для любого анализа
  3. Изучить базовые статистики — оценить средние значения, медианы и разброс данных
  4. Подготовить данные для дальнейшего анализа — разделить признаки и целевую переменную
Python
Скопировать код
# Изучение структуры датасета
print(iris_df.shape) # (150, 5)
print(iris_df.dtypes)

# Проверка пропущенных значений
print(iris_df.isnull().sum())

# Базовые статистики
print(iris_df.describe())

# Подсчет образцов каждого класса
print(iris_df['species'].value_counts())

# Подготовка данных для анализа
X = iris_df.drop('species', axis=1) # Признаки
y = iris_df['species'] # Целевая переменная

Особенность работы с Iris Dataset — необходимость правильной интерпретации имен классов. В зависимости от источника, классы могут быть представлены как 'Iris-setosa', 'Iris-versicolor' и 'Iris-virginica' или просто 'setosa', 'versicolor' и 'virginica'. 🔍

Для некоторых задач также полезно нормализовать числовые признаки, так как они имеют разные диапазоны values:

Python
Скопировать код
from sklearn.preprocessing import StandardScaler

# Нормализация признаков
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Преобразование обратно в DataFrame для удобства
X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)
print(X_scaled_df.head())

Методы визуализации Iris Dataset для анализа данных

Визуализация — ключевой этап анализа данных, позволяющий увидеть закономерности, которые могут быть не очевидны из таблиц и статистик. Для Iris Dataset существует ряд эффективных методов визуализации, помогающих понять структуру и особенности данных. 📈

Начнём с самых базовых визуализаций — гистограмм и ящиков с усами для каждого признака:

Python
Скопировать код
import matplotlib.pyplot as plt
import seaborn as sns

# Настройка стиля
sns.set(style="whitegrid")

# Гистограммы для каждого признака с разбивкой по видам
plt.figure(figsize=(12, 8))
for i, feature in enumerate(iris_df.columns[:-1]):
plt.subplot(2, 2, i+1)
sns.histplot(data=iris_df, x=feature, hue='species', kde=True)
plt.title(f'Распределение {feature}')
plt.tight_layout()
plt.show()

# Ящики с усами для сравнения распределений
plt.figure(figsize=(12, 6))
for i, feature in enumerate(iris_df.columns[:-1]):
plt.subplot(1, 4, i+1)
sns.boxplot(data=iris_df, y=feature, x='species')
plt.title(f'{feature} по видам')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Более продвинутые методы визуализации помогают увидеть взаимосвязи между признаками:

Метод визуализации Назначение Интерпретация
Парные диаграммы рассеяния Показывают взаимосвязи между всеми парами признаков Позволяют выявить группировку классов и корреляции
Корреляционная тепловая карта Визуализирует матрицу корреляций признаков Помогает определить зависимые признаки
Диаграммы скрипичного графика Объединяет ящик с усами и график плотности Даёт детальное представление о распределении
Визуализация в пространстве главных компонент Уменьшает размерность для визуализации в 2D/3D Выявляет глобальную структуру данных

Реализация этих методов в коде:

Python
Скопировать код
# Парные диаграммы рассеяния
sns.pairplot(iris_df, hue='species', height=2.5)
plt.suptitle('Парные диаграммы рассеяния признаков Iris Dataset', y=1.02)
plt.show()

# Корреляционная тепловая карта
plt.figure(figsize=(8, 6))
corr = iris_df.drop('species', axis=1).corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Корреляционная матрица признаков')
plt.show()

# Визуализация в пространстве главных компонент
from sklearn.decomposition import PCA

# Применение PCA для уменьшения размерности до 2
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Создание DataFrame для визуализации
pca_df = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
pca_df['species'] = iris_df['species'].values

# Визуализация результатов PCA
plt.figure(figsize=(10, 8))
sns.scatterplot(data=pca_df, x='PC1', y='PC2', hue='species', style='species', s=100)
plt.title('PCA: проекция Iris Dataset на двумерное пространство')

# Добавление информации о доле объяснённой дисперсии
explained_variance = pca.explained_variance_ratio_ * 100
plt.xlabel(f'PC1: {explained_variance[0]:.2f}% объяснённой дисперсии')
plt.ylabel(f'PC2: {explained_variance[1]:.2f}% объяснённой дисперсии')
plt.show()

Анализируя эти визуализации, можно заметить несколько важных закономерностей:

  • Признаки, связанные с лепестками (petal length и petal width), имеют большую дискриминационную способность для различения видов, чем признаки чашелистиков
  • Iris setosa чётко отделяется от других видов во всех проекциях, связанных с размерами лепестков
  • Между признаками petal length и petal width наблюдается сильная положительная корреляция
  • Versicolor и virginica species частично перекрываются, что объясняет сложность их линейного разделения

Анна Волкова, аналитик данных

На собеседовании в крупную ритейл-компанию мне дали тестовое задание — проанализировать причины отказа клиентов от скидочных карт. Данные были обезличены, но структурированы. Я начала с нескольких стандартных гистограмм, но не увидела ничего интересного.

Тогда я вспомнила подход, который использовала при анализе Iris Dataset — применила парную визуализацию всех признаков с разделением по целевому классу. И вот тут возник настоящий инсайт! На одной из диаграмм рассеяния чётко выделились три отдельных кластера клиентов, которые отказывались от карт по совершенно разным причинам.

Этот метод визуализации, который я отточила именно на наборе Iris, позволил мне обнаружить неочевидный паттерн и предложить три различные стратегии удержания для разных сегментов. Меня взяли на работу, а спустя три месяца одна из предложенных стратегий увеличила сохранение клиентов на 24%.

Применение статистических методов к Iris Dataset CSV

Статистический анализ Iris Dataset позволяет построить фундамент для более сложных методов машинного обучения и обосновать выбор признаков для моделирования. Рассмотрим ключевые статистические методы, применимые к этому набору данных. 📊

Начнем с описательной статистики для каждого вида ирисов:

Python
Скопировать код
# Группировка и описательная статистика по видам
grouped_stats = iris_df.groupby('species').describe()
print(grouped_stats)

# Или более компактно, для конкретных показателей
for species in iris_df['species'].unique():
print(f"\nСтатистика для {species}:")
species_data = iris_df[iris_df['species'] == species].drop('species', axis=1)
print(species_data.agg(['mean', 'median', 'std', 'min', 'max']).round(2))

Для проверки статистической значимости различий между видами можно применить дисперсионный анализ (ANOVA):

Python
Скопировать код
import scipy.stats as stats

# Применение ANOVA для каждого признака
for feature in iris_df.columns[:-1]:
# Создание групп для каждого вида
setosa = iris_df[iris_df['species'] == 'Iris-setosa'][feature]
versicolor = iris_df[iris_df['species'] == 'Iris-versicolor'][feature]
virginica = iris_df[iris_df['species'] == 'Iris-virginica'][feature]

# Проведение однофакторного дисперсионного анализа
f_stat, p_value = stats.f_oneway(setosa, versicolor, virginica)

print(f"ANOVA для признака {feature}:")
print(f"F-статистика: {f_stat:.4f}, p-value: {p_value:.10f}")
print(f"Различия статистически значимы: {p_value < 0.05}\n")

Для многомерного статистического анализа можно использовать дискриминантный анализ, который был изначально применен Фишером к этому набору данных:

Python
Скопировать код
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# Применение линейного дискриминантного анализа
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)

# Создание DataFrame для визуализации
lda_df = pd.DataFrame(data=X_lda, columns=['LD1', 'LD2'])
lda_df['species'] = iris_df['species'].values

# Визуализация результатов LDA
plt.figure(figsize=(10, 8))
sns.scatterplot(data=lda_df, x='LD1', y='LD2', hue='species', style='species', s=100)
plt.title('Дискриминантный анализ Фишера для Iris Dataset')
plt.show()

# Оценка важности признаков из LDA
print("Коэффициенты дискриминантных функций:")
print(pd.DataFrame(lda.coef_, columns=X.columns, index=lda.classes_))

Для исследования корреляций между признаками можно использовать ранговую корреляцию Спирмена, которая менее чувствительна к выбросам:

Python
Скопировать код
# Расчет ранговой корреляции Спирмена
spearman_corr = X.corr(method='spearman')

# Визуализация
plt.figure(figsize=(8, 6))
sns.heatmap(spearman_corr, annot=True, cmap='viridis')
plt.title('Ранговая корреляция Спирмена между признаками')
plt.show()

Важные статистические выводы из анализа Iris Dataset:

  • Все признаки показывают статистически значимые различия между видами (p-value < 0.001 для всех ANOVA-тестов)
  • Признаки petal length и petal width имеют наибольшую дискриминационную силу
  • Коэффициент вариации для признаков лепестков выше, чем для чашелистиков
  • Между некоторыми признаками (особенно связанными с лепестками) существует сильная положительная корреляция
  • Для вида Iris setosa наблюдается наименьшая внутригрупповая вариация

Анализируя результаты статистических тестов, можно построить более обоснованные модели классификации, основанные на понимании распределения признаков и их взаимосвязей. 🧮

Не уверены, как применить полученные статистические знания на практике? Пройдите Тест на профориентацию от Skypro и узнайте, подходит ли вам карьера аналитика данных. Тест определит ваши сильные стороны в работе со статистическими концепциями и предложит оптимальное направление развития в сфере аналитики. Получите персонализированные рекомендации по развитию вашей карьеры на основе ваших аналитических способностей!

Создание моделей классификации на основе Iris Dataset

Построение моделей классификации — кульминация анализа Iris Dataset. Полученные модели помогают не только автоматически определять виды ирисов, но и понять, какие признаки наиболее важны для классификации. 🤖

Начнем с подготовки данных для моделирования и разделения на обучающую и тестовую выборки:

Python
Скопировать код
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

# Разделение признаков и целевой переменной
X = iris_df.drop('species', axis=1)
y = iris_df['species']

# Разделение на обучающую и тестовую выборку (70/30)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# Стандартизация признаков
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

print(f"Размер обучающей выборки: {X_train.shape[0]} образцов")
print(f"Размер тестовой выборки: {X_test.shape[0]} образцов")

Сравним несколько алгоритмов классификации, чтобы выбрать наиболее эффективный:

Python
Скопировать код
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Создание и обучение моделей
models = {
"Логистическая регрессия": LogisticRegression(max_iter=1000),
"k-ближайших соседей": KNeighborsClassifier(n_neighbors=3),
"Дерево решений": DecisionTreeClassifier(),
"Метод опорных векторов": SVC(),
"Случайный лес": RandomForestClassifier()
}

# Обучение и оценка каждой модели
for name, model in models.items():
# Обучение модели
model.fit(X_train_scaled, y_train)

# Прогноз на тестовой выборке
y_pred = model.predict(X_test_scaled)

# Оценка точности
accuracy = accuracy_score(y_test, y_pred)

print(f"\nМодель: {name}")
print(f"Точность: {accuracy:.4f}")
print("Отчет по классификации:")
print(classification_report(y_test, y_pred))

# Матрица ошибок
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=model.classes_, yticklabels=model.classes_)
plt.title(f'Матрица ошибок: {name}')
plt.ylabel('Истинный класс')
plt.xlabel('Предсказанный класс')
plt.show()

Для более глубокого анализа моделей и выбора оптимальных гиперпараметров можно использовать перекрестную проверку и поиск по сетке:

Python
Скопировать код
from sklearn.model_selection import GridSearchCV

# Пример поиска оптимальных параметров для SVM
param_grid = {
'C': [0\.1, 1, 10, 100],
'gamma': [0\.01, 0.1, 1, 'scale', 'auto'],
'kernel': ['rbf', 'linear', 'poly']
}

svm = SVC()
grid_search = GridSearchCV(svm, param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train_scaled, y_train)

print("Лучшие параметры для SVM:")
print(grid_search.best_params_)
print(f"Лучшая точность при перекрестной проверке: {grid_search.best_score_:.4f}")

# Оценка модели с лучшими параметрами на тестовой выборке
best_svm = grid_search.best_estimator_
y_pred = best_svm.predict(X_test_scaled)
print(f"Точность на тестовых данных: {accuracy_score(y_test, y_pred):.4f}")

Анализ важности признаков для интерпретируемых моделей, таких как дерево решений:

Python
Скопировать код
# Обучение дерева решений
dt = DecisionTreeClassifier(max_depth=4)
dt.fit(X_train, y_train)

# Визуализация дерева решений
from sklearn.tree import plot_tree

plt.figure(figsize=(15, 10))
plot_tree(dt, filled=True, feature_names=X.columns, class_names=dt.classes_, rounded=True)
plt.title('Дерево решений для классификации видов Iris')
plt.show()

# Важность признаков
importances = pd.DataFrame({
'Признак': X.columns,
'Важность': dt.feature_importances_
}).sort_values(by='Важность', ascending=False)

plt.figure(figsize=(10, 6))
sns.barplot(data=importances, x='Важность', y='Признак')
plt.title('Важность признаков в модели дерева решений')
plt.show()

Сравнение результатов различных моделей показывает:

  • Большинство классификаторов достигает точности выше 95% даже без тщательной настройки
  • SVM и k-NN часто показывают наилучшие результаты на Iris Dataset
  • Модели с линейной разделяющей поверхностью испытывают трудности с разделением versicolor и virginica
  • Все модели безошибочно классифицируют Iris setosa
  • Важнейшими признаками для классификации оказываются параметры лепестков (petal length и petal width)

После выбора оптимальной модели можно сохранить её для будущего использования:

Python
Скопировать код
import joblib

# Сохранение лучшей модели и скалера
best_model = grid_search.best_estimator_
joblib.dump(best_model, 'iris_classifier.pkl')
joblib.dump(scaler, 'iris_scaler.pkl')

# Пример использования сохраненной модели
loaded_model = joblib.load('iris_classifier.pkl')
loaded_scaler = joblib.load('iris_scaler.pkl')

# Предсказание для нового образца
new_sample = [[5\.1, 3.5, 1.4, 0.2]] # Примерные измерения для Iris setosa
new_sample_scaled = loaded_scaler.transform(new_sample)
prediction = loaded_model.predict(new_sample_scaled)
print(f"Предсказанный вид: {prediction[0]}")

Понимая силу и ограничения различных моделей классификации, вы сможете уверенно применять эти знания к гораздо более сложным наборам данных в реальных проектах. 🔬

Работа с Iris Dataset — это только начало пути в анализе данных и машинном обучении. Методики, которые вы изучили, масштабируются на наборы данных любой сложности. От базовой визуализации до тонкой настройки моделей классификации — эти навыки составляют ядро компетенций современного аналитика. Помните: простота Iris Dataset скрывает важные уроки об интерпретации данных, выборе признаков и оценке моделей. Применяйте эти принципы в своих проектах, и вы увидите, как аналитический подход преображает понимание данных.

Загрузка...