2012-12-06 19 views
7

में अजीब डेटा मैनिपुलेशन मैं वेस मैकिनी द्वारा डेटा विश्लेषण के लिए पायथन पढ़ रहा हूं, लेकिन मैं इस डेटा मैनिपुलेशन से आश्चर्यचकित था। आप सभी प्रक्रिया here देख सकते हैं लेकिन मैं इसे सारांशित करने का प्रयास करूंगा। मान लें कि आप कुछ इस तरह है:पांडस

In [133]: agg_counts = by_tz_os.size().unstack().fillna(0) 
    Out[133]: 
    a     Not Windows Windows 
    tz     245   276 
    Africa/Cairo   0   3 
    Africa/Casablanca 0   1 
    Africa/Ceuta   0   2 
    Africa/Johannesburg 0   1 
    Africa/Lusaka  0   1 
    America/Anchorage 4   1 
    ... 

tz समय क्षेत्र और Not Windows और Windows हैं मूल डेटा में उपयोगकर्ता एजेंट से निकाली गई श्रेणियों का मतलब है, तो हम देखते हैं कि 3 विंडोज उपयोगकर्ताओं और 0 गैर खिड़कियों उपयोगकर्ताओं को देख सकते हैं एकत्रित डेटा से अफ्रीका/काहिरा में।

तो आदेश प्राप्त करने के लिए "शीर्ष समग्र समय क्षेत्र" हमारे पास में:

In [134]: indexer = agg_counts.sum(1).argsort() 
Out[134]: 
tz 
            24 
Africa/Cairo      20 
Africa/Casablanca     21 
Africa/Ceuta      92 
Africa/Johannesburg    87 
Africa/Lusaka      53 
America/Anchorage     54 
America/Argentina/Buenos_Aires 57 
America/Argentina/Cordoba   26 
America/Argentina/Mendoza   55 
America/Bogota     62 
... 

तो उस बिंदु पर, मैं सोचा होगा कि documentation के अनुसार मैं स्तंभों पर संक्षेप किया गया था (sum(1) में) और फिर परिणाम के अनुसार सॉर्टिंग तर्क (सामान्य रूप से Argsort में) दिखा रहा है। सबसे पहले, मुझे यकीन नहीं है कि इस श्रृंखला के संदर्भ में "कॉलम" का क्या अर्थ है क्योंकि sum(1) वास्तव में Not Windows और Windows उपयोगकर्ताओं को उस समय के समान पंक्ति में रखने वाले उपयोगकर्ताओं को मानते हैं। इसके अलावा, मैं argsort मानों और agg_counts के बीच एक सहसंबंध नहीं देख सकता। उदाहरण के लिए, Pacific/Auckland में "argsort value" (In[134] में) 0 है और इसमें केवल 11 Windows और Not Windows उपयोगकर्ता हैं। Asia/Harbin में 1 का argsort मान है और 3 Windows और Windows उपयोगकर्ताओं के साथ प्रदर्शित होता है।

क्या कोई मुझे बता सकता है कि वहां क्या हो रहा है? जाहिर है मैं कुछ गलत समझ रहा हूँ।

+0

ऐसा नहीं है कि किताब में एक वास्तव में भ्रमित उदाहरण है) – Winand

उत्तर

3

sum(1) का अर्थ axis = 1 से अधिक है। शब्दावली numpy से आता है।

2+ आयामी ऑब्जेक्ट के लिए, 0-अक्ष पंक्तियों को संदर्भित करता है। 0-अक्ष पर सारांश का अर्थ पंक्तियों पर संक्षेप में है, जो "लंबवत" (तालिका को देखते समय) को संक्षेप में जोड़ना है।

1-अक्ष कॉलम को संदर्भित करता है। 1-अक्ष पर सम्मिलित करना कॉलम पर संक्षेप में है, जो "क्षैतिज" को संक्षेप में जोड़ता है।


numpy.argsortसूचकांक जो आपको बता कैसे एक सरणी सॉर्ट करने के लिए की एक सरणी देता है। उदाहरण के लिए:

In [72]: import numpy as np 

In [73]: x = np.array([521, 3, 1, 2, 1, 1, 5]) 

In [74]: np.argsort(x) 
Out[74]: array([2, 4, 5, 3, 1, 6, 0]) 

सरणी np.argsort द्वारा लौटाए में 2 का मतलब x में सबसे छोटा मान x[2], जो 1 के बराबर होती है है। अगला सबसे छोटा x[4] है जो 1 भी है। और इसी तरह।

अगर हम

totals = df.sum(1) 
print(totals) 
# tz      521 
# Africa/Cairo    3 
# Africa/Casablanca  1 
# Africa/Ceuta    2 
# Africa/Johannesburg  1 
# Africa/Lusaka   1 
# America/Anchorage  5 

को परिभाषित तो totals.argsort() मूल्यों [521, 3, 1, 2, 1, 1, 5] argsorting है।हमने परिणाम देखा है;

print(totals.argsort()) 
# tz      2 
# Africa/Cairo   4 
# Africa/Casablanca  5 
# Africa/Ceuta   3 
# Africa/Johannesburg 1 
# Africa/Lusaka   6 
# America/Anchorage  0 

इस argsort सूचकांक के साथ totals.index संबद्ध कर रहा है प्रकट नहीं होता है आंतरिक अर्थ है:

[2, 4, 5, 3, 1, 6, 0] 

ये मान बस एक ही indextotals के रूप में के साथ, एक Series में किया जाता है: यह एक ही रूप में numpy.argsort है , लेकिन यदि आप totals[totals.argsort()] की गणना करते हैं तो आपको क्रमबद्ध क्रम में totals की पंक्तियां दिखाई देती हैं:

print(totals[totals.argsort()]) 
# Africa/Casablanca  1 
# Africa/Johannesburg  1 
# Africa/Lusaka   1 
# Africa/Ceuta    2 
# Africa/Cairo    3 
# America/Anchorage  5 
# tz      521 
,210
+0

अधिकार:

यहाँ ले पद्धति पर कुछ उदाहरण हैं! बहुत बहुत धन्यवाद। इस संदर्भ में argsort बहुत उपयोगी प्रतीत नहीं होता है क्योंकि यह पहले कॉलम का संदर्भ नहीं देता है। वह बहुत भ्रमित था। –

-1

मैं unutbu के स्पष्टीकरण प्यार करता था। उपरोक्त दूसरी अंतिम तालिका में, प्रिंट (totals.argsort()), पहले कॉलम को अनदेखा करें। हमें जो चाहिए वह दूसरा कॉलम है जो हमें आवश्यक पदों को देता है। यह बहुत अच्छा है! । https://pandas-docs.github.io/pandas-docs-travis/advanced.html#take-methods

संबंधित मुद्दे