Data Science Laboratory Toolkit - инструменты для эффективных исследований
Project description
DmDSLab: Data Science Toolkit
🎉 Новое в версии 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 датасетов
- Отредактируйте
scripts/initialize_uci_database.py - Добавьте информацию о датасете
- Запустите скрипт для обновления базы
- Создайте PR с изменениями
📈 Производительность
- Кеширование: Повторная загрузка в 100+ раз быстрее
- Оптимизация памяти: Эффективное хранение больших датасетов
- Параллельная загрузка: В планах для версии 2.1
🤝 Вклад в проект
Мы приветствуем вклад от сообщества! См. CONTRIBUTING.md для деталей.
📄 Лицензия
Apache License 2.0. См. LICENSE для деталей.
👨💻 Автор
Dmatryus Detry - GitHub
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dmdslab-2.0.0.tar.gz.
File metadata
- Download URL: dmdslab-2.0.0.tar.gz
- Upload date:
- Size: 90.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25126f01d5b3b3da58bb04400946dee5bcb440d6191a0028798d3f33019da52c
|
|
| MD5 |
f796e9e20b1f58a97d2086d9a7607329
|
|
| BLAKE2b-256 |
7d6026dbfbd505bccad9d226a9f20ae9d753674d84975a592cdba73a759b9786
|
File details
Details for the file dmdslab-2.0.0-py3-none-any.whl.
File metadata
- Download URL: dmdslab-2.0.0-py3-none-any.whl
- Upload date:
- Size: 49.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6a6c6c57eed87a69623697e3f57b12de1aa1eb03d7a58bbc5d7a3d9fe9d564f
|
|
| MD5 |
c918478b27e86ee51bad86beb22e9dd6
|
|
| BLAKE2b-256 |
77e84c5d206bf18d8f6f1c034c8b2f35b6423eb3e68ae1f4c072fa5d27616335
|