python在统计专业的应用_Python:使用Counter进行计数统计
計數統計就是統計某一項出現的次數。實際應用中很多需求需要用到這個模型。比如測試樣本中某一指出現的次數、日志分析中某一消息出現的頻率等等‘這種類似的需求有很多實現方法。下面就列舉幾條。
(1)使用dict
看下面代碼#coding=utf-8
data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
count_frq = dict()
for one in data:
if one in count_frq:
count_frq[one] += 1
else:
count_frq[one] = 1
print count_frq
輸出結果如下:
{‘a‘: 3, 2: 1, ‘b‘: 1, 4: 2, 5: 2, 7: 1, ‘2‘: 2, ‘z‘: 1, ‘d‘: 1}
這種方法最簡單,也是最容易想到的,鄙人這寫這篇博文之前用的最多,不過以后應該不會用來,我們應該使代碼更加Pythonic
(2)使用set和list
代碼如下:#coding=utf-8
data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
data_set = set(data)
count_list = []
for one in data_set:
count_list.append((one,data.count(one)))
print count_list
輸出結果如下:
[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]
這里面利用了list的通用方法和集合(set)的特性,集合是一個無序不重復的元素集,而工廠函數set()可以將列表轉換為一個無序不重復的元素集合。
以上方法都很簡單,但不夠Pythonic。下面來介紹collections中的Counter類。
(一)Counter類
Counter類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的鍵值對形式存儲,其中元素作為key,其計數作為value。計數值可以是任意的Interger(包括0和負數)支持集合操作+、-、&、|,其中&、|操作分別返回兩個Counter對象各元素的最大值和最小值。
(1)Counter的初始化
跟平時自定義類的初始化方法差不多,如下:
c = Counter("hello world")#可迭代對象創建
c = Counter(h=1,l=3,o=2)#關鍵字創建
c = Counter({‘h‘:1,‘l‘:3,‘o‘:2})#字典創建
c = Counter()#空Counter類
(2)Counter類常見方法
elements():返回一個迭代器。元素被重復了多少次,在該迭代器中就包含多少個該元素。所有元素按照字母序排序,個數小于1的元素不被包含。
update():用于統計對象元素的更新,原有的Counter計數器對象與新增元素的統計計數值相加而不是直接替換。
subtract():該方法用于計數器對象中元素統計值減少,輸入輸出的統計值書可以為0或者負數的。
most_common([n]):可以查找出前n個出現頻率最高的元素以及它們對于的次數,也就是說頻率搞的排在最前面。
所以上面的例子用Counter類的話,也很簡單,代碼如下:#coding=utf-8
from collections import Counter
data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
c = Counter(data)
print c
輸出結果如下:
Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘z‘: 1, ‘d‘: 1})
咱們接著看代碼print c.elements()
print list(c.elements())
輸出結果如下:
[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘z‘, ‘d‘]c[‘z‘] -= 1
print c
print c.elements()
print list(c.elements())
輸出結果如下:
Counter({‘a‘: 3, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})
[‘a‘, ‘a‘, ‘a‘, 2, ‘b‘, 4, 4, 5, 5, 7, ‘2‘, ‘2‘, ‘d‘]
元素’z‘的統計值變為了0,然后進行elements()運算后,‘z‘就被排除掉了。c.update("aaaa")
print c
輸出結果:
Counter({‘a‘: 7, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})
update()在原基礎上增加了計數值c.subtract("aaaaa")
print c
輸出結果如下:
Counter({‘a‘: 2, 4: 2, 5: 2, ‘2‘: 2, 2: 1, ‘b‘: 1, 7: 1, ‘d‘: 1, ‘z‘: 0})
subtract()在原基礎上減少計數值print c.most_common()
輸出結果如下:
[(‘a‘, 2), (4, 2), (5, 2), (‘2‘, 2), (2, 1), (‘b‘, 1), (7, 1), (‘d‘, 1), (‘z‘, 0)]
以上代碼都是連接在一起的。
(3)算術和集合操作#coding=utf-8
from collections import Counter
data = [‘a‘,‘2‘,‘2‘,‘b‘,‘a‘,‘d‘,‘a‘,]
c = Counter(data)
b = Counter(a=1,b=2)
print c
print b
print b+c # c[x] + d[x]
print c-b # subtract(只保留正數計數的元素)
print c&b # 交集: min(c[x], d[x])
print c|b # 并集: max(c[x], d[x])
輸出結果如下:
Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 1, ‘d‘: 1})
Counter({‘b‘: 2, ‘a‘: 1})
Counter({‘a‘: 4, ‘b‘: 3, ‘2‘: 2, ‘d‘: 1})
Counter({‘a‘: 2, ‘2‘: 2, ‘d‘: 1})
Counter({‘a‘: 1, ‘b‘: 1})
Counter({‘a‘: 3, ‘2‘: 2, ‘b‘: 2, ‘d‘: 1})
(4)其它
Counter類返回值跟字典很類似,所以字典類的方法對Counter對象也適用。如下:#coding=utf-8
from collections import Counter
data = [‘a‘,‘2‘,2,4,5,‘2‘,‘b‘,4,7,‘a‘,5,‘d‘,‘a‘,‘z‘]
c = Counter(data)
print c.keys()
print c.has_key(‘a‘)
print c.get(‘a‘)
print c.items()
print c.values()
print c.viewitems()
print c.viewkeys()
輸出如下:
[‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘]
True
3
[(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)]
[3, 1, 1, 2, 2, 1, 2, 1, 1]
dict_items([(‘a‘, 3), (2, 1), (‘b‘, 1), (4, 2), (5, 2), (7, 1), (‘2‘, 2), (‘z‘, 1), (‘d‘, 1)])
dict_keys([‘a‘, 2, ‘b‘, 4, 5, 7, ‘2‘, ‘z‘, ‘d‘])
這只是其中一部分,其它的方法可以參考字典類的方法。
另外,Counter對象還支持工廠函數操作set()、list()、dict().
有時間再補充介紹collections模塊中其它的類
原文地址:http://11026142.blog.51cto.com/11016142/1851791
總結
以上是生活随笔為你收集整理的python在统计专业的应用_Python:使用Counter进行计数统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring的AOP-基本概念
- 下一篇: mysql 关联查询_mysql数据库调