2013-05-19 39 views
5

Tôi có danh sách sau đây:cốt truyện python và powerlaw phù hợp

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

Tôi muốn âm mưu tần số của từng đối tượng với trăn và thực hiện một phân tích powerlaw trên đó.

Nhưng tôi không thể biết cách tôi có thể vẽ danh sách bằng nhãn ylabel tần số và xlabel các số trên danh sách.

Tôi nghĩ để tạo ra một dict với tần số và âm mưu các giá trị của từ điển, nhưng theo cách đó, tôi không thể đặt các số trên xlabel.

Bạn có lời khuyên nào không?

Trả lời

5

Tôi nghĩ bạn nói đúng về từ điển:

>>> import matplotlib.pyplot as plt 
>>> from collections import Counter 
>>> c = Counter([6, 4, 0, 0, 0, 0, 0, 1, 3, 1, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 2, 3, 3, 2, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 2, 2, 3, 2, 1, 0, 0, 0, 1, 2]) 
>>> sorted(c.items()) 
[(0, 50), (1, 30), (2, 9), (3, 8), (4, 1), (5, 1), (6, 1)] 
>>> plt.plot(*zip(*sorted(c.items())) 
...) 
[<matplotlib.lines.Line2D object at 0x36a9990>] 
>>> plt.show() 

Có một vài mảnh ở đây được quan tâm. zip(*sorted(c.items())) sẽ trả về một cái gì đó như [(0,1,2,3,4,5,6),(50,30,9,8,1,1,1)]. Chúng tôi có thể giải nén bằng cách sử dụng toán tử * để plt.plot thấy 2 đối số - (0,1,2,3,4,5,6)(50,30,9,8,1,1,1). được sử dụng làm giá trị xy trong âm mưu tương ứng.

Để khớp dữ liệu, scipy có thể sẽ có một số trợ giúp tại đây. Cụ thể, hãy xem examples sau đây. (một trong những ví dụ thậm chí còn sử dụng luật quyền lực).

+0

Tôi chỉ thấy các chỉnh sửa của bạn. Cảm ơn bạn. Điều này có thể sẽ giải quyết vấn đề của tôi. – Tasos

3
y = np.bincount([6, 4, 0, 0, 0, 0, 0, 1, 3, 1, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 2, 3, 3, 2, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 2, 2, 3, 2, 1, 0, 0, 0, 1, 2]) 
x = np.nonzero(y)[0] 
plt.bar(x,y) 

enter image description here

-1
import matplotlib.pyplot as plt 
data = [6, 4, 0, 0, 0, 0, 0, 1, 3, 1, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 2, 3, 3, 2, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 2, 2, 3, 2, 1, 0, 0, 0, 1, 2] 

plt.hist(data, bins=range(max(data)+2)) 
plt.show() 

enter image description here

4

Sử dụng trọn gói: powerlaw

import powerlaw 
d=[6, 4, 0, 0, 0, 0, 0, 1, 3, 1, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3,2, 3, 3, 2, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 1,0, 1, 2, 0, 0, 0, 2, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1,3, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 2, 2, 3, 2, 1, 0, 0, 0, 1, 2] 
fit = powerlaw.Fit(numpy.array(d)+1,xmin=1,discrete=True) 
fit.power_law.plot_pdf(color= 'b',linestyle='--',label='fit ccdf') 
fit.plot_pdf(color= 'b') 

print('alpha= ',fit.power_law.alpha,' sigma= ',fit.power_law.sigma) 

alpha = 1,85885487521 sigma = 0,0858854875209

enter image description here

Cho phép vẽ, sắp xếp và phân tích dữ liệu chính xác. Nó có phương pháp đặc biệt để phù hợp với phân phối pháp luật quyền lực với dữ liệu rời rạc.

nó có thể được cài đặt với: pip install powerlaw

+0

Bạn có biết bất kỳ cơ hội nào để có được nhân tố C không? –

Các vấn đề liên quan