Тест на готовность к работе с данными
Наверняка в учёбе или работе вы сталкивались с необходимостью использовать Microsoft Excel и работать с таблицами.
Если да - как вам, тяжело было? Нравится?
Если нравится - однозначно, вы уже заложили фундамент и интерес к изучению данных. А вот если вам было крайне тяжело, значит придётся много чего подтянуть.
Давайте пробежимся по теме, чтобы проверить себя.
Сначала - краткий блиц:
- чем данные отличаются от информации?
- какой тип данных подойдёт для значения "123а"?
- что такое булев тип данных (булево значение, Boolean)?
- чем таблица отличается от списка?
- из чего состоит таблица? Назовите минимум три компонента.
- что такое запрос?
- знаете ли вы, что такое база данных?
- чем хранилище отличается от оперативной памяти?
- знаете ли вы, что такое XML?
Если вы смогли легко и положительно ответить на вопросы выше - значит, как минимум с базой вы знакомы, и это хорошо.
Ответьте без подглядывания в разбор. В задачах с JSON и таблицами можно набросать ответ на бумаге или в редакторе. Если SQL в блоке 4 вызывает ступор — это сигнал начать с раздела "Основы баз данных", а не "плохой тест".
Пройдите Навигатор новичка и профилей, чтобы сопоставить интерес к данным с другими направлениями (код, аналитика, интеграции, AI).
| Блок | Тема |
|---|---|
| 1 | Данные, информация, качество |
| 2 | Структуры данных |
| 3 | Операции: фильтр, join, группировка |
| 4 | SQL и NoSQL — выбор и базовые запросы |
1 — Данные и информация
Вопросы
- В логе сервера строка
2026-01-14T08:23:11Z | user_4582 | login_success— это данные или уже информация? Почему? - Чем структурированные данные отличаются от неструктурированных? По одному примеру каждого.
- В колонке
emailвстречаютсяN/A,-и пустые строки. Это проблема качества данных — какого именно (полнота, точность, согласованность)? - Зачем фиксировать происхождение данных (data provenance): откуда файл, кто менял?
- Что даёт временная метка в потоке событий?
Задачи
Задача 1.
Из фрагмента лога ниже выпишите только метки времени успешных входов (login_success):
2026-01-14T08:23:11Z | user_4582 | login_success
2026-01-14T08:25:03Z | user_4582 | page_view:/dashboard
2026-01-14T08:26:47Z | user_9103 | login_failed
Задача 2.
Текст: "Погода сегодня ясная, +5°C. Вчера +3°C. Завтра ожидается дождь."
Соберите таблицу (или JSON-массив) с полями дата, погода, температура — только из явных фактов в тексте.
Разбор: блок 1
Вопросы
- Сырые данные; станут информацией после вопроса "сколько успешных входов за час?" и интерпретации.
- Структурированные — таблица, CSV, JSON с полями. Неструктурированные — свободный текст письма, фото без разметки.
- В первую очередь полнота (missing values); также согласованность формата.
- Проверка достоверности, аудит, воспроизводимость анализа, соответствие регламентам.
- Порядок событий, тренды, "что было до сбоя".
Задачи
Задача 1.
2026-01-14T08:23:11Z
Задача 2.
[
{ "дата": "сегодня", "погода": "ясная", "температура": "+5°C" },
{ "дата": "вчера", "погода": null, "температура": "+3°C" }
]
Про "завтра" температура не указана — строку не выдумываем.
2 — Структуры данных
Вопросы
- Нужен мгновенный поиск пользователя по
idв списке из 100 000 записей. Почему "голый" массив неудобен? - Стек или очередь для кнопки "Отменить" в редакторе?
- Маршруты между городами (Москва → СПб, Москва → Казань…) — какая структура естественна?
- Что такое хеш-таблица на уровне идеи (без формул)?
- Почему выбор структуры влияет на скорость программы?
Задачи
Задача 1.
Список пользователей:
[
{ "id": 101, "name": "Алиса" },
{ "id": 102, "name": "Борис" }
]
Предложите структуру для поиска по id за O(1) в среднем. Покажите вид данных.
Задача 2.
Связи — Москва → СПб, Москва → Казань, СПб → Хельсинки, Казань → Екатеринбург.
Запишите список смежности (граф).
Разбор: блок 2
Вопросы
- Поиск в массиве — O(n); при частых запросах это дорого.
- Стек (LIFO): отменяется последнее действие.
- Граф (ориентированный), список смежности или матрица.
- Ключ → хеш → ячейка в массиве; быстрый доступ по ключу при хорошей хеш-функции.
- Разная сложность вставки/поиска/обхода; неверный выбор = тормоза и лишняя память.
Задачи
Задача 1.
Словарь / Map: ключ id, значение — объект пользователя:
{
"101": { "id": 101, "name": "Алиса" },
"102": { "id": 102, "name": "Борис" }
}
Задача 2.
{
"Москва": ["Санкт-Петербург", "Казань"],
"Санкт-Петербург": ["Хельсинки"],
"Казань": ["Екатеринбург"],
"Хельсинки": [],
"Екатеринбург": []
}
3 — Операции с данными
Вопросы
- Чем фильтрация отличается от агрегации?
- Inner join по
user_id: заказы пользователя без заказов попадут в результат? - Зачем переводят "широкую" таблицу (месяцы в колонках) в "длинную"?
- Что такое обогащение данных примером?
- Зачем хранить историю преобразований (lineage)?
Задачи
Задача 1.
users = [{"id" — 1, "name" — "Алиса"}, {"id": 2, "name": "Борис"}]
orders = [{"user_id" — 1, "product" — "Книга"}, {"user_id": 1, "product": "Блокнот"}]
Соберите список заказов с именами (inner join).
Задача 2.
Таблица продаж:
2026-01-10 | Москва | 15000
2026-01-10 | СПб | 12000
2026-01-11 | Москва | 18000
Сумма продаж по региону.
Разбор: блок 3
Вопросы
- Фильтр отбирает строки; агрегация сворачивает много значений в одно (сумма, среднее…).
- Нет — только совпадающие ключи; у Бориса заказов нет → его не будет в inner join с заказами.
- Удобнее строить графики и SQL-запросы по одной колонке "месяц".
- Добавить к адресам координаты из справочника, к
user_id— сегмент из CRM. - Понять, откуда взялась цифра в отчёте; отладить ошибку ETL; пройти аудит.
Задачи
Задача 1.
[
{ "user_id": 1, "product": "Книга", "name": "Алиса" },
{ "user_id": 1, "product": "Блокнот", "name": "Алиса" }
]
Задача 2.
Москва — 33000; СПб — 12000.
4 — SQL и NoSQL
Вопросы
- В реляционной БД где задаётся структура таблиц — в схеме или "в каждом документе своё"?
- Запрос "максимальная зарплата в каждом отделе" — нужна ли группировка или оконная функция?
- Документ MongoDB с вложенным массивом
orders— это ближе к какой модели NoSQL? - Почему для логов посещений (миллионы строк в день) часто выбирают колоночные или специализированные хранилища, а не "Excel на сервере"?
- Когда SQL предпочтительнее NoSQL в двух словах?
Задачи
Задача 1.
Таблица employees (id, name, department_id, salary):
| id | name | department_id | salary |
|---|---|---|---|
| 1 | Алиса | 10 | 90000 |
| 2 | Борис | 20 | 85000 |
| 3 | Вера | 10 | 95000 |
Напишите SQL: имя сотрудника с макс. зарплатой в своём отделе (допустим оконную функцию).
Задача 2.
События — user_id, timestamp, page_url, миллионы в день. Запросы: уникальные пользователи за день, топ страниц.
SQL или NoSQL — что выберете и одним абзацем почему?
Разбор: блок 4
Вопросы
- В схеме (таблицы, типы, ограничения).
- Нужно разбить по
department_idи взять max —GROUP BY+ подзапрос илиROW_NUMBER() OVER (PARTITION BY ...). - Документная модель.
- Массовая запись, аналитика по колонкам, масштабирование; Excel/один PostgreSQL без дизайна не выдержат объём.
- Транзакции, связи, сложные отчёты, строгая целостность (финансы, учёт).
Задачи
Задача 1.
SELECT name, department_id, salary
FROM (
SELECT name, department_id, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn
FROM employees
) ranked
WHERE rn = 1;
Задача 2.
Часто колоночное хранилище (ClickHouse, BigQuery) или поток + агрегаты: много append-only записей, тяжёлые COUNT DISTINCT и GROUP BY по page_url. Классический SQL (PostgreSQL) тоже возможен с партициями по дате — ответ засчитывается, если обоснованы запись, объём и тип запросов.