24 KiB
Лабораторная работа №1. Настройка окружения и разведочный анализ данных.
Цель работы
Подготовить структуру проекта и провести разведочный анализ данных. Результаты первой лабораторной работы будут использоваться в дальнейшем цикле работ.
Подготовка
Лабораторные работы проводятся под ОС Ubuntu 22_04. Для работы на домашних компьютерах рекомендуется использовать виртуальную машину. Для этого нужно скачать VM VirtualBox.
Загрузка из готового образа
Можно воспользоваться готовым образом, установленным в лаборатории. Его можно получить в лаборатории.
Для запуска образа - открыть VirtualBox, во вкладке "Инструменты" выбрать "Добавить". В открывшемся окне указать путь до образа.
Пользовать: mainuser
Пароль: user
Создать виртуальную машину самостоятельно
Также, можно развернуть виртуальную машину самостоятельно. Для этого:
-
Скачать образ Ubuntu (~5Gb)
-
Запустить VirtualBox, в меню "Инструменты" выбрать пункт "Создать". Задать название создаваемой машины, например "Ubuntu", при необходимости изменить расположение создаваемой машины, выбрать образ ОС, скачанный в п.2.
В следующем окне задать имя пользователя (в лаборатории это mainuser) и задать пароль
В следующем окне указать количество выделяемых для машины ресурсов. Рекомендуется выделить 8Gb памяти и 6 ядер процессора.
В следующем окне выбрать "создать новый виртуальный жесткий диск, выделив на него не не менее 25Gb.
В следующем окне проверить все настройки и нажать кнопку "Готово".
- После установки запустить виртуальную машину и установить в нее VS Code Инструкция, а также Git Инструкция
Задание
- Создать директорию, в которой будет разрабатываться проект, продумав его структуру
- Создать и активировать виртуальное окружение
- Установить требуемые библиотеки
- Создать и заполнить файл
requirements.txt
- Создать файл
README.md
, в который будут записываться все основные этапы работы
- Инициализировать
git
репозитарий - Создать и заполнить файл
.gitignore
- Сделать первоначальный коммит, содержащий созданные файлы.
- Создать на
github.com
(или любом другом сервисе) удаленное хранилище - Отправить созданные коммиты в удаленное хранилище
- Загрузить локально датасет
- Провести разведочный анализ данных.
- В файл
README.md
сохранить выводы, полученные в ходе EDA - Закоммитить блокнот с EDA и другие измененные файлы в удаленный репозитарий
- Файл с обработанными данными сохранить себе на флешку или любым другим способом (файлы с данными в репозитарий НЕ СОХРАНЯЮТСЯ!)
Методические указания
0
Выбрать датасет для дальнейшей работы:
Кроме того, допускается использовать свой датасет, если он отвечает условиям:
- Решение задачи классификации или регрессии
- Табличные данные (не текст, не изображения, не видео,...)
- Не менее 7 признаков, среди котороых есть и числовые, и категориальные
- Не менее 300 объектов
1
Создадим основную директорию с проектом. Сделать это нужно в домашней директории ~/
виртуальной машины. На рабочий стол вынесен ярлык к домашней директории (Home). В ней следует создать новую папку, в которой вы будете делать ваш проект, например my_proj
. Таким образом, полный путь до вашей папки будет /home/mainuser/my_proj
или просто ~/my_proj
.
Очень удобно все действия далее по созданию файлов и папок выполнять из терминала VS Code.
Запустите VS Code, выберите пункт "Open folder", выберите созданную директорию с проектом.
Запустите новый терминал
Terminal
>New Terminal
.
Подсказки по основным командам терминала Linux на слайде лекции №2
При выполнении действий в терминале не забывайте проверять, в какой директории находитесь!
Структурируем основную директорию таким образом, чтобы все ключевые этапы, модули и данные находились в своих папках. Это улучшит читаемость проекта и дальнейшее сопровождение.
На данном этапе предлагается создать две директории: data
и eda
.
В первой будут храниться исходные данные, а также, те, которые могут в дальнейшем возникнуть в ходе создания проекта.
В директории eda
будут храниться артефакты, связанные с разведочным анализом данных: блокнот с проведенныеми исследованиями и сохраненные графики.
Текущая структура должна быть примерно следующей:
my_proj
|_____ data
|_____ eda
2
Создавать виртуальное окружение необходимо в корневой директории. Название для папки с виртуальным окружением следует выбирать таким, чтобы было понятно, для какого проекта она создается. Кроме того, чтобы папку сделать скрытой, следует первым символом в названии сделать точку, например .venv_my_proj
После создания в корневой директории проекта должна появиться новая папка c venv
:
my_proj
|_____ .venv_my_proj
|_____ data
|_____ eda
Далее следует активировать виртуальное окружение в терминале. Если оно активировано правильно, в приглашении перед именем пользователя и текщей директорией в круглых скобках будет выведено название папки с venv
:
(.venv_my_proj) andrey@andrey-lenovo:~/iis/my_proj$
3
Перед любой установкой библиотек (и сейчас, и далее, во всем цикле лабораторных) следует еще раз убедиться, что виртуальное окружение активировано (см. предыдущий пункт). Устанавливать библиотеки (пакеты) следует ТОЛЬКО В ВИРТУАЛЬНОЕ ОКРУЖЕНИЕ!
На данном шаге нам точно потребуется установить пакет pandas
, matplotlib
.
4
Чтобы иметь возможность проект развернуть на другом компьютере, вместе с кодом необходимо передать файл с зависимостями - с теми пакетами, которые необходимы для работы проекта и которые нужно установить. Стандартное название у этого файла requirements.txt
- создайте его в корневой директории.
На данном этапе в него нужно записать те пакеты, которые были установлены в предыдущем пункте. Каждый пакет записывается в новой строке. В дальнейшем вам скорее всего нужно будет доустанавливать какие-то другие библиотеки. Не забывайте после каждого pip install
обновлять файл requirements.txt
.
Хорошей практикой вместе с названием пакета указывать и его версию. Чтобы узнать, какая версия установлена в данный момент в вашем venv можно выполнить команду pip freeze
- она выведет все установленные в данный момент пикеты вместе с их версиями.
Плохой практикой является создание файла requirements.txt
как результат вывода команды pip freeze
.
pip freeze
выводит все установленные пакеты, даже те, которые подтягиваются в виде зависимостей.
Этот список может быть крайне большим и абсолютно излишним.
Компактный файл requirements.txt
, содержащий только основные требуемые пакеты, позволяет лучше понимать что происходит в вашем проекте.
На данном этапе requirements.txt
должен выглядеть примерно так:
pandas==2.2.2
matplotlib==3.9.2
Структура проекта так:
my_proj
|_____ .venv_my_proj
|_____ data
|_____ eda
|_____ requirements.txt
5
Создайте файл README.md
и начните его наполнять - добавьте описание проекта, а также те команды, которые нужно выполнить, чтобы иметь возможность дома развернуть проект и продолжить над ним работу.
Файл README.md
является "лицом проекта". Именно его содержание отображается на странице репозитория в github (и других системах). Поэтому его содеражание всегда должно быть актуальным, а структура четкой и понятной. Файл обычно пишется на языке разметки markdown
, базовый синтактис которого можно посмотреть здесь
README.md
в нашем цилке работ обязательно должен содержать такие разделы:
- Описание проекта - краткое описание того, какая задача решается
- Запуск - Как запустить проект. С указанием подробных команд: клонирование проекта из репозитория, переход в склонированную папку с проектом, установка и активация виртуального окружения, установка в окружение всех требуемых библиотек.
Шаги из данного раздела должны быть полностью корректными и актуальными. Это очень сильно пригодится вам самим, когда вы захотите по прошествие времени снова запустить этот проект :)
- Описание модулей проекта. На текущем этапе - результаты и выводы EDA. В дальнейшем добавится описание сервисов.
Обращу внимание, что файл со временем может не только дополняться, но и изменяться его структура. Но его содержание должно быть актуальным на каждом коммите. Например, сейчас в разделе "Запуск" будут те команды, которые необходимы для воспроизведения ЛР1. После выполнения очередной ЛР в нем должна быть актуальная информацию по запуску проекта из новой ЛР. При этом, откатившись к итоговому коммиту любой из лабораторных работ ожидается увидеть в файле актуальное для этой работы описание.
В дальнейшем команды для запуска будут дополняться или даже полностью меняться. Это нормально.
6
Освежить в памяти работу с git можно, например, тут
Инициализировать репозитарий следует в корневой директории проекта. После инициализации структура проекта должна выглядеть так:
my_proj
|_____ .venv_my_proj
|_____ .git
|_____ data
|_____ eda
|_____ README.md
|_____ requirements.txt
папка
.git
может не отображаться, убедиться в том что репозитарий создан, можно командойgit status
7
Добавить в корень проекта файл .gitignore
.
Сразу нужно занести в него следующие правила:
- не должны коммититься текстовые файлы с данными (расширение
.csv
) - не должны коммититься бинарные файлы с расширением
.pkl
- в коммиты не должны попадать папки с виртуальными окружениями - папки, начинающиеся с
.venv
8
Добавить созданные файлы в индекс и закоммитить изменения. Пустые папки не коммитятся, на этом этапе нам это и не нужно.
9, 10
Создать удаленный репозитарий, связать его с локальным, запушить коммит(ы).
При создании репозитария обычно дают подсказки, какими командами можно связаться с локальным. Примерно так:
git remote add origin git@github.com:remote_repo_name.git
git branch -M master
git push -u origin master
11
Загрузите в папку ./data
ваш датасет. Структура проекта должны быть следующая:
my_proj
|_____ .venv_my_proj
|_____ .git
|_____ data
| |___ dataset.csv
|
|_____ eda
|_____ .gitignore
|_____ README.md
|_____ requirements.txt
11
Создайте в папке ./eda
новый интерактивный блокнот
Структура проекта должны быть следующая:
my_proj
|_____ .venv_my_proj
|_____ .git
|_____ data
| |___ dataset.csv
|
|_____ eda
| |___ eda.ipynb
|
|_____ .gitignore
|_____ README.md
|_____ requirements.txt
12
Выполнить разведочный анализ вашего датасета.
При установке новых библиотек не забывайте обновлять файл
requirements.txt
Блокнот нужно структурировать по основынм действиям:
- Загрузка данных и знакомство с ними -
- Очистка данных
- Анализ признаков для модели
- Сохранение финального датасета
- Выводы
В загрузке и знакомстве с данными показать основные статистики, сделать выводы о признаках, выделить столбцы с числовыми признаками и категориальными, выделить столбец с целевой переменной. Проверить типы данных каждого столбца и при необходимости откорректировать их.
В очистке данных следует удалить невалидные данные, удалить или восстановить провущенные значения
Раздел "Анализ признаков для модели" должен содержать набор графиков, позволяющих сделать полезные выводы о данных, о зависимости целевой переменной от признаков. Необходимо построить не менее 5 графиков, из которых минимум один должен быть интерактивным.
Каждый график нужно сохранить в виде файла в директорию eda
.
Поле каждого графика требуется написать вывод о выявленных зависимостях. Кроме того, на этом этапе могут быть сформированы новые признаки по выявленным закономерностям.
Финальный датасет после очистки следует сохранить. Именно с очищенным датасетом мы будем работать в следующих лабораторных работах. Рекомендуется сохранить его в формате pickle
чтобы сохранилась информация о типах данных столбцов
В выводах, следует указать:
- перечислить все действия, проведенные на этапе очистки данных
- Создавались ли новые признаки?
- Какие закономерности выявлены по графикам, которые могут быть полезны в дальнейшем для решния задачи? - можно переписать все выводы, записанные после каждого графика.
13
В файл README.md
сохранить выводы, полученные в ходе EDA.
Также убедитесь, что в файле содержатся подробные инструкции по запуску проекта.
14
На данном шаге структура проекта должна быть следующая:
my_proj
|_____ .venv_my_proj
|_____ .git
|_____ data
| |___ dataset.csv
| |___ clean_dataset.pkl
|
|_____ eda
| |___ eda.ipynb
| |___ graph1.png
| |___ graph2.png
| |___ graphN.png
|
|_____ .gitignore
|_____ README.md
|_____ requirements.txt
Файлы с данными никогда не коммитятся! Во-первых, они имеют большой размер, во-вторых, они могут содержать чувствительную информацию и должны передаваться другими каналами.
Будьте аккуратны с интерактивными графиками - они могут занимать десятки мегабайт и из-за них может раздуваться размер блокнота. Перед коммитом посмотрите, сколько места занимают графики и Не комитьте графики размером более 10 Мб.
Также, чтобы не раздувать размер блокнота, загружаемого в репозитарий, рекомендуется удалить вывод этих графиков под ячейкой (нажав рядом я ячейкой на кнопку с точками и выбрав clear cell output)
Убедитесь, что файл
requirements.txt
содержит все библиотеки, используемые в проекте. Это можно сделать, например, пройдясь по инструкциямimport
в коде.
Закоммитить блокнот с EDA и другие измененные файлы в удаленный репозитарий.
15
Файлы с обработанными данными, а также большие графики, которые не попали в репозитарий сохраните себе на флешку или любым другим способом. Обратите внимание, что с этими данными вы продолжите работать в следующих лабораторных работах. Сохранность файлов на виртуальной машине НЕ ГАРАНТИРУЕТСЯ.
Контрольные вопросы
- Для чего нужен и как используется файл
requirements.txt
- Что такое "виртуальное окружение"
- Как установить виртуальное окружение для проекта
- Для чего нужен этап разведочного анализа данных? Какие цели на нем решаются?
- Какие типы графиков вы знаете и в каких случаях лучше применять тот или иной тип?