Библиотека собеса по Data Science | вопросы с собеседований
4.33K subscribers
421 photos
10 videos
1 file
402 links
Вопросы с собеседований по Data Science и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/7dfb7235

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
🐍Решение задачи на Python «сумма двух» (Two sum)

Вам даны массив и число N. Нужно вернуть True, если в массиве есть такие два числа A и B, что их сумма A + B даёт N. В противном случае нужно вернуть False.
Примеры:
[1, 2, 3, 4], 5 ⇒ True
[3, 4, 6], 6 ⇒
False


✔️Можно, конечно, применить брутфорс, но есть решение получше. Его сложность составит O(n). Вот как оно выглядит:


def two_sum(numbers, target):
index = {num: i for (i, num) in enumerate(numbers)}

n = len(numbers)

for i in range(n):
a = numbers[i]
b = target - a

if b in index:
j = index[b]
if i != j:
return True

return False


Здесь сначала создаётся словарь index, который хранит числа из массива в качестве ключей и их индексы в массиве в качестве значений. Затем идёт перебор элементов массива. Для каждого элемента a вычисляется число b, которое необходимо для достижения суммы target. Далее проверяется, содержится ли b в словаре index. Если да, то дополнительно проверяется, не совпадает ли индекс текущего элемента a с индексом элемента b. Если индексы различны, это означает, что была найдена пара чисел, сумма которых равна target.

#алгоритмы
#python
Please open Telegram to view this post
VIEW IN TELEGRAM
🐼 Задача на знание Pandas

Условие: У вас есть датафрейм df, содержащий два столбца: A и B. Столбец A содержит даты, а столбец B — числовые значения. Как бы вы рассчитали скользящее среднее по столбцу B с окном в 3 дня, предполагая, что значения в столбце A идут подряд и без пропусков?

Решение:
import pandas as pd

data = {
'A': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05',
'2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09'],
'B': [18, 71, 13, 57, 7, 8, 69, 83, 27]
}

df = pd.DataFrame(data)

# Убедимся, что столбец A распознан как дата
df['A'] = pd.to_datetime(df['A'])

# Установим столбец дат как индекс датафрейма
df = df.set_index('A')

# Рассчитаем скользящее среднее по столбцу B с окном в 3 дня
df['Moving_Average'] = df['B'].rolling(window=3).mean()

print(df)


#python
#pandas
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните разницу между списком и кортежем?

▫️Список — это упорядоченная коллекция элементов. Элементы могут иметь любой тип. При этом коллекцию можно изменять: вставить новый элемент, удалить старый и т.д. То есть длина у списка динамическая — при необходимости Python будет выделять новую память.
Список создаётся через квадратные скобки.

▫️Кортеж — это тоже упорядоченная коллекция элементов. Элементы тоже могут иметь любой тип. Однако изменять кортеж нельзя. Кроме того, в памяти Python пустой кортеж — всегда в единственном экземпляре. Пустые списки же каждый раз создаются заново.
Кортеж создаётся через круглые скобки.

#программирование
#python
Какие магические методы в Python вы знаете?

Магическими методами в Python называют встроенные методы с двойными подчёркиваниями (например, `__init__`, `__str__`). Они позволяют определять поведение классов для различных операций.

Вот несколько магических методов для примера:
▫️`__init__` — для инициализации нового объекта;
▫️`__del__` — деструктор, который вызывается при удалении объекта;
▫️`__str__` — определяет поведение функции `str()`, вызванной для экземпляра вашего класса;
▫️`__len__` — возвращает длину объекта;
▫️`__eq__` — определяет поведение оператора равенства `==`;
▫️`__iter__` — возвращает итератор для объекта;
▫️`__getitem__` — получение значения по ключу или индексу;
▫️`__call__` — позволяет объекту класса вести себя как функция.

#программирование
#python
Что такое args, kwargs. В каких случаях они требуются?

В Python оператор * используется не только для умножения, но и для того, чтобы «распаковывать» объекты, внутри которых хранятся некие элементы. Именно эта его особенность применяется в случае с args и kwargs. Можно использовать другие имена, но это считается дурным тоном. args — это сокращение от arguments (аргументы), а kwargs — сокращение от keyword arguments (именованные аргументы).

Соответственно, мы используем *args, когда не уверены, сколько аргументов будет передано функции, или если хотим передать список или кортеж аргументов функции. А **kwargs мы используем, когда не знаем, сколько именованных аргументов будет передано функции. В последнем случае, в виду того, что речь идёт об именованных аргументах, применяется словарь, где ключ — имя параметра, значение — значение параметра.

#python
#программирование
Что такое генераторы и итераторы в Python?

В Python генераторы и итераторы — это объекты, позволяющие работать с потенциально большими последовательностями данных без необходимости загружать всё в память одновременно. То есть и генераторы, и итераторы позволяют перебирать элементы коллекций.

🔹Итераторы реализуют методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а __next__() — следующий элемент коллекции. Если элементы заканчиваются, __next__() должен вызвать исключение StopIteration.

🔹Генераторы представляют собой специальный способ реализации итераторов. Их можно реализовать двумя способами: как функцию с ключевым словом yield или как генераторное выражение. Главное отличие генератора от итератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям. Канонический пример — генератор, порождающий последовательность чисел Фибоначчи.

#программирование
#python
Напишите функцию для вычисления евклидова расстояния

Вот две точки для примера:

plot1 = [1,3]
plot2 = [2,5]


Решение:
def euclidean_dist(point1, point2):
return ((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)**0.5

point1, point2 = [1, 3], [2, 5]
print(euclidean_dist(point1, point2)) # -> 2.23606797749979


#python
#программирование
Какова разница между == и is в Python?

🔘== проверяет равенство значений двух объектов. Он возвращает True, если объекты имеют одинаковые значения, даже если они занимают разные места в памяти.

🔘is проверяет, указывают ли две переменные на один и тот же объект в памяти.

Рассмотрим пример:
lst = [10, 20, 20]
print(lst == lst[:]) # True
print(lst is lst[:]) # False


В первом случае lst == lst[:] возвращает True, потому что срез lst[:] создаёт новый список с теми же значениями, что и у оригинального списка lst.

Во втором случае lst is lst[:] возвращает False, так как lst[:] создает новый объект в памяти, который имеет те же значения, но является другим объектом.

#python
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие библиотеки Python, позволяющие провести статистический анализ данных, вы знаете?

Можно назвать основные.

▪️statistics
Это встроенный модуль, который позволяет оценить некоторые статистические характеристики.

▪️NumPy
Данная библиотека предназначена для работы с многомерными массивами и предоставляет широкий набор функций для выполнения математических и статистических операций, таких как вычисление среднего, стандартного отклонения, дисперсии и т.д.

▪️SciPy
Расширяет возможности NumPy и включает в себя модули для выполнения более сложных статистических операций, таких как расчет доверительных интервалов, регрессии, а также проведение тестов на значимость.

▪️Pandas
Эта библиотека предназначена для обработки и анализа данных. Она позволяет легко работать с табличными данными и предоставляет методы для их фильтрации, агрегации и выполнения статистических операций, таких как группировка и вычисление медианы.

▪️Matplotlib
Хотя эта библиотека в первую очередь предназначена для визуализации данных, она также полезна при проведении статистического анализа, поскольку позволяет строить графики распределений и гистограммы для анализа данных.

#python
Напишите логистическую регрессию

import numpy as np

class LogisticRegression:

def __init__(self, learning_rate=0.01, n_iters=1000):
self.learning_rate = learning_rate
self.n_iters = n_iters
self.weights = None
self.bias = None

def fit(self, X, y):
# initialize weights and bias to zeros
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
self.bias = 0

# gradient descent optimization
for i in range(self.n_iters):
# calculate predicted probabilities and cost
z = np.dot(X, self.weights) + self.bias
y_pred = self._sigmoid(z)
cost = (-1 / n_samples) * np.sum(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))

# calculate gradients
dw = (1 / n_samples) * np.dot(X.T, (y_pred - y))
db = (1 / n_samples) * np.sum(y_pred - y)

# update weights and bias
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db

def predict(self, X):
# calculate predicted probabilities
z = np.dot(X, self.weights) + self.bias
y_pred = self._sigmoid(z)
# convert probabilities to binary predictions
return np.round(y_pred).astype(int)

def _sigmoid(self, z):
return 1 / (1 + np.exp(-z))


#python
#машинное_обучение
Какие существуют области видимости функций в Python?

В Python переменные имеют две основные области видимости: локальную и глобальную.

▪️Локальная
Переменные, объявленные внутри функции, существуют только в её пределах и недоступны за её пределами. Аргументы функции также относятся к локальной области и исчезают после завершения функции.

▪️Глобальная
Переменные, объявленные вне функций, доступны в любой части программы. Однако, если внутри функции пытаться присвоить значение глобальной переменной, Python создаст новую локальную переменную с тем же именем.

#python
В чём разница между модулем, пакетом и библиотекой в Python?

▪️Модуль
Это файл с расширением .py, содержащий код Python (функции, классы, переменные). Он используется для структурирования и повторного использования кода. Модуль можно импортировать.

▪️Пакет
Это директория, содержащая набор модулей и файл __init__.py, который указывает, что эта директория является пакетом. Пакеты позволяют группировать модули по логике или функциональности.

▪️Библиотека
Это набор модулей и/или пакетов, предназначенных для решения определённого класса задач. Обычно библиотека распространяется как единое целое, например, через PyPI.

#python
#программирование
Совет на 2025-й — будьте осторожнее с выбором работы.

IT-рынок штормит: массовые сокращения, заморозка найма, снижение зарплат. В такое время особенно важно отличать стоящие офферы от проходных.

Знакомо? Открываешь вакансию, а там: «Ищем middle-разработчика с опытом 10 лет, знанием 15 языков и готовностью работать за печеньки. Офис в Челябинске, релокация за ваш счет» 🤦‍♂️

Чтобы не тратить время на сотни сомнительных предложений, подпишитесь на IT Job Hub. Там мы отфильтровываем весь мусор и публикуем только избранные вакансии в стабильных компаниях:

— Зарплаты на уровне рынка, а не на уровне голодного студента
— Никаких «мы молодая и дружная семья» — только адекватные условия
— Проверенные работодатели, а не стартапы из сомнительных сфер

Вакансии удобно разбиты по тегам: #python #java #go #data #devops и по другим направлениям. Без воды и лишнего спама — только проверенные вакансии в знакомых компаниях.

Подписывайтесь, если не хотите упустить работу мечты → @proglib_jobs