Skip to main content

DmDSLab: Data Science Toolkit

PyPI version Python 3.11+ License Downloads

🎉 Новое в версии 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 или выше

# Проверьте версию Python
python --version  # Должно быть 3.11.x или 3.12.x
# Базовая установка
pip install DmDSLab

# С поддержкой UCI (рекомендуется)
pip install DmDSLab[uci]

# Полная установка со всеми зависимостями
pip install DmDSLab[all]

🔥 Быстрый старт

Загрузка из UCI Repository (НОВОЕ!)

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

Работа с контейнерами данных

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

Пакетная загрузка датасетов

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}")

Управление кешем

# Проверка информации о кеше
info = manager.get_cache_info()
print(f"Датасетов в кеше: {info['total_datasets']}")
print(f"Размер кеша: {info['total_size']}")

# Очистка конкретного датасета
manager.clear_cache(dataset_id=53)

# Полная очистка кеша
manager.clear_cache()

Поиск датасетов (если установлена база метаданных)

# Инициализация базы данных 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
)

📊 Работа с разбиениями

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

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.

Вы можете взять любой датасет с сайта и выгрузить его по 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  # Инициализация БД

🔧 Настройка и конфигурация

Настройка кеширования

# Кастомная директория кеша
manager = UCIDatasetManager(cache_dir="./my_cache")

# Отключение кеша
manager = UCIDatasetManager(use_cache=False)

# Настройка логирования
manager = UCIDatasetManager(log_level="DEBUG")

Работа без интернета

# Загрузка только из кеша
manager = UCIDatasetManager(raise_on_missing=False)
data = manager.load_dataset(53)  # Вернет None если нет в кеше

🔬 Для исследователей

DmDSLab создан специально для исследователей в области машинного обучения:

  • Воспроизводимость: Фиксированные random seeds и версионирование
  • Стандартизация: Единый интерфейс для всех датасетов
  • Метаданные: Полная информация о каждом датасете
  • Эффективность: Кеширование экономит время и трафик

🚀 Разработка

# Клонирование репозитория
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 для деталей.

📄 Лицензия

Apache License 2.0. См. LICENSE для деталей.

👨‍💻 Автор

Dmatryus Detry - GitHub

Release files for DmDSLab 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for DmDSLab 2.0.0
File Size Uploaded
dmdslab-2.0.0.tar.gz 90.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for DmDSLab 2.0.0
File Interpreter ABI Platform
dmdslab-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 140.1 kB

Release files / dmdslab-2.0.0.tar.gz

Download URL dmdslab-2.0.0.tar.gz
Size 90.4 kB
Tags Source
SHA-256 checksum
How to use checksums
25126f01d5b3b3da58bb04400946dee5bcb440d6191a0028798d3f33019da52c
BLAKE2b-256 checksum
How to use checksums
7d6026dbfbd505bccad9d226a9f20ae9d753674d84975a592cdba73a759b9786
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.9

Release files / dmdslab-2.0.0-py3-none-any.whl

Download URL dmdslab-2.0.0-py3-none-any.whl
Size 49.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f6a6c6c57eed87a69623697e3f57b12de1aa1eb03d7a58bbc5d7a3d9fe9d564f
BLAKE2b-256 checksum
How to use checksums
77e84c5d206bf18d8f6f1c034c8b2f35b6423eb3e68ae1f4c072fa5d27616335
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page