К собеседованию на аналитика данных за день
62 subscribers
18 photos
5 links
Будем разбирать вопросы, которые встречаются на собеседованиях по аналитике данных и data science.

Ищи разборы по хэштегам:
#sql
#python
#статистика
#алгоритмы
#машинное_обучение
Download Telegram
ну как все посмотрели комбинаторику? На встречу вам уже летит задачка из озона

Задача 6
Есть 7 шаров: 4 красных и 3 синих. Сколько способов выбрать 3 шара так, чтобы было ровно 2 красных и 1 синий?
Задача 7

Предположим, у вас есть 2 игральных кости. Какова вероятность того, что хотя бы один раз выпадет 4?


Врываемся с независимыми событиями. Задачка совсем простая) не мудрим
Задача 8

Ну и чуть -чуть поработаем с распределениями. Вспоминаем основную формулу. Врываемся в новую неделю.


Какова вероятность выпадения одной пятерки при 7 бросаниях кубика?
Решение задачи 7.


У нас 2 кости, кидаем их одновременно один раз.
Интересующее событие: «хотя бы на одной кости выпала 4».

То есть нам подходят варианты:

* на первой кости 4, на второй — что угодно;
* на второй кости 4, на первой — что угодно;
* на обеих костях 4.

. Проще через противоположное событие

Часто такие задачи удобнее считать через событие «ничего не вышло».
Противоположное событие: на обеих костях не выпала 4.

Дальнейшее решение в картинках
задача 7.

Если сложно обратными можно решить и прямым способом.
❤1
Задача 9.

В лифт 9-этажного дома на первом этаже вошли трое. Найти вероятность того, что для их выхода лифт будет останавливаться дважды.
Разберемся с задачами где в условии прописано хотя бы 1.

Помним что тогда легче решать обратными событиями так как нас устраивают все варианты кроме одного - сгорят все
Задача 10

Сколько было пар, если в конкурсе участвовало несколько танцевальных пар и каждый пожал руку всем остальным, кроме себя и своего партнёра, а всего было сделано 20200 рукопожатий?
🧨🧨🧨🧨🧨

возьму завтра, послезавтра 2 человек на отработку мок интервью ( в конце каждой задачи будем разбирать решение ) задач на пандас, SQL.

🔥Бесплатно. 🔥
Своих тоже беру. Но будем идти по новой программе.

Хочу начать прописывать новую программу. Время подберем вместе (скину окошки). Кто хочет в комментарии отписываемся
✅ Что такое арифметическая прогрессия?

Арифметическая прогрессия — это последовательность, где каждое следующее число отличается от предыдущего на одну и ту же величину 𝑑.
Пример:
✅ 2, 5, 8, 11, 14, …

Тут 𝑑 =3
#sql

Дана таблица Employee:

* id — уникальный идентификатор сотрудника (PRIMARY KEY)
* salary — зарплата сотрудника

Напишите SQL-запрос, который возвращает вторую по величине уникальную (distinct) зарплату из таблицы Employee.

Требования:
Если второй уникальной зарплаты нет, верните NULL.
Результат должен содержать одну строку и один столбец с названием SecondHighestSalary.
❤1⚡1
Идея в том, что мы сортируем уникальные зарплаты по убыванию и берём вторую строку.

Убираем повторы зарплат с помощью DISTINCT
Сортируем по убыванию с помощью ORDER BY salary DESC
LIMIT 1 OFFSET 1 значит:
* OFFSET 1 = пропусти первую строку (самую большую зарплату).
* LIMIT 1 = возьми ровно одну следующую строку.

задача с Литкода https://leetcode.com/problems/second-highest-salary/submissions/1932996097/
Эту уже сами! Вспоминаем оконки

Дана Таблица: Scores

* id — первичный ключ (уникальное значение).
Каждая строка содержит результат (score) одной игры.
* score — число с плавающей точкой с двумя знаками после запятой.

Напишите SQL-запрос, который вычисляет ранг (место в рейтинге) для каждого значения score по правилам:

* Очки (score) нужно ранжировать от большего к меньшему.
* Если у двух записей одинаковый score, у них должен быть одинаковый ранг.
* После ничьей следующий ранг должен быть следующим целым числом подряд, то есть без пропусков (без “дыр” в нумерации).

Верните таблицу результатов, отсортированную по score по убыванию.

Формат результата: столбцы score и rank.
📌 ROW_NUMBER vs RANK vs DENSE_RANK (оконные функции)

Все три функции нумеруют строки внутри окна OVER (...), но по-разному ведут себя при одинаковых значениях сортировки.

✅ ROW_NUMBER() — всегда выдаёт уникальный номер каждой строке
Пример: 1, 2, 3, 4

✅ RANK() — одинаковым значениям даёт одинаковый ранг, но дальше делает разрыв (пропуск)
Пример: 1, 1, 3, 4

✅ DENSE_RANK() — как RANK(), но без разрывов
Пример: 1, 1, 2, 3

Когда что использовать:

ROW_NUMBER() — выбрать строго одну строку (например, самый первый/последний заказ)

RANK() — «соревновательное» ранжирование с пропусками мест

DENSE_RANK() — ранжирование по группам без пропусков

🧪 Пример запроса (сравниваем функции на заказах одного клиента в один день)

SQL

SELECT
o.customer_id,
o.order_id,
o.order_ts::date AS order_day,
o.order_ts,
ROW_NUMBER() OVER (
PARTITION BY o.customer_id
ORDER BY o.order_ts::date
) AS row_number,
RANK() OVER (
PARTITION BY o.customer_id
ORDER BY o.order_ts::date
) AS rnk,
DENSE_RANK() OVER (
PARTITION BY o.customer_id
ORDER BY o.order_ts::date
) AS dense_rnk
FROM grocery.baum_orders_clean o
WHERE o.status = 'completed'
AND o.customer_id IN (
SELECT customer_id
FROM grocery.baum_orders_clean
WHERE status = 'completed'
GROUP BY customer_id, order_ts::date
HAVING COUNT(*) > 1
)
ORDER BY o.customer_id, order_day, o.order_ts, o.order_id;
# sql

Дана таблица Fraud со столбцами:

*policy_id — уникальный id полиса/заявки
* state — штат
* fraud_score — скор (чем больше, тем “подозрительнее”)

Нужно: для каждого штата выбрать записи выше 95-го перцентиля по fraud_score (какие заявки попадают в верхние 5% ). Отсортировать результат так:
* state по возрастанию
* fraud_score по убыванию


* policy_id по возрастанию
Один из вариантов решения. Но не единственный.


SELECT
policy_id,
state,
fraud_score
FROM (
SELECT
policy_id,
state,
fraud_score,
PERCENT_RANK() OVER (
PARTITION BY state
ORDER BY fraud_score DESC
) AS pr
FROM Fraud
) t
WHERE pr <= 0.05
ORDER BY
state ASC,
fraud_score DESC;



Сначала внутри каждого штата мы ранжируем заявки по fraud_score от большего к меньшему:

PERCENT_RANK() OVER (
PARTITION BY state
ORDER BY fraud_score DESC
)


Что делает
PARTITION BY state

?

Разбивает все строки на группы по штатам.
То есть рейтинг считается отдельно внутри каждого штата.

Что делает ORDER BY fraud_score DESC?

Сортирует заявки внутри штата так, что самые большие fraud_score идут первыми.

Что возвращает PERCENT_RANK()?

Функция показывает относительную позицию строки в ранжированном списке.
Значение лежит в диапазоне от 0 до 1.

❗️❗️PERCENT_RANK() — это не совсем то же самое, что “взять ровно 5% строк”.❗️❗️

* функция работает через ранги
* одинаковые значения fraud_score получают одинаковый ранг
* поэтому строк в результате может быть не ровно 5%

То есть этот запрос отвечает на вопрос:

*какие заявки попадают в верхние 5% ранга
*но не - как взять ровно верхние 5% записей по количеству

в комментариях еще одно решение