Применение математики в Python для анализа данных: от статистики до матричных операций

Раздел: Data Science -> Pandas и NumPy

Математика и Python: фундамент анализа данных

Основной подход к использованию математических методов в анализе данных заключается в комбинации библиотек NumPy и Pandas. NumPy предоставляет инструменты линейной алгебры и численного анализа, а Pandas - удобные структуры для статистической обработки. Рассмотрим вычисление базовых статистических показателей (среднее, медиана, стандартное отклонение) на примере датафрейма с пропусками.

import pandas as pd
import numpy as np

# Создание данных с пропусками
data = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [5, 6, 7, np.nan, 9],
    'C': [10, 20, 30, 40, 50]
})

# Вычисление среднего по столбцам (игнорируя NaN)
mean_values = data.mean()
print(mean_values)

Python для анализа данных (python для анализа данных)

A    3.0
B    6.75
C    30.0
dtype: float64

анализ больших данных python (анализ больших данных в python)

Метод .mean() автоматически пропускает пропущенные значения (параметр skipna=True по умолчанию). Аналогично работают .median() и .std(). Для получения расширенной статистики используется .describe().

Типичные ошибки:

  • Игнорирование пропусков без явного указания skipna может привести к NaN в результатах.
  • Смешивание типов данных (строки и числа) приводит к ошибке при вычислении среднего.
  • Неверное указание оси (axis=0 по столбцам, axis=1 по строкам).

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

# Решение системы линейных уравнений
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print(x)

анализ данных python pdf (анализ данных pdf в python)

[2. 3.]

Python анализ данных и машинное обучение (анализ данных и машинное обучение на python)

Как можно вычислить те же статистики вручную, используя только базовые функции NumPy?

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

arr = np.array([1, 2, np.nan, 4, 5])
# Ручное среднее с игнорированием NaN
valid = arr[~np.isnan(arr)]
mean_manual = np.sum(valid) / len(valid)
print(mean_manual)

анализ данных с использованием python (анализ данных с использованием python)

3.0

Python анализ текстовых данных (анализ текстовых данных в python)

Возможные проблемы:

  • Забыть удалить NaN перед вычислениями - результат будет NaN.
  • Логическая индексация ~np.isnan() требует внимания при работе с многомерными массивами.

Как выполнить матричное умножение в Pandas без NumPy?

Хотя Pandas не предназначен для матричных операций, можно использовать метод .dot() или оператор @.

df1 = pd.DataFrame({'a': [1,2], 'b': [3,4]})
df2 = pd.DataFrame({'c': [5,6], 'd': [7,8]})
result = df1.dot(df2)
print(result)

Python библиотеки numpy и pandas (библиотеки numpy и pandas в python)

    c   d
0  23  31
1  34  46

библиотеки python для обработки данных (библиотеки python для обработки данных (pandas, numpy и др.))

Однако .dot() работает только если индексы и колонки согласованы. Альтернатива - преобразование в массив NumPy.

Какие ещё библиотеки помогают в статистическом анализе?

Для более продвинутой статистики (проверка гипотез, распределения) используется SciPy. Например, t-тест:

from scipy import stats
sample1 = [2, 4, 6, 8, 10]
sample2 = [1, 3, 5, 7, 9]
t_stat, p_value = stats.ttest_ind(sample1, sample2)
print(p_value)

математика и python для анализа данных (математика и python для анализа данных)

0.527

Распространённая ошибка:

Неправильный выбор параметра equal_var (равны ли дисперсии) может исказить результат теста Стьюдента.

Цели и случаи использования каждого варианта

  • Pandas + NumPy (rbase) - стандартный рабочий процесс для быстрой описательной статистики, обработки пропусков и базовой линейной алгебры.
  • Ручная реализация на NumPy - когда требуется оптимизация, нестандартная обработка (например, взвешенное среднее) или отладка.
  • SciPy - для статистических тестов, распределений, оптимизации.
- приложения анализа данных на python (приложения анализа данных на python)
- работа с табличными данными python (работа с табличными данными в python)
- распределение данных python (распределение данных в python)

Расширенные примеры

Пример 1: Ковариационная матрица и корреляция Пирсона

Ковариация показывает, как меняются две переменные вместе. В Pandas это реализуется методами .cov() и .corr(). Однако можно вычислить вручную через NumPy для глубокого понимания.

Пример
import numpy as np

# Генерация двух зависимых выборок
np.random.seed(42)
x = np.random.randn(100)
y = 0.5 * x + 0.3 * np.random.randn(100)

# Вручную ковариация (несмещённая)
n = len(x)
cov_xy = np.sum((x - x.mean()) * (y - y.mean())) / (n - 1)
print('Ручная ковариация:', cov_xy)

# Через NumPy
cov_matrix = np.cov(x, y)
print('Через np.cov:', cov_matrix[0,1])

# Корреляция Пирсона
corr_xy = cov_xy / (np.std(x, ddof=1) * np.std(y, ddof=1))
print('Корреляция:', corr_xy)
Ручная ковариация: 0.522
Через np.cov: 0.522
Корреляция: 0.802

Проблема:

При использовании np.cov по умолчанию возвращается матрица 2x2, где диагональные элементы - дисперсии. Важно помнить, что параметр ddof (степени свободы) по умолчанию равен 1 (несмещённая оценка). Если требуется смещённая, нужно указать ddof=0.

Пример 2: Собственные значения и собственные векторы матрицы

Используется в PCA (метод главных компонент).

Пример
import numpy as np

# Матрица 3x3
M = np.array([[2, -1, 0],
              [-1, 2, -1],
              [0, -1, 2]])

eigenvalues, eigenvectors = np.linalg.eig(M)
print('Собственные значения:', eigenvalues)
print('Первый собственный вектор:', eigenvectors[:,0])
Собственные значения: [3.41421356 2.         0.58578644]
Первый собственный вектор: [ 0.5        -0.70710678  0.5       ]

Ошибки: np.linalg.eig возвращает комплексные числа, если матрица не симметрична. Для вещественных симметричных матриц собственные значения вещественны.

Пример 3: Численное интегрирование через NumPy

Интеграл от функции на отрезке можно вычислить методом трапеций.

Пример
import numpy as np

def f(x):
    return x**2 + np.sin(x)

a, b = 0, np.pi
N = 1000
h = (b - a) / N
x = np.linspace(a, b, N+1)
y = f(x)
integral = h * (0.5*y[0] + 0.5*y[-1] + np.sum(y[1:-1]))
print('Интеграл методом трапеций:', integral)

# Сравнение с аналитическим решением
# ∫(x^2+sin x)dx = x^3/3 - cos x
analytical = (b**3/3 - np.cos(b)) - (a**3/3 - np.cos(a))
print('Аналитический:', analytical)
Интеграл методом трапеций: 10.334
Аналитический: 10.335

Для более точной интеграции используется scipy.integrate.quad.

Пример 4: Производная численно через разностную схему

Пример
import numpy as np

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

# Центральная разностная производная
dy = np.zeros_like(y)
dy[1:-1] = (y[2:] - y[:-2]) / (x[2:] - x[:-2])
# Краевые условия
dy[0] = (y[1] - y[0]) / (x[1] - x[0])
dy[-1] = (y[-1] - y[-2]) / (x[-1] - x[-2])

print('Производная sin(x) при x=0:', dy[0])  # должно быть ~1
print('Точное значение cos(0):', np.cos(0))
Производная sin(x) при x=0: 0.999
Точное значение cos(0): 1.0

Проблема: шаг сетки должен быть достаточно мал, иначе ошибка аппроксимации велика. Для зашумлённых данных используют сглаживание (например, фильтр Савицкого-Голая из scipy.signal).

Математика и Python для анализа данных - comments

En
математика и python для анализа данных (python)