master
Родитель
574e9b707b
Сommit
636ec3dfe5
@ -0,0 +1,294 @@
|
|||||||
|
# Лабораторная работа №1. Настройка окружения и разведочный анализ данных.
|
||||||
|
|
||||||
|
## Цель работы
|
||||||
|
Подготовить структуру проекта и провести разведочный анализ данных. Результаты первой лабораторной работы будут использоваться в дальнейшем цикле работ.
|
||||||
|
|
||||||
|
## Подготовка
|
||||||
|
Лабораторные работы проводятся под ОС Ubuntu 22_04.
|
||||||
|
Для работы на домашних компьютерах рекомендуется использовать виртуальную машину. Для этого нужно скачать [VM VirtualBox](https://www.virtualbox.org/wiki/Downloads).
|
||||||
|
|
||||||
|
### Загрузка из готового образа
|
||||||
|
Можно воспользоваться готовым образом, установленным в лаборатории. Его можно получить в лаборатории.
|
||||||
|
|
||||||
|
Для запуска образа - открыть VirtualBox, во вкладке "Инструменты" выбрать "Добавить". В открывшемся окне указать путь до образа.
|
||||||
|
|
||||||
|
```
|
||||||
|
Пользовать: mainuser
|
||||||
|
Пароль: user
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создать виртуальную машину самостоятельно
|
||||||
|
Также, можно развернуть виртуальную машину самостоятельно. Для этого:
|
||||||
|
|
||||||
|
1) Скачать [образ Ubuntu](https://releases.ubuntu.com/22.04/?_gl=1*mq5vpt*_gcl_au*MTMzMTcyODYxMS4xNzI2ODUwMDQw&_ga=2.106214661.763905817.1726850040-745176292.1717007080) (~5Gb)
|
||||||
|
|
||||||
|
2) Запустить VirtualBox, в меню "Инструменты" выбрать пункт "Создать". Задать название создаваемой машины, например "Ubuntu", при необходимости изменить расположение создаваемой машины, выбрать образ ОС, скачанный в п.2.
|
||||||
|
|
||||||
|
В следующем окне задать имя пользователя (в лаборатории это mainuser) и задать пароль
|
||||||
|
|
||||||
|
В следующем окне указать количество выделяемых для машины ресурсов.
|
||||||
|
Рекомендуется выделить 8Gb памяти и 6 ядер процессора.
|
||||||
|
|
||||||
|
В следующем окне выбрать "создать новый виртуальный жесткий диск, выделив на него не не менее 25Gb.
|
||||||
|
|
||||||
|
В следующем окне проверить все настройки и нажать кнопку "Готово".
|
||||||
|
|
||||||
|
3) После установки запустить виртуальную машину и установить в нее VS Code [Инструкция](https://code.visualstudio.com/docs/setup/linux), а также Git [Инструкция](https://git-scm.com/download/linux)
|
||||||
|
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
1. Создать директорию, в которой будет разрабатываться проект, продумав его структуру
|
||||||
|
2. Создать и активировать виртуальное окружение
|
||||||
|
3. Установить требуемые библиотеки
|
||||||
|
4. Создать и заполнить файл `requirements.txt`
|
||||||
|
5. Создать файл `README.md`, в который будут записываться все основные этапы работы
|
||||||
|
-----
|
||||||
|
6. Инициализировать `git` репозитарий
|
||||||
|
7. Создать и заполнить файл `.gitignore`
|
||||||
|
8. Сделать первоначальный коммит, содержащий созданные файлы.
|
||||||
|
9. Создать на `github.com` (или любом другом сервисе) удаленное хранилище
|
||||||
|
10. Отправить созданные коммиты в удаленное хранилище
|
||||||
|
-----
|
||||||
|
11. Загрузить локально датасет
|
||||||
|
12. Провести разведочный анализ данных.
|
||||||
|
13. В файл `README.md` сохранить выводы, полученные в ходе EDA
|
||||||
|
14. Закоммитить блокнот с EDA и другие измененные файлы в удаленный репозитарий
|
||||||
|
15. Файл с обработанными данными сохранить себе на флешку или любым другим способом (файлы с данными в репозитарий НЕ СОХРАНЯЮТСЯ!)
|
||||||
|
|
||||||
|
## Методические указания
|
||||||
|
|
||||||
|
### 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`, базовый синтактис которого можно [посмотреть здесь](https://www.markdownguide.org/basic-syntax/)
|
||||||
|
|
||||||
|
`README.md` в нашем цилке работ обязательно должен содержать такие разделы:
|
||||||
|
* Описание проекта - краткое описание того, какая задача решается
|
||||||
|
* Запуск - Как запустить проект. С указанием подробных команд: клонирование проекта из репозитория, переход в склонированную папку с проектом, установка и активация виртуального окружения, установка в окружение всех требуемых библиотек.
|
||||||
|
|
||||||
|
> Шаги из данного раздела должны быть полностью корректными и актуальными. Это очень сильно пригодится вам самим, когда вы захотите по прошествие времени снова запустить этот проект :)
|
||||||
|
|
||||||
|
* Описание модулей проекта. На текущем этапе - результаты и выводы EDA. В дальнейшем добавится описание сервисов.
|
||||||
|
|
||||||
|
|
||||||
|
> Обращу внимание, что файл со временем может не только дополняться, но и изменяться его структура. Но его содержание должно быть актуальным на каждом коммите. Например, сейчас в разделе "Запуск" будут те команды, которые необходимы для воспроизведения ЛР1. После выполнения очередной ЛР в нем должна быть актуальная информацию по запуску проекта из новой ЛР. При этом, откатившись к итоговому коммиту любой из лабораторных работ ожидается увидеть в файле актуальное для этой работы описание.
|
||||||
|
|
||||||
|
> В дальнейшем команды для запуска будут дополняться или даже полностью меняться. Это нормально.
|
||||||
|
|
||||||
|
### 6
|
||||||
|
> Освежить в памяти работу с git можно, например, [тут](https://skillbox.ru/media/code/osnovnye-komandy-dlya-raboty-s-git-i-github/)
|
||||||
|
|
||||||
|
Инициализировать репозитарий следует в корневой директории проекта.
|
||||||
|
После инициализации структура проекта должна выглядеть так:
|
||||||
|
```
|
||||||
|
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
|
||||||
|
|
||||||
|
Файлы с обработанными данными, а также большие графики, которые не попали в репозитарий сохраните себе на флешку или любым другим способом.
|
||||||
|
Обратите внимание, что с этими данными вы продолжите работать в следующих лабораторных работах. Сохранность файлов на виртуальной машине **НЕ ГАРАНТИРУЕТСЯ**.
|
Загрузка…
Ссылка в новой задаче