crosstab#
- scipy.stats.contingency.crosstab(*args, levels=None, sparse=False)[原始碼]#
傳回
*args
中每個可能唯一組合的計數表。當
len(args) > 1
時,此函數計算的陣列通常稱為列聯表 [1]。參數必須是長度相同的序列。第二個傳回值 count 是一個整數陣列,具有
len(args)
維度。如果 levels 為 None,則 count 的形狀為(n0, n1, ...)
,其中nk
是args[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
時,也稱為列聯表。
另請參閱
註解
在版本 1.7.0 中新增。
參考文獻
範例
>>> 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='<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]])