##### Установка
```
# pip install astrocorrelate
git clone https://gitlab.com/Sbdjaro/astrocorrelate
python setup.py bdist_wheel
pip install astro.whl
```

## Описание
Пакет `astrocorrelate` представляет собой инструмент для объединения каталогов астрономических данных в оптическом и рентгеновском диапазонах. Он позволяет работать с пакетом двумя способами - через конфиг файл и через Python код.

### Модуль data_handler

Модуль data_handler содержит функции для подготовки данных к обучению и предсказанию. Некоторые из функций включают:

- `get_raw_pairs_train()`: Функция, которая предоставляет все возможные пары между каталогами с заданной дистанцией. Это полезно для генерации данных для обучения моделей.

- `get_available_columns()`: Функция, которая возвращает список возможных колонок для генерации признаков. Это позволяет выбирать и использовать нужные колонки для обучения моделей.

- `get_data_to_train()`: Функция, которая создает уже разделенные на тренировочные и тестовые данные с сгенерированными признаками. Это помогает подготовить данные для обучения моделей.

И другие функции для подготовки данных к обучению и предсказанию.

### Модуль model_handler

Модуль model_handler предоставляет функциональность для работы с моделями, их сравнения и сохранения. Главный класс этого модуля - ModelHandler. Некоторые основные функции и методы класса включают:

- `load_data()`: Метод, который инициализирует модель данными, разбивает их на тренировочные и тестовые наборы, а также задает метрики для сравнения моделей.

- `add_model()`: Метод, который добавляет модель для обучения. В качестве параметров принимает название модели (например, 'Catboost') и список колонок для генерации признаков.

- `fit()`: Метод, который выполняет обучение модели на тренировочных данных. В качестве параметра принимает индекс модели, которую необходимо обучить.

- `table`: Атрибут, который содержит таблицу с результатами сравнения моделей. Это позволяет легко оценить и сравнить эффективность различных моделей.

И другие методы для работы с моделями, их сравнения и сохранения.

### Модуль models

Модуль models содержит реализацию моделей машинного обучения для астрофизических задач. Здесь можно найти реализации таких моделей, как Catboost, MLP (Multi-Layer Perceptron), Random Forest (Случайный лес), XGBoost и другие.

### Конфиг файл
Для использования пакета через конфиг файл, необходимо указать необходимые параметры в файле `config.yaml`. Пример файла конфигурации вы можете получить, использовав следующую команду:

```shell
python -m astro config
```

### Функции при работе из командной строки

#### Обучение моделей
Для обучения моделей и сопоставления каталогов можно использовать следующую команду:

```shell
python -m astro train
```

#### Применение обученной модели
После обучения модели, ее можно применить к другим данным с помощью следующей команды:

```shell
python -m astro run
```


### Параметры обучения
В файле конфигурации можно указать различные параметры для обучения моделей. Например, можно задать колонки для генерации фич, выбрать модели для обучения, задать гиперпараметры моделей и т.д. Некоторые из возможных моделей для выбора включают:

- Catboost
- MLP (Multi-Layer Perceptron)
- Random Forest (Случайный лес)

## Примеры работыы через python

### Обучение модели.

Предварительно вам необходимо заполнить config файл для входных каталогов (data_reader)

```python
from astro.data_handler import get_raw_pairs_train, get_available_columns
from astro.model_handler import ModelHandler

# Получаем каталог пар с меткой класса
data = get_raw_pairs_train()
# Получаем возможные признаки для генерации
columns = get_available_columns()
handler = ModelHandler()
# Вариант разбиения на тест и трейн
how_to_split = 'base'
# Метрики для сравнения
metrics = ['ROC_AUC+', 'PR']
# Инициализируем каталог данными
handler.load_data(data, how_to_split, metrics)
# Добавляем модель
handler.add_model('Catboost', columns)
handler.fit(0)

hanler.save_model(0,'Base Model')

print(handler.table)
```

### Использование модели

```python
from astro.data_handler import get_raw_pairs_predict
from astro.model_handler import ModelHandler

# Получаем каталог пар с меткой класса
handler = ModelHandler()
handler.load_model('Base Model')
# Пары для предсказаний автоматически создадутся
pred = handler.predict(0)

print(pred)
```

## Требования
- Python 3.9 и выше
- Библиотеки указаны в файле `requirements.txt`



## Будущие добавления
Планируется добавить предобученные модели, которые можно будет скачивать и использовать для обучения. Это позволит пользователям применять модели, обученные на больших объемах данных и с высокой точностью.

### Оптические каталоги
На данный момент, проект поддерживает только использование оптического каталога PanSTARRS для обучения моделей. Однако, в планах добавить поддержку каталога Gaia. Это позволит пользователям выбирать между различными оптическими каталогами в зависимости от их потребностей и предпочтений.

### Подгрузка оптических каталогов
В планах добавить модуль, который будет выполнять автоматическую загрузку оптических каталогов. Пользователям не будет необходимости хранить их на своем компьютере. Это сделает процесс работы с оптическими каталогами более удобным и эффективным.

### Поддержка других форматов данных
В планах добавить возможность не только работать с данными в формате CSV, но и с другими форматами данных.