29 KiB
Шаг 1. Анализ сведений о каждом наборе данных со страницы Kaggle¶
1.1 Оценки студентов на экзаменах:¶
Тематика: Анализ образовательной успеваемости. Объекты наблюдения: Студенты. Атрибуты: Пол, этническая принадлежность, уровень образования родителей, подготовка к тесту, оценки по математике, чтению и письму. Цель: Понять факторы, влияющие на академическую успеваемость.
1.2 Цены на бриллианты:¶
Тематика: Рынок драгоценных камней. Объекты наблюдения: Бриллианты. Атрибуты: Вес (карат), цвет, чистота, качество огранки, цена. Цель: Предсказать цену на основе характеристик.
1.3 Данные по инсультам:¶
Тематика: Здоровье. Объекты наблюдения: Пациенты. Атрибуты: Пол, возраст, наличие хронических заболеваний, привычки (например, курение), наличие инсульта. Цель: Предсказать вероятность инсульта.
import pandas as pd
# Загрузка датасетов
students_data = pd.read_csv("../data\StudentsPerformance.csv")
diamonds_data = pd.read_csv("../data\Diamonds Prices2022.csv")
stroke_data = pd.read_csv("../data\healthcare-dataset-stroke-data.csv")
# Информация о наборах данных
for name, dataset in {"Students": students_data, "Diamonds": diamonds_data, "Stroke": stroke_data}.items():
print(f"--- {name} ---")
print(dataset.info())
print(dataset.isnull().sum())
print(dataset.describe())
Шаг 3. Примеры бизнес-целей¶
Оценки студентов: Рекомендации по обучению для повышения успеваемости. Цены на бриллианты: Оценка стоимости для продаж. Данные по инсультам: повышения эффективности здравоохранения
Шаг 4. Цели технического проекта¶
Примеры: Оценки студентов: Вход: Данные о студентах. Целевой признак: Оценки. Цены на бриллианты: Вход: Характеристики бриллиантов. Целевой признак: Цена. Данные по инсультам: Вход: Данные о пациентах. Целевой признак: Наличие инсульта.
# Анализ выбросов и пропущенных данных
for name, dataset in {"Students": students_data, "Diamonds": diamonds_data, "Stroke": stroke_data}.items():
print(f"--- {name} ---")
print("Пропущенные значения:\n", dataset.isnull().sum())
print("Выбросы и статистика:\n", dataset.describe())
# Анализ выбросов и пропущенных данных
for name, dataset in {"Students": students_data, "Diamonds": diamonds_data, "Stroke": stroke_data}.items():
print(f"--- {name} ---")
print("Пропущенные значения:\n", dataset.isnull().sum())
print("Выбросы и статистика:\n", dataset.describe())
students_data = students_data.dropna()
diamonds_data = diamonds_data.dropna()
stroke_data = stroke_data.dropna()
Данные в целом довольно качественные, без значителньых выбросов или пропущенных значений. Информативность находится на достаточном уровне, датасеты пригодны для дальнейшего анализа¶
for name, dataset in {"Students": students_data, "Diamonds": diamonds_data, "Stroke": stroke_data}.items():
print(f"--- {name} ---")
print("Статистика после очистки:\n", dataset.describe())
from sklearn.model_selection import train_test_split
students_train, students_test = train_test_split(students_data, test_size=0.2, stratify=students_data['gender'])
diamonds_train, diamonds_test = train_test_split(diamonds_data, test_size=0.2, stratify=diamonds_data['cut'])
stroke_train, stroke_test = train_test_split(stroke_data, test_size=0.2, stratify=stroke_data['stroke'])
from imblearn.over_sampling import RandomOverSampler
# Балансировка данных
oversampler = RandomOverSampler(random_state=42)
X_train, y_train = oversampler.fit_resample(stroke_train.drop(columns=['stroke']), stroke_train['stroke'])
from imblearn.under_sampling import RandomUnderSampler
# Пример oversampling и undersampling
oversampler = RandomOverSampler(random_state=42)
undersampler = RandomUnderSampler(random_state=42)
X_over, y_over = oversampler.fit_resample(X_train, y_train)
X_under, y_under = undersampler.fit_resample(X_train, y_train)