前言:本篇用奇异值分解的方式分析一下申万行指。
首先还是导入数据
# 设置申万一级行业指数
shenwan_code="801010.SWI,801020.SWI,801030.SWI,801040.SWI,801050.SWI,801080.SWI,801110.SWI,801120.SWI,801130.SWI,801140.SWI,801150.SWI,801160.SWI,801170.SWI,801180.SWI,801200.SWI,801210.SWI,801230.SWI,801710.SWI,801720.SWI,801730.SWI,801740.SWI,801750.SWI,801760.SWI,801770.SWI,801780.SWI,801790.SWI,801880.SWI,801890.SWI,851231.SWI,000016.SH,000300.SH,000905.SH,000852.SH"
# 设置时间,从2015年到今日
today=datetime.date.today()
today.strftime("%Y-%m-%d")
start_date='2015-01-01'
end_date=today.strftime("%Y-%m-%d")
# 获取数据
shenwan=c.csd(shenwan_code,"CLOSE",start_date,end_date,"period=1,adjustflag=1,curtype=1,order=1,market=CNSESH")
# 简单的数据处理
d1=shenwan.Data
name=c.css(shenwan_code,"CODE,NAME","")
name=pd.DataFrame(name.Data)
for i in d1.keys():
d1[i]=d1[i][0]
d1=pd.DataFrame(d1)
d1.columns=name.loc[1]
d1.index=shenwan.Dates
d1=d1.dropna()
现在我们就得到了如图所示的数据
接着进行svd分析。
# 准备数据
x = d1.values
# 模型构建
from sklearn.decomposition import TruncatedSVD
drx = TruncatedSVD(3)
#拟合模型
drx.fit(x)
import numpy as np
# 这一步是发现设置使用小数表示,而不是用科学计数法表示
np.set_printoptions(suppress=True)
# 输出可解释的方差占比
print('\npca',drx.explained_variance_ratio_)
结果展示为:
svd分析可见,28个变量中,两个种主成分的方差占到了99.9%。