September 27, 2021

Статистические примитивы с Python

Прокачаем знание методов получения ключевых статистик средствами Pandas. В последующем на их базе как на строительных блоках возводится здание для более основательного анализа.

В демонстрационных целях будем использовать датасет о цветках Ириса, который получим с помощью библиотеки Scikit-learn:

from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
np.random.seed(0)
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target, name='target').astype('str').\
            replace({str(it):data.target_names[it] for it in data.target})
df = X.join(y)
df

Среднее, стандартное отклонение, дисперсия

Данные величины выводятся методами mean, std и var библиотеки Pandas:

df['sepal length (cm)'].mean(), df['sepal length (cm)'].std(), df['sepal length (cm)'].var()

При этом число степеней свободы для подсчета стандартного отклонения и дисперсии регулируется параметром ddof.

Квантили

Квантиль заданного уровня - это величина, которая подбирается таким образом, чтобы доля членов последовательности в выборке, которая меньше ее не превышала этот уровень. Квантиль можно получить методом quantile:

df['sepal length (cm)'].quantile(0.5)
df['sepal length (cm)'].quantile(1)

Разбиение по интервалам

Можно осуществить функцией cut, которой в качестве параметра помимо Series из значений передается bins - либо список границ полуинтервалов либо целое, определяющее равные по протяженности диапазоны, на которые будет поделена область значений:

pd.cut(df['sepal length (cm)'], bins=np.arange(9))
pd.cut(df['sepal length (cm)'], bins=5)

Другим способом разбиения является использование функции qcut, которая работает на уровне квантилей:

pd.qcut(df['sepal length (cm)'], q=5)
pd.qcut(df['sepal length (cm)'], q=[0, 0.1,0.5,0.8, 1])

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

Корреляция

Коэффициент корреляции показывает линейную связь между переменными (подробнее писал здесь). Для числовых переменных датафрейма они выводятся с помощью метода corr :

df[['sepal length (cm)', 'sepal width (cm)']].corr()
df.corr()