scipy.stats.contingency.

crosstab#

scipy.stats.contingency.crosstab(*args, levels=None, sparse=False)[原始碼]#

傳回 *args 中每個可能唯一組合的計數表。

len(args) > 1 時,此函數計算的陣列通常稱為列聯表 [1]

參數必須是長度相同的序列。第二個傳回值 count 是一個整數陣列,具有 len(args) 維度。如果 levels 為 None,則 count 的形狀為 (n0, n1, ...),其中 nkargs[k] 中唯一元素的數量。

參數:
*args序列

要計數其唯一對齊元素的序列的序列。args 中的序列長度必須相同。

levels序列, 選擇性

如果給定 levels,則它必須是一個與 args 長度相同的序列。levels 中的每個元素都是序列或 None。如果是序列,則它給出 args 中對應序列中要計數的值。如果 args 中序列的任何值未出現在 levels 中對應的序列中,則該值將被忽略且不計入傳回的陣列 count 中。args[i]levels 預設值為 np.unique(args[i])

sparse布林值, 選擇性

如果為 True,則傳回稀疏矩陣。該矩陣將是 scipy.sparse.coo_matrix 類別的實例。由於 SciPy 的稀疏矩陣必須是 2 維的,因此當 sparse 為 True 時,僅允許兩個輸入序列。預設值為 False。

傳回值:
resCrosstabResult

包含以下屬性的物件

elementsnumpy.ndarray 的元組。

長度為 len(args) 的元組,包含在 count 中計數的元素陣列。這些可以解釋為 count 對應維度的標籤。如果給定 levels,則如果 levels[i] 不是 None,則 elements[i] 將保存 levels[i] 中給定的值。

countnumpy.ndarray 或 scipy.sparse.coo_matrix

儲存在陣列中的 zip(*args) 中唯一元素的計數。當 len(args) > 1 時,也稱為列聯表

另請參閱

numpy.unique

註解

在版本 1.7.0 中新增。

參考文獻

範例

>>> from scipy.stats.contingency import crosstab

給定列表 ax,建立一個列聯表,計算對應配對的頻率。

>>> 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='<U1')
>>> xvals
array(['X', 'Y', 'Z'], dtype='<U1')
>>> 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)

要計數的值可以使用 levels 參數設定。它允許明確給出每個輸入序列中感興趣的元素,而不是尋找序列的唯一元素。

例如,假設其中一個參數是一個陣列,其中包含調查問題的答案,整數值為 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]])

如果給定 levels,但 levels 的元素為 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]])

如果我們想忽略 q2 中出現 4 的配對,我們可以只給 levels 值 [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
<COOrdinate sparse matrix of dtype 'int64'
    with 4 stored elements and shape (2, 3)>
>>> res.count.toarray()
array([[2, 3, 0],
       [1, 0, 4]])