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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值