{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# PCA (Principal Component Analysis)\n", "\n", "This notebook shows how to plot a PCA with sciki-learn and statsmodels, with or without normalization."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["import matplotlib.pyplot as plt\n", "plt.style.use('ggplot')"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", ""], "text/plain": [""]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["More about [PCA](https://en.wikipedia.org/wiki/Principal_component_analysis): [Implementing a Principal Component Analysis (PCA) in Python step by step](http://sebastianraschka.com/Articles/2014_pca_step_by_step.html)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Download data"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["'auto-mpg.data'"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["import pyensae.datasource\n", "pyensae.datasource.download_data(\"auto-mpg.data\", url=\"https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/\")"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " | \n", " mpg | \n", " cylinders | \n", " displacement | \n", " horsepower | \n", " weight | \n", " acceleration | \n", " year | \n", " origin | \n", " name | \n", "
\n", " \n", " \n", " \n", " 0 | \n", " 18.0 | \n", " 8 | \n", " 307.0 | \n", " 130.0 | \n", " 3504.0 | \n", " 12.0 | \n", " 70 | \n", " 1 | \n", " chevrolet chevelle malibu | \n", "
\n", " \n", " 1 | \n", " 15.0 | \n", " 8 | \n", " 350.0 | \n", " 165.0 | \n", " 3693.0 | \n", " 11.5 | \n", " 70 | \n", " 1 | \n", " buick skylark 320 | \n", "
\n", " \n", " 2 | \n", " 18.0 | \n", " 8 | \n", " 318.0 | \n", " 150.0 | \n", " 3436.0 | \n", " 11.0 | \n", " 70 | \n", " 1 | \n", " plymouth satellite | \n", "
\n", " \n", " 3 | \n", " 16.0 | \n", " 8 | \n", " 304.0 | \n", " 150.0 | \n", " 3433.0 | \n", " 12.0 | \n", " 70 | \n", " 1 | \n", " amc rebel sst | \n", "
\n", " \n", " 4 | \n", " 17.0 | \n", " 8 | \n", " 302.0 | \n", " 140.0 | \n", " 3449.0 | \n", " 10.5 | \n", " 70 | \n", " 1 | \n", " ford torino | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" mpg cylinders displacement horsepower weight acceleration year \\\n", "0 18.0 8 307.0 130.0 3504.0 12.0 70 \n", "1 15.0 8 350.0 165.0 3693.0 11.5 70 \n", "2 18.0 8 318.0 150.0 3436.0 11.0 70 \n", "3 16.0 8 304.0 150.0 3433.0 12.0 70 \n", "4 17.0 8 302.0 140.0 3449.0 10.5 70 \n", "\n", " origin name \n", "0 1 chevrolet chevelle malibu \n", "1 1 buick skylark 320 \n", "2 1 plymouth satellite \n", "3 1 amc rebel sst \n", "4 1 ford torino "]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "df = pandas.read_fwf(\"auto-mpg.data\", encoding=\"utf-8\",\n", " names=\"mpg cylinders displacement horsepower weight acceleration year origin name\".split())\n", "df[\"name\"] = df[\"name\"].apply(lambda s : s.strip(' \"'))\n", "df.head()"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["mpg float64\n", "cylinders int64\n", "displacement float64\n", "horsepower object\n", "weight float64\n", "acceleration float64\n", "year int64\n", "origin int64\n", "name object\n", "dtype: object"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["df.dtypes"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We remove missing values:"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " | \n", " mpg | \n", " cylinders | \n", " displacement | \n", " horsepower | \n", " weight | \n", " acceleration | \n", " year | \n", " origin | \n", " name | \n", "
\n", " \n", " \n", " \n", " 32 | \n", " 25.0 | \n", " 4 | \n", " 98.0 | \n", " ? | \n", " 2046.0 | \n", " 19.0 | \n", " 71 | \n", " 1 | \n", " ford pinto | \n", "
\n", " \n", " 126 | \n", " 21.0 | \n", " 6 | \n", " 200.0 | \n", " ? | \n", " 2875.0 | \n", " 17.0 | \n", " 74 | \n", " 1 | \n", " ford maverick | \n", "
\n", " \n", " 330 | \n", " 40.9 | \n", " 4 | \n", " 85.0 | \n", " ? | \n", " 1835.0 | \n", " 17.3 | \n", " 80 | \n", " 2 | \n", " renault lecar deluxe | \n", "
\n", " \n", " 336 | \n", " 23.6 | \n", " 4 | \n", " 140.0 | \n", " ? | \n", " 2905.0 | \n", " 14.3 | \n", " 80 | \n", " 1 | \n", " ford mustang cobra | \n", "
\n", " \n", " 354 | \n", " 34.5 | \n", " 4 | \n", " 100.0 | \n", " ? | \n", " 2320.0 | \n", " 15.8 | \n", " 81 | \n", " 2 | \n", " renault 18i | \n", "
\n", " \n", " 374 | \n", " 23.0 | \n", " 4 | \n", " 151.0 | \n", " ? | \n", " 3035.0 | \n", " 20.5 | \n", " 82 | \n", " 1 | \n", " amc concord dl | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" mpg cylinders displacement horsepower weight acceleration year \\\n", "32 25.0 4 98.0 ? 2046.0 19.0 71 \n", "126 21.0 6 200.0 ? 2875.0 17.0 74 \n", "330 40.9 4 85.0 ? 1835.0 17.3 80 \n", "336 23.6 4 140.0 ? 2905.0 14.3 80 \n", "354 34.5 4 100.0 ? 2320.0 15.8 81 \n", "374 23.0 4 151.0 ? 3035.0 20.5 82 \n", "\n", " origin name \n", "32 1 ford pinto \n", "126 1 ford maverick \n", "330 2 renault lecar deluxe \n", "336 1 ford mustang cobra \n", "354 2 renault 18i \n", "374 1 amc concord dl "]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["df[df.horsepower == \"?\"]"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": ["final = df[df.horsepower != '?'].copy()\n", "final[\"horsepower\"] = final[\"horsepower\"].astype(float)"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": ["final.to_csv(\"auto-mpg.data.csv\", sep=\"\\t\", index=False, encoding=\"utf-8\")"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["(392, 9)"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["final.shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## PCA with scikit-learn"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,\n", " svd_solver='auto', tol=0.0, whiten=False)"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.decomposition import PCA\n", "X = final[df.columns[1:-1]]\n", "Y = final[\"mpg\"]\n", "pca = PCA(n_components=2)\n", "pca.fit(X)"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[536.44492922, 50.83312832],\n", " [730.34140206, 79.13543921],\n", " [470.9815846 , 75.4476722 ],\n", " [466.40143367, 62.53420646],\n", " [481.66788465, 55.78036021]])"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["out = pca.transform(X)\n", "out[:5]"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["(array([0.99756151, 0.0020628 ]), 55.14787750463889)"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["pca.explained_variance_ratio_, pca.noise_variance_"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["