Мир аналитика данных
@analysts_world
2 39 673
основы A/B-тестов и типы экспериментов
как формулировать гипотезы
классификация метрик: goal / proxy / guardrail / debug
OEC и закон Кэмпбелла
ошибки в экспериментах и как не словить ложные выводы
атомарный дизайн метрик
ну и введение в матстат: дисперсия, стандартное отклонение, распределения, ЦПТ и т.д. (расчеты на примерах)
Спикеры обещали прислать презу со всеми ссылками и темами. Как пришлют - прикреплю здесь!
import duckdb
import pandas as pd
query = """
with events as (
select
date_add(
date '2026-02-02',
INTERVAL (cast(14 * floor(date_diff('day', date '2026-02-02', cast(event_ts as date)) / 14.0) as integer)) DAY) as period_start,
user_id,
json_extract_string(event_payload, '$.source_block') as source_block
from df_product_events
where event_ts >= timestamp '2026-02-02 00:00:00'
and event_ts < timestamp '2026-03-16 00:00:00'
and event_name = 'product_card_open'
and nullif(trim(user_id), '') is not null
)
select
period_start,
period_start + INTERVAL 13 DAY as period_end,
count(distinct user_id) as users_total,
count(distinct case when source_block = 'Подборка для вас' then user_id end) as users_from_target_block,
round(
100.0 * count(distinct case when source_block = 'Подборка для вас' then user_id end)
/ count(distinct user_id),
2
) as share_from_target_block
from events
group by 1, 2
order by 1
"""
result = duckdb.query(query).to_df()
Кто ещё не скачал (Москвичи и Питерцы) - обязательно скачивайте. Там реально много прикольного и вкусного!
import duckdb
import pandas as pd
df = pd.DataFrame({
"user_id": [1, 2, 3],
"device_ids": [
["dev_a", "dev_b"],
["dev_c"],
["dev_d", "dev_e", "dev_f"]
]
})query = """
SELECT user_id, d AS device_id
FROM df
CROSS JOIN UNNEST(device_ids) AS t(d)
ORDER BY 1, 2
"""
result = duckdb.query(query).to_df()
UNNEST(device_ids) - разворачивает массив
t - имя временной таблицы
d - имя колонки внутри неёorders = pd.DataFrame({
"user_id": [1, 2],
"revenue": [100, 200]
})query = """
SELECT df.user_id, d AS device_id, o.revenue
FROM df
CROSS JOIN UNNEST(device_ids) AS t(d)
LEFT JOIN orders o
ON df.user_id = o.user_id
ORDER BY 1, 2
"""
result2 = duckdb.query(query).to_df()
Отдельно мы выделили блок экспертов, которых читаем сами — именно к ним мы обратились за информационной поддержкой. Благодарим всех, кто помог собрать такую выборку

На примерах из Dodo посмотрим, как вести задачу от сырых данных до рабочего дашборда.
Почему универсальные навыки стали преимуществом и как джуну соответствовать этому фильтру.
Советы от HR, как доработать резюме и отклики, чтобы «пробивать» автоматические фильтры и внимание рекрутеров.

Платформа использует файлы cookie для авторизации и сохранения настроек. Продолжая работу, вы соглашаетесь с нашей Политикой использования cookie.