Pandas.qcut ve pandas.cut arasındaki fark nedir?


97

Belgeler şunu söylüyor:

http://pandas.pydata.org/pandas-docs/dev/basics.html

"Kesintisiz değerler, kesme (değerlere dayalı bölmeler) ve qcut (örnek niceliklerine dayalı kutular) işlevleri kullanılarak ayrılabilir"

Bana çok soyut geliyor ... Aşağıdaki örnekte farklılıkları görebiliyorum ama qcut (örnek nicelik) aslında ne anlama geliyor / ne anlama geliyor? Qcut ve cut ne zaman kullanılır?

Teşekkürler.

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

Yanıtlar:


223

Başlangıç ​​olarak, kuantillerin yüzdelikler, çeyrekler ve medyanlar gibi şeyler için en genel terim olduğunu unutmayın. Örneğinizde beş bölme belirttiniz, bu yüzden qcutbeşte birlik dilimler istiyorsunuz .

Dolayısıyla, ile beşte birlik qcutkısımlar istediğinizde, bölmeler seçilecektir, böylece her bölmede aynı sayıda kayda sahip olursunuz. 30 kaydınız var, bu nedenle her bölmede 6 tane olmalıdır (çıktınız şöyle görünmelidir, ancak rasgele çekiliş nedeniyle kesme noktaları farklı olacaktır):

pd.qcut(factors, 5).value_counts()

[-2.578, -0.829]    6
(-0.829, -0.36]     6
(-0.36, 0.366]      6
(0.366, 0.868]      6
(0.868, 2.617]      6

Tersine, cutsizin için daha düzensiz bir şey göreceksiniz:

pd.cut(factors, 5).value_counts()

(-2.583, -1.539]    5
(-1.539, -0.5]      5
(-0.5, 0.539]       9
(0.539, 1.578]      9
(1.578, 2.617]      2

Bunun nedeni cut, bölmelerin eşit aralıklarla yerleştirilmesini bu değerlerin frekansına göre değil, değerlere göre seçecek olmasıdır . Bu nedenle, rastgele bir normalden çektiğiniz için, iç bölmelerde daha yüksek, dış bölmede daha az frekans göreceksiniz. Bu, esasen bir histogramın (30 kayıtla oldukça çan şeklinde olmasını beklediğiniz) tablo şeklinde bir formudur.


Ne olduğu için harika bir cevap . Neden birini diğerine tercih ettiğinizi konuşabilir misiniz ?
James Hulse

5
@JamesHulse bu makul bir soru ama genel bir cevabım yok. her şeyden çok bir göreceli (nicelik) ölçüme karşı mutlak bir ölçü olup olmadığına bağlıdır. Örneğin yüksekliği düşünün: göreceli yükseklik (6 ft'den uzun) ilginizi çekebilir cutveya en yüksek% 5'i daha fazla qcut
önemseyip

18
  • cut komutu eşit aralıklı bölmeler oluşturur ancak örneklerin sıklığı her bölmede eşit değildir
  • qcut komutu eşit olmayan boyutta bölmeler oluşturur, ancak örneklerin sıklığı her bölmede eşittir.

görüntü açıklamasını buraya girin

    >>> x=np.array([24,  7,  2, 25, 22, 29])
    >>> x
    array([24,  7,  2, 25, 22, 29])

    >>> pd.cut(x,3).value_counts() #Bins size has equal interval of 9
    (2, 11.0]        2
    (11.0, 20.0]     0
    (20.0, 29.0]     4

    >>> pd.qcut(x,3).value_counts() #Equal frequecy of 2 in each bins
    (1.999, 17.0]     2
    (17.0, 24.333]    2
    (24.333, 29.0]    2

1
x, bins = pd.cut (list_of_values, bins = 10, labels = list (range (10,0, -1)), retbins = True) Bu, binleri almak için yararlıdır
Dev_Man

9

Bu nedenle qcut, numune alanında kümelenmiş olsalar bile her bölmedeki değerlerin daha eşit dağılımını sağlar. Bu, çok yakın değerlere sahip verilerle dolu bir bölmeye ve 0 değerli başka bir bölmeye sahip olma olasılığınızın daha düşük olduğu anlamına gelir. Genel olarak, daha iyi örnekleme.


-1

Pd.qcut bir dizinin elemanlarını ((dizideki eleman sayısı) / (bölme sayısı - 1)) temelinde bölme yaparak dağıtır, sonra bu kadar no. her bölmede seri olarak öğeler.

Pd.cut bir dizinin elemanlarını ((ilk + son eleman) / (bölme sayısı-1)) temelinde bölme yaparak dağıtır ve sonra elemanı ait oldukları değer aralığına göre dağıtır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.