Numpy攻略:发现幂律

幂律分布:用于描述财富的不均匀性,即富翁的精英所占的都很少。
具体步骤:
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()

你可能感兴趣的:(python学习)