Refactor code structure for improved readability and maintainability

This commit is contained in:
ada
2025-11-05 09:42:50 +03:00
parent 3c61c4f204
commit 8a03c2dddd
3 changed files with 613 additions and 553 deletions
+107
View File
@@ -0,0 +1,107 @@
# Пошаговый дискриминантный анализ (LDA) — main.ipynb
Короткий ноутбук для линейного дискриминантного анализа (LDA) с пошаговым отбором признаков (включение/исключение), расчетом ковариационных матриц и расстояний Махаланобиса. Вход — Excel `data.xlsx`, выход — `output.xlsx` с результатами классификации.
## Что делает ноутбук
- Читает Excel (`INPUT_PATH`, по умолчанию `data.xlsx`) и берет первые 85 строк.
- Стандартизирует числовые признаки X1..X9 (все колонки, кроме первой).
- Строит LDA, вычисляет ковариационную матрицу, средние по классам, расстояния Махаланобиса.
- Делает пошаговый отбор признаков: с включением (forward) и с исключением (backward).
- Сохраняет результаты в `OUTPUT_PATH` (по умолчанию `output.xlsx`):
- Train sample (класс из обучающей выборки)
- Result Lda (полная модель)
- Result forward (модель с включением)
- Result backward (модель с исключением)
## Требования
- Python 3.10+
- Зависимости: pandas, numpy, scipy, scikit-learn, openpyxl
Рекомендуется установить из `requirements.txt`.
## Быстрый старт локально (Linux/macOS, sh)
```sh
# 1) Создать и активировать виртуальное окружение
python3 -m venv .venv
source .venv/bin/activate
# 2) Обновить pip и установить зависимости
pip install --upgrade pip
pip install -r requirements.txt
# 3) Запустить ноутбук (любой способ)
# Вариант A: открыть main.ipynb в VS Code и выполнить ячейки
# Вариант B (если нужно):
# pip install jupyterlab
# jupyter lab
```
### Windows
```powershell
# 1) Создать и активировать виртуальное окружение (PowerShell)
py -m venv .venv
.venv\Scripts\Activate.ps1
# 2) Обновить pip и установить зависимости
python -m pip install --upgrade pip
pip install -r requirements.txt
# 3) Запуск ноутбука
# Откройте main.ipynb в VS Code и выполните ячейки
# или установите JupyterLab и запустите его:
# pip install jupyterlab
# jupyter lab
```
Примечание: в классической CMD активация окружения — `.venv\Scripts\activate.bat`.
## Настройка переменных (первая ячейка ноутбука)
- `INPUT_PATH`: путь к входному Excel (по умолчанию `data.xlsx`).
- `OUTPUT_PATH`: путь для сохранения результатов (по умолчанию `output.xlsx`).
- `CNT_ENTER`: число признаков в forward-модели.
- `CNT_REMOVE`: число признаков, исключаемых в backward-процедуре.
- `TRAIN_SAMPLE`: словарь вида `{класс: [индексы_строк]}` — обучающая выборка.
- Индексы — это индексы DataFrame после чтения файла (0-based). Убедитесь, что указанные номера существуют.
## Формат входных данных (Excel)
- Первая колонка — идентификатор/метка (не стандартизируется).
- Далее должны идти числовые признаки `X1`..`X9`.
- Используются первые 85 строк файла.
Минимальный пример структуры (заголовки):
```
<ID-or-Name> X1 X2 ... X9
...
```
## Результаты
В `output.xlsx` попадут исходные признаки X1..X9 и дополнительные столбцы:
- `Train sample` — класс для строк, попавших в обучающую выборку.
- `Result Lda` — класс по полной LDA-модели.
- `Result forward` — класс по модели с включением признаков.
- `Result backward` — класс по модели с исключением признаков.
## Запуск в Google Colab
1) Откройте Colab → File → Upload notebook и выберите `main.ipynb`.
2) Загрузите `data.xlsx` в среду:
- Слева вкладка Files → Upload → выберите `data.xlsx`, он окажется в `/content/data.xlsx`; или
- Смонтируйте Google Drive:
```python
from google.colab import drive
drive.mount('/content/drive')
# затем используйте путь вида '/content/drive/MyDrive/путь/к/data.xlsx'
```
3) Установите (при необходимости) зависимости в первой ячейке Colab:
```python
# Выполните только если библиотек не хватает
!pip -q install openpyxl scikit-learn scipy pandas
```
4) В первой ячейке ноутбука обновите пути:
- `INPUT_PATH = '/content/data.xlsx'` (или путь в Google Drive)
- `OUTPUT_PATH = '/content/output.xlsx'`
5) Выполните все ячейки.
## Частые вопросы
- `FileNotFoundError`: проверьте `INPUT_PATH` и расположение `data.xlsx`.
- `ModuleNotFoundError`: установите зависимости (см. выше). В Colab выполните ячейку с `!pip`.
- Индексы `TRAIN_SAMPLE` не найдены: проверьте, что они соответствуют индексам DataFrame (0-based) и попадают в первые 85 строк.