# DmDSLab: Data Science Toolkit
[](https://badge.fury.io/py/DmDSLab)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/Apache-2.0)
[](https://pepy.tech/project/dmdslab)
## 🎉 Новое в версии 2.0
- 🌐 **UCI Dataset Loader**: Доступ к датасетам из UCI ML Repository
- 💾 **Интеллектуальное кеширование**: Загрузил один раз - используй всегда
- 🎯 **Автоматическое определение**: Типы задач и категориальные признаки из коробки
- 📊 **Progress Bars**: Визуальный контроль процесса загрузки
## 🚀 Основные возможности
### Работа с UCI Repository
- **Простая загрузка**: Один вызов функции для получения датасета
- **Кеширование**: Автоматическое сохранение загруженных данных
- **Метаданные**: Полная информация о каждом датасете
- **Фильтрация**: Поиск датасетов по различным критериям
### Контейнеры данных
- **ModelData**: Универсальный контейнер для ML данных с автоматической валидацией
- **DataSplit**: Гибкие разбиения train/validation/test
- **DataInfo**: Структурированные метаданные о датасетах
### Препроцессинг
- **Автоматическое преобразование**: Pandas ↔ NumPy
- **Валидация данных**: Проверка размерностей и типов
- **Выборки**: Случайные и стратифицированные
- **K-fold**: Встроенная поддержка кросс-валидации
## 📦 Установка
**Требования**: Python 3.11 или выше
```bash
# Проверьте версию Python
python --version # Должно быть 3.11.x или 3.12.x
```
```bash
# Базовая установка
pip install DmDSLab
# С поддержкой UCI (рекомендуется)
pip install DmDSLab[uci]
# Полная установка со всеми зависимостями
pip install DmDSLab[all]
```
## 🔥 Быстрый старт
### Загрузка из UCI Repository (НОВОЕ!)
```python
from dmdslab.datasets import load_uci_by_name, load_uci_dataset
# Самый простой способ - по имени
iris = load_uci_by_name('iris')
print(f"Загружен {iris.metadata['name']}: {iris.shape}")
# Загрузка по ID
wine = load_uci_dataset(109) # Wine dataset
# Использование менеджера для больших возможностей
from dmdslab.datasets.uci import UCIDatasetManager
manager = UCIDatasetManager()
data = manager.load_dataset(53, show_progress=True) # Iris с progress bar
```
### Работа с контейнерами данных
```python
from dmdslab.datasets import ModelData, create_data_split
import numpy as np
# Создание данных
X = np.random.randn(1000, 10)
y = np.random.randint(0, 2, 1000)
data = ModelData(features=X, target=y)
print(f"Dataset shape: {data.shape}")
# Автоматическое разбиение
split = create_data_split(X, y, test_size=0.2, validation_size=0.1)
print(f"Train: {split.train.n_samples}")
print(f"Val: {split.validation.n_samples}")
print(f"Test: {split.test.n_samples}")
```
## 📚 Примеры использования
### 🌐 UCI Dataset Loader
#### Пакетная загрузка датасетов
```python
from dmdslab.datasets.uci import UCIDatasetManager
manager = UCIDatasetManager()
# Загрузка нескольких датасетов
dataset_ids = [53, 17, 19, 45] # Iris, Breast Cancer, Wine, Heart Disease
datasets = manager.load_datasets(dataset_ids, show_progress=True)
for data in datasets:
if isinstance(data, ModelData):
print(f"{data.metadata['name']}: {data.shape}")
```
#### Управление кешем
```python
# Проверка информации о кеше
info = manager.get_cache_info()
print(f"Датасетов в кеше: {info['total_datasets']}")
print(f"Размер кеша: {info['total_size']}")
# Очистка конкретного датасета
manager.clear_cache(dataset_id=53)
# Полная очистка кеша
manager.clear_cache()
```
#### Поиск датасетов (если установлена база метаданных)
```python
# Инициализация базы данных UCI
python scripts/initialize_uci_database.py
# Использование фильтров
from dmdslab.datasets.uci_dataset_manager import UCIDatasetManager, TaskType
manager = UCIDatasetManager()
binary_datasets = manager.filter_datasets(
task_type=TaskType.BINARY_CLASSIFICATION,
min_instances=1000,
max_instances=10000
)
```
### 📊 Работа с разбиениями
```python
from dmdslab.datasets import create_data_split, create_kfold_data
# Разбиение со стратификацией
split = create_data_split(
X, y,
test_size=0.2,
validation_size=0.2,
stratify=True,
random_state=42
)
# K-fold кросс-валидация
kfold_splits = create_kfold_data(X, y, n_splits=5, random_state=42)
for i, fold in enumerate(kfold_splits):
print(f"Fold {i}: train={fold.train.n_samples}, val={fold.validation.n_samples}")
```
### 🔬 Интеграция с scikit-learn
```python
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Загрузка данных из UCI
data = load_uci_by_name('wine')
split = create_data_split(data.features, data.target, test_size=0.2)
# Обучение модели
model = RandomForestClassifier(random_state=42)
model.fit(split.train.features, split.train.target)
# Оценка
predictions = model.predict(split.test.features)
accuracy = accuracy_score(split.test.target, predictions)
print(f"Accuracy: {accuracy:.3f}")
```
## 🗄️ Доступные UCI датасеты
DmDSLab включает быстрый доступ к популярным датасетам:
| Имя | ID | Описание | Размер |
|-----|-----|----------|---------|
| `iris` | 53 | Классический датасет ирисов Фишера | 150×4 |
| `wine` | 109 | Классификация итальянских вин | 178×13 |
| `breast_cancer` | 17 | Диагностика рака груди Wisconsin | 569×30 |
| `adult` | 2 | Предсказание дохода >$50K | 48842×14 |
| `mushroom` | 73 | Классификация съедобных грибов | 8124×22 |
| `heart_disease` | 45 | Диагностика сердечных заболеваний | 303×13 |
И многие другие! Полный список доступен через `POPULAR_DATASETS`.
Вы можете взять любой датасет с
[сайта](https://archive.ics.uci.edu/datasets?skip=0&take=10&sort=desc&orderBy=NumHits&search=&Python=true)
и выгрузить его по id (предпочтительно) или name.
## 🛠️ Архитектура
```
dmdslab/
├── datasets/ # Работа с датасетами
│ ├── ml_data_container.py # Контейнеры ModelData, DataSplit
│ ├── uci/ # UCI ML Repository интеграция
│ │ ├── uci_manager.py # Основной менеджер
│ │ ├── uci_cache.py # Система кеширования
│ │ ├── uci_metadata.py # Работа с метаданными
│ │ └── uci_utils.py # Вспомогательные функции
│ └── uci_dataset_manager.py # База данных датасетов
└── scripts/ # Утилиты
└── initialize_uci_database.py # Инициализация БД
```
## 🔧 Настройка и конфигурация
### Настройка кеширования
```python
# Кастомная директория кеша
manager = UCIDatasetManager(cache_dir="./my_cache")
# Отключение кеша
manager = UCIDatasetManager(use_cache=False)
# Настройка логирования
manager = UCIDatasetManager(log_level="DEBUG")
```
### Работа без интернета
```python
# Загрузка только из кеша
manager = UCIDatasetManager(raise_on_missing=False)
data = manager.load_dataset(53) # Вернет None если нет в кеше
```
## 🔬 Для исследователей
DmDSLab создан специально для исследователей в области машинного обучения:
- **Воспроизводимость**: Фиксированные random seeds и версионирование
- **Стандартизация**: Единый интерфейс для всех датасетов
- **Метаданные**: Полная информация о каждом датасете
- **Эффективность**: Кеширование экономит время и трафик
## 🚀 Разработка
```bash
# Клонирование репозитория
git clone https://github.com/Dmatryus/DmDSLab.git
cd DmDSLab
# Установка в режиме разработки
pip install -e .[dev,uci]
# Запуск тестов
pytest tests/
# Проверка стиля кода
ruff check dmdslab/
```
### Добавление новых UCI датасетов
1. Отредактируйте `scripts/initialize_uci_database.py`
2. Добавьте информацию о датасете
3. Запустите скрипт для обновления базы
4. Создайте PR с изменениями
## 📈 Производительность
- **Кеширование**: Повторная загрузка в 100+ раз быстрее
- **Оптимизация памяти**: Эффективное хранение больших датасетов
- **Параллельная загрузка**: В планах для версии 2.1
## 🤝 Вклад в проект
Мы приветствуем вклад от сообщества! См. [CONTRIBUTING.md](CONTRIBUTING.md) для деталей.
## 📄 Лицензия
Apache License 2.0. См. [LICENSE](LICENSE) для деталей.
## 👨💻 Автор
**Dmatryus Detry** - [GitHub](https://github.com/Dmatryus)
Raw data
{
"_id": null,
"home_page": null,
"name": "DmDSLab",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "data-science, machine-learning, datasets, uci, data-preprocessing, research-tools",
"author": null,
"author_email": "Dmatryus Detry <dmatryus.sqrt49@yandex.ru>",
"download_url": "https://files.pythonhosted.org/packages/7d/60/26dbfbd505bccad9d226a9f20ae9d753674d84975a592cdba73a759b9786/dmdslab-2.0.0.tar.gz",
"platform": null,
"description": "# DmDSLab: Data Science Toolkit\r\n\r\n[](https://badge.fury.io/py/DmDSLab)\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/Apache-2.0)\r\n[](https://pepy.tech/project/dmdslab)\r\n\r\n## \ud83c\udf89 \u041d\u043e\u0432\u043e\u0435 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 2.0\r\n\r\n- \ud83c\udf10 **UCI Dataset Loader**: \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u043c \u0438\u0437 UCI ML Repository\r\n- \ud83d\udcbe **\u0418\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435**: \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u043e\u0434\u0438\u043d \u0440\u0430\u0437 - \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0432\u0441\u0435\u0433\u0434\u0430\r\n- \ud83c\udfaf **\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435**: \u0422\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447 \u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\r\n- \ud83d\udcca **Progress Bars**: \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\r\n\r\n## \ud83d\ude80 \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\r\n\r\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 UCI Repository\r\n- **\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430**: \u041e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\r\n- **\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435**: \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\r\n- **\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435**: \u041f\u043e\u043b\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435\r\n- **\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f**: \u041f\u043e\u0438\u0441\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432 \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c\r\n\r\n### \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445\r\n- **ModelData**: \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f ML \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439\r\n- **DataSplit**: \u0413\u0438\u0431\u043a\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f train/validation/test\r\n- **DataInfo**: \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445\r\n\r\n### \u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\r\n- **\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435**: Pandas \u2194 NumPy\r\n- **\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445**: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0442\u0438\u043f\u043e\u0432\r\n- **\u0412\u044b\u0431\u043e\u0440\u043a\u0438**: \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0438 \u0441\u0442\u0440\u0430\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\r\n- **K-fold**: \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438\r\n\r\n## \ud83d\udce6 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n**\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f**: Python 3.11 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435\r\n\r\n```bash\r\n# \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e Python\r\npython --version # \u0414\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 3.11.x \u0438\u043b\u0438 3.12.x\r\n```\r\n\r\n```bash\r\n# \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\npip install DmDSLab\r\n\r\n# \u0421 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 UCI (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\r\npip install DmDSLab[uci]\r\n\r\n# \u041f\u043e\u043b\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438\r\npip install DmDSLab[all]\r\n```\r\n\r\n## \ud83d\udd25 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\r\n\r\n### \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 UCI Repository (\u041d\u041e\u0412\u041e\u0415!)\r\n\r\n```python\r\nfrom dmdslab.datasets import load_uci_by_name, load_uci_dataset\r\n\r\n# \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 - \u043f\u043e \u0438\u043c\u0435\u043d\u0438\r\niris = load_uci_by_name('iris')\r\nprint(f\"\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d {iris.metadata['name']}: {iris.shape}\")\r\n\r\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e ID\r\nwine = load_uci_dataset(109) # Wine dataset\r\n\r\n# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439\r\nfrom dmdslab.datasets.uci import UCIDatasetManager\r\n\r\nmanager = UCIDatasetManager()\r\ndata = manager.load_dataset(53, show_progress=True) # Iris \u0441 progress bar\r\n```\r\n\r\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\r\n```python\r\nfrom dmdslab.datasets import ModelData, create_data_split\r\nimport numpy as np\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445\r\nX = np.random.randn(1000, 10)\r\ny = np.random.randint(0, 2, 1000)\r\n\r\ndata = ModelData(features=X, target=y)\r\nprint(f\"Dataset shape: {data.shape}\")\r\n\r\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\r\nsplit = create_data_split(X, y, test_size=0.2, validation_size=0.1)\r\nprint(f\"Train: {split.train.n_samples}\")\r\nprint(f\"Val: {split.validation.n_samples}\")\r\nprint(f\"Test: {split.test.n_samples}\")\r\n```\r\n\r\n## \ud83d\udcda \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\r\n\r\n### \ud83c\udf10 UCI Dataset Loader\r\n\r\n#### \u041f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\n```python\r\nfrom dmdslab.datasets.uci import UCIDatasetManager\r\n\r\nmanager = UCIDatasetManager()\r\n\r\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\ndataset_ids = [53, 17, 19, 45] # Iris, Breast Cancer, Wine, Heart Disease\r\ndatasets = manager.load_datasets(dataset_ids, show_progress=True)\r\n\r\nfor data in datasets:\r\n if isinstance(data, ModelData):\r\n print(f\"{data.metadata['name']}: {data.shape}\")\r\n```\r\n\r\n#### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0435\u043c\r\n```python\r\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u0435\u0448\u0435\r\ninfo = manager.get_cache_info()\r\nprint(f\"\u0414\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432 \u0432 \u043a\u0435\u0448\u0435: {info['total_datasets']}\")\r\nprint(f\"\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0430: {info['total_size']}\")\r\n\r\n# \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\r\nmanager.clear_cache(dataset_id=53)\r\n\r\n# \u041f\u043e\u043b\u043d\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u0435\u0448\u0430\r\nmanager.clear_cache()\r\n```\r\n\r\n#### \u041f\u043e\u0438\u0441\u043a \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432 (\u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0431\u0430\u0437\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445)\r\n```python\r\n# \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 UCI\r\npython scripts/initialize_uci_database.py\r\n\r\n# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\r\nfrom dmdslab.datasets.uci_dataset_manager import UCIDatasetManager, TaskType\r\n\r\nmanager = UCIDatasetManager()\r\nbinary_datasets = manager.filter_datasets(\r\n task_type=TaskType.BINARY_CLASSIFICATION,\r\n min_instances=1000,\r\n max_instances=10000\r\n)\r\n```\r\n\r\n### \ud83d\udcca \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f\u043c\u0438\r\n\r\n```python\r\nfrom dmdslab.datasets import create_data_split, create_kfold_data\r\n\r\n# \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0442\u0440\u0430\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439\r\nsplit = create_data_split(\r\n X, y, \r\n test_size=0.2,\r\n validation_size=0.2,\r\n stratify=True,\r\n random_state=42\r\n)\r\n\r\n# K-fold \u043a\u0440\u043e\u0441\u0441-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\r\nkfold_splits = create_kfold_data(X, y, n_splits=5, random_state=42)\r\n\r\nfor i, fold in enumerate(kfold_splits):\r\n print(f\"Fold {i}: train={fold.train.n_samples}, val={fold.validation.n_samples}\")\r\n```\r\n\r\n### \ud83d\udd2c \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 scikit-learn\r\n\r\n```python\r\nfrom sklearn.ensemble import RandomForestClassifier\r\nfrom sklearn.metrics import accuracy_score\r\n\r\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 UCI\r\ndata = load_uci_by_name('wine')\r\nsplit = create_data_split(data.features, data.target, test_size=0.2)\r\n\r\n# \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\r\nmodel = RandomForestClassifier(random_state=42)\r\nmodel.fit(split.train.features, split.train.target)\r\n\r\n# \u041e\u0446\u0435\u043d\u043a\u0430\r\npredictions = model.predict(split.test.features)\r\naccuracy = accuracy_score(split.test.target, predictions)\r\nprint(f\"Accuracy: {accuracy:.3f}\")\r\n```\r\n\r\n## \ud83d\uddc4\ufe0f \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 UCI \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b\r\n\r\nDmDSLab \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u043c:\r\n\r\n| \u0418\u043c\u044f | ID | \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 | \u0420\u0430\u0437\u043c\u0435\u0440 |\r\n|-----|-----|----------|---------|\r\n| `iris` | 53 | \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438\u0440\u0438\u0441\u043e\u0432 \u0424\u0438\u0448\u0435\u0440\u0430 | 150\u00d74 |\r\n| `wine` | 109 | \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0445 \u0432\u0438\u043d | 178\u00d713 |\r\n| `breast_cancer` | 17 | \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0440\u0430\u043a\u0430 \u0433\u0440\u0443\u0434\u0438 Wisconsin | 569\u00d730 |\r\n| `adult` | 2 | \u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0434\u043e\u0445\u043e\u0434\u0430 >$50K | 48842\u00d714 |\r\n| `mushroom` | 73 | \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0445 \u0433\u0440\u0438\u0431\u043e\u0432 | 8124\u00d722 |\r\n| `heart_disease` | 45 | \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0441\u0435\u0440\u0434\u0435\u0447\u043d\u044b\u0445 \u0437\u0430\u0431\u043e\u043b\u0435\u0432\u0430\u043d\u0438\u0439 | 303\u00d713 |\r\n\r\n\u0418 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435! \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 `POPULAR_DATASETS`.\r\n\r\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0441 \r\n[\u0441\u0430\u0439\u0442\u0430](https://archive.ics.uci.edu/datasets?skip=0&take=10&sort=desc&orderBy=NumHits&search=&Python=true)\r\n\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e id (\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e) \u0438\u043b\u0438 name.\r\n\r\n## \ud83d\udee0\ufe0f \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\r\n\r\n```\r\ndmdslab/\r\n\u251c\u2500\u2500 datasets/ # \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u043c\u0438\r\n\u2502 \u251c\u2500\u2500 ml_data_container.py # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b ModelData, DataSplit\r\n\u2502 \u251c\u2500\u2500 uci/ # UCI ML Repository \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\r\n\u2502 \u2502 \u251c\u2500\u2500 uci_manager.py # \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\r\n\u2502 \u2502 \u251c\u2500\u2500 uci_cache.py # \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\r\n\u2502 \u2502 \u251c\u2500\u2500 uci_metadata.py # \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438\r\n\u2502 \u2502 \u2514\u2500\u2500 uci_utils.py # \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\r\n\u2502 \u2514\u2500\u2500 uci_dataset_manager.py # \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\n\u2514\u2500\u2500 scripts/ # \u0423\u0442\u0438\u043b\u0438\u0442\u044b\r\n \u2514\u2500\u2500 initialize_uci_database.py # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0411\u0414\r\n```\r\n\r\n## \ud83d\udd27 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\r\n\r\n### \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\r\n```python\r\n# \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043a\u0435\u0448\u0430\r\nmanager = UCIDatasetManager(cache_dir=\"./my_cache\")\r\n\r\n# \u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0430\r\nmanager = UCIDatasetManager(use_cache=False)\r\n\r\n# \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\r\nmanager = UCIDatasetManager(log_level=\"DEBUG\")\r\n```\r\n\r\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\r\n```python\r\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043a\u0435\u0448\u0430\r\nmanager = UCIDatasetManager(raise_on_missing=False)\r\ndata = manager.load_dataset(53) # \u0412\u0435\u0440\u043d\u0435\u0442 None \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0432 \u043a\u0435\u0448\u0435\r\n```\r\n\r\n## \ud83d\udd2c \u0414\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\r\n\r\nDmDSLab \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f:\r\n\r\n- **\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c**: \u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 random seeds \u0438 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n- **\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f**: \u0415\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\n- **\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435**: \u041f\u043e\u043b\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435\r\n- **\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c**: \u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0438 \u0442\u0440\u0430\u0444\u0438\u043a\r\n\r\n## \ud83d\ude80 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\r\n\r\n```bash\r\n# \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\r\ngit clone https://github.com/Dmatryus/DmDSLab.git\r\ncd DmDSLab\r\n\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\npip install -e .[dev,uci]\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432\r\npytest tests/\r\n\r\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0438\u043b\u044f \u043a\u043e\u0434\u0430\r\nruff check dmdslab/\r\n```\r\n\r\n### \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 UCI \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\n\r\n1. \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 `scripts/initialize_uci_database.py`\r\n2. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435\r\n3. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b\r\n4. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 PR \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438\r\n\r\n## \ud83d\udcc8 \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\r\n\r\n- **\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435**: \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 100+ \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435\r\n- **\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438**: \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432\r\n- **\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430**: \u0412 \u043f\u043b\u0430\u043d\u0430\u0445 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2.1\r\n\r\n## \ud83e\udd1d \u0412\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\r\n\r\n\u041c\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0432\u043a\u043b\u0430\u0434 \u043e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430! \u0421\u043c. [CONTRIBUTING.md](CONTRIBUTING.md) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\r\n\r\n## \ud83d\udcc4 \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\r\n\r\nApache License 2.0. \u0421\u043c. [LICENSE](LICENSE) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\r\n\r\n## \ud83d\udc68\u200d\ud83d\udcbb \u0410\u0432\u0442\u043e\u0440\r\n\r\n**Dmatryus Detry** - [GitHub](https://github.com/Dmatryus)\r\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Data Science Laboratory Toolkit - \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439",
"version": "2.0.0",
"project_urls": {
"Bug Tracker": "https://github.com/Dmatryus/DmDSLab/issues",
"Changelog": "https://github.com/Dmatryus/DmDSLab/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/Dmatryus/DmDSLab/wiki",
"Homepage": "https://github.com/Dmatryus/DmDSLab",
"Repository": "https://github.com/Dmatryus/DmDSLab"
},
"split_keywords": [
"data-science",
" machine-learning",
" datasets",
" uci",
" data-preprocessing",
" research-tools"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "77e84c5d206bf18d8f6f1c034c8b2f35b6423eb3e68ae1f4c072fa5d27616335",
"md5": "c918478b27e86ee51bad86beb22e9dd6",
"sha256": "f6a6c6c57eed87a69623697e3f57b12de1aa1eb03d7a58bbc5d7a3d9fe9d564f"
},
"downloads": -1,
"filename": "dmdslab-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c918478b27e86ee51bad86beb22e9dd6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 49682,
"upload_time": "2025-07-30T07:09:01",
"upload_time_iso_8601": "2025-07-30T07:09:01.750776Z",
"url": "https://files.pythonhosted.org/packages/77/e8/4c5d206bf18d8f6f1c034c8b2f35b6423eb3e68ae1f4c072fa5d27616335/dmdslab-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7d6026dbfbd505bccad9d226a9f20ae9d753674d84975a592cdba73a759b9786",
"md5": "f796e9e20b1f58a97d2086d9a7607329",
"sha256": "25126f01d5b3b3da58bb04400946dee5bcb440d6191a0028798d3f33019da52c"
},
"downloads": -1,
"filename": "dmdslab-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "f796e9e20b1f58a97d2086d9a7607329",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 90445,
"upload_time": "2025-07-30T07:09:03",
"upload_time_iso_8601": "2025-07-30T07:09:03.252074Z",
"url": "https://files.pythonhosted.org/packages/7d/60/26dbfbd505bccad9d226a9f20ae9d753674d84975a592cdba73a759b9786/dmdslab-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 07:09:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Dmatryus",
"github_project": "DmDSLab",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "pandas",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
">=",
"1.3.0"
]
]
},
{
"name": "pytest",
"specs": [
[
">=",
"8.0.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.24.0"
]
]
},
{
"name": "ucimlrepo",
"specs": [
[
">=",
"0.0.7"
]
]
},
{
"name": "setuptools",
"specs": [
[
">=",
"68.0.0"
]
]
},
{
"name": "tqdm",
"specs": []
}
],
"lcname": "dmdslab"
}