scipy.stats.contingency.

crosstab#

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

Gibt eine Tabelle mit Anzahlen für jede mögliche eindeutige Kombination in *args zurück.

Wenn len(args) > 1 ist, wird die von dieser Funktion berechnete Array oft als *Kontingenztafel* bezeichnet [1].

Die Argumente müssen Sequenzen gleicher Länge sein. Der zweite Rückgabewert, count, ist ein Integer-Array mit len(args) Dimensionen. Wenn levels None ist, hat das Array count die Form (n0, n1, ...), wobei nk die Anzahl der eindeutigen Elemente in args[k] ist.

Parameter:
*argsSequenzen

Eine Sequenz von Sequenzen, deren eindeutige, ausgerichtete Elemente gezählt werden sollen. Die Sequenzen in args müssen alle die gleiche Länge haben.

levelsSequenz, optional

Wenn levels gegeben ist, muss es eine Sequenz sein, die die gleiche Länge wie args hat. Jedes Element in levels ist entweder eine Sequenz oder None. Wenn es eine Sequenz ist, gibt sie die Werte in der entsprechenden Sequenz in args an, die gezählt werden sollen. Wenn ein Wert in den Sequenzen in args nicht im entsprechenden Element in levels vorkommt, wird dieser Wert ignoriert und nicht in dem zurückgegebenen Array count gezählt. Der Standardwert von levels für args[i] ist np.unique(args[i])

sparsebool, optional

Wenn True, wird eine spärliche Matrix zurückgegeben. Die Matrix ist eine Instanz der Klasse scipy.sparse.coo_matrix. Da spärliche Matrizen von SciPy 2-dimensional sein müssen, sind nur zwei Eingabesequenzen erlaubt, wenn sparse True ist. Standard ist False.

Rückgabe:
resCrosstabResult

Ein Objekt, das die folgenden Attribute enthält

elementsTupel aus numpy.ndarrays.

Tupel der Länge len(args), das die Arrays von Elementen enthält, die in count gezählt werden. Diese können als Labels der entsprechenden Dimensionen von count interpretiert werden. Wenn levels gegeben war, dann wird, wenn levels[i] nicht None ist, elements[i] die in levels[i] angegebenen Werte enthalten.

countnumpy.ndarray oder scipy.sparse.coo_matrix

Anzahlen der eindeutigen Elemente in zip(*args), gespeichert in einem Array. Auch bekannt als *Kontingenztafel*, wenn len(args) > 1 ist.

Siehe auch

numpy.unique

Hinweise

Hinzugefügt in Version 1.7.0.

Referenzen

Beispiele

>>> from scipy.stats.contingency import crosstab

Erstellt aus den Listen a und x eine Kontingenztafel, die die Häufigkeiten der entsprechenden Paare zählt.

>>> 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]])

Das Paar ('A', 'X') tritt zweimal auf, ('A', 'Y') tritt dreimal auf usw.

Es können auch Kontingenztafeln höherer Dimensionen erstellt werden.

>>> 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)

Die zu zählenden Werte können durch Verwendung des Arguments levels festgelegt werden. Dies ermöglicht es, die interessanten Elemente in jeder Eingabesequenz explizit anzugeben, anstatt die eindeutigen Elemente der Sequenz zu ermitteln.

Nehmen wir an, eines der Argumente ist ein Array, das die Antworten auf eine Umfragefrage mit den ganzzahligen Werten 1 bis 4 enthält. Selbst wenn der Wert 1 nicht in den Daten vorkommt, möchten wir einen Eintrag dafür in der Tabelle haben.

>>> 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]])

Wenn levels angegeben ist, aber ein Element von levels None ist, werden die eindeutigen Werte des entsprechenden Arguments verwendet. Zum Beispiel:

>>> 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]])

Wenn wir die Paare ignorieren wollen, bei denen 4 in q2 vorkommt, können wir levels nur die Werte [1, 2] übergeben, und die 4 wird ignoriert

>>> 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]])

Wiederholen wir abschließend das erste Beispiel, geben aber eine spärliche Matrix zurück

>>> 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]])