2013-05-19 10 views
5

Mam następującą listę:pyton fabuła i potęgowym dopasowanie

[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] 

Chcę wykreślić częstotliwość każdego podmiotu z pytona i dokonać analizy potęgowym na nim.

Ale nie mogę sobie wyobrazić, w jaki sposób mogę wydrukować listę z etykietą częstotliwość i xlabel numery na liście.

Myślałem, aby stworzyć dykt o częstotliwościach i wykreślić wartości słownika, ale w ten sposób nie mogę umieścić liczb na xlabel.

Każda rada?

Odpowiedz

5

Chyba masz rację słownika:

>>> 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() 

Istnieje tu kilka kawałków, które są przedmiotem zainteresowania. zip(*sorted(c.items())) zwróci coś podobnego do [(0,1,2,3,4,5,6),(50,30,9,8,1,1,1)]. Możemy rozpakować to za pomocą operatora *, aby plt.plot zobaczył 2 argumenty - (0,1,2,3,4,5,6) i (50,30,9,8,1,1,1). które są używane jako wartości odpowiednio w wykreślaniu wartości x i y.

Jeśli chodzi o dopasowanie danych, prawdopodobnie będzie tu pomocna wersja scipy. W szczególności spójrz na następujące examples. (jeden z przykładów stosuje nawet prawo mocy).

+0

po prostu zobaczyć zmiany. Dziękuję Ci. To prawdopodobnie rozwiąże mój problem. – 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

pomocą pakietu: potęgowym

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) 

alfa = 1,85885487521 Sigma = 0,0858854875209

enter image description here

Umożliwia prawidłowe wykreślenie, dopasowanie i analizę danych. Ma on specjalną metodę dopasowania do dystrybucji mocy z dyskretnymi danymi.

może być zainstalowany: pip install powerlaw

+0

Czy znasz przypadkiem, jak uzyskać współczynnik skalowania C? –