Как рассчитать Z-показатели в Python

В статистике z-score говорит нам, на сколько стандартных отклонений значение отличается от среднее значение. Мы используем следующую формулу для расчета z -score:

z = (X – μ) / σ

где:

  • X – это одно необработанное значение данных
  • μ – среднее значение генеральной совокупности
  • σ – стандартное отклонение генеральной совокупности

В этом руководстве объясняется, как рассчитать z-значения для необработанных значений данных. в Python.

Как рассчитать Z-значения в Python

Мы можем рассчитать z-показатели в Python, используя scipy.stats.zscore, который использует следующий синтаксис:

scipy.stats.zscore(a, axis=0, ddof=0, nan_policy=’propagate’)

где:

  • a: массив, подобный объекту, содержащему данные\n
  • axis: ось, по которой рассчитываются z-показатели. По умолчанию 0.
  • ddof: коррекция степеней свободы при расчете стандарта отклонение. По умолчанию 0.
  • nan_policy: что делать, если ввод содержит nan. По умолчанию используется распространение, которое возвращает nan. raise выдает ошибку, а omit выполняет вычисления, игнорируя значения nan.

В следующих примерах показано, как использовать эту функцию для вычисления z-показателей для одномерных массивов numpy, многомерных массивов numpy и фреймов данных Pandas.

Одномерные массивы Numpy

Шаг 1. Импортируйте модули.

import pandas as pd
import numpy as np
import scipy.stats as stats

Шаг 2. Создайте массив значений.

data = np.array([6, 7, 7, 12, 13, 13, 15, 16, 19, 22])

Шаг 3. Рассчитайте z-значения для каждого значения в массиве.

stats.zscore(data)
# [-1.394, -1.195, -1.195, -0.199, 0, 0, 0.398, 0.598, 1.195, 1.793]

Каждый z-показатель говорит нам, на сколько стандартных отклонений отдельное значение отличается от среднего. Например:

  • Первое значение 6 в массиве равно 1,394 стандартный отклонений ниже среднего значения.
  • Пятое значение в массиве 13 составляет 0 стандартных отклонений от среднего, т. е. равно среднему.
  • Последнее значение 22 в массиве: 1,793 стандартный отклонений над средним.

Многомерный Numpy Массивы

Если у нас есть многомерный массив, мы можем использовать axis, чтобы указать, что мы хотим вычислить каждую z-оценку относительно своего собственного массива. Например, предположим, что у нас есть следующий многомерный массив:

data = np.array([[5, 6, 7, 7, 8],
                 [8, 8, 8, 9, 9],
                 [2, 2, 4, 4, 5]])

Мы можем использовать следующий синтаксис для вычисления z-показателей для каждого массива:

stats.zscore(data, axis=1)

# [[-1.569 -0.588 0.392 0.392 1.373]
# [-0.816 -0.816 -0.816 1.225 1.225]
# [-1.167 -1.167 0.5 0.5 1.333]]

Z-значения для каждого отдельного значения отображаются относительно массива, в котором они находятся. Например:

  • Первое значение 5 в первом массиве равно 1,159 стандартным отклонениям ниже среднего значения его массива.
  • Первое значение 8во втором массиве равно стандартным отклонениям ниже среднее значение его массива.
  • Первое значение 2 в третьем массиве равно 1,167 стандартные отклонения ниже среднего значения его массива.

Pandas DataFrames

Предположим, что у нас Pandas DataFrame:

data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C'])
data

#  A B C
#0 8 0 9
#1 4 0 7
#2 9 6 8
#3 1 8 1
#4 8 0 8

Мы можем использовать функцию apply чтобы рассчитать z-показатель отдельных значений по столбцу:

data.apply(stats.zscore)

#          A         B         C
#0  0.659380 -0.802955  0.836080
#1 -0.659380 -0.802955  0.139347
#2  0.989071  0.917663  0.487713
#3 -1.648451  1.491202 -1.950852
#4  0.659380 -0.802955  0.487713

Z-значения для каждого отдельного значения отображаются относительно столбца, в котором они находятся. Например:

  • Первое значение 8 в первом столбце на 0,659 стандартного отклонения выше среднего значения этого столбца.
    Первое значение 0 во втором столбце на 0,803 стандартного отклонения ниже среднего значения этого столбца.
    Первое значение 9 в третьем столбце на 0,836 стандартных отклонения выше среднего значения этого столбца.