scipy.stats.contingency.

crosstab#

scipy.stats.contingency.crosstab(*args, уровни=None, разреженный=False)[источник]#

Возвращает таблицу частот для каждой возможной уникальной комбинации в *args.

Когда len(args) > 1, массив, вычисляемый этой функцией, часто называют таблица сопряженности [1].

Аргументы должны быть последовательностями одинаковой длины. Второе возвращаемое значение, count, является целочисленным массивом с len(args) размерности. Если уровни is None, форма count является (n0, n1, ...), где nk это количество уникальных элементов в args[k].

Параметры:
*argsпоследовательности

Последовательность последовательностей, уникальные выровненные элементы которых должны быть подсчитаны. Все последовательности в args должны иметь одинаковую длину.

уровниsequence, optional

Если уровни если задан, он должен быть последовательностью той же длины, что и args. Каждый элемент в уровни является последовательностью или None. Если это последовательность, она задаёт значения в соответствующей последовательности в args которые должны быть подсчитаны. Если любое значение в последовательностях в args не встречается в соответствующей последовательности в уровни, это значение игнорируется и не учитывается в возвращаемом массиве count. Значение по умолчанию уровни для args[i] является np.unique(args[i])

разреженныйbool, необязательно

Если True, вернуть разреженную матрицу. Матрица будет экземпляром класса scipy.sparse.coo_matrix класс. Поскольку разреженные матрицы SciPy должны быть двумерными, только две входные последовательности разрешены, когда разреженный имеет значение True. По умолчанию False.

Возвращает:
resCrosstabResult

Объект, содержащий следующие атрибуты:

элементыкортеж numpy.ndarrays.

Кортеж длины len(args) содержащий массивы элементов, которые подсчитываются в count. Их можно интерпретировать как метки соответствующих измерений count. Если уровни был предоставлен, тогда если levels[i] не является None, elements[i] будет содержать значения, указанные в levels[i].

countnumpy.ndarray или scipy.sparse.coo_matrix

Количество уникальных элементов в zip(*args), хранятся в массиве. Также известна как таблица сопряженности когда len(args) > 1.

Смотрите также

numpy.unique

Примечания

Добавлено в версии 1.7.0.

Ссылки

[1]

«Таблица сопряженности», http://en.wikipedia.org/wiki/Contingency_table

Примеры

>>> from scipy.stats.contingency import crosstab

Даны списки a и x, создайте таблицу сопряженности, которая подсчитывает частоты соответствующих пар.

>>> a = ['A', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B']
>>> x = ['X', 'X', 'X', 'Y', 'Z', 'Z', 'Y', 'Y', 'Z', 'Z']
>>> res = crosstab(a, x)
>>> avals, xvals = res.elements
>>> avals
array(['A', 'B'], dtype='
>>> xvals
array(['X', 'Y', 'Z'], dtype='
>>> res.count
array([[2, 3, 0],
       [1, 0, 4]])

Итак ('A', 'X') встречается дважды, ('A', 'Y') встречается три раза и т.д.

Можно создавать таблицы сопряженности более высокой размерности.

>>> p = [0, 0, 0, 0, 1, 1, 1, 0, 0, 1]
>>> res = crosstab(a, x, p)
>>> res.count
array([[[2, 0],
        [2, 1],
        [0, 0]],
       [[1, 0],
        [0, 0],
        [1, 3]]])
>>> res.count.shape
(2, 3, 2)

Значения для подсчёта могут быть заданы с помощью уровни аргумент. Он позволяет явно указать интересующие элементы в каждой входной последовательности вместо поиска уникальных элементов последовательности.

Например, предположим, что один из аргументов - это массив, содержащий ответы на вопрос опроса с целочисленными значениями от 1 до 4. Даже если значение 1 не встречается в данных, мы хотим иметь запись для него в таблице.

>>> q1 = [2, 3, 3, 2, 4, 4, 2, 3, 4, 4, 4, 3, 3, 3, 4]  # 1 does not occur.
>>> q2 = [4, 4, 2, 2, 2, 4, 1, 1, 2, 2, 4, 2, 2, 2, 4]  # 3 does not occur.
>>> options = [1, 2, 3, 4]
>>> res = crosstab(q1, q2, levels=(options, options))
>>> res.count
array([[0, 0, 0, 0],
       [1, 1, 0, 1],
       [1, 4, 0, 1],
       [0, 3, 0, 3]])

Если уровни задан, но элемент уровни is None, уникальные значения соответствующего аргумента используются. Например,

>>> res = crosstab(q1, q2, levels=(None, options))
>>> res.elements
[array([2, 3, 4]), [1, 2, 3, 4]]
>>> res.count
array([[1, 1, 0, 1],
       [1, 4, 0, 1],
       [0, 3, 0, 3]])

Если мы хотим игнорировать пары, где встречается 4 q2, мы можем дать только значения [1, 2] для уровни, и 4 будет проигнорировано:

>>> res = crosstab(q1, q2, levels=(None, [1, 2]))
>>> res.elements
[array([2, 3, 4]), [1, 2]]
>>> res.count
array([[1, 1],
       [1, 4],
       [0, 3]])

Наконец, повторим первый пример, но вернём разреженную матрицу:

>>> res = crosstab(a, x, sparse=True)
>>> res.count

    with 4 stored elements and shape (2, 3)>
>>> res.count.toarray()
array([[2, 3, 0],
       [1, 0, 4]])