Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
iis-project/eda/README.md

15 KiB

Разведочный анализ данных (EDA)

Блокноты Jupyter

  • cars_eda — Очистка и первичный анализ данных о подержанных автомобилях.

    Использует CSV-файл сырых данных из датасета. Каноническое расположение файла данных: data/cars.csv.

    Создаёт файлы очищенных данных (по умолчанию — CSV) и аугментированных данных (по умолчанию — pickle). Канонические расположения: соответственно data/cars.clean.<ext> и data/cars.aug.<ext>, с заменой <ext> на расширение в зависимости от формата: csv для CSV, pickle для pickle.

    Выводы по исследованию:

    • Выполнена очистка датасета: удалены несколько аномальных объектов, переименованы некоторые ошибочно названные признаки. (Пропущенных значений в датасете нет.)

    • Датасет дополнен (аугментирован) потенциально полезными синтетическими признаками: отношение цены с пробегом к изначальной цене, возраст (предполагаемый на основе года выпуска автомобиля и распределения этих годов выпуска в датасете), логарифмы количественных величин. Аугментированная версия сохраняется отдельно.

    • Предварительно подтверждена возможность определения рыночной цены автомобиля с пробегом по использованным признакам, в особенности по следующим: исходная цена, возраст и пробег автомобиля, тип продающего лица (дилер или частное лицо), топливо (автомобили на дизельном топливе редко бывают дешёвыми).

      • Цена продажи с пробегом сильно линейно коррелирует с изначальной ценой.

      • Интересно, что возраст автомобиля является заметно лучшим предиктором снижения стоимости, чем пробег, при этом корреляция между возрастом и пробегом существенная, но не определяющая.

      • Существует огромная разница в ценах у дилеров и частных лиц (у частных лиц дешевле в разы).

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

      • Датасет не очень однороден (у него есть "тяжёлый центр"), и с малым количеством объектов это может создать проблемы с устойчивостью предсказания цен. Рекомендуется применение робастных методов ограниченной сложности; однако прямая линейная регрессия для предсказания цены проодажи может всё-таки оказаться не лучшим методом.

    Графические артефакты исследования сохранены в директории ./cars_eda_figures/.

Установка

Для EDA необходимы общие зависимости, см. Общие зависимости в README.md.

Для EDA используется среда Jupyter. Т.к. блокноты хранятся в текстовом формате под контролем версий, нужно также дополнение Jupytext (как минимум для ручной конвертации блокнотов; см. ниже).

Опционально можно использовать дополнение papermill для простого параметризованного исполнения блокнотов.

Общий порядок

Внимание: Оптимальный порядок установки и конфигурации Jupyter для работы с проектом неоднозначен. См. обоснование выбранного здесь порядка работы с блокнотами Jupyter и возможные альтернативные варианты в eda/docs/jupyter_workflow_motivation.md.

  1. Выполните установку общих зависимостей, если это ещё не выполнено, см. Общие зависимости в README.md.

  2. Jupyter и дополнения должны быть установлены в систему, а НЕ в виртуальное окружение. При необходимости деактивируйте виртуальное окружение.

    deactivate
    
  3. Установите Jupyter и Jupytext в систему (НЕ в виртуальное окружение).

    pip install -U notebook
    
  4. Установите Jupytext в систему (НЕ в виртуальное окружение).

    pip install -U jupytext
    

    Полная инструкция по установке: Installation — Jupytext documentation.

  5. Опционально, установите papermill в систему (НЕ в виртуальное окружение).

    pip install -U papermill
    

    Полная инструкция по установке: Installation - papermill 2.4.0 documentation.

Шаги 6–7 необходимо выполнить только если Вы желаете использовать что-то кроме расширения Jupyter для Visual Studio Code для работы с блокнотами или собираетесь коммитить писать блокноты под контроль версий.

  1. Активируйте виртуальное окружение вновь.

  2. Установите ядро Jupyter, связанное с данным виртуальным окружением, в систему. Используйте следующее имя для ядра: mpei-iis-99040779. (Да, это странно, но это признано лучшим подходом на данный момент; см. обоснование в docs/dev/jupyter_workflow_motivation.md.)

    ipython kernel install --user --name=mpei-iis-99040779
    

    (Эта команда устанавливает виртуальное окружение глобально для текущего пользователя; для установки глобально в систему, уберите флаг --user).

Внимание: На данном этапе могут отсутствовать пригодные для прямого редактирования блокноты .ipynb (например, если проект развёртывается с нуля). Об использовании спаренных блокнотов и конвертации форматов см. Использование Jupytext.

Удаление ядра из системы

Во избежание захламления системы ядро можно удалить из системы позднее, вызвав глобально установленный Jupyter (НЕ в виртуальном окружении) и передав имя ядра.

jupyter kernelspec uninstall mpei-iis-99040779

Примечание: Установленное ядро НЕ занимает значительные ресурсы хранилища. На самом деле в систему устанавливается крайне лёгкая спецификация ядра, ограниченная коротким текстовым файлом и иконками.

Зависимости

Используемые непосредственно кодом проекта зависимости для разведочного анализа данных (EDA) (директория eda/) — пакеты Python — на данный момент включены в общие зависимости (см. выше).

Использование Jupytext

Описанные ниже команды jupytext используют глобальной установленный экземпляр Jupytext (однако его можно запускать и изнутри виртуального окружения).

Для автоматической синхронизации связанных блокнотов (включая создание блокнотов отсутствующих, но ожидаемых форматов):

jupytext --sync eda/cars_eda.py

Jupytext довольно удобно работает в оригинальной среде Jupyter, синхронизируя изменения связанных файлов на лету при работе в Jupyter, ориентируясь на метки времени на файлах. См. документацию Jupytext.

Внимание: С расширением Jupyter для Visual Studio Code Jupytext не работает напрямую. Для использования блокнотов .ipynb с расширением Jupyter для VS Code нужно синхронизировать текстовый файл под контролем версий и файл .ipynb вручную указанными выше командами. Однако заметьте, что это же расширение может исполнять блокнот в текстовом формате самостоятельно, посредством автоматизированного ведения временного блокнота; и оно даже автоматически создаёт/подхватывает локальное ядро Jupyter в виртуальном окружении.

Работа с блокнотами Jupyter

Jupyter

  1. Запустите глобальный глобально установленный сервер Jupyter и приложение (НЕ из виртуального окружения).

    • Например, запустите сервер Jupyter и веб-приложение Notebook в браузере:

      jupyter notebook
      

      Веб-приложение Notebook должно открыться в веб-браузере автоматически. Если этого не произошло, найдите в сообщениях сервера Jupyter строку примерно следующего содержания:

       [I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
      

      Откройте веб-браузер и перейдите по ссылке, выведенной в конце указанного сообщения.

    См. также документацию Jupyter.

  2. Используйте приложение для навигации по файловой системе (в частности, по каталогу eda/), редактирования и исполнения кода в блокнотах.

  3. Если приложение Jupyter запрашивает выбор ядра Jupyter (kernel) или Вы сталкиваетесь с необъяснимыми ошибками импортов, выберите для текущего блокнота ядро с именем mpei-iis-99040779 (которое Вы установили в систему раньше).

    • Notebook: Может понадобиться выбор вручную; кнопка для выбора ядра для открытого блокнота находится в верхнем правом углу веб-страницы.

Расширение Jupyter для Visual Studio Code

  1. Запустите Visual Studio Code.

  2. Если Вы НЕ установили ядро Jupyter, связанное с виртуальным окружением для проекта, в систему, обязательно откройте корневую директорию проекта в VS Code (File -> Open Folder...). Иначе это необязательный, но удобный шаг.

  3. Если Вы открыли директорию проекта и VS Code запрашивает выбор автоматически обнаруженного виртуального окружения, согласитесь.

  4. При открытии любого блокнота убедитесь, что выбрано корректное ядро Jupyter. (Кнопка для выбора ядра для открытого блокнота находится в верхнем правом углу области содержимого вкладки; если ядро не выборано, на кнопке написано Select Kernel.)

  • Если Вы установили ядро Jupyter в систему, рекомендуется выбрать установленное в систему ядро с именем mpei-iis-99040779.
  • Если Вы совсем не собираетесь использовать Jupyter для работы с проектом и не собираетесь записывать блокноты под контроль версий, можно выбрать локальное ядро, связанное с виртуальным окружением (по умолчанию имеет название виртуального окружения — .venv).
  1. Используйте IDE с расширением для навигации по файловой системе (в частности, по каталогу eda/), редактирования и исполнения кода в блокнотах.