Numpy攻略:發現冪律
阿新 • • 發佈:2018-12-05
冪律分佈:用於描述財富的不均勻性,即富翁的精英所佔的都很少。
具體步驟:
1.提取正的收益率資料:計算收盤價的對數並且對結果進行差分運算,之後從收益率資料中,選出正值。
2.獲取收益率的收益頻率:使用histogram函式,獲得收益率的出現頻率。分組計算,並返回一個包含各組計數值的陣列。
3.利用頻數值和收益率資料擬合直線:使用ployfit擬合直線
4.使用Matplotlib繪製出結果資料和擬合後的曲線
完整程式碼如下:
import numpy import fix_yahoo_finance as yf yf.pdr_override() import pandas_datareader as web from datetime import date import sys import matplotlib.pyplot #1.獲取收盤價資料 if len(sys.argv)!=3: print("Usage Python %s SYMBOL k"%(sys.argv[0]) ) print("For instance python %s AAPL 1"%(sys.argv[0])) sys.exit() #datetimie:日期時間函式 today=date.today() start=(today.year-1,today.month,today.day) quotes=web.get_data_yahoo(sys.argv[1],start,today) close=[q[4] for q in quotes] #提取正的收益率資料(用對數) logreturns=numpy.diff(numpy.log(close)) pos=logreturns[longreturns>0] #3.獲得收益出現的頻率 counts,rets=numpy.histogram(pos) rets=rets[:-1]+(rets[1]-rets[0])/2 freqs=1.0/(counts+0.01) freqs=numpy.log(freqs) #4.利用頻率值和收益率資料擬合直線 p=numpy.polyfit(rets,freqs,1) #5.圖示結果 matplotlib.pyplot.plot(rets.freqs,'o') matplotlib.pyplot.plot(rets,p[0]*rets+p[1]) matplotlib.pyplot.show()