python - अजगर - सांप



अजगर में कॉलम में एक ही मान के साथ पंक्तियों को गिनें (1)

मैं अजगर में आर aggregate() फ़ंक्शन को पुन: उत्पन्न करने की कोशिश कर रहा हूं, लेकिन बिना कन्टेनेटिंग के। प्रत्येक पंक्ति के लिए, मैं सिर्फ किसी दिए गए कॉलम में समान मूल्य के साथ लाइनों की संख्या की गणना करना चाहता हूं।

मैं इसे यहां लिया गया कोड के एक भाग से काम करने की कोशिश कर रहा हूं: http://timotheepoisot.fr/2011/12/01/the-aggregate-function-in-python/

मैंने जो संशोधनों को लागू किया है, वे ### द्वारा दर्शाए गए हैं। मुझे वर्तमान में समस्या यह है कि पहले स्तंभ [0] में वर्ण स्ट्रिंग होते हैं और कोड केवल फ़्लोट्स के साथ काम करता है

import numpy as np
import scipy as sp  

def MSD(vec):
    return [np.mean(vec),np.std(vec)]  
def aggregate(df,by=0,to=1,func=np.sum):
    Dat = []
#    ColBy = df.T[by]
    ColBy = int(df.T[by][3:]) ### my attempt to read only the numbers in the first column's character strings
    ColTo = df.T[to] 
    UniqueBy = np.sort(np.unique(ColBy))
    for ub in UniqueBy:
        uTo = ColTo[ColBy==ub]
        Out = func(uTo)
#        Dat.append(np.concatenate(([ub],Out)))
        Dat.append([ub],Out) ### because I do not want to concatenate
    return Dat  

test_df = np.loadtxt('in_test.txt')  
Agr = aggregate(test_df,0,3,MSD)
sp.savetxt("out_test.txt", Agr) 

यह त्रुटि संदेश है:

Traceback (most recent call last):
  File "count_same_reads.py", line 30, in <module>
    test_df = np.loadtxt('in_test.txt')
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 796, in loadtxt
    items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: Tag19184

मेरा डेटा टैब-सीमांकित है, जिसमें अधिकतर तार हैं, कॉलम 3 को छोड़कर, जिसमें मैं लाइनों की घटनाओं की संख्या लिखना चाहता हूं

यहां टेस्ट डेटा है:

Tag19184    CTAAC   hffef   1   a   36  -   chr1    10006   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10012   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10018   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10024   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10030   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10036   0   36M 36
Tag19184    CTAAC   hffef   1   a   36  -   chr1    10042   0   36M 36
Tag20198    CTAAC   hffef   1   a   36  -   chr1    10048   0   36M 36
Tag20198    CTAAC   hffef   1   a   36  -   chr1    10054   0   36M 36
Tag45093    CTAAC   hffef   1   a   36  -   chr1    10060   0   36M 36

परिणाम इस तरह दिखना चाहिए:

Tag19184    CTAAC   hffef   7   a   36  -   chr1    10006   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10012   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10018   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10024   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10030   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10036   0   36M 36
Tag19184    CTAAC   hffef   7   a   36  -   chr1    10042   0   36M 36
Tag20198    CTAAC   hffef   2   a   36  -   chr1    10048   0   36M 36
Tag20198    CTAAC   hffef   2   a   36  -   chr1    10054   0   36M 36
Tag45093    CTAAC   hffef   1   a   36  -   chr1    10060   0   36M 36

जैसा कि आप शायद बता सकते हैं, मैं अभी अजगर में इतना अच्छा नहीं हूं किसी भी सलाह का स्वागत किया जाएगा।

[संपादित करें] पी एस डेटा पहले से ही स्तंभ [0] द्वारा सॉर्ट किया गया है


मैं pandas को विशेष रूप से जीनोमिक डेटा के मामले में बताऊंगा, डेटा का आकार काफी बड़ा हो सकता है:

In [44]:
#you can read you data by pandas.read_csv()
import pandas as pd
print df
         v0     v1     v2  v3 v4  v5 v6    v7     v8  v9  v10  v11
0  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10006   0  36M   36
1  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10012   0  36M   36
2  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10018   0  36M   36
3  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10024   0  36M   36
4  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10030   0  36M   36
5  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10036   0  36M   36
6  Tag19184  CTAAC  hffef   1  a  36  -  chr1  10042   0  36M   36
7  Tag20198  CTAAC  hffef   1  a  36  -  chr1  10048   0  36M   36
8  Tag20198  CTAAC  hffef   1  a  36  -  chr1  10054   0  36M   36
9  Tag45093  CTAAC  hffef   1  a  36  -  chr1  10060   0  36M   36
In [45]:
#if we want to group by the first 3 fields
df.groupby(['v0','v1','v2']).transform(sum).v3
Out[45]:
0    7
1    7
2    7
3    7
4    7
5    7
6    7
7    2
8    2
9    1
Name: v3, dtype: int64
In [46]:
#all it takes is just one line
df['v3']=df.groupby(['v0','v1','v2']).transform(sum).v3
print df
         v0     v1     v2  v3 v4  v5 v6    v7     v8  v9  v10  v11
0  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10006   0  36M   36
1  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10012   0  36M   36
2  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10018   0  36M   36
3  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10024   0  36M   36
4  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10030   0  36M   36
5  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10036   0  36M   36
6  Tag19184  CTAAC  hffef   7  a  36  -  chr1  10042   0  36M   36
7  Tag20198  CTAAC  hffef   2  a  36  -  chr1  10048   0  36M   36
8  Tag20198  CTAAC  hffef   2  a  36  -  chr1  10054   0  36M   36
9  Tag45093  CTAAC  hffef   1  a  36  -  chr1  10060   0  36M   36




aggregate