crosstab#
- scipy.stats.contingency.crosstab(*args, levels=None, sparse=False)[Quelle]#
Gibt eine Tabelle mit Anzahlen für jede mögliche eindeutige Kombination in
*argszurück.Wenn
len(args) > 1ist, 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, ...), wobeinkdie Anzahl der eindeutigen Elemente inargs[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]istnp.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, wennlevels[i]nicht None ist,elements[i]die inlevels[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*, wennlen(args) > 1ist.
Siehe auch
Hinweise
Hinzugefügt in Version 1.7.0.
Referenzen
[1]„Kontingenztafel“, http://en.wikipedia.org/wiki/Contingency_table
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
q2vorkommt, 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]])