Что такое NumPy и зачем он нужен для анализа данных?
NumPy (Numerical Python) — это фундаментальная библиотека для научных вычислений на Python. Она предоставляет мощные инструменты для работы с многомерными массивами и матрицами, а также оптимизированные математические функции. В контексте анализа данных, NumPy играет ключевую роль, поскольку обеспечивает эффективное хранение и обработку числовых данных, что критически важно для скорости и производительности алгоритмов.
В отличие от стандартных списков Python, массивы NumPy хранят данные одного типа, что позволяет значительно ускорить вычисления. Это особенно важно при работе с большими объемами данных, характерными для анализа данных, интернет-маркетинга и других областей.
Установка и настройка NumPy: пошаговая инструкция
Установить NumPy можно с помощью pip:
pip install numpy
Убедитесь, что у вас установлена последняя версия pip:
pip install --upgrade pip
После установки, можно проверить корректность установки, импортировав библиотеку в Python.
Импорт NumPy в ваши Python-скрипты: соглашения об именах
Стандартным соглашением является импорт NumPy с использованием псевдонима np:
import numpy as np
Это позволяет удобно обращаться к функциям NumPy через префикс np., например, np.array().
Основы работы с массивами NumPy
Создание массивов NumPy: от простых до сложных
Массивы NumPy можно создавать разными способами:
-
Из списков Python:
import numpy as np list_data: list[int] = [1, 2, 3, 4, 5] numpy_array: np.ndarray = np.array(list_data) print(numpy_array) -
С помощью функций
zeros(),ones(),empty():import numpy as np zeros_array: np.ndarray = np.zeros((2, 3)) ones_array: np.ndarray = np.ones((3, 2)) empty_array: np.ndarray = np.empty((2, 2)) print(zeros_array) print(ones_array) print(empty_array) -
С помощью функции
arange()иlinspace():import numpy as np arange_array: np.ndarray = np.arange(0, 10, 2) # от 0 до 10 (не включая) с шагом 2 linspace_array: np.ndarray = np.linspace(0, 1, 5) # 5 чисел между 0 и 1 (включительно) print(arange_array) print(linspace_array)
Типы данных в NumPy: int, float, object и другие
NumPy поддерживает различные типы данных, такие как int, float, complex, bool, object и другие. При создании массива, NumPy автоматически определяет наиболее подходящий тип данных, но его также можно указать явно:
import numpy as np
int_array: np.ndarray = np.array([1, 2, 3], dtype=np.int32)
float_array: np.ndarray = np.array([1, 2, 3], dtype=np.float64)
print(int_array.dtype)
print(float_array.dtype)
Индексация и срезы массивов: доступ к элементам и подмножествам
Доступ к элементам массива NumPy осуществляется с помощью индексации, аналогично спискам Python. Для многомерных массивов указываются индексы по каждой размерности:
import numpy as np
array: np.ndarray = np.array([[1, 2, 3], [4, 5, 6]])
print(array[0, 1]) # Элемент в первой строке и втором столбце (индексация с 0)
print(array[1, :]) # Вторая строка
print(array[:, 2]) # Третий столбец
Срезы позволяют извлекать подмножества массивов:
import numpy as np
array: np.ndarray = np.arange(10)
print(array[2:5]) # Элементы с индексами 2, 3, 4
print(array[:7:2]) # Элементы с начала до индекса 7 с шагом 2
Изменение формы массивов: reshape, flatten, transpose
Форму массива можно изменить с помощью метода reshape():
import numpy as np
array: np.ndarray = np.arange(12)
reshaped_array: np.ndarray = array.reshape(3, 4) # Преобразование в массив 3x4
print(reshaped_array)
Метод flatten() преобразует многомерный массив в одномерный:
import numpy as np
array: np.ndarray = np.array([[1, 2], [3, 4]])
flattened_array: np.ndarray = array.flatten()
print(flattened_array)
Метод transpose() транспонирует массив (меняет строки и столбцы местами):
import numpy as np
array: np.ndarray = np.array([[1, 2], [3, 4]])
transposed_array: np.ndarray = array.T
print(transposed_array)
Основные операции и функции NumPy для анализа данных
Векторные операции: сложение, вычитание, умножение и деление массивов
NumPy поддерживает поэлементные векторные операции:
import numpy as np
array1: np.ndarray = np.array([1, 2, 3])
array2: np.ndarray = np.array([4, 5, 6])
sum_array: np.ndarray = array1 + array2
diff_array: np.ndarray = array2 - array1
prod_array: np.ndarray = array1 * array2
div_array: np.ndarray = array2 / array1
print(sum_array)
print(diff_array)
print(prod_array)
print(div_array)
Математические функции: sin, cos, exp, log и другие
NumPy предоставляет широкий набор математических функций:
import numpy as np
array: np.ndarray = np.array([0, np.pi/2, np.pi])
sin_array: np.ndarray = np.sin(array)
cos_array: np.ndarray = np.cos(array)
exp_array: np.ndarray = np.exp(array)
log_array: np.ndarray = np.log(np.array([1, np.e, np.e**2]))
print(sin_array)
print(cos_array)
print(exp_array)
print(log_array)
Агрегирующие функции: sum, mean, median, std, max, min
Агрегирующие функции позволяют вычислять статистические характеристики массивов:
import numpy as np
array: np.ndarray = np.array([1, 2, 3, 4, 5])
sum_val: int = np.sum(array)
mean_val: float = np.mean(array)
median_val: float = np.median(array)
std_val: float = np.std(array)
max_val: int = np.max(array)
min_val: int = np.min(array)
print(sum_val)
print(mean_val)
print(median_val)
print(std_val)
print(max_val)
print(min_val)
Булевы массивы и условная фильтрация данных
Булевы массивы используются для фильтрации данных:
import numpy as np
array: np.ndarray = np.array([1, 2, 3, 4, 5])
bool_array: np.ndarray = array > 2
filtered_array: np.ndarray = array[bool_array]
print(bool_array)
print(filtered_array)
Практические примеры анализа данных с использованием NumPy
Статистический анализ данных: расчет основных статистик
Предположим, у вас есть данные о количестве кликов по рекламному баннеру за неделю:
import numpy as np
clicks: np.ndarray = np.array([150, 200, 180, 220, 250, 230, 210])
mean_clicks: float = np.mean(clicks)
median_clicks: float = np.median(clicks)
std_clicks: float = np.std(clicks)
print(f'Среднее количество кликов: {mean_clicks}')
print(f'Медианное количество кликов: {median_clicks}')
print(f'Стандартное отклонение: {std_clicks}')
Фильтрация и очистка данных с помощью NumPy
Предположим, у вас есть данные о CTR (click-through rate) рекламных кампаний, и вам нужно отфильтровать кампании с CTR выше среднего:
import numpy as np
ctr: np.ndarray = np.array([0.02, 0.01, 0.03, 0.015, 0.025, 0.04, 0.012])
mean_ctr: float = np.mean(ctr)
high_ctr_campaigns: np.ndarray = ctr[ctr > mean_ctr]
print(f'Средний CTR: {mean_ctr}')
print(f'CTR кампаний выше среднего: {high_ctr_campaigns}')
Работа с многомерными данными: примеры из реальных задач
Предположим, у вас есть данные о продажах товаров в разных регионах за разные месяцы (многомерный массив). Вы можете использовать NumPy для анализа динамики продаж.
import numpy as np
sales_data: np.ndarray = np.array([
[100, 120, 130], # Регион 1: Январь, Февраль, Март
[150, 160, 170], # Регион 2: Январь, Февраль, Март
[200, 210, 220] # Регион 3: Январь, Февраль, Март
])
total_sales_per_region: np.ndarray = np.sum(sales_data, axis=1) # Сумма продаж по регионам
mean_sales_per_month: np.ndarray = np.mean(sales_data, axis=0) # Средние продажи по месяцам
print(f'Суммарные продажи по регионам: {total_sales_per_region}')
print(f'Средние продажи по месяцам: {mean_sales_per_month}')
NumPy и другие библиотеки анализа данных: Pandas, Matplotlib, Seaborn
Интеграция NumPy с Pandas: преобразование данных и использование Series и DataFrame
Pandas использует NumPy в качестве основы для работы с данными. DataFrame и Series Pandas можно создавать из массивов NumPy и наоборот:
import numpy as np
import pandas as pd
np_array: np.ndarray = np.array([1, 2, 3, 4, 5])
pd_series: pd.Series = pd.Series(np_array)
pd_dataframe: pd.DataFrame = pd.DataFrame({'col1': np_array, 'col2': np_array * 2})
print(pd_series)
print(pd_dataframe)
Визуализация данных с помощью Matplotlib и Seaborn: графики на основе массивов NumPy
Matplotlib и Seaborn используют массивы NumPy для построения графиков. Например, можно построить график зависимости кликов от дня недели:
import numpy as np
import matplotlib.pyplot as plt
days: np.ndarray = np.arange(7)
clicks: np.ndarray = np.array([150, 200, 180, 220, 250, 230, 210])
plt.plot(days, clicks)
plt.xlabel('День недели')
plt.ylabel('Количество кликов')
plt.title('Динамика кликов по дням недели')
plt.show()
Примеры совместного использования NumPy, Pandas, Matplotlib и Seaborn в задачах анализа данных
Комплексный пример: анализ данных о рекламных кампаниях с использованием всех библиотек.
- Генерируем синтетические данные.
- Создаем DataFrame.
- Вычисляем статистики.
- Визуализируем результаты.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Генерация данных
num_campaigns: int = 100
campaign_names: list[str] = [f'Campaign_{i}' for i in range(num_campaigns)]
clicks: np.ndarray = np.random.randint(50, 500, num_campaigns)
impressions: np.ndarray = np.random.randint(1000, 10000, num_campaigns)
ctr: np.ndarray = clicks / impressions
# Создание DataFrame
data: dict[str, np.ndarray | list[str]] = {'Campaign': campaign_names, 'Clicks': clicks, 'Impressions': impressions, 'CTR': ctr}
df: pd.DataFrame = pd.DataFrame(data)
# Вычисление статистик
mean_ctr: float = df['CTR'].mean()
median_clicks: float = df['Clicks'].median()
print(f'Средний CTR: {mean_ctr}')
print(f'Медианное количество кликов: {median_clicks}')
# Визуализация
sns.histplot(df['CTR'], kde=True)
plt.xlabel('CTR')
plt.ylabel('Количество кампаний')
plt.title('Распределение CTR рекламных кампаний')
plt.show()
Этот пример демонстрирует, как NumPy, Pandas, Matplotlib и Seaborn могут быть использованы совместно для анализа данных в контексте интернет-маркетинга.