«Люблю компьютеры» — пока слишком широкий ответ для выбора между аналитикой данных и backend-разработкой. Обе работы могут включать Python и таблицы. Разница становится заметнее, когда нужно что-то сделать: ответить на вопрос по данным или задать поведение программы.
Аналитик выясняет, что произошло, по данным: например, какие занятия принесли больше оплаченных заказов. Backend-разработчик пишет серверную часть сайта: она принимает заявки и проверяет, можно ли их выполнить. Попробуем обе работы на вымышленном примере учебного кружка. Начать можно вручную; код ниже позволит повторить расчёт и изменить правила.
Проба аналитика: что на самом деле купили
Организатор кружка спрашивает: «Какое направление принесло больше оплаченных продаж в этой таблице?» Сначала нужно уточнить два слова: продаж — количество заказов или сумма денег? В примере посчитаем оба показателя, чтобы не скрыть различие.
Скопируйте данные в электронную таблицу или обычный текстовый файл. Одна строка — один заказ. paid означает оплачен, cancelled — отменён, refunded — полностью возвращён. Для этой задачи учитываем только текущий статус paid; календаря платежей здесь нет.
order_id,subject,amount,status
101,math,1200,paid
102,python,1800,paid
103,math,1200,cancelled
104,python,1800,paid
105,design,1500,refunded
106,math,1200,paid
107,design,1500,paid
108,python,1800,cancelled
Ваша задача: оставить подходящие строки, сгруппировать их по направлению, посчитать количество и сумму. Потом написать вывод из двух предложений: что видно и для какого решения данных пока недостаточно.
Можно начать вручную. Подчеркните оплаченные заказы, выпишите их номера и проверьте, что один номер не учтён дважды. Затем сложите суммы отдельно для каждого направления. Код понадобится, если захотите повторить вычисление автоматически.
Проверяемый результат
| Направление | Оплаченных заказов | Сумма, ₽ |
|---|---|---|
| Python | 2 | 3 600 |
| Математика | 2 | 2 400 |
| Дизайн | 1 | 1 500 |
| Всего | 5 | 7 500 |
Python лидирует по сумме, а по количеству делит первое место с математикой. Из этих восьми строк нельзя сделать вывод, что направление прибыльнее: нет затрат. Нельзя узнать и долю покупателей среди всех, кому предложили курс: такого общего числа в таблице нет. Эту долю называют конверсией в покупку.
Это важная часть аналитической работы. Красивый график не исправит неправильно определённый показатель. Если включить отменённые и возвращённые заказы, получится сумма 12 000 ₽, которая не отвечает на поставленный вопрос.
Та же задача на Python и SQL
Если Python уже установлен, сохраните пример в файл trial.py и запустите python3 trial.py либо python trial.py — в зависимости от команды в вашей системе. В коде только стандартные модули; дополнительные пакеты не нужны.
import csv
import io
import sqlite3
data = """order_id,subject,amount,status
101,math,1200,paid
102,python,1800,paid
103,math,1200,cancelled
104,python,1800,paid
105,design,1500,refunded
106,math,1200,paid
107,design,1500,paid
108,python,1800,cancelled
"""
db = sqlite3.connect(":memory:")
db.execute("CREATE TABLE orders (id INTEGER PRIMARY KEY, subject TEXT, amount INTEGER, status TEXT)")
rows = csv.DictReader(io.StringIO(data))
db.executemany("INSERT INTO orders VALUES (?, ?, ?, ?)", [
(int(r["order_id"]), r["subject"], int(r["amount"]), r["status"])
for r in rows
])
query = """SELECT subject, COUNT(*), SUM(amount)
FROM orders WHERE status = 'paid'
GROUP BY subject ORDER BY SUM(amount) DESC"""
for result in db.execute(query):
print(result)
db.close()
Ожидаемые строки вывода: ('python', 2, 3600), ('math', 2, 2400), ('design', 1, 1500).
Модуль csv в документации Python читает строки таблицы, а функции COUNT и SUM в SQLite считают количество и сумму. Условие WHERE задаёт, какие заказы попадут в расчёт. Попробуйте заменить статус заказа 108 на paid: для Python должно получиться три заказа на 5 400 ₽.
Проба backend-разработчика: что делать с заявкой
Теперь вопрос другой: «Как программа должна обработать новую заявку?» Нужно заранее определить входные данные, допустимые значения и ответы при ошибке.
В этой пробе доступны два направления: python и design, а запись открыта ученикам 7–11 классов. Это правила вымышленного кружка. На вход функция получает имя, класс и направление. Если всё подходит, возвращает код 201 и заявку, в которой убраны пробелы в начале и конце имени. Если нет — код 400 и понятную причину.
В вводном материале MDN среди задач серверного кода описаны проверка переданных данных и подготовка ответа клиенту. Ниже показана только небольшая часть такой логики: это обычная функция, без сайта, HTTP-сервера и сохранения заявок.
def prepare_application(payload):
if not isinstance(payload, dict):
return 400, {"error": "Нужен объект с полями заявки"}
name = payload.get("name")
grade = payload.get("grade")
course = payload.get("course")
if not isinstance(name, str) or not name.strip():
return 400, {"error": "Укажите имя"}
if type(grade) is not int or not 7 <= grade <= 11:
return 400, {"error": "Нужен целый класс от 7 до 11"}
if course not in ("python", "design"):
return 400, {"error": "Такого направления нет"}
return 201, {"name": name.strip(), "grade": grade, "course": course}
print(prepare_application({"name": " Маша ", "grade": 8, "course": "python"}))
print(prepare_application({"name": "", "grade": 8, "course": "python"}))
Первая строка должна вернуть код 201 и имя без пробелов по краям. Вторая — код 400 и сообщение «Укажите имя». Замените класс на 6, затем на строку "8". В обоих случаях ожидается ошибка класса: договорились принимать целое число, а не любой похожий текст.
Ваша самостоятельная правка: откройте запись шестиклассникам. Измените границу и текст ошибки. Проверьте классы 5, 6, 11 и 12. Правильный результат: ошибка, успех, успех, ошибка. Если изменился только текст сообщения, а шестой класс по-прежнему отклоняется, поведение программы ещё не исправлено.
Сравните, к чему хотелось вернуться
После каждой пробы запишите, какая часть заинтересовала, где понадобилась помощь и что хотелось улучшить. В аналитике это может быть поиск дубликата или вопрос «что здесь считается покупкой». В разработке — проверка нового правила: например, что произойдёт при записи ученика младше допустимого возраста.
Не оценивайте себя только по скорости. Незнакомая команда может остановить человека, которому понравилась сама работа. А лёгкое выполнение готового примера не показывает, захочется ли долго заниматься этим направлением.
Следующий шаг — выбрать задачу чуть сложнее. Для аналитики добавить повтор заказа и придумать правило его обработки. Для разработки — добавить третье направление и проверить все ответы. Затем сравните программы по программированию или карточку Яндекс Практикума по составу практики, проверке работ и требованиям на старте. Название профессии станет понятнее, когда за ним уже стоят действия, которые вы попробовали.
