La documentation dit:
http://pandas.pydata.org/pandas-docs/dev/basics.html
"Les valeurs continues peuvent être discrétisées à l'aide des fonctions cut (bacs basés sur des valeurs) et qcut (bacs basés sur des quantiles d'échantillons)"
Cela me semble très abstrait ... Je peux voir les différences dans l'exemple ci-dessous, mais que signifie / signifie réellement qcut (quantile d'échantillons)? Quand utiliseriez-vous qcut plutôt que couper?
Merci.
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]]`
Réponses:
Pour commencer, notez que les quantiles n'est que le terme le plus général pour des éléments tels que les percentiles, les quartiles et les médianes. Vous avez spécifié cinq catégories dans votre exemple, vous demandez donc
qcut
des quintiles.Ainsi, lorsque vous demandez des quintiles avec
qcut
, les bacs seront choisis de sorte que vous ayez le même nombre d'enregistrements dans chaque bac. Vous avez 30 enregistrements, donc vous devriez en avoir 6 dans chaque bac (votre sortie devrait ressembler à ceci, bien que les points d'arrêt différeront en raison du tirage au sort):À l'inverse,
cut
vous verrez quelque chose de plus inégal:C'est parce que
cut
va choisir les bacs à espacer uniformément en fonction des valeurs elles-mêmes et non de la fréquence de ces valeurs. Par conséquent, parce que vous vous êtes inspiré d'une normale aléatoire, vous verrez des fréquences plus élevées dans les bacs intérieurs et moins dans l'extérieur. Il s'agira essentiellement d'une forme tabulaire d'histogramme (que vous vous attendriez à être assez en forme de cloche avec 30 enregistrements).la source
cut
ou vous pourriez vous soucier davantage des 5% les plus hauts et utiliserqcut
la source
Ainsi, qcut garantit une distribution plus uniforme des valeurs dans chaque bac, même si elles se regroupent dans l'espace échantillon. Cela signifie que vous êtes moins susceptible d'avoir un bac plein de données avec des valeurs très proches et un autre bac avec des valeurs 0. En général, c'est un meilleur échantillonnage.
la source
Pd.qcut distribue les éléments d'un tableau lors de la division sur la base de ((nombre d'éléments dans le tableau) / (nombre de bins - 1)), puis divise ce nombre. d'éléments en série dans chaque bac.
Pd.cut distribue les éléments d'un tableau lors de la division sur la base de ((premier + dernier élément) / (nombre de bins-1)) puis distribue l'élément en fonction de la plage de valeurs dans laquelle ils se situent.
la source