Вопросы для собеседования по NumPy и Pandas: Готовимся к Python-интервью

Зачем нужны NumPy и Pandas: Краткий обзор

NumPy и Pandas – это краеугольные библиотеки Python для анализа данных. NumPy предоставляет мощные инструменты для работы с многомерными массивами и выполнения численных операций. Pandas, в свою очередь, предлагает структуры данных Series и DataFrame, упрощающие анализ и манипуляции с табличными данными. Без них сложно представить современный анализ данных на Python.

Типичные сценарии использования NumPy и Pandas в анализе данных

  • Анализ данных электронной коммерции: Обработка данных о продажах, анализ поведения клиентов, прогнозирование спроса.
  • Интернет-маркетинг: Анализ эффективности рекламных кампаний, сегментация аудитории, оптимизация ставок.
  • Контекстная реклама: Анализ ключевых слов, оптимизация бюджета, A/B-тестирование.
  • Веб-программирование: Обработка данных пользователей, анализ логов, мониторинг производительности.

Обзор основных типов вопросов на собеседованиях

На собеседованиях по позициям, связанным с анализом данных и Python-разработкой, часто встречаются вопросы, направленные на проверку знания основных концепций NumPy и Pandas, а также умения применять их для решения практических задач. Они включают в себя как теоретические вопросы, так и задачи на написание кода.

Вопросы по NumPy: Основы и манипуляции с массивами

Создание массивов NumPy: array(), zeros(), ones(), eye(), random.rand()

Понимание различных способов создания массивов NumPy – это база. Важно знать, как создавать массивы из списков, заполнять их нулями или единицами, генерировать случайные числа и создавать единичные матрицы.

import numpy as np

# Создание массива из списка
arr: np.ndarray = np.array([1, 2, 3, 4, 5])

# Создание массива нулей
zeros_arr: np.ndarray = np.zeros((3, 4))

# Создание массива единиц
ones_arr: np.ndarray = np.ones((2, 2))

# Создание единичной матрицы
eye_arr: np.ndarray = np.eye(3)

# Создание массива случайных чисел
rand_arr: np.ndarray = np.random.rand(2, 3)

Индексация и срезы массивов: Доступ к элементам и подмассивам

Умение правильно индексировать массивы NumPy и извлекать срезы – ключевой навык для работы с данными.

import numpy as np

arr: np.ndarray = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Доступ к элементу
element: int = arr[0, 1]  # 2

# Срез массива
sub_array: np.ndarray = arr[0:2, 1:3]  # [[2, 3], [5, 6]]

Форма массивов: reshape(), flatten(), transpose()

Часто требуется изменять форму массивов для приведения их к нужному виду. Методы reshape(), flatten() и transpose() позволяют эффективно это делать.

import numpy as np

arr: np.ndarray = np.array([1, 2, 3, 4, 5, 6])

# Изменение формы массива
reshaped_arr: np.ndarray = arr.reshape((2, 3))

# Преобразование массива в одномерный
flattened_arr: np.ndarray = arr.flatten()

# Транспонирование массива
arr2: np.ndarray = np.array([[1, 2], [3, 4]])
transposed_arr: np.ndarray = arr2.T

Векторизованные операции: Арифметика, сравнения, логические операции

NumPy позволяет выполнять операции над массивами поэлементно, без использования циклов, что значительно увеличивает производительность. Это называется векторизацией.

import numpy as np

arr1: np.ndarray = np.array([1, 2, 3])
arr2: np.ndarray = np.array([4, 5, 6])

# Арифметические операции
sum_arr: np.ndarray = arr1 + arr2
mul_arr: np.ndarray = arr1 * arr2

# Операции сравнения
bool_arr: np.ndarray = arr1 > 2  # [False, False, True]

# Логические операции
bool_arr2: np.ndarray = (arr1 > 1) & (arr2 < 6) # [False, True, False]

Вопросы по NumPy: Более сложные операции

Линейная алгебра: Умножение матриц, определители, собственные значения (numpy.linalg)

NumPy предоставляет мощные инструменты для выполнения операций линейной алгебры.

import numpy as np

arr1: np.ndarray = np.array([[1, 2], [3, 4]])
arr2: np.ndarray = np.array([[5, 6], [7, 8]])

# Умножение матриц
matmul_arr: np.ndarray = np.matmul(arr1, arr2)

# Определитель матрицы
det: float = np.linalg.det(arr1)

# Собственные значения и собственные векторы
vals, vecs = np.linalg.eig(arr1)

Статистические функции: mean(), median(), std(), var()

Важно уметь вычислять основные статистические показатели для анализа данных.

import numpy as np

arr: np.ndarray = np.array([1, 2, 3, 4, 5])

# Среднее значение
mean_val: float = np.mean(arr)

# Медиана
median_val: float = np.median(arr)

# Стандартное отклонение
std_val: float = np.std(arr)

# Дисперсия
var_val: float = np.var(arr)

Маскирование и фильтрация массивов

Маскирование и фильтрация позволяют извлекать из массивов только те элементы, которые удовлетворяют определенным условиям.

import numpy as np

arr: np.ndarray = np.array([1, 2, 3, 4, 5])

# Фильтрация массива
filtered_arr: np.ndarray = arr[arr > 2]  # [3, 4, 5]

Broadcast-инг: Правила и примеры

Broadcast-инг позволяет выполнять операции над массивами разных размеров, если они удовлетворяют определенным правилам. Это мощный инструмент для векторизации вычислений.

Реклама
import numpy as np

arr1: np.ndarray = np.array([1, 2, 3])
arr2: np.ndarray = np.array([[4], [5], [6]])

# Broadcast-инг
sum_arr: np.ndarray = arr1 + arr2

Вопросы по Pandas: Работа с Series и DataFrame

Создание Series и DataFrame: из списков, словарей, NumPy массивов

Знание различных способов создания Series и DataFrame – необходимое условие для работы с Pandas.

import pandas as pd
import numpy as np

# Создание Series из списка
s: pd.Series = pd.Series([1, 2, 3, 4, 5])

# Создание DataFrame из словаря
data: dict = {'col1': [1, 2], 'col2': [3, 4]}
df: pd.DataFrame = pd.DataFrame(data)

# Создание DataFrame из NumPy массива
arr: np.ndarray = np.array([[1, 2], [3, 4]])
df2: pd.DataFrame = pd.DataFrame(arr, columns=['col1', 'col2'])

Индексация и выбор данных: loc[], iloc[], at[], iat[]

loc[], iloc[], at[] и iat[] — это различные способы доступа к данным в DataFrame. Важно понимать разницу между ними.

import pandas as pd

data: dict = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7,8,9]}
df: pd.DataFrame = pd.DataFrame(data, index=['A', 'B', 'C'])

# Доступ по метке
value_loc: int = df.loc['A', 'col1']  # 1

# Доступ по индексу
value_iloc: int = df.iloc[0, 0] # 1

# Быстрый доступ по метке
value_at: int = df.at['A', 'col1'] # 1

# Быстрый доступ по индексу
value_iat: int = df.iat[0, 0] # 1

Фильтрация данных: с использованием условий и булевых масок

Фильтрация данных – один из основных этапов анализа данных.

import pandas as pd

data: dict = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df: pd.DataFrame = pd.DataFrame(data)

# Фильтрация с использованием условия
filtered_df: pd.DataFrame = df[df['col1'] > 2]

# Фильтрация с использованием булевой маски
mask: pd.Series = df['col2'] < 9
filtered_df2: pd.DataFrame = df[mask]

Операции с пропущенными данными: isnull(), notnull(), dropna(), fillna()

Обработка пропущенных данных – важный этап предобработки данных.

import pandas as pd
import numpy as np

data: dict = {'col1': [1, 2, np.nan, 4, 5], 'col2': [6, np.nan, 8, 9, np.nan]}
df: pd.DataFrame = pd.DataFrame(data)

# Проверка на наличие пропущенных значений
is_null: pd.DataFrame = df.isnull()

# Удаление строк с пропущенными значениями
df_dropna: pd.DataFrame = df.dropna()

# Заполнение пропущенных значений
df_fillna: pd.DataFrame = df.fillna(0)

Вопросы по Pandas: Анализ и манипуляции с данными

Группировка данных: groupby(), aggregate(), transform()

Группировка данных позволяет агрегировать и анализировать данные по определенным признакам.

import pandas as pd

data: dict = {'col1': ['A', 'A', 'B', 'B', 'C'], 'col2': [1, 2, 3, 4, 5]}
df: pd.DataFrame = pd.DataFrame(data)

# Группировка данных
grouped_df: pd.core.groupby.generic.DataFrameGroupBy = df.groupby('col1')

# Агрегация данных
agg_df: pd.DataFrame = grouped_df.aggregate({'col2': 'sum'})

# Трансформация данных
df['col3'] = grouped_df['col2'].transform('mean')

Объединение данных: merge(), join(), concat()

Объединение данных из разных источников – часто встречающаяся задача.

import pandas as pd

df1: pd.DataFrame = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
df2: pd.DataFrame = pd.DataFrame({'col1': [1, 2], 'col3': [5, 6]})

# Объединение данных
merged_df: pd.DataFrame = pd.merge(df1, df2, on='col1')

# Конкатенация данных
concat_df: pd.DataFrame = pd.concat([df1, df2], axis=1)

Работа со строками: str.contains(), str.replace(), str.split()

Pandas предоставляет удобные инструменты для работы со строковыми данными.

import pandas as pd

data: dict = {'col1': ['apple', 'banana', 'orange']}
df: pd.DataFrame = pd.DataFrame(data)

# Проверка наличия подстроки
contains: pd.Series = df['col1'].str.contains('a')

# Замена подстроки
replaced: pd.Series = df['col1'].str.replace('a', 'b')

# Разбиение строки
splitted: pd.Series = df['col1'].str.split('a')

Временные ряды: DatetimeIndex, resample(), shift()

Работа с временными рядами – важная часть анализа данных.

import pandas as pd

dates: list = ['2023-01-01', '2023-01-02', '2023-01-03']
df: pd.DataFrame = pd.DataFrame({'col1': [1, 2, 3]}, index=pd.to_datetime(dates))

# Преобразование в DatetimeIndex

# Ресемплинг данных
resampled: pd.DataFrame = df.resample('D').mean()

# Сдвиг данных
shifted: pd.DataFrame = df.shift(1)

Практические советы для успешного прохождения собеседования

Как подготовиться к техническим вопросам

  • Повторите основные концепции NumPy и Pandas. Убедитесь, что вы хорошо понимаете принципы работы с массивами, Series и DataFrame.
  • Решайте задачи на практике. Чем больше задач вы решите, тем увереннее будете себя чувствовать на собеседовании.
  • Изучите документацию. Документация NumPy и Pandas – это лучший источник информации.

Рекомендации по решению задач на собеседовании

  1. Внимательно прочитайте условие задачи. Убедитесь, что вы правильно поняли, что от вас требуется.
  2. Разбейте задачу на подзадачи. Это поможет вам структурировать решение.
  3. Пишите чистый и понятный код. Важно, чтобы ваш код был легко читаемым.
  4. Проверяйте свой код на тестовых примерах. Убедитесь, что ваш код работает правильно.

Типичные ошибки и как их избежать

  • Неправильное использование индексации. Всегда проверяйте, правильно ли вы используете loc[], iloc[], at[] и iat[].
  • Непонимание broadcast-инга. Убедитесь, что вы понимаете, как работает broadcast-инг, прежде чем использовать его.
  • Отсутствие обработки пропущенных данных. Всегда обрабатывайте пропущенные данные, чтобы избежать ошибок.

Удачи на собеседовании!


Добавить комментарий