Система анонимизации и деанонимизации данных по продажам Анонимизирует исторические данные с сохранением статистических свойств, закономерностей и взаимосвязей для безопасной аналитики и прогнозирования.
- ✅ Поддержка форматов: CSV, Parquet, Excel
- ✅ Гибкая анонимизация: выбор типов данных (категориальные, числовые, даты)
- ✅ Сохранение свойств: распределения, корреляции, тренды, сезонность
- ✅ Деанонимизация: восстановление реальных значений после анализа
- ✅ Безопасность: шифрование маппингов AES-256
- ✅ Web интерфейс: Streamlit GUI для простого использования
- ✅ Docker: готовая контейнеризация для любой платформы
- ✅ Портативность: легко передать на другой компьютер (TRANSFER.md)
- ✅ Связанные данные: анонимизация нескольких файлов с общими идентификаторами (LINKED-DATA.md)
- ✅ Согласованная анонимизация: один пароль = одинаковые анонимные значения в разных файлах (HOWTO-MULTIPLE-FILES.md)
💡 ВАЖНО: Если у вас несколько связанных файлов (например, продажи, склад, товары) с общими артикулами или ID, используйте один пароль для всех файлов! Это сохранит возможность делать JOIN между таблицами. Подробнее: LINKED-DATA.md и HOWTO-MULTIPLE-FILES.md
Самый простой способ - все уже настроено!
- Установите Docker Desktop
- Запустите приложение:
# Windows
docker-build.bat # Собрать образ (первый раз)
docker-start.bat # Запустить приложение
# Приложение откроется автоматически на http://localhost:8501Полная документация по Docker: см. DOCKER.md
# Просто запустите батник - он всё настроит автоматически
start_app.bat # Полная установка с созданием venv
quick_start.bat # Быстрый запуск (если уже установлено)Шаг 1: Клонируйте репозиторий или скачайте файлы
Шаг 2: Создайте виртуальное окружение
Windows (CMD / Командная строка):
# Перейдите в папку проекта
cd C:\Users\Lenovo\Desktop\Anonimious
# Создайте виртуальное окружение
python -m venv venv
# Активируйте окружение (для CMD)
venv\Scripts\activate.bat
# Установите зависимости
pip install -r requirements.txt
# Проверьте установку
python --version
pip listWindows (PowerShell) - если используете PowerShell:
# Перейдите в папку проекта
cd C:\Users\Lenovo\Desktop\Anonimious
# Создайте виртуальное окружение
python -m venv venv
# Активируйте окружение (для PowerShell)
.\venv\Scripts\Activate.ps1
# Если ошибка "выполнение сценариев отключено", выполните в PowerShell от администратора:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Установите зависимости
pip install -r requirements.txtLinux/Mac:
cd Anonimious
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt# Просто установите зависимости глобально
pip install -r requirements.txt# Когда закончите работу (для CMD и PowerShell)
deactivateПроблема: "не является внутренней или внешней командой"
- Вы в CMD, а не в PowerShell
- Решение: используйте
venv\Scripts\activate.batвместо.\venv\Scripts\Activate.ps1
Проблема: "выполнение сценариев отключено" в PowerShell
- Откройте PowerShell от администратора
- Выполните:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - Закройте и откройте PowerShell заново
Как понять, что окружение активировано?
- В начале строки появится
(venv) - Пример:
(venv) C:\Users\Lenovo\Desktop\Anonimious>
# Анонимизировать все типы данных
python main.py anonymize -i data/input/sales.csv -o data/output/sales_anon.csv
# Только категориальные (ID клиентов, товаров и т.д.)
python main.py anonymize -i sales.csv -o sales_anon.csv --mode categorical
# Только числовые (цены, количества)
python main.py anonymize -i sales.csv -o sales_anon.csv --mode numeric
# Комбинация: категориальные + числовые (без дат)
python main.py anonymize -i sales.csv -o sales_anon.csv --categorical --numericИспользуйте анонимизированные данные для:
- Аналитики и визуализации
- Прогнозирования
- Машинного обучения
- Передачи третьим лицам
python main.py deanonymize \
-i predictions_anon.csv \
-o predictions_real.csv \
-m data/mappings/mapping_20260201_123456.json \
--encryption-key mypassword123python main.py anonymize \
--input data/input/sales_2025.csv \
--output data/output/sales_2025_anon.csv \
--encryption-key secure_password_123Результат:
customer_id: "CUST_001"→"ANON_CUSTOMER_ID_a8f3e2b1"quantity: 10→10.23(добавлен шум)sale_date: 2025-06-15→2024-10-20(сдвиг 238 дней)
python main.py anonymize \
--input sales.csv \
--output sales_anon.csv \
--mode categoricalРезультат:
- Анонимизированы: customer_id, product_id, warehouse_id
- Без изменений: quantity, price, sale_date
python main.py anonymize \
--input sales.csv \
--output sales_anon.csv \
--exclude id,created_at,updated_at# Создать конфигурацию
python main.py create-config -o my_config.yaml
# Отредактировать my_config.yaml...
# Использовать конфигурацию
python main.py anonymize \
--input sales.csv \
--output sales_anon.csv \
--config my_config.yamlОпции:
-i, --input PATH Входной файл (обязательно)
-o, --output PATH Выходной файл (обязательно)
-c, --config PATH Файл конфигурации
--mode [all|categorical|numeric|datetime|custom]
Режим анонимизации (по умолчанию: all)
--categorical Анонимизировать категориальные
--numeric Анонимизировать числовые
--datetime Анонимизировать даты
--exclude TEXT Исключить колонки (через запятую)
--include TEXT Включить только эти колонки
--mappings-output PATH Путь для маппингов
--encryption-key TEXT Пароль для шифрования
--no-encryption Не шифровать маппинги
Опции:
-i, --input PATH Анонимизированный файл
-o, --output PATH Выходной файл
-m, --mappings PATH Файл маппингов
--encryption-key TEXT Пароль расшифровки
python main.py info -i data.csvpython main.py create-config -o config.yamlAnonimious/
├── main.py # Главный файл с CLI
├── requirements.txt # Зависимости
├── config.yaml # Конфигурация (пример)
├── README.md # Документация
│
├── src/
│ ├── __init__.py
│ ├── loader.py # Загрузка данных
│ ├── exporter.py # Экспорт данных
│ ├── config.py # Управление конфигурацией
│ ├── anonymizer.py # Анонимизация
│ ├── deanonymizer.py # Деанонимизация
│ └── utils.py # Утилиты
│
└── data/
├── input/ # Исходные данные
├── output/ # Анонимизированные данные
├── mappings/ # Маппинги (зашифрованные)
└── reports/ # Отчеты
Метод: Детерминированный хэш-маппинг
customer_123→ANON_CUSTOMER_ID_a8f3e2b1- Сохраняет частоты и взаимосвязи
- Необратимо без маппинга
Метод: Дифференциальная приватность
- Добавление гауссовского шума
- Сохранение статистик (среднее, дисперсия, корреляции)
- Параметр ε (epsilon) контролирует уровень приватности
Метод: Временной сдвиг
- Единый сдвиг для всех дат
- Сохранение относительных интервалов, сезонности, трендов
- Сдвиг: 180-730 дней
Файл config.yaml:
# Что анонимизировать
anonymization_mode:
categorical: true
numeric: true
datetime: true
# Параметры дифференциальной приватности
differential_privacy:
epsilon: 1.0 # 0.1 = высокая приватность, 10 = низкая
# Параметры сдвига дат
datetime_shift:
min_days: 180
max_days: 730- Шифрование маппингов: AES-256
- Хэш-функции: SHA-256 с солью
- Key Derivation: PBKDF2 (100,000 итераций)
- Рекомендация: Используйте надежные пароли (12+ символов)
Числовые поля НЕ деанонимизируются (шум необратим). Это нормально:
- Статистические свойства сохранены
- Анализ и прогнозирование работают корректно
- Только категориальные ID и даты полностью обратимы
Исходные данные:
customer_id | product_id | quantity | price | sale_date
CUST_001 | PROD_A | 10 | 99.99 | 2025-06-15
CUST_002 | PROD_B | 5 | 149.50 | 2025-06-16
После анонимизации (--mode all):
customer_id | product_id | quantity | price | sale_date
ANON_CUSTOMER_ID_a8f3... | ANON_PRODUCT_ID_b2e1..| 10.23 | 100.14 | 2024-10-20
ANON_CUSTOMER_ID_c4d7... | ANON_PRODUCT_ID_f9a3..| 5.17 | 149.82 | 2024-10-21
После деанонимизации:
customer_id | product_id | quantity | price | sale_date
CUST_001 | PROD_A | 10.23 | 100.14 | 2025-06-15
CUST_002 | PROD_B | 5.17 | 149.82 | 2025-06-16
"Неподдерживаемый формат"
- Поддерживаются: .csv, .parquet, .xlsx, .xls
"Ошибка при расшифровке"
- Проверьте правильность пароля
- Убедитесь, что файл маппингов не поврежден
"Нет полей для анонимизации"
- Проверьте режим анонимизации (--mode)
- Проверьте список исключений (--exclude)
MIT License
Проект Anonimious Версия 0.1.0
Начните прямо сейчас:
python main.py anonymize -i your_data.csv -o anonymized.csv