Skip to content

Instantly share code, notes, and snippets.

@memonkey01
Created April 6, 2019 02:33
Show Gist options
  • Select an option

  • Save memonkey01/1a2e0299b663c2ea004dd1702863438c to your computer and use it in GitHub Desktop.

Select an option

Save memonkey01/1a2e0299b663c2ea004dd1702863438c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PCA - Replicando el Dow Jones\n",
"## Analisis de componentes principales"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Autor: Guillermo Izquierdo \n",
"Este código es para fines educativos exclusivamente "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En estadística, el análisis de componentes principales (en español ACP, en inglés, PCA) es una técnica utilizada para describir un conjunto de datos en términos de nuevas variables (\"componentes\") no correlacionadas. Los componentes se ordenan por la cantidad de varianza original que describen, por lo que la técnica es útil para reducir la dimensionalidad de un conjunto de datos.\n",
"\n",
"Técnicamente, el ACP busca la proyección según la cual los datos queden mejor representados en términos de mínimos cuadrados. Esta convierte un conjunto de observaciones de variables posiblemente correlacionadas en un conjunto de valores de variables sin correlación lineal llamadas componentes principales.\n",
"\n",
"El ACP se emplea sobre todo en análisis exploratorio de datos y para construir modelos predictivos. El ACP comporta el cálculo de la descomposición en autovalores de la matriz de covarianza, normalmente tras centrar los datos en la media de cada atributo.\n",
"\n",
"Debe diferenciarse del análisis factorial con el que tiene similaridades formales y en el cual puede ser utilizado como un método de aproximación para la extracción de factores."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"from pandas_datareader import data as pdr\n",
"import numpy as np\n",
"import datetime as date"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"tickers = ['^DJI','JNJ','WMT','KO','DIS','PG','PFE','HD','UTX','VZ','MRK','MCD','WBA','CVX','BA','AAPL','MMM','NKE',\n",
" 'UNH','INTC','XOM','IBM','CAT','DWDP','V','CSCO','JPM','GS','TRV','MSFT','AXP']\n",
"\n",
"enddate = date.datetime(2019,11,1)\n",
"startdate = date.datetime(2016,1,1)\n",
"\n",
"data = pd.DataFrame()\n",
"for tick in tickers:\n",
" data[tick] = pdr.get_data_yahoo(tick, start = startdate, end = enddate)['Close']\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ^DJI JNJ WMT KO DIS \\\n",
"Date \n",
"2016-01-04 17148.939453 100.480003 61.459999 42.400002 102.980003 \n",
"2016-01-05 17158.660156 100.900002 62.919998 42.549999 100.900002 \n",
"2016-01-06 16906.509766 100.389999 63.549999 42.320000 100.360001 \n",
"2016-01-07 16514.099609 99.220001 65.029999 41.619999 99.500000 \n",
"2016-01-08 16346.450195 98.160004 63.540001 41.509998 99.250000 \n",
"\n",
" PG PFE HD UTX VZ ... \\\n",
"Date ... \n",
"2016-01-04 78.370003 31.950001 131.070007 95.570000 45.869999 ... \n",
"2016-01-05 78.620003 32.180000 130.429993 95.720001 46.500000 ... \n",
"2016-01-06 77.860001 31.610001 129.080002 93.120003 45.520000 ... \n",
"2016-01-07 77.180000 31.400000 125.400002 91.900002 45.270000 ... \n",
"2016-01-08 75.970001 31.000000 123.900002 90.400002 44.830002 ... \n",
"\n",
" IBM CAT DWDP V CSCO JPM \\\n",
"Date \n",
"2016-01-04 135.949997 67.989998 49.930000 75.699997 26.410000 63.619999 \n",
"2016-01-05 135.850006 67.279999 49.549999 76.269997 26.290001 63.730000 \n",
"2016-01-06 135.169998 66.220001 48.459999 75.269997 26.010000 62.810001 \n",
"2016-01-07 132.860001 63.939999 46.639999 73.790001 25.410000 60.270000 \n",
"2016-01-08 131.630005 63.290001 46.279999 72.879997 24.780001 58.919998 \n",
"\n",
" GS TRV MSFT AXP \n",
"Date \n",
"2016-01-04 177.139999 109.970001 54.799999 67.589996 \n",
"2016-01-05 174.089996 110.470001 55.049999 66.550003 \n",
"2016-01-06 169.839996 109.040001 54.049999 64.419998 \n",
"2016-01-07 164.619995 106.440002 52.169998 63.840000 \n",
"2016-01-08 163.940002 105.989998 52.330002 63.630001 \n",
"\n",
"[5 rows x 31 columns]\n"
]
}
],
"source": [
"print(data.head())"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" JNJ WMT KO DIS PG \\\n",
"Date \n",
"2016-01-04 100.480003 61.459999 42.400002 102.980003 78.370003 \n",
"2016-01-05 100.900002 62.919998 42.549999 100.900002 78.620003 \n",
"2016-01-06 100.389999 63.549999 42.320000 100.360001 77.860001 \n",
"2016-01-07 99.220001 65.029999 41.619999 99.500000 77.180000 \n",
"2016-01-08 98.160004 63.540001 41.509998 99.250000 75.970001 \n",
"\n",
" PFE HD UTX VZ MRK ... \\\n",
"Date ... \n",
"2016-01-04 31.950001 131.070007 95.570000 45.869999 52.480000 ... \n",
"2016-01-05 32.180000 130.429993 95.720001 46.500000 53.150002 ... \n",
"2016-01-06 31.610001 129.080002 93.120003 45.520000 52.419998 ... \n",
"2016-01-07 31.400000 125.400002 91.900002 45.270000 51.959999 ... \n",
"2016-01-08 31.000000 123.900002 90.400002 44.830002 51.080002 ... \n",
"\n",
" IBM CAT DWDP V CSCO JPM \\\n",
"Date \n",
"2016-01-04 135.949997 67.989998 49.930000 75.699997 26.410000 63.619999 \n",
"2016-01-05 135.850006 67.279999 49.549999 76.269997 26.290001 63.730000 \n",
"2016-01-06 135.169998 66.220001 48.459999 75.269997 26.010000 62.810001 \n",
"2016-01-07 132.860001 63.939999 46.639999 73.790001 25.410000 60.270000 \n",
"2016-01-08 131.630005 63.290001 46.279999 72.879997 24.780001 58.919998 \n",
"\n",
" GS TRV MSFT AXP \n",
"Date \n",
"2016-01-04 177.139999 109.970001 54.799999 67.589996 \n",
"2016-01-05 174.089996 110.470001 55.049999 66.550003 \n",
"2016-01-06 169.839996 109.040001 54.049999 64.419998 \n",
"2016-01-07 164.619995 106.440002 52.169998 63.840000 \n",
"2016-01-08 163.940002 105.989998 52.330002 63.630001 \n",
"\n",
"[5 rows x 30 columns]\n"
]
}
],
"source": [
"dji = pd.DataFrame(data.pop('^DJI'))\n",
"print(data.head())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" JNJ WMT KO DIS PG PFE \\\n",
"Date \n",
"2016-01-04 -2.207090 -1.651418 -1.024570 -0.177897 -1.314746 -0.928036 \n",
"2016-01-05 -2.170048 -1.525128 -0.950779 -0.486168 -1.267351 -0.867616 \n",
"2016-01-06 -2.215027 -1.470633 -1.063926 -0.566201 -1.411434 -1.017352 \n",
"2016-01-07 -2.318214 -1.342614 -1.408289 -0.693659 -1.540350 -1.072519 \n",
"2016-01-08 -2.411699 -1.471498 -1.462403 -0.730711 -1.769746 -1.177597 \n",
"\n",
" HD UTX VZ MRK ... IBM \\\n",
"Date ... \n",
"2016-01-04 -1.037887 -1.576620 -1.387128 -1.456222 ... -0.995113 \n",
"2016-01-05 -1.062302 -1.564745 -1.206041 -1.348584 ... -1.002137 \n",
"2016-01-06 -1.113801 -1.770590 -1.487732 -1.465862 ... -1.049908 \n",
"2016-01-07 -1.254183 -1.867180 -1.559592 -1.539763 ... -1.212188 \n",
"2016-01-08 -1.311404 -1.985937 -1.686065 -1.681138 ... -1.298596 \n",
"\n",
" CAT DWDP V CSCO JPM GS \\\n",
"Date \n",
"2016-01-04 -1.470666 -1.359375 -1.140246 -1.320966 -1.334517 -0.923029 \n",
"2016-01-05 -1.494247 -1.407173 -1.116722 -1.338359 -1.328873 -1.005359 \n",
"2016-01-06 -1.529452 -1.544277 -1.157992 -1.378941 -1.376073 -1.120083 \n",
"2016-01-07 -1.605178 -1.773203 -1.219072 -1.465903 -1.506388 -1.260990 \n",
"2016-01-08 -1.626766 -1.818485 -1.256627 -1.557213 -1.575649 -1.279345 \n",
"\n",
" TRV MSFT AXP \n",
"Date \n",
"2016-01-04 -1.432633 -1.079536 -0.968762 \n",
"2016-01-05 -1.378234 -1.067135 -1.032557 \n",
"2016-01-06 -1.533815 -1.116740 -1.163216 \n",
"2016-01-07 -1.816688 -1.209997 -1.198794 \n",
"2016-01-08 -1.865647 -1.202060 -1.211676 \n",
"\n",
"[5 rows x 30 columns]\n"
]
}
],
"source": [
"normalize = lambda x: (x-x.mean())/x.std()\n",
"a=data.apply(normalize)\n",
"print(a.head())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.decomposition import KernelPCA\n",
"pca = KernelPCA().fit(a)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"422\n"
]
}
],
"source": [
"print(len(pca.lambdas_))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[14795.849 2613.479 1955.464 1108.871 857.244]\n"
]
}
],
"source": [
"print(pca.lambdas_[:5].round(3))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.64301823 0.11358013 0.08498322 0.04819082 0.03725528]\n"
]
}
],
"source": [
"recompose = lambda x: x/x.sum()\n",
"print(recompose(pca.lambdas_)[:5])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pca = KernelPCA(n_components = 1).fit(data.apply(normalize))\n",
"dji['PCA_1'] = pca.transform(-data)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"dji.apply(normalize).plot()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ^DJI PCA_1\n",
"Date \n",
"2016-01-04 17148.939453 390.770622\n",
"2016-01-05 17158.660156 390.832219\n",
"2016-01-06 16906.509766 384.531322\n",
"2016-01-07 16514.099609 374.238852\n",
"2016-01-08 16346.450195 370.496940\n"
]
}
],
"source": [
"print(dji.head())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment