freq function

Shashwat Anand anand.shashwat at gmail.com
Sun Aug 22 04:16:56 EDT 2010


On Sun, Aug 22, 2010 at 1:31 PM, Dirk Nachbar <dirknbr at gmail.com> wrote:

> Here is a function which takes any list and creates a freq table,
> which can be printed unsorted, sorted by cases or items. It's supposed
> to mirror the proc freq in SAS.
>
> Dirk
>
> def freq(seq,order='unsorted',prin=True):
>    #order can be unsorted, cases, items
>
>    freq={}
>    for s in seq:
>        if s in freq:
>            freq[s]+=1
>        else:
>            freq[s]=1
>

The above code can be replaced with this:
 freq = {}
 for s in seqn:
          freq[s] = freq.get(s,0) + 1


>    if prin==True:
>        print 'Items=',len(seq),'Cases=',len(freq)
>        print '------------------------'
>        if order=='unsorted':
>            for k in freq.keys():
>                print k,freq[k],float(freq[k])/len(seq)
>        elif order=='cases':
>            #http://blog.client9.com/2007/11/sorting-python-dict-by-
> value.html
>            freq2=sorted(freq.iteritems(), key=lambda (k,v):
> (v,k),reverse=True)
>            for f in freq2:
>                print f[0],f[1],float(f[1])/len(seq)
>        elif order=='items':
>            for k in sorted(freq.iterkeys()):
>                print k,freq[k],float(freq[k])/len(seq)
>        print '------------------------'
>    return freq
>
> #test
>
> import random
>
> rand=[]
> for i in range(10000):
>    rand.append(str(int(100*random.random())))
>
> fr=freq(rand)
> fr2=freq(rand,order='items')
> fr2=freq(rand,order='cases')
> --
>

I feel the code you wrote is bloated a bit. You shall definately give
another try to improvise it.


>  http://mail.python.org/mailman/listinfo/python-list
>



-- 
~l0nwlf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100822/99bbebed/attachment-0001.html>


More information about the Python-list mailing list