निम्नलिखित कोड अच्छी तरह से काम करता है। बस जांच रहा है: क्या मैं पांडों का सही उपयोग और समय कर रहा हूं और क्या कोई तेज तरीका है? धन्यवाद।क्या यह पांडस में समूह का सबसे तेज़ तरीका है?
$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> import numpy as np
>>> import timeit
>>> pd.__version__
'0.14.1'
def randChar(f, numGrp, N) :
things = [f%x for x in range(numGrp)]
return [things[x] for x in np.random.choice(numGrp, N)]
def randFloat(numGrp, N) :
things = [round(100*np.random.random(),4) for x in range(numGrp)]
return [things[x] for x in np.random.choice(numGrp, N)]
N=int(1e8)
K=100
DF = pd.DataFrame({
'id1' : randChar("id%03d", K, N), # large groups (char)
'id2' : randChar("id%03d", K, N), # large groups (char)
'id3' : randChar("id%010d", N//K, N), # small groups (char)
'id4' : np.random.choice(K, N), # large groups (int)
'id5' : np.random.choice(K, N), # large groups (int)
'id6' : np.random.choice(N//K, N), # small groups (int)
'v1' : np.random.choice(5, N), # int in range [1,5]
'v2' : np.random.choice(5, N), # int in range [1,5]
'v3' : randFloat(100,N) # numeric e.g. 23.5749
})
अब समय 5 अलग-अलग समूह, समय की पुष्टि करने के लिए प्रत्येक को दो बार दोहराते हैं। [मुझे लगता है कि timeit(2)
इसे दो बार चलाता है, लेकिन फिर यह कुल रिपोर्ट करता है। मुझे पहले और दूसरे रन के समय में अलग-अलग दिलचस्पी है।] इन परीक्षणों के दौरान htop
के अनुसार पायथन लगभग 10 जी रैम का उपयोग करता है।
How to solve memory error in mtrand.RandomState.choice?:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Stepping: 4
CPU MHz: 2500.048
BogoMIPS: 5066.38
Hypervisor vendor: Xen
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-7,16-23
NUMA node1 CPU(s): 8-15,24-31
$ free -h
total used free shared buffers cached
Mem: 240G 74G 166G 372K 33M 550M
-/+ buffers/cache: 73G 166G
Swap: 0B 0B 0B
मैं इसे प्रासंगिक लेकिन सिर्फ मामले में है विश्वास नहीं है, ऊपर randChar
समारोह mtrand.RandomState.choice
में एक स्मृति त्रुटि के लिए एक समाधान नहीं है:
>>> timeit.Timer("DF.groupby(['id1']).agg({'v1':'sum'})" ,"from __main__ import DF").timeit(1)
5.604133386000285
>>> timeit.Timer("DF.groupby(['id1']).agg({'v1':'sum'})" ,"from __main__ import DF").timeit(1)
5.505057081000359
>>> timeit.Timer("DF.groupby(['id1','id2']).agg({'v1':'sum'})" ,"from __main__ import DF").timeit(1)
14.232032927000091
>>> timeit.Timer("DF.groupby(['id1','id2']).agg({'v1':'sum'})" ,"from __main__ import DF").timeit(1)
14.242601240999647
>>> timeit.Timer("DF.groupby(['id3']).agg({'v1':'sum', 'v3':'mean'})" ,"from __main__ import DF").timeit(1)
22.87025260900009
>>> timeit.Timer("DF.groupby(['id3']).agg({'v1':'sum', 'v3':'mean'})" ,"from __main__ import DF").timeit(1)
22.393589012999655
>>> timeit.Timer("DF.groupby(['id4']).agg({'v1':'mean', 'v2':'mean', 'v3':'mean'})" ,"from __main__ import DF").timeit(1)
2.9725865330001398
>>> timeit.Timer("DF.groupby(['id4']).agg({'v1':'mean', 'v2':'mean', 'v3':'mean'})" ,"from __main__ import DF").timeit(1)
2.9683854739996605
>>> timeit.Timer("DF.groupby(['id6']).agg({'v1':'sum', 'v2':'sum', 'v3':'sum'})" ,"from __main__ import DF").timeit(1)
12.776488024999708
>>> timeit.Timer("DF.groupby(['id6']).agg({'v1':'sum', 'v2':'sum', 'v3':'sum'})" ,"from __main__ import DF").timeit(1)
13.558292575999076
यहाँ प्रणाली की जानकारी है
'df.groupby' बहुत अच्छी तरह अनुकूलित है। आप किस विकल्प पर विचार कर रहे हैं? एकमात्र चीज जिसे मैं सोच सकता हूं वह 'आईडी' कॉलम को इंडेक्स के रूप में सेट करना है और फिर 'df.groupby (level = id_whatever)' का उपयोग करना है। –
@PaulH धन्यवाद मैं सूचकांक के रूप में 'id' कॉलम आज़माउंगा। मैं आर के 'data.table' (जो मैं रखता हूं) की तुलना कर रहा हूं। –
ओह ठंडा। दूसरी बात यह है कि मैं इसका उल्लेख करूंगा कि यह एक आईपीथन नोटबुक में कर रहा है और 'टाइमिट' जादू का उपयोग करके शायद आपकी कुछ स्वच्छता बनाए रखेगा। http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Cell%20Magics.ipynb#- कुछ- सिंपल-सेल- मैगिक्स –