Python-инструменты Data Scientist
Подтемы:
Как можно ускорить процесс последовательного добавления большого количества объектов к списку в Python с использованием библиотеки NumPy?
Повторные вызовы numpy.append() обычно не ускоряют накопление: каждый создаёт новый массив и копирует данные. Если размер известен, заранее выделите массив через numpy.empty() и заполняйте его. Если размер неизвестен, накапливайте элементы в списке Python и один раз преобразуйте его через numpy.array().
Ссылки для изучения
Что быстрее для числового DataFrame: df**2 или df.apply(lambda x: x**2), и почему?
Использование операции df**2 будет быстрее, чем df.apply(lambda x: x**2), потому что операция df**2 векторизована и выполняется нативно на массивах NumPy, в то время как apply применяет функцию к каждой строке или столбцу отдельно, что менее эффективно.
Ссылки для изучения
Какая концепция эффективного Pandas? Как хорошо и красиво писать код на Pandas?
Концепция эффективного использования Pandas включает следующие аспекты:
-
Векторизация операций: Используйте встроенные методы Pandas для выполнения операций на всем DataFrame или Series одновременно, избегая явных циклов Python.
-
Использование методов работы с данными: Вместо циклов Python используйте методы Pandas, такие как
apply(),map(),groupby()и др., для выполнения операций над данными более эффективно. -
Оптимизация работы с памятью: Используйте различные методы для уменьшения потребления памяти, такие как использование более компактных типов данных, удаление ненужных столбцов или строк и загрузка данных порциями при необходимости.
-
Использование индексации и селекции: Используйте индексацию и селекцию для эффективного доступа к данным, избегая использования циклов и лишних операций копирования.
-
Применение эффективных алгоритмов: Используйте оптимизированные алгоритмы Pandas для выполнения сложных операций, таких как слияние таблиц, объединение и группировка данных.
-
Обработка пропущенных данных: Используйте методы Pandas для обработки пропущенных данных, такие как
fillna(),dropna()иinterpolate(), чтобы гарантировать целостность и точность анализа. -
Использование цепочек методов (method chaining): Используйте цепочки методов для создания более компактного и читаемого кода, избегая лишних промежуточных переменных.
Ссылки для изучения
Как работают в Pandas’е методы: assign, pipe?
Метод assign() в Pandas используется для создания новых столбцов в DataFrame на основе существующих данных. Он принимает именованные аргументы в виде выражений или функций, которые определяют значения новых столбцов. Метод возвращает новый DataFrame с добавленными столбцами.
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df_new = df.assign(C=df['A'] + df['B'], D=lambda x: x['A'] * 2)
pipe() передаёт DataFrame одной функции вместе с дополнительными аргументами и возвращает её результат, который может иметь любой тип. Последовательность функций строят цепочкой вызовов .pipe(f).pipe(g).
Например:import pandas as pd
def square_and_sum(df):
df['A'] = df['A'] ** 2
df['B'] = df['B'] ** 2
return df.sum()
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.pipe(square_and_sum)
Ссылки для изучения
Какой аналог LEFT JOIN в Pandas, если хотим пару DataFrame объединить?
В Pandas аналогом операции LEFT JOIN является метод merge(), который позволяет объединять два DataFrame по заданным ключам, сохраняя все строки из левого DataFrame и соответствующие строки из правого DataFrame, если ключи совпадают.
import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
result = pd.merge(df1, df2, on='key', how='left')
В этом примере df1 и df2 объединяются по ключу 'key', и результатом будет DataFrame, содержащий все строки из df1 и только соответствующие им строки из df2.
Ссылки для изучения
Чем groupby.transform отличается от groupby.agg в Pandas?
groupby().agg() сворачивает каждую группу до одной или нескольких агрегированных строк. groupby().transform() возвращает результат, выровненный с исходными строками, и поэтому подходит для центрирования, нормализации или добавления среднего группы как новой колонки. Функция для transform должна вернуть скаляр либо результат, совместимый с размером группы. В ML групповые статистики считают только на train или внутри фолда. Иначе строка получает информацию из validation или будущего.
Ссылки для изучения
Чем loc отличается от iloc в Pandas?
loc выбирает строки и столбцы по меткам, а iloc по целочисленным позициям. У loc['a':'c'] правая метка обычно включена, у iloc[0:3] позиция 3 исключена. Это особенно коварно при числовом индексе: loc[1] ищет метку 1, iloc[1] берет вторую строку. Индексированную булеву Series обычно передают в loc, где она выравнивается по индексу. Для присваивания безопасна одна операция: df.loc[mask, 'col'] = value.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- ТОП 10 ВОПРОСОВ АНАЛИТИКУ / СОБЕСЕДОВАНИЕ 2024 / SQL PYTHON BI · 56:54–58:23Мок-собеседование · Ответ кандидата
Кандидат различает loc как выбор по меткам индекса и iloc как выбор по целочисленным позициям строк и столбцов.
Чем pivot отличается от pivot_table в Pandas?
pivot только меняет форму данных и требует ровно одно значение для каждой пары index и columns. При дублях он падает, что часто указывает на неверную гранулярность. pivot_table умеет агрегировать такие строки через aggfunc; по умолчанию это среднее, поэтому функцию лучше задавать явно. fill_value применяют лишь когда отсутствие комбинации действительно означает ноль. Несколько значений или агрегатов могут создать MultiIndex в колонках.
Ссылки для изучения
Назовите магические команды Jupiter.
Вот несколько магических команд в Jupyter:
-
%matplotlib inline: Включает отображение графиков Matplotlib в блокноте. -
%%time: Измеряет время выполнения кодовой ячейки. -
%timeit: Повторяет выполнение кода несколько раз и измеряет среднее время выполнения. -
%load: Загружает код из файла в текущую ячейку. -
%run: Запускает код Python из файла. -
%reset: Очищает пространство имен. -
%%html: Отображает HTML-разметку из ячейки.
-
%pdb: Запускает отладчик Python (pdb). -
%magic: Выводит список всех магических команд.
Ссылки для изучения
Чем отличается % от %%?
В Jupyter Notebook магические команды начинаются либо с одного знака процента %, либо с двух знаков процента %%. Разница между ними в том, что % используется для магических команд, применяемых к одной строке кода, а %% применяется к целой ячейке кода.
Ссылки для изучения
Хорошо знакомы с Scikit-Learn?
В ответе укажите свой уровень работы со scikit-learn и конкретный пример. Библиотека предоставляет модели классификации, регрессии и кластеризации, преобразования данных, метрики, кросс-валидацию и подбор гиперпараметров. Не приписывайте себе практический опыт с инструментами, которые только изучали.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- #16 Собеседование Data Scientist на Госуслуги. Пора менять профессию)) · 5:30–6:30Разбор интервью · Совместный разбор
Кандидат обсуждает TF-IDF в scikit-learn, ограничения производительности и упаковку модели в production pipeline.
Какие техники с точки зрения проверки качества моделей используете (в Scikit-Learn)?
Для проверки качества моделей в scikit-learn доступны следующие инструменты. В личном ответе выберите те, которыми пользовались.
-
Кросс-валидация: Позволяет оценить производительность модели на разных подмножествах данных, уменьшая вероятность переобучения и обобщая ее качество.
-
Метрики оценки качества: В зависимости от задачи (классификация, регрессия и т. д.) использую различные метрики, такие как accuracy, precision, recall, F1-score, ROC AUC, MSE и другие, чтобы оценить качество модели.
-
Grid Search и Random Search: Позволяют подобрать оптимальные гиперпараметры модели, исследуя пространство параметров и выбирая те, которые приводят к наилучшей производительности.
-
Learning Curves: Позволяют визуально оценить, как изменение размера обучающего набора данных влияет на производительность модели, помогая выявить проблемы с переобучением или недообучением.
-
Confusion Matrix: Позволяет оценить производительность классификационных моделей, выявляя количество верных и ошибочных предсказаний для каждого класса.
Ссылки для изучения
Знакомы с pipeline из Scikit-Learn?
Pipeline объединяет преобразования и итоговый estimator. В ответе приведите пример своего использования, если он есть.
Pipeline представляет собой последовательность шагов обработки
данных и моделирования, которые автоматически применяются к данным в заданном
порядке. Она позволяет объединить несколько этапов работы с данными, таких как
предобработка, извлечение признаков и построение модели, в один интегрированный
процесс.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- #16 Собеседование Data Scientist на Госуслуги. Пора менять профессию)) · 6:00–6:30Разбор интервью · Совместный разбор
Кандидат описывает сборку TF-IDF и модели в sklearn pipeline для production serving.







