Проект по дисциплине: МДК 13.01 Основы применения методов искусственного интеллекта в программировании
Практическое занятие №3: Обработка пропущенных значений и визуализация данных.
В рамках данного практического занятия была выполнена обработка пропущенных значений в данных о пассажирах Титаника с использованием различных методов, а также визуализация данных с применением библиотек Python Matplotlib и Seaborn. Целью работы являлось получение навыков работы с пропущенными данными и визуализации для их анализа и представления.
2.1. Скрипт main.py
2.2. Скрипт missing_data_handler.py
2.3. Скрипт visualizer.py
В ходе работы применялись следующие методы обработки пропущенных значений:
- Удаление строк с пропущенными значениями: Простой, но потенциально приводящий к потере информации, метод.
- Заполнение пропущенных значений средним/медианным: Заполнение пропущенных значений статистикой по столбцу.
- Интерполяция: Заполнение пропущенных значений на основе существующих данных.
- KNN Imputation: Заполнение пропущенных значений с использованием алгоритма K ближайших соседей.
- Предсказание с использованием линейной регрессии: Использование модели машинного обучения для предсказания пропущенных значений.
Также использовались следующие методы визуализации данных:
- Тепловая карта: для визуализации матрицы пропущенных значений.
- Графики сравнения: для оценки изменений в данных после применения различных методов обработки пропусков.
Для обработки пропущенных значений и построения графиков использовались следующие алгоритмы:
- Алгоритм удаления строк: Простое удаление строк, содержащих
NaN
. - Алгоритмы вычисления среднего и медианы: Стандартные статистические алгоритмы.
- Алгоритм линейной интерполяции: Заполнение пропусков на основе линейной зависимости между соседними точками.
- Алгоритм KNN Imputation: Поиск
k
ближайших соседей для каждой записи с пропущенным значением и заполнение пропусков на основе значений соседей. - Алгоритм линейной регрессии: Обучение модели линейной регрессии для предсказания пропущенных значений.
- Модульность: Код организован в отдельные модули (
data_loader.py
,missing_data_handler.py
,feature_engineer.py
,visualizer.py
,utils.py
), что улучшает читаемость и облегчает поддержку. - Объектно-ориентированное программирование (ООП): Использованы классы для представления различных сущностей (загрузчик данных, обработчик пропущенных значений, визуализатор).
- Функциональное программирование: Использованы функции для выполнения конкретных задач (например,
print_results
).
- Предполагается, что URL, указанный для загрузки данных, является доступным и содержит корректные CSV-данные.
- Качество предсказания пропущенных значений с помощью линейной регрессии напрямую зависит от качества и релевантности выбранных предикторов.
- Python: основной язык программирования.
- Pandas: для загрузки, обработки и анализа данных.
- Scikit-learn: для использования алгоритмов машинного обучения (KNN Imputation, Linear Regression) и предварительной обработки данных (LabelEncoder, StandardScaler).
- Matplotlib: для создания статических графиков.
- Seaborn: для улучшения визуализации графиков.
Данные были взяты из открытого репозитория Seaborn по ссылке: https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv. Формат данных - CSV. Набор данных содержит информацию о пассажирах Титаника, включая их возраст, пол, класс билета, стоимость, выживаемость и другие параметры. Наличие пропущенных значений в некоторых признаках (в частности, в age
и embarked
) требует применения методов обработки пропусков.
Выполнена обработка пропущенных значений с использованием различных методов, включая удаление строк, заполнение средним/медианой, интерполяцию, KNN Imputation и предсказание с использованием линейной регрессии. Также выполнено кодирование категориальных признаков и масштабирование числовых признаков для использования в модели линейной регрессии.
Тепловая карта визуализирует распределение пропущенных значений по признакам. Позволяет увидеть, в каких столбцах больше всего пропусков.
График показывает сравнение распределения возраста до и после заполнения пропущенных значений средним.
График показывает сравнение распределения возраста до и после заполнения пропущенных значений медианой.
График показывает исходные и интерполированные значения fare
.
График показывает результаты заполнения пропусков с использованием KNN Imputation (визуализация распределения age
и fare
до и после KNN).
- Разные методы обработки пропущенных значений оказывают различное влияние на распределение данных.
- Удаление строк с пропущенными значениями может привести к значительной потере данных.
- Заполнение средним или медианой сохраняет размер датасета, но может исказить распределение.
- Интерполяция подходит для данных, где значения изменяются плавно.
- KNN Imputation учитывает значения других признаков при заполнении пропусков.
- Предсказание с использованием линейной регрессии позволяет учесть взаимосвязи между признаками, но требует предварительной подготовки данных (кодирование категориальных признаков, масштабирование).
- Использование более сложных моделей машинного обучения для предсказания пропущенных значений (например, Random Forest, Gradient Boosting).
- Оценка качества заполнения пропущенных значений с использованием кросс-валидации.
- Анализ влияния различных методов обработки пропущенных значений на результаты последующего анализа данных (например, на точность модели классификации выживаемости).
- Рассмотрение других стратегий выбора предикторов для модели линейной регрессии.
В ходе данного проекта были получены навыки работы с пропущенными данными и визуализации данных с использованием библиотек Python. Были изучены и применены различные методы обработки пропущенных значений, а также проанализировано их влияние на данные. Полученные навыки могут быть применены для решения задач анализа данных в различных областях.
Этот проект распространяется под лицензией MIT - смотрите файл LICENSE для деталей.
Бедин Владислав (MindlessMuse666)
- GitHub: MindlessMuse666
- Telegram: @mindless_muse
- Gmail: mindlessmuse.666@gmail.com