Die Dokumentation sagt:
http://pandas.pydata.org/pandas-docs/dev/basics.html
"Kontinuierliche Werte können mithilfe der Funktionen cut (Bins basierend auf Werten) und qcut (Bins basierend auf Stichprobenquantilen) diskretisiert werden."
Klingt für mich sehr abstrakt ... Ich kann die Unterschiede im folgenden Beispiel sehen, aber was bedeutet qcut (Beispielquantil) tatsächlich? Wann würden Sie qcut versus cut verwenden?
Vielen Dank.
factors = np.random.randn(30)
In [11]:
pd.cut(factors, 5)
Out[11]:
[(-0.411, 0.575], (-0.411, 0.575], (-0.411, 0.575], (-0.411, 0.575], (0.575, 1.561], ..., (-0.411, 0.575], (-1.397, -0.411], (0.575, 1.561], (-2.388, -1.397], (-0.411, 0.575]]
Length: 30
Categories (5, object): [(-2.388, -1.397] < (-1.397, -0.411] < (-0.411, 0.575] < (0.575, 1.561] < (1.561, 2.547]]
In [14]:
pd.qcut(factors, 5)
Out[14]:
[(-0.348, 0.0899], (-0.348, 0.0899], (0.0899, 1.19], (0.0899, 1.19], (0.0899, 1.19], ..., (0.0899, 1.19], (-1.137, -0.348], (1.19, 2.547], [-2.383, -1.137], (-0.348, 0.0899]]
Length: 30
Categories (5, object): [[-2.383, -1.137] < (-1.137, -0.348] < (-0.348, 0.0899] < (0.0899, 1.19] < (1.19, 2.547]]`
Antworten:
Beachten Sie zunächst, dass Quantile nur der allgemeinste Begriff für Dinge wie Perzentile, Quartile und Mediane sind. Sie haben in Ihrem Beispiel fünf Fächer angegeben, also fragen Sie
qcut
nach Quintilen.Wenn Sie also nach Quintilen mit fragen
qcut
, werden die Fächer so ausgewählt, dass Sie in jedem Fach die gleiche Anzahl von Datensätzen haben. Sie haben 30 Datensätze, sollten also 6 in jedem Bin haben (Ihre Ausgabe sollte so aussehen, obwohl sich die Haltepunkte aufgrund der zufälligen Ziehung unterscheiden):Umgekehrt
cut
sehen Sie etwas Unebeneres:Dies liegt daran
cut
, dass die Bins so ausgewählt werden, dass sie gleichmäßig nach den Werten selbst und nicht nach der Häufigkeit dieser Werte verteilt sind. Da Sie aus einer zufälligen Normalen gezogen haben, sehen Sie höhere Frequenzen in den inneren Behältern und weniger in den äußeren. Dies wird im Wesentlichen eine tabellarische Form eines Histogramms sein (von dem Sie erwarten würden, dass es mit 30 Datensätzen ziemlich glockenförmig ist).quelle
cut
oder Sie interessieren sich mehr für die höchsten 5% und die Verwendungqcut
quelle
Qcut sorgt also für eine gleichmäßigere Verteilung der Werte in jedem Bin, selbst wenn sie sich im Probenraum gruppieren. Dies bedeutet, dass Sie weniger wahrscheinlich einen Behälter voller Daten mit sehr engen Werten und einen anderen Behälter mit 0 Werten haben. Im Allgemeinen ist es besser zu probieren.
quelle
Pd.qcut verteilt Elemente eines Arrays beim Teilen auf der Basis von ((Anzahl der Elemente im Array) / (Anzahl der Bins - 1)) und teilt dann so viel Nr. von Elementen seriell in jedem Behälter.
Pd.cut verteilt Elemente eines Arrays bei der Division auf der Basis von ((erstes + letztes Element) / (Nr. Von Bins-1)) und verteilt dann das Element gemäß dem Wertebereich, in den sie fallen.
quelle