Python金融大資料分析-PCA分析

來源:互聯網
上載者:User
1.pandas的一個技巧

    apply() 和applymap()是DataFrame資料類型的函數,map()是Series資料類型的函數。apply()的操作對象DataFrame的一列或者一行資料, applymap()是element-wise的,作用於每個DataFrame的每個資料。 map()也是element-wise的,對Series中的每個資料調用一次函數。 2.PCA分解德國DAX30指數

    DAX30指數有三十個股票,聽起來不多的樣子,其實還是挺多的,我們很有必要對其進行主成分分析,然後找出最重要的幾個股票。想必PCA的原理大家應該都是知道,說白了就是在一個迴歸中找到影響最大的那幾個,當然,數學原理就涉及矩陣分解,什麼SVD呀。

    先上點代碼

import pandas as pdimport pandas.io.data as webimport numpy as npnp.random.seed(1000)import scipy.stats as scsimport statsmodels.api as smimport matplotlib as mplimport matplotlib.pyplot as pltfrom 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指數的貢獻量了。

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的效果。

plt.figure(figsize = (8,4))plt.scatter(dax['PCA_5'],dax['^GDAXI'],color = 'r')
    這裡,我們把PCA後的值與原始值進行散佈圖的繪製,



    我們看到,整體效果還是不錯的,但是很顯然,兩邊和中間總是有點問題,所以,如果我們要提高,我們可以在中間分段進行PCA,這樣的話,效果應該會更加好。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.