powelaw.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import powerlaw
  2. from numpy import genfromtxt
  3. import matplotlib.pyplot as plt
  4. import paper_plots as carlosplt
  5. mydata = genfromtxt('power_law.csv', delimiter=',', dtype = 'float')
  6. print(len(mydata))
  7. print(mydata)
  8. ## Build and print probability distribution, bins per 10
  9. distr = dict()
  10. for i in mydata:
  11. bins = i // 10
  12. if bins in distr:
  13. distr[bins] += 1
  14. else:
  15. distr[bins] = 1
  16. #for i in distr:
  17. # print(str(i) + ', ' + str(distr[i]))
  18. results=powerlaw.Fit(mydata, discrete=False, estimate_discrete=False)
  19. print('alpha = ',results.power_law.alpha)
  20. print(results.truncated_power_law.alpha)
  21. print('xmin = ',results.power_law.xmin)
  22. print('xmax = ',results.power_law.xmax)
  23. print('sigma = ',results.power_law.sigma)
  24. print('D = ',results.power_law.D)
  25. print(results.truncated_power_law.xmin)
  26. print('xmax = ', results.truncated_power_law.xmax)
  27. print(results.power_law.discrete)
  28. print('lognormal mu: ',results.lognormal.mu)
  29. print('lognormal sigma: ',results.lognormal.sigma)
  30. #custom_model=[]
  31. #for i in sorted(mydata,reverse=True):
  32. # ccdf =
  33. #fig=results.plot_pdf(color='b', linewidth=2)
  34. carlosplt.pre_paper_plot(True)
  35. fig = results.plot_ccdf(color = 'darkblue', linestyle='-', label='data')
  36. results.power_law.plot_ccdf(color = 'darkgreen', ax=fig, label='power-law fit')
  37. #results.truncated_power_law.plot_ccdf(color = 'red', ax=fig)
  38. #results.lognormal_positive.plot_ccdf(color = 'yellow', ax=fig)
  39. #results.lognormal.plot_ccdf(color = 'brown', ax=fig)
  40. #results.exponential.plot_ccdf(color = 'orange', ax=fig)
  41. plt.ylabel('ccdf')
  42. plt.xlabel('Vulnerabilities')
  43. fig.legend()
  44. carlosplt.post_paper_plot(True,True,True)
  45. plt.show()
  46. R, p=results.distribution_compare('power_law','exponential')
  47. print('Exponential: ',R,p)
  48. R, p=results.distribution_compare('power_law','stretched_exponential')
  49. print('Stretched exponential: ',R,p)
  50. R, p=results.distribution_compare('power_law','truncated_power_law')
  51. print('Power law truncated: ',R,p)
  52. R, p=results.distribution_compare('power_law','lognormal_positive')
  53. print('Lognormal positive: ',R,p)
  54. R, p=results.distribution_compare('power_law','lognormal')
  55. print('Lognormal: ',R,p)