前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python金融大数据分析-PCA分析

Python金融大数据分析-PCA分析

作者头像
钱塘小甲子
发布2019-01-28 15:24:02
1.5K0
发布2019-01-28 15:24:02
举报

1.pandas的一个技巧

    apply() 和applymap()是DataFrame数据类型的函数,map()是Series数据类型的函数。apply()的操作对象DataFrame的一列或者一行数据, applymap()是element-wise的,作用于每个DataFrame的每个数据。 map()也是element-wise的,对Series中的每个数据调用一次函数。​

2.PCA分解德国DAX30指数

    DAX30指数有三十个股票,听起来不多的样子,其实还是挺多的,我们很有必要对其进行主成分分析,然后找出最重要的几个股票。想必PCA的原理大家应该都是知道,说白了就是在一个回归中找到影响最大的那几个,当然,数学原理就涉及矩阵分解,什么SVD呀。

    先上点代码

代码语言:javascript
复制
import pandas as pd
import pandas.io.data as web
import numpy as np
np.random.seed(1000)
import scipy.stats as scs
import statsmodels.api as sm
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.decomposition import KernelPCA#导入机器学习的PCA包
symbols = ['ADS.DE','ALV.DE','BAS.DE','BAYN.DE','BEI.DE','BMW.DE','CBK.DE','CON.DE','DAI.DE',
            'DB1.DE','DBK.DE','DPW.DE','DTE.DE','EOAN.DE','FME.DE','FRE.DE','HEI.DE','HEN3.DE',
            'IFX.DE','LHA.DE','LIN.DE','LXS.DE','MRK.DE','MUV2.DE','RWE.DE','SAP.DE','SDF.DE',
            'SIE.DE','TKA.DE','VOW3.DE','^GDAXI']#DAX30指数各个股票的代码以及德国30指数代码,共31个数据列
data = pd.DataFrame()
for sym in symbols:#获取数据
    data[sym] = web.DataReader(sym,data_source = 'yahoo')['Close']
data = data.dropna()#丢弃缺失数据
dax = pd.DataFrame(data.pop('^GDAXI'))#将指数数据单独拿出来,采用pop在获取的时候已经从原来的地方删除了这一列数据了
scale_function = lambda x:(x-x.mean())/x.std()

pca = KernelPCA().fit(data.apply(scale_function))#这里用到了apply函数。做PCA前,我们要对数据做标准化
get_we = lambda x:x/x.sum()
print get_we(pca.lambdas_)[:10]

    这样,你就可以看到前十个股票对DAX30指数的贡献量了。

代码语言:javascript
复制
pca = KernelPCA(n_components = 1).fit(data.apply(scale_function))
dax['PCA_1'] =pca.transform(data)
dax.apply(scale_function).plot(figsize = (8,4))

pca = KernelPCA(n_components = 5).fit(data.apply(scale_function))

weights = get_we(pca.lambdas_)
dax['PCA_5'] =np.dot(pca.transform(data),weights)

    这里,我们采用只用第一个成分去拟合以及前五个成分去拟合,发现效果好的出奇。这样我们就做到了降维的工作了。我们再来展开看一下PCA的效果。

代码语言:javascript
复制
plt.figure(figsize = (8,4))
plt.scatter(dax['PCA_5'],dax['^GDAXI'],color = 'r')

    这里,我们把PCA后的值与原始值进行散点图的绘制,

    我们看到,整体效果还是不错的,但是很显然,两边和中间总是有点问题,所以,如果我们要提高,我们可以在中间分段进行PCA,这样的话,效果应该会更加好。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.pandas的一个技巧
  • 2.PCA分解德国DAX30指数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档