**Данные:** DataFrame `search_logs` с колонками: `query`, `platform` (mobile/desktop), `timestamp`, `user_id`.
**Задание:**
1. Найдите топ-10 поисковых запросов для каждой платформы
2. Постройте распределение запросов по часам суток для mobile и desktop
3. Определите, какие запросы уникальны для каждой платформы (есть в топ-10 одной, но не другой)
Структура для ориентира — реальные значения из эталонного решения.
import pandas as pd
import numpy as np
np.random.seed(42)
n = 20000
mobile_queries = ['купить iphone', 'погода', 'такси', 'доставка еды',
'курс доллара', 'рецепты', 'ближайшая аптека',
'расписание электричек', 'новости', 'акции магазинов',
'фитнес рядом', 'перевод слова']
desktop_queries = ['купить iphone', 'как написать резюме', 'excel формулы',
'python tutorial', 'курс доллара', 'новости',
'сравнение ноутбуков', 'отзывы на товар',
'бронирование отеля', 'страхование авто',
'онлайн курсы', 'акции магазинов']
rows = []
for _ in range(n):
platform = np.random.choice(['mobile', 'desktop'], p=[0.6, 0.4])
if platform == 'mobile':
query = np.random.choice(mobile_queries)
hour = np.random.choice(range(24),
p=[0.01,0.005,0.005,0.005,0.005,0.01,0.03,0.06,
0.07,0.06,0.05,0.05,0.06,0.06,0.05,0.04,
0.04,0.05,0.06,0.07,0.07,0.06,0.04,0.02])
else:
query = np.random.choice(desktop_queries)
hour = np.random.choice(range(24),
p=[0.01,0.005,0.005,0.005,0.005,0.01,0.02,0.03,
0.05,0.08,0.09,0.09,0.07,0.06,0.08,0.08,
0.07,0.06,0.04,0.03,0.02,0.02,0.015,0.01])
ts = pd.Timestamp('2024-03-01') + pd.Timedelta(hours=int(hour),
minutes=np.random.randint(0, 60))
rows.append({'query': query, 'platform': platform,
'timestamp': ts, 'user_id': np.random.randint(1, 5000)})
df = pd.DataFrame(rows)
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['hour'] = df['timestamp'].dt.hour
# Топ-10 по платформам
top_mobile = (df[df['platform'] == 'mobile']['query']
.value_counts().nlargest(10))
top_desktop = (df[df['platform'] == 'desktop']['query']
.value_counts().nlargest(10))
print("=== Топ-10 Mobile ===")
for i, (q, cnt) in enumerate(top_mobile.items(), 1):
print(f" {i}. {q} ({cnt})")
print("\n=== Топ-10 Desktop ===")
for i, (q, cnt) in enumerate(top_desktop.items(), 1):
print(f" {i}. {q} ({cnt})")
# Уникальные запросы
only_mobile = set(top_mobile.index) - set(top_desktop.index)
only_desktop = set(top_desktop.index) - set(top_mobile.index)
print(f"\nТолько в mobile: {only_mobile}")
print(f"Только в desktop: {only_desktop}")
# Распределение по часам
hourly = df.groupby(['hour', 'platform']).size().unstack(fill_value=0)
hourly_pct = hourly.div(hourly.sum()) * 100
print("\n=== Распределение по часам (%) ===")
print(hourly_pct.round(1))
# Пиковые часы
mobile_peak = hourly_pct['mobile'].idxmax()
desktop_peak = hourly_pct['desktop'].idxmax()
print(f"\nПик mobile: {mobile_peak}:00")
print(f"Пик desktop: {desktop_peak}:00")
pandas groupby value_counts визуализация поиск
Это задание для уровня Junior. Подходит для начинающих аналитиков, проверяет базовые знания SQL/Python/статистики.
Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: pandas, groupby, value_counts, визуализация, поиск.
На реальном собеседовании на подобную задачу отводится 5-10 минут — проверяется скорость и базовая грамотность. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 482 Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.
← Все задания