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序列
一系列序列,其唯一对齐元素将被计数。参数中的序列必须全部具有相同的长度。
- 级别序列,可选
如果给出了 levels,它必须是一个与 args 长度相同的序列。levels 中的每个元素要么是一个序列,要么是 None。如果它是一个序列,它给出了 args 中相应序列中要计数的值。如果 args 中的序列中的任何值没有出现在 levels 中的相应序列中,则该值将被忽略,并且不会计入返回的数组 count 中。
args[i]
的 levels 的默认值是np.unique(args[i])
- 稀疏bool, 可选
如果为 True,返回一个稀疏矩阵。该矩阵将是
scipy.sparse.coo_matrix
类的一个实例。因为 SciPy 的稀疏矩阵必须是二维的,所以当 sparse 为 True 时,只允许两个输入序列。默认是 False。
- 返回:
- resCrosstabResult
一个包含以下属性的对象:
- 元素numpy.ndarrays 的元组。
包含长度为
len(args)
的元组,其中包含在 count 中计数的元素数组。这些可以解释为 count 的相应维度的标签。如果给出了 levels,那么如果levels[i]
不是 None,elements[i]
将保存levels[i]
中给出的值。- 计数numpy.ndarray 或 scipy.sparse.coo_matrix
zip(*args)
中唯一元素的计数,存储在一个数组中。当len(args) > 1
时,也称为 列联表。
参见
注释
Added in version 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 的对,我们可以只将值 [1, 2] 传递给 levels,这样 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]])