Sobes.tech

Data Analyst

Kde v reálném životě se vyskytuje normální rozdělení a kde ne? Uveďte konkrétní příklady s vysvětlením, proč jsou data normálně rozložena nebo ne.

123

Napište kód v Pythonu, který vypočítá skalární součin dvou RLE-komprimovaných vektorů během jednoho průchodu.

120

Vysvětlete logiku řešení úlohy sum_series: jak sestavit součet dvou stupňových časových řad?

119

Afanasy již dva týdny pracoval na psaní kódu, který dokáže řešit japonské křížovky s podporou devíti barev, když mu na další schůzce kolega oznámil, že je schopen sám zvládnout úlohu rychleji, a v programu už nemá smysl. Ale Afanasy, jako optimista, se rozhodl věnovat této úloze ještě více času a udělat následující — spočítat, jak dobře si kolega poradí s křížovkami. Pro toto hodnocení si zvolil jakýsi ekvivalent metriky IoU — výpočet bude probíhat podobně jako klasické Intersection Over Union, ale podle barev. Pracuje to podle plánu takto: každé shodné políčko v originále a řešení podle barvy přidá 1 do čitatele, a do jmenovatele se přidá 1 za každé toto políčko v originále i řešení (za shodná políčka se přidá pouze jedna jednotka). Poté bude prováděno průměrování podle počtu barev v originálním obrázku, zaokrouhlené na dvě desetinná místa; nula není barvou, proto při výpočtech nestojí za to počítat metriku pro políčka této barvy. Na vstupu bude na první řádce zadáno, kolik řádků n a sloupců m (přesně v tomto pořadí) obsahuje původní obrázek. Poté následuje 2n řádků, obsahujících m čísel oddělených mezerou — první n řádků se týká odeslaného řešení křížovky, a následujících n řádků je původní obrázek. Předpokládá se, že na každém řádku, počínaje druhým, je přesně m čísel. Jako odpověď vypište jedno číslo zaokrouhlené na dvě desetinná místa, jak je uvedeno v příkladech. Několik příkladů: 1. První příklad [phone] -> 1.0 Vysvětlení: podíl shodných a neshodných buněk (1.0 + 1.0 + 1.0 + 1.0) / počet barev (4) 2. Druhý příklad [phone] -> 0.08 Vysvětlení: podíl shodných a neshodných buněk (0.25 + 0.0 + 0.0) / počet barev (3); nuly nepočítáme, ani jako buňky v reprezentacích, ani v počtu barev. 3. Třetí příklad [phone] zde začíná odeslaný obrázek [phone] -- zde končí odeslaný obrázek 0 1 2 -- zde začíná původní obrázek [phone] -> 0.47 Vysvětlení: podíl shodných a neshodných buněk (0.4 + 0.5 + 0.5) / počet barev (3); nuly nepočítáme ani jako buňky v reprezentacích, ani v počtu barev. 4. Čtvrtý příklad [phone] -> 0.0 Vysvětlení: podíl shodných a neshodných buněk (0.0) / počet barev (1); nuly nepočítáme ani jako buňky v reprezentacích, ani v počtu barev.

119

Jaký je logický pořadí provádění FROM, JOIN, GROUP BY a SELECT v tomto SQL dotazu?

118

val_a, val_b = 0, 0 t = None dokud i < délka(a) nebo j < délka(b): a_next = a[i][0] pokud i < délka(a) jinak float('inf') b_next = b[j][0] pokud j < délka(b) jinak float('inf') pokud a_next < b_next: val_a = a[i][1] t = a[i][0] i += 1 elif b_next < a_next: val_b = b[j][1] t = b[j][0] j += 1 jinak: val_a = a[i][1] val_b = b[j][1] t = a[i][0] i += 1 j += 1 result.append((t, val_a + val_b)) return result

116

Pseudokód sum_series(a={{1, 2}, {5, 1}}, b={{2, 4}, {3, 6}, {9, 7}}) -> {{1, 2}, {2, 6}, {3, 8}, {5, 7}, {9, 8}} def sum_series(a, b): result = [] i , j = 0, 0 val_a, val_b = 0, 0 while i < len(a) or j < len(b): a_next = a[i][0] if i < len(a) else float('inf') b_next = b[j][0] if j < len(b) else float('inf') if a_next <= b_next: val_a = a[i][1] t = a[i][0] i += 1 else: val_b = b[j][1] t = b[j][0] j += 1 result.append((t, val_a + val_b)) return result

115

Jak shromáždit ground truth odpovědi pro benchmark v geometrii?

114

-- O kampaních promo zaslaných uživatelům: -- 2.1 Napište dotaz, který zobrazí počet uživatelů, kteří úspěšně obdrželi komunikaci, pro každou kampaň. -- 2.2 Upravte dotaz tak, aby zobrazoval: počet uživatelů, kteří nakonec neobdrželi žádnou úspěšnou komunikaci, pro každou kampaň. -- 3. Do tabulky communications byl přidán další sloupec – event_timestamp – datum a čas události doručení komunikace ve formátu '%Y-%m-%d %H:%M:%S'. -- Pro všechny kampaně, včetně těch nezačatých, spočítejte metriku: podíl uživatelů, u nichž byla úspěšná doručení zprávy provedena na první pokus. -- Lze použít okénkové funkce nebo ne, ale je důležité, aby byl dotaz optimalizovaný.

112

Uveďte jasně kritéria, která musí být splněna, aby data měla normální rozdělení.

111

Jak bys navrhl/a A/B test pro ověření nového vyhledávacího algoritmu? Jak určíš potřebnou velikost vzorku a dobu trvání testu?

111

Máte nějaké otázky pro interviewera?

110

Jak se nazývá řadicí operátor v SQL a kdy se provádí? Kde je LIMIT v pořadí provádění?

109

B. Předpony a Přípony Dán je seřazený pole n nul. V každém kroku můžete zvolit libovolný počet prvních nebo posledních prvků tohoto pole a přičíst k nim jedničku. Je možné dosáhnout požadovaného stavu pole po nějakém počtu takových operací? Formát vstupu První řádek obsahuje celé číslo 1 ≤ n ≤ 100000 — počet prvků pole. Druhý řádek obsahuje n nenegativních celých čísel a1, a2, ..., an oddělených mezerou, kde ai ≤ 10^18 — požadované konečné prvky. Formát výstupu Vytiskněte "YES", pokud je takový stav dosažitelný, a "NO", pokud není. Příklad Vstup [phone] Výstup YES Poznámka Stavy [phone] lze dosáhnout následujícím způsobem: přičtením jedničky k prvním třem prvkům, čímž získáme [phone] přičtením jedničky k posledním čtyřem prvkům, čímž získáme [phone] přičtením jedničky k poslednímu prvku, čímž získáme [phone]

108

Pseudokód sum_series(a={{1, 2}, {5, 1}}, b={{2, 4}, {3, 6}, {9, 7}}) -> {{1, 2}, {2, 6}, {3, 8}, {5, 7}, {9, 8}} def sum_series(a, b): result = [] i , j = 0, 0 val_a, val_b = 0, 0 while i < len(a) or j < len(b): a_next = a[i][0] if i < len(a) else float('inf') b_next = b[j][0] if j < len(b) else float('inf') if a_next < b_next: val_a = a[i][1] t = a[i][0] i += 1 else: val_b = b[j][1] t = b[j][0] j += 1 result.append((t, val_a + val_b)) return result

108

-- Marketéři spouštějí promoční kampaně v aplikaci služby. Existují dvě tabulky: -- campaigns – seznam kampaní -- - campaign – název kampaně -- - action_type – typ kampaně: "push" nebo "banner" -- communications – log backendu s odesíláním komunikací těchto kampaní uživatelům -- - user_id – identifikátor uživatele -- - campaign – název kampaně -- - status – stav události: "success" nebo "error" --------------------------------------------------------------------------- -- 1. Zpočátku je v tabulce campaigns 4 řádky: -- | campaign | action_type | -- |-------------|-------------| -- | promo_dogs | push | <- náhodně duplikováno -- | promo_cats | banner | -- | promo_cats | banner | <- dva řádky -- | promo_rats | push | -- Je také známo, že: -- kampaně promo_dogs a promo_cats byly úspěšně realizovány u 100 uživatelů a každý uživatel obdržel jednu komunikaci, -- zatímco promo_rats je teprve v plánování. -- 1.1 Co zobrazí dotaz: SELECT campaign, COUNT(*) as rows, COUNT(DISTINCT co.user_id) AS users FROM campaigns AS ca INNER JOIN communications AS co ON ca.campaign = co.campaign GROUP BY ca.campaign AS campaign -- 1.2 Jak se změní odpověď, pokud změníme typ JOIN na LEFT?

105

Co je to benchmark a jak bys hodnotil kvalitu multimodálního modelu?

103

Bude výnos akcií [jméno] normálně rozdělen? (Minutové nárůsty ceny během celé obchodní historie od roku 2000 do 2026)

99

-- Tabulka campaigns byla opravena: odstraněny duplicitní záznamy, přidán klíč (PK). -- Bylo provedeno více kampaní, kvůli chybám začali uživatelé zaznamenávat neúspěšné pokusy o doručení komunikací, a někteří je vůbec neměli možnost vidět. -- O promo kampaních odeslaných uživatelům: -- 2.1 Napište dotaz, který zobrazí počet uživatelů, kteří úspěšně obdrželi komunikaci, pro každou kampaň. -- 2.2 Upravte dotaz tak, aby zobrazoval: počet uživatelů, kteří nakonec nedostali žádnou úspěšnou komunikaci, pro každou kampaň. -- Do tabulky communications byl přidán další sloupec – event_timestamp – datum a čas události doručení komunikace ve formátu '%Y-%m-%d %H:%M:%S'. -- Pro všechny kampaně, včetně těch nezačatých, spočítejte metriku: podíl uživatelů, u nichž byla úspěšná doručení zprávy provedena na první pokus. -- Lze použít okénkové funkce, nebo bez nich, ale je důležité, aby dotaz byl optimalizovaný.

98

D. Čínské ohňostroje Vladimir koupil sadu 3 čínských ohňostrojů. Vypadají naprosto stejně a jsou zamíchány v krabici, ale podle návodu mají různou spolehlivost: 1. "Elitní" — míra vad 10 % (pravděpodobnost úspěchu 0.9). 2. "Standard" — míra vad 20 % (pravděpodobnost úspěchu 0.8). 3. "Ekonomický" — míra vad 40 % (pravděpodobnost úspěchu 0.6). Vladimir náhodně vezme první ohňostroj, zapálí ho a ten úspěšně vystřelí. Šťastný Vladimir se rozhodne spustit zbývající dva ohňostroje jeden po druhém. Jaká je pravděpodobnost, že i druhý a třetí ohňostroj budou úspěšně vystřeleni — bez vady? Zaokrouhlete odpověď na tři desetinná místa.

98
/3