Pandas.qcut और pandas.cut में क्या अंतर है?


94

प्रलेखन कहता है:

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

"कट (डिब्बे के आधार पर मूल्यों) और क्यूकट (नमूना मात्रा के आधार पर डिब्बे) का उपयोग करके निरंतर मूल्यों को अलग किया जा सकता है"

मेरे लिए बहुत सार लगता है ... मैं नीचे दिए गए उदाहरण में अंतर देख सकता हूं लेकिन वास्तव में qcut (नमूना मात्रा) क्या करता है / मतलब है? आप कटक बनाम कट का उपयोग कब करेंगे?

धन्यवाद।

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

जवाबों:


213

शुरू करने के लिए, ध्यान दें कि क्वांटाइल्स प्रतिशतता, चतुर्थक और मध्यस्थ जैसी चीजों के लिए सबसे सामान्य शब्द है। आपने अपने उदाहरण में पांच डिब्बे निर्दिष्ट किए हैं, इसलिए आप qcutक्विंटल के लिए पूछ रहे हैं ।

इसलिए, जब आप क्विंटलों के साथ पूछते हैं qcut, तो डिब्बे को चुना जाएगा ताकि आपके पास प्रत्येक बिन में रिकॉर्ड की संख्या समान हो। आपके पास 30 रिकॉर्ड हैं, इसलिए प्रत्येक बिन में 6 होना चाहिए (आपका आउटपुट इस तरह दिखना चाहिए, हालांकि ब्रेकप्वाइंट यादृच्छिक ड्रॉ के कारण अलग होगा):

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

इसके विपरीत, आपके लिए cutकुछ अधिक असमान दिखाई देगा:

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

ऐसा इसलिए है क्योंकि cutडिब्बे स्वयं के मूल्यों के अनुसार समान रूप से दूरी तय करेंगे और उन मूल्यों की आवृत्ति नहीं । इसलिए, क्योंकि आप एक यादृच्छिक सामान्य से आकर्षित हुए हैं, आप आंतरिक डिब्बे में उच्च आवृत्तियों और बाहरी में कम देखेंगे। यह अनिवार्य रूप से हिस्टोग्राम का एक सारणीबद्ध रूप होने जा रहा है (जिसे आप 30 रिकॉर्ड के साथ काफी बेल आकार देंगे)।


यह क्या है के लिए महान जवाब । क्या आप बोल सकते हैं कि आप एक से दूसरे को क्यों चुनेंगे?
जेम्स हुल्स

4
@JamesHulse यह एक उचित सवाल है, लेकिन मेरे पास एक सामान्य जवाब नहीं है। यह सिर्फ इस बात पर निर्भर करता है कि क्या आप किसी अन्य चीज़ की तुलना में एक रिश्तेदार (मात्रात्मक) बनाम एक पूर्ण उपाय की तलाश कर रहे हैं। ऊँचाई पर विचार करें, उदाहरण के लिए: आप रिश्तेदार की ऊँचाई (6 फीट से अधिक) में दिलचस्पी ले सकते हैं और उपयोग cutकर सकते हैं या आप सबसे लंबे 5% की देखभाल कर सकते हैं और उपयोग कर सकते हैंqcut
John

15
  • कट कमांड समान रूप से डिब्बे बनाता है लेकिन नमूनों की आवृत्ति प्रत्येक बिन में असमान होती है
  • qcut कमांड असमान आकार के डिब्बे बनाता है लेकिन नमूनों की आवृत्ति प्रत्येक बिन में बराबर होती है।

यहां छवि विवरण दर्ज करें

    >>> 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, डिब्बे = 10, लेबल = सूची (श्रेणी (10,0, -1)), retbins = True) यह डिब्बे पाने के लिए सहायक है
Dev_Man

9

इसलिए qcut प्रत्येक बिन में मानों का अधिक वितरण सुनिश्चित करता है, भले ही वे नमूना स्थान में क्लस्टर हों। इसका मतलब है कि आपके पास बहुत कम मूल्यों के साथ डेटा से भरा बिन और 0 मान के साथ एक और बिन होने की संभावना कम है। सामान्य तौर पर, यह बेहतर नमूना है।


-1

Pd.qcut ((सरणी में no.of तत्व) (/ (डिब्बे की संख्या - 1)) के आधार पर विभाजन बनाने के लिए एक सरणी के तत्वों को वितरित करते हैं, फिर इसे बहुत से विभाजित करें। प्रत्येक डिब्बे में तत्वों के क्रमिक रूप से।

Pd.cut ((प्रथम + अंतिम तत्व) / (बिन्स -1 के) के आधार पर विभाजन बनाने के लिए एक सरणी के तत्वों को वितरित करता है और फिर मूल्यों की श्रेणी के अनुसार तत्व वितरित करता है जिसमें वे गिरते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.