From fffb6db65a21207227dc7ead59257d9d56c154dc Mon Sep 17 00:00:00 2001 From: Manuel Castillo Date: Thu, 2 Jul 2020 21:03:39 -0500 Subject: [PATCH 01/12] Avances del curso (20/Julio/2020) --- ...4 - Linear Regression - SciKit-Learn.ipynb | 42 +- scratch/T1 - 1 -Titanic.ipynb | 1011 +++++++++++ ...- 2 - Data Cleaning - Carga de datos.ipynb | 594 +++++++ scratch/T1 - 3 - Data Cleaning - Plots.ipynb | 403 +++++ ...- 1 - Data Cleaning - Data Wrangling.ipynb | 958 ++++++++++ ...distribuci\303\263n de probabilidad.ipynb" | 569 ++++++ ...eaning - Agrupaci\303\263n de datos.ipynb" | 1049 +++++++++++ ...ta Cleaning - Concatenacion de datos.ipynb | 1555 +++++++++++++++++ .../T3 - 1 - Statistics - Correlacion.ipynb | 335 ++++ ... Linear Regression - Datos ficticios.ipynb | 633 +++++++ ...Regression - Regresion lineal simple.ipynb | 833 +++++++++ ...r Regression - Validacion del modelo.ipynb | 265 +++ ...4 - Linear Regression - SciKit-Learn.ipynb | 205 +++ ... - Problemas con la regresion lineal.ipynb | 416 +++++ 14 files changed, 8847 insertions(+), 21 deletions(-) create mode 100644 scratch/T1 - 1 -Titanic.ipynb create mode 100644 scratch/T1 - 2 - Data Cleaning - Carga de datos.ipynb create mode 100644 scratch/T1 - 3 - Data Cleaning - Plots.ipynb create mode 100644 scratch/T2 - 1 - Data Cleaning - Data Wrangling.ipynb create mode 100644 "scratch/T2 - 2 - Data Cleaning - Funciones de distribuci\303\263n de probabilidad.ipynb" create mode 100644 "scratch/T2 - 3 - Data Cleaning - Agrupaci\303\263n de datos.ipynb" create mode 100644 scratch/T2 - 4 - Data Cleaning - Concatenacion de datos.ipynb create mode 100644 scratch/T3 - 1 - Statistics - Correlacion.ipynb create mode 100644 scratch/T4 - 1 - Linear Regression - Datos ficticios.ipynb create mode 100644 scratch/T4 - 2 - Linear Regression - Regresion lineal simple.ipynb create mode 100644 scratch/T4 - 3 - Linear Regression - Validacion del modelo.ipynb create mode 100644 scratch/T4 - 4 - Linear Regression - SciKit-Learn.ipynb create mode 100644 scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb diff --git a/notebooks/T4 - 4 - Linear Regression - SciKit-Learn.ipynb b/notebooks/T4 - 4 - Linear Regression - SciKit-Learn.ipynb index f6752dbd..e5b58edb 100644 --- a/notebooks/T4 - 4 - Linear Regression - SciKit-Learn.ipynb +++ b/notebooks/T4 - 4 - Linear Regression - SciKit-Learn.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -70,7 +70,7 @@ "array([ True, True, False])" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -81,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -90,7 +90,7 @@ "array([1, 1, 2])" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -119,16 +119,16 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" ] }, - "execution_count": 20, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -140,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -149,7 +149,7 @@ "2.9210999124051362" ] }, - "execution_count": 21, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -160,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -169,7 +169,7 @@ "array([0.04575482, 0.18799423])" ] }, - "execution_count": 22, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -180,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -189,7 +189,7 @@ "0.8971942610828956" ] }, - "execution_count": 23, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -222,7 +222,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/scratch/T1 - 1 -Titanic.ipynb b/scratch/T1 - 1 -Titanic.ipynb new file mode 100644 index 00000000..73ada0d6 --- /dev/null +++ b/scratch/T1 - 1 -Titanic.ipynb @@ -0,0 +1,1011 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Carga de datos a través de la función read_csv" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%config IPCompleter.greedy=True" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "mainpath = \"/Users/nuelcodes/Developer/Python Scripts/datasets\"\n", + "filename = \"titanic/titanic3.csv\"\n", + "fullpath = os.path.join(mainpath, filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(fullpath)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale29.00000024160211.3375B5S2NaNSt Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.5500C22 C26S11NaNMontreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale2.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale30.000012113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
\n", + "
" + ], + "text/plain": [ + " pclass survived name sex \\\n", + "0 1 1 Allen, Miss. Elisabeth Walton female \n", + "1 1 1 Allison, Master. Hudson Trevor male \n", + "2 1 0 Allison, Miss. Helen Loraine female \n", + "3 1 0 Allison, Mr. Hudson Joshua Creighton male \n", + "4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female \n", + "\n", + " age sibsp parch ticket fare cabin embarked boat body \\\n", + "0 29.0000 0 0 24160 211.3375 B5 S 2 NaN \n", + "1 0.9167 1 2 113781 151.5500 C22 C26 S 11 NaN \n", + "2 2.0000 1 2 113781 151.5500 C22 C26 S NaN NaN \n", + "3 30.0000 1 2 113781 151.5500 C22 C26 S NaN 135.0 \n", + "4 25.0000 1 2 113781 151.5500 C22 C26 S NaN NaN \n", + "\n", + " home.dest \n", + "0 St Louis, MO \n", + "1 Montreal, PQ / Chesterville, ON \n", + "2 Montreal, PQ / Chesterville, ON \n", + "3 Montreal, PQ / Chesterville, ON \n", + "4 Montreal, PQ / Chesterville, ON " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ejemplos de los parámetros de la función read_csv\n", + "read.csv(filepath=\"\\User/nuelcodes/Developer/Python Scripts/datasets/titianic/titanic3.csv\", sep=\",\",dtype={\"ingresos\":np.float64,\"edad\":np.int32},header=0,name={\"ingresos\",\"edad\"},skiprows=12,index_col=None,skip_blank_lines=False,na_filter=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "data2 = pd.read_csv(mainpath + \"/\" + \"customer-churn-model/Customer Churn Model.txt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ABCDEFGHIJ...LMNOPQRSTU
0StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
1KS128415382-4657noyes25265.10000011045.070000...9916.780000244.7000009111.01000010.00000032.7000001False.
2OH107415371-7191noyes26161.60000012327.470000...10316.620000254.40000010311.45000013.70000033.7000001False.
3NJ137415358-1921nono0243.40000011441.380000...11010.300000162.6000001047.32000012.20000053.2900000False.
4OH84408375-9999yesno0299.4000007150.900000...885.260000196.900000898.8600006.60000071.7800002False.
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " A B C D E F \\\n", + "0 State Account Length Area Code Phone Int'l Plan VMail Plan \n", + "1 KS 128 415 382-4657 no yes \n", + "2 OH 107 415 371-7191 no yes \n", + "3 NJ 137 415 358-1921 no no \n", + "4 OH 84 408 375-9999 yes no \n", + "\n", + " G H I J ... L \\\n", + "0 VMail Message Day Mins Day Calls Day Charge ... Eve Calls \n", + "1 25 265.100000 110 45.070000 ... 99 \n", + "2 26 161.600000 123 27.470000 ... 103 \n", + "3 0 243.400000 114 41.380000 ... 110 \n", + "4 0 299.400000 71 50.900000 ... 88 \n", + "\n", + " M N O P Q R \\\n", + "0 Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls \n", + "1 16.780000 244.700000 91 11.010000 10.000000 3 \n", + "2 16.620000 254.400000 103 11.450000 13.700000 3 \n", + "3 10.300000 162.600000 104 7.320000 12.200000 5 \n", + "4 5.260000 196.900000 89 8.860000 6.600000 7 \n", + "\n", + " S T U \n", + "0 Intl Charge CustServ Calls Churn? \n", + "1 2.700000 1 False. \n", + "2 3.700000 1 False. \n", + "3 3.290000 0 False. \n", + "4 1.780000 2 False. \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['State', 'Account Length', 'Area Code', 'Phone', \"Int'l Plan\",\n", + " 'VMail Plan', 'VMail Message', 'Day Mins', 'Day Calls',\n", + " 'Day Charge', 'Eve Mins', 'Eve Calls', 'Eve Charge', 'Night Mins',\n", + " 'Night Calls', 'Night Charge', 'Intl Mins', 'Intl Calls',\n", + " 'Intl Charge', 'CustServ Calls', 'Churn?'], dtype=object)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2.columns.values" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n", + " 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U'], dtype=object)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_cols = pd.read_csv(mainpath + \"/\" + \"customer-churn-model/Customer Churn Columns.csv\")\n", + "data_col_list = data_cols[\"Column_Names\"].tolist()\n", + "data2 = pd.read_csv(mainpath + \"/\" + \"customer-churn-model/Customer Churn Model.txt\", header = None, names = data_col_list)\n", + "data2.columns.values" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "data3 = open(mainpath + \"/\" + \"customer-churn-model/Customer Churn Model.txt\", \"r\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "cols = data3.readline().strip().split(\",\")\n", + "n_cols = len(cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "counter = 0\n", + "main_dict = {}\n", + "for col in cols:\n", + " main_dict[col] = []" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "El data set tiene 3333 filas y 21 columnas\n" + ] + } + ], + "source": [ + "for line in data3:\n", + " values = line.strip().split(\",\")\n", + " for i in range(len(cols)):\n", + " main_dict[cols[i]].append(values[i])\n", + " counter += 1\n", + "\n", + "print(\"El data set tiene %d filas y %d columnas\"%(counter, n_cols))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS128415382-4657noyes25265.10000011045.070000...9916.780000244.7000009111.01000010.00000032.7000001False.
1OH107415371-7191noyes26161.60000012327.470000...10316.620000254.40000010311.45000013.70000033.7000001False.
2NJ137415358-1921nono0243.40000011441.380000...11010.300000162.6000001047.32000012.20000053.2900000False.
3OH84408375-9999yesno0299.4000007150.900000...885.260000196.900000898.8600006.60000071.7800002False.
4OK75415330-6626yesno0166.70000011328.340000...12212.610000186.9000001218.41000010.10000032.7300003False.
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n", + "0 KS 128 415 382-4657 no yes \n", + "1 OH 107 415 371-7191 no yes \n", + "2 NJ 137 415 358-1921 no no \n", + "3 OH 84 408 375-9999 yes no \n", + "4 OK 75 415 330-6626 yes no \n", + "\n", + " VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge \\\n", + "0 25 265.100000 110 45.070000 ... 99 16.780000 \n", + "1 26 161.600000 123 27.470000 ... 103 16.620000 \n", + "2 0 243.400000 114 41.380000 ... 110 10.300000 \n", + "3 0 299.400000 71 50.900000 ... 88 5.260000 \n", + "4 0 166.700000 113 28.340000 ... 122 12.610000 \n", + "\n", + " Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n", + "0 244.700000 91 11.010000 10.000000 3 2.700000 \n", + "1 254.400000 103 11.450000 13.700000 3 3.700000 \n", + "2 162.600000 104 7.320000 12.200000 5 3.290000 \n", + "3 196.900000 89 8.860000 6.600000 7 1.780000 \n", + "4 186.900000 121 8.410000 10.100000 3 2.730000 \n", + "\n", + " CustServ Calls Churn? \n", + "0 1 False. \n", + "1 1 False. \n", + "2 0 False. \n", + "3 2 False. \n", + "4 3 False. \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = pd.DataFrame(main_dict)\n", + "df3.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "with open(infile, \"r\") as infile1:\n", + " with open(outfile, \"w\") as outfile1:\n", + " for line in infile1:\n", + " fields = line.strip().split(\",\")\n", + " outfile1.write(\"\\t\".join(fields))\n", + " outfile1.write(\"\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "infile = mainpath + \"/\" + \"customer-churn-model/Customer Churn Model.txt\"\n", + "outfile = mainpath + \"/\" + \"customer-churn-model/Tab Customer Churn Model.txt\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "df4 = pd.read_csv(outfile, sep = \"\\t\")\n", + "df4.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ejercicio de descarga de datos con urllib3\n", + "#### Vamos a hacer un ejemplo usando la librería urllib3 para leer los datos desde una URL externa, procesarlos y convertirlos a un data frame de python antes de guardarlos en un CSV local." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "medals_url = \"http://winterolympicsmedals.com/medals.csv\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "medals_data = pd.read_csv(medals_url)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "medals_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "def downloadFromURL(url, filename, sep = \",\", delim = \"\\n\", encoding = \"utf-8\"):\n", + "\n", + " #primero importamos la librería y hacemos la conexión con la web de los datos\n", + " import urllib3\n", + " http = urllib3.PoolManager()\n", + " r = http.request('GET',url)\n", + " print(\"El estado de la respues es %d\"%(r.status))\n", + " response = r.data\n", + "\n", + " #El objeto \"response\" contiene un string binario, así que lo convertimos a un string descodificado en UTF-8\n", + " str_data = response.decode(encoding)\n", + "\n", + " #Dividimos el string en un array de filas, separándolo por intros (\"\\n\")\n", + " lines = str_data.split(delim)\n", + "\n", + " #La primera línea contiene la cabecera, así que la extraemos\n", + " col_names = lines[0].split(sep)\n", + " n_cols = len(col_names)\n", + "\n", + " #Generamos un diccionario vacío donde irá la información procesada desde la URL externa\n", + " counter = 0\n", + " main_dict = {}\n", + " for col in col_names:\n", + " main_dict[col] = []\n", + "\n", + " #Procesamos fila a fila la información para ir rellenando el diccionario con los datos como hicimos antes\n", + " for line in lines:\n", + " #Nos saltamos la primera línea que es la que contiene la cabecera y ya tenemos procesada\n", + " if(counter > 0):\n", + " #Dividimos cada string por las comas como elemento separador\n", + " values = line.split(sep)\n", + " #Añadimos cada valor a su respectiva columna del diccionario\n", + " for i in range(len(col_names)):\n", + " main_dict[col_names[i]].append(values[i])\n", + " counter += 1\n", + "\n", + " print(\"El data set tiene %d filas y %d columnas\"%(counter,n_cols))\n", + "\n", + " #Convertimos el diccionario procesado a Data Frame y comprobamos que los datos son correctos\n", + " df = pd.DataFrame(main_dict)\n", + " print(df.head())\n", + "\n", + " #Elegimos donde guardarlos (en la carpeta athletes es donde tiene más sentido por el contexto del análisis)\n", + " mainpath = \"/Users/nuelcodes/Developer/Python Scripts/datasets\"\n", + " #filename = \"athletes/downloaded_medals2.\"\n", + " fullpath = os.path.join(mainpath,filename)\n", + "\n", + " #Lo guardamos en CSV, en JSON o en Excel según queramos\n", + " df.to_csv(fullpath+\".csv\")\n", + " df.to_json(fullpath+\".json\")\n", + " df.to_excel(fullpath+\".xls\")\n", + "\n", + " print(\"Los ficheros se han guardado correctamente en:\"+fullpath)\n", + "\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "El estado de la respues es 200\n", + "El data set tiene 2312 filas y 8 columnas\n", + " Year City Sport Discipline NOC Event Event gender \\\n", + "0 1924 Chamonix Skating Figure skating AUT individual M \n", + "1 1924 Chamonix Skating Figure skating AUT individual W \n", + "2 1924 Chamonix Skating Figure skating AUT pairs X \n", + "3 1924 Chamonix Bobsleigh Bobsleigh BEL four-man M \n", + "4 1924 Chamonix Ice Hockey Ice Hockey CAN ice hockey M \n", + "\n", + " Medal \n", + "0 Silver \n", + "1 Gold \n", + "2 Gold \n", + "3 Bronze \n", + "4 Gold \n", + "Los ficheros se han guardado correctamente en:/Users/nuelcodes/Developer/Python Scripts/datasets\\athletes/downloaded_medals3\n" + ] + } + ], + "source": [ + "downloadFromURL(medals_url,\"athletes/downloaded_medals3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ficheros XLS y XLSX" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "mainpath = \"/Users/nuelcodes/Developer/Python Scripts/datasets\"\n", + "filename = \"titanic/titanic3.xls\"" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "titanic2 = pd.read_excel(mainpath + \"/\" + filename, \"titanic3\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "titanic3 = pd.read_excel(mainpath + \"/\" + filename, \"titanic3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Crear un data frame a partir de los datos trabajados" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "titanic3.to_csv(mainpath + \"/titanic/titanic_custom.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": {}, + "outputs": [], + "source": [ + "titanic3.to_excel(mainpath + \"/titanic/titanic_custom.xls\")" + ] + } + ], + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scratch/T1 - 2 - Data Cleaning - Carga de datos.ipynb b/scratch/T1 - 2 - Data Cleaning - Carga de datos.ipynb new file mode 100644 index 00000000..5cffc436 --- /dev/null +++ b/scratch/T1 - 2 - Data Cleaning - Carga de datos.ipynb @@ -0,0 +1,594 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Resumen de los datos: dimensiones y estructuras" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "mainpath = \"/Users/nuelcodes/Data-Science-Python/datasets\"\n", + "filename = \"titanic/titanic3.csv\"\n", + "fullpath = os.path.join(mainpath, filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(fullpath)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale29.00000024160211.3375B5S2NaNSt Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.5500C22 C26S11NaNMontreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale2.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale30.000012113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
511Anderson, Mr. Harrymale48.0000001995226.5500E12S3NaNNew York, NY
611Andrews, Miss. Kornelia Theodosiafemale63.0000101350277.9583D7S10NaNHudson, NY
710Andrews, Mr. Thomas Jrmale39.0000001120500.0000A36SNaNNaNBelfast, NI
811Appleton, Mrs. Edward Dale (Charlotte Lamson)female53.0000201176951.4792C101SDNaNBayside, Queens, NY
910Artagaveytia, Mr. Ramonmale71.000000PC 1760949.5042NaNCNaN22.0Montevideo, Uruguay
1010Astor, Col. John Jacobmale47.000010PC 17757227.5250C62 C64CNaN124.0New York, NY
1111Astor, Mrs. John Jacob (Madeleine Talmadge Force)female18.000010PC 17757227.5250C62 C64C4NaNNew York, NY
1211Aubart, Mme. Leontine Paulinefemale24.000000PC 1747769.3000B35C9NaNParis, France
\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n5 1 1 Anderson, Mr. Harry \n6 1 1 Andrews, Miss. Kornelia Theodosia \n7 1 0 Andrews, Mr. Thomas Jr \n8 1 1 Appleton, Mrs. Edward Dale (Charlotte Lamson) \n9 1 0 Artagaveytia, Mr. Ramon \n10 1 0 Astor, Col. John Jacob \n11 1 1 Astor, Mrs. John Jacob (Madeleine Talmadge Force) \n12 1 1 Aubart, Mme. Leontine Pauline \n\n sex age sibsp parch ticket fare cabin embarked boat \\\n0 female 29.0000 0 0 24160 211.3375 B5 S 2 \n1 male 0.9167 1 2 113781 151.5500 C22 C26 S 11 \n2 female 2.0000 1 2 113781 151.5500 C22 C26 S NaN \n3 male 30.0000 1 2 113781 151.5500 C22 C26 S NaN \n4 female 25.0000 1 2 113781 151.5500 C22 C26 S NaN \n5 male 48.0000 0 0 19952 26.5500 E12 S 3 \n6 female 63.0000 1 0 13502 77.9583 D7 S 10 \n7 male 39.0000 0 0 112050 0.0000 A36 S NaN \n8 female 53.0000 2 0 11769 51.4792 C101 S D \n9 male 71.0000 0 0 PC 17609 49.5042 NaN C NaN \n10 male 47.0000 1 0 PC 17757 227.5250 C62 C64 C NaN \n11 female 18.0000 1 0 PC 17757 227.5250 C62 C64 C 4 \n12 female 24.0000 0 0 PC 17477 69.3000 B35 C 9 \n\n body home.dest \n0 NaN St Louis, MO \n1 NaN Montreal, PQ / Chesterville, ON \n2 NaN Montreal, PQ / Chesterville, ON \n3 135.0 Montreal, PQ / Chesterville, ON \n4 NaN Montreal, PQ / Chesterville, ON \n5 NaN New York, NY \n6 NaN Hudson, NY \n7 NaN Belfast, NI \n8 NaN Bayside, Queens, NY \n9 22.0 Montevideo, Uruguay \n10 124.0 New York, NY \n11 NaN New York, NY \n12 NaN Paris, France " + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(13)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
130130Youseff, Mr. Geriousmale45.50026287.2250NaNCNaN312.0NaN
130230Yousif, Mr. WazlimaleNaN0026477.2250NaNCNaNNaNNaN
130330Yousseff, Mr. GeriousmaleNaN00262714.4583NaNCNaNNaNNaN
130430Zabour, Miss. Hilenifemale14.510266514.4542NaNCNaN328.0NaN
130530Zabour, Miss. ThaminefemaleNaN10266514.4542NaNCNaNNaNNaN
130630Zakarian, Mr. Mapriededermale26.50026567.2250NaNCNaN304.0NaN
130730Zakarian, Mr. Ortinmale27.00026707.2250NaNCNaNNaNNaN
130830Zimmerman, Mr. Leomale29.0003150827.8750NaNSNaNNaNNaN
\n
", + "text/plain": " pclass survived name sex age sibsp parch \\\n1301 3 0 Youseff, Mr. Gerious male 45.5 0 0 \n1302 3 0 Yousif, Mr. Wazli male NaN 0 0 \n1303 3 0 Yousseff, Mr. Gerious male NaN 0 0 \n1304 3 0 Zabour, Miss. Hileni female 14.5 1 0 \n1305 3 0 Zabour, Miss. Thamine female NaN 1 0 \n1306 3 0 Zakarian, Mr. Mapriededer male 26.5 0 0 \n1307 3 0 Zakarian, Mr. Ortin male 27.0 0 0 \n1308 3 0 Zimmerman, Mr. Leo male 29.0 0 0 \n\n ticket fare cabin embarked boat body home.dest \n1301 2628 7.2250 NaN C NaN 312.0 NaN \n1302 2647 7.2250 NaN C NaN NaN NaN \n1303 2627 14.4583 NaN C NaN NaN NaN \n1304 2665 14.4542 NaN C NaN 328.0 NaN \n1305 2665 14.4542 NaN C NaN NaN NaN \n1306 2656 7.2250 NaN C NaN 304.0 NaN \n1307 2670 7.2250 NaN C NaN NaN NaN \n1308 315082 7.8750 NaN S NaN NaN NaN " + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.tail(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "(1309, 14)" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.shape" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Vamos a hacer un resumen de los estadísticos **básicos** de las variables **numéricas**" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivedagesibspparchfarebody
count1309.0000001309.0000001046.0000001309.0000001309.0000001308.000000121.000000
mean2.2948820.38197129.8811350.4988540.38502733.295479160.809917
std0.8378360.48605514.4135001.0416580.86556051.75866897.696922
min1.0000000.0000000.1667000.0000000.0000000.0000001.000000
25%2.0000000.00000021.0000000.0000000.0000007.89580072.000000
50%3.0000000.00000028.0000000.0000000.00000014.454200155.000000
75%3.0000001.00000039.0000001.0000000.00000031.275000256.000000
max3.0000001.00000080.0000008.0000009.000000512.329200328.000000
\n
", + "text/plain": " pclass survived age sibsp parch \\\ncount 1309.000000 1309.000000 1046.000000 1309.000000 1309.000000 \nmean 2.294882 0.381971 29.881135 0.498854 0.385027 \nstd 0.837836 0.486055 14.413500 1.041658 0.865560 \nmin 1.000000 0.000000 0.166700 0.000000 0.000000 \n25% 2.000000 0.000000 21.000000 0.000000 0.000000 \n50% 3.000000 0.000000 28.000000 0.000000 0.000000 \n75% 3.000000 1.000000 39.000000 1.000000 0.000000 \nmax 3.000000 1.000000 80.000000 8.000000 9.000000 \n\n fare body \ncount 1308.000000 121.000000 \nmean 33.295479 160.809917 \nstd 51.758668 97.696922 \nmin 0.000000 1.000000 \n25% 7.895800 72.000000 \n50% 14.454200 155.000000 \n75% 31.275000 256.000000 \nmax 512.329200 328.000000 " + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "pclass int64\nsurvived int64\nname object\nsex object\nage float64\nsibsp int64\nparch int64\nticket object\nfare float64\ncabin object\nembarked object\nboat object\nbody float64\nhome.dest object\ndtype: object" + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.dtypes" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Missing values" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 True\n1 True\n2 True\n3 False\n4 True\n ... \n1304 False\n1305 True\n1306 False\n1307 True\n1308 True\nName: body, Length: 1309, dtype: bool" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.isnull(data[\"body\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 False\n1 False\n2 False\n3 True\n4 False\n ... \n1304 True\n1305 False\n1306 True\n1307 False\n1308 False\nName: body, Length: 1309, dtype: bool" + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.notnull(data[\"body\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "1188" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.isnull(data[\"body\"]).values.ravel().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "121" + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.notnull(data[\"body\"]).values.ravel().sum()" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Los valores que faltan en un data set pueden venir por dos razones:\n", + "* Extracción de los datos\n", + "* Recolección de datos" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#### Borrado de valores que faltan" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale29.00000024160211.3375B5S2NaNSt Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.5500C22 C26S11NaNMontreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale2.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale30.000012113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.000012113781151.5500C22 C26SNaNNaNMontreal, PQ / Chesterville, ON
.............................................
130430Zabour, Miss. Hilenifemale14.500010266514.4542NaNCNaN328.0NaN
130530Zabour, Miss. ThaminefemaleNaN10266514.4542NaNCNaNNaNNaN
130630Zakarian, Mr. Mapriededermale26.50000026567.2250NaNCNaN304.0NaN
130730Zakarian, Mr. Ortinmale27.00000026707.2250NaNCNaNNaNNaN
130830Zimmerman, Mr. Leomale29.0000003150827.8750NaNSNaNNaNNaN
\n

1309 rows × 14 columns

\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n... ... ... ... \n1304 3 0 Zabour, Miss. Hileni \n1305 3 0 Zabour, Miss. Thamine \n1306 3 0 Zakarian, Mr. Mapriededer \n1307 3 0 Zakarian, Mr. Ortin \n1308 3 0 Zimmerman, Mr. Leo \n\n sex age sibsp parch ticket fare cabin embarked boat \\\n0 female 29.0000 0 0 24160 211.3375 B5 S 2 \n1 male 0.9167 1 2 113781 151.5500 C22 C26 S 11 \n2 female 2.0000 1 2 113781 151.5500 C22 C26 S NaN \n3 male 30.0000 1 2 113781 151.5500 C22 C26 S NaN \n4 female 25.0000 1 2 113781 151.5500 C22 C26 S NaN \n... ... ... ... ... ... ... ... ... ... \n1304 female 14.5000 1 0 2665 14.4542 NaN C NaN \n1305 female NaN 1 0 2665 14.4542 NaN C NaN \n1306 male 26.5000 0 0 2656 7.2250 NaN C NaN \n1307 male 27.0000 0 0 2670 7.2250 NaN C NaN \n1308 male 29.0000 0 0 315082 7.8750 NaN S NaN \n\n body home.dest \n0 NaN St Louis, MO \n1 NaN Montreal, PQ / Chesterville, ON \n2 NaN Montreal, PQ / Chesterville, ON \n3 135.0 Montreal, PQ / Chesterville, ON \n4 NaN Montreal, PQ / Chesterville, ON \n... ... ... \n1304 328.0 NaN \n1305 NaN NaN \n1306 304.0 NaN \n1307 NaN NaN \n1308 NaN NaN \n\n[1309 rows x 14 columns]" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.dropna(axis=0, how=\"all\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "data2 = data" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
\n
", + "text/plain": "Empty DataFrame\nColumns: [pclass, survived, name, sex, age, sibsp, parch, ticket, fare, cabin, embarked, boat, body, home.dest]\nIndex: []" + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2.dropna(axis=0, how=\"any\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "data3 = data" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale29.00000024160211.3375B5S20.0St Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.5500C22 C26S110.0Montreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale2.000012113781151.5500C22 C26S00.0Montreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale30.000012113781151.5500C22 C26S0135.0Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.000012113781151.5500C22 C26S00.0Montreal, PQ / Chesterville, ON
.............................................
130430Zabour, Miss. Hilenifemale14.500010266514.45420C0328.00
130530Zabour, Miss. Thaminefemale0.000010266514.45420C00.00
130630Zakarian, Mr. Mapriededermale26.50000026567.22500C0304.00
130730Zakarian, Mr. Ortinmale27.00000026707.22500C00.00
130830Zimmerman, Mr. Leomale29.0000003150827.87500S00.00
\n

1309 rows × 14 columns

\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n... ... ... ... \n1304 3 0 Zabour, Miss. Hileni \n1305 3 0 Zabour, Miss. Thamine \n1306 3 0 Zakarian, Mr. Mapriededer \n1307 3 0 Zakarian, Mr. Ortin \n1308 3 0 Zimmerman, Mr. Leo \n\n sex age sibsp parch ticket fare cabin embarked boat \\\n0 female 29.0000 0 0 24160 211.3375 B5 S 2 \n1 male 0.9167 1 2 113781 151.5500 C22 C26 S 11 \n2 female 2.0000 1 2 113781 151.5500 C22 C26 S 0 \n3 male 30.0000 1 2 113781 151.5500 C22 C26 S 0 \n4 female 25.0000 1 2 113781 151.5500 C22 C26 S 0 \n... ... ... ... ... ... ... ... ... ... \n1304 female 14.5000 1 0 2665 14.4542 0 C 0 \n1305 female 0.0000 1 0 2665 14.4542 0 C 0 \n1306 male 26.5000 0 0 2656 7.2250 0 C 0 \n1307 male 27.0000 0 0 2670 7.2250 0 C 0 \n1308 male 29.0000 0 0 315082 7.8750 0 S 0 \n\n body home.dest \n0 0.0 St Louis, MO \n1 0.0 Montreal, PQ / Chesterville, ON \n2 0.0 Montreal, PQ / Chesterville, ON \n3 135.0 Montreal, PQ / Chesterville, ON \n4 0.0 Montreal, PQ / Chesterville, ON \n... ... ... \n1304 328.0 0 \n1305 0.0 0 \n1306 304.0 0 \n1307 0.0 0 \n1308 0.0 0 \n\n[1309 rows x 14 columns]" + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data3.fillna(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "data4 = data" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale290024160211.338B5S2DesconocidoSt Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.55C22 C26S11DesconocidoMontreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale212113781151.55C22 C26SDesconocidoDesconocidoMontreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale3012113781151.55C22 C26SDesconocido135Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female2512113781151.55C22 C26SDesconocidoDesconocidoMontreal, PQ / Chesterville, ON
.............................................
130430Zabour, Miss. Hilenifemale14.510266514.4542DesconocidoCDesconocido328Desconocido
130530Zabour, Miss. ThaminefemaleDesconocido10266514.4542DesconocidoCDesconocidoDesconocidoDesconocido
130630Zakarian, Mr. Mapriededermale26.50026567.225DesconocidoCDesconocido304Desconocido
130730Zakarian, Mr. Ortinmale270026707.225DesconocidoCDesconocidoDesconocidoDesconocido
130830Zimmerman, Mr. Leomale29003150827.875DesconocidoSDesconocidoDesconocidoDesconocido
\n

1309 rows × 14 columns

\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n... ... ... ... \n1304 3 0 Zabour, Miss. Hileni \n1305 3 0 Zabour, Miss. Thamine \n1306 3 0 Zakarian, Mr. Mapriededer \n1307 3 0 Zakarian, Mr. Ortin \n1308 3 0 Zimmerman, Mr. Leo \n\n sex age sibsp parch ticket fare cabin \\\n0 female 29 0 0 24160 211.338 B5 \n1 male 0.9167 1 2 113781 151.55 C22 C26 \n2 female 2 1 2 113781 151.55 C22 C26 \n3 male 30 1 2 113781 151.55 C22 C26 \n4 female 25 1 2 113781 151.55 C22 C26 \n... ... ... ... ... ... ... ... \n1304 female 14.5 1 0 2665 14.4542 Desconocido \n1305 female Desconocido 1 0 2665 14.4542 Desconocido \n1306 male 26.5 0 0 2656 7.225 Desconocido \n1307 male 27 0 0 2670 7.225 Desconocido \n1308 male 29 0 0 315082 7.875 Desconocido \n\n embarked boat body home.dest \n0 S 2 Desconocido St Louis, MO \n1 S 11 Desconocido Montreal, PQ / Chesterville, ON \n2 S Desconocido Desconocido Montreal, PQ / Chesterville, ON \n3 S Desconocido 135 Montreal, PQ / Chesterville, ON \n4 S Desconocido Desconocido Montreal, PQ / Chesterville, ON \n... ... ... ... ... \n1304 C Desconocido 328 Desconocido \n1305 C Desconocido Desconocido Desconocido \n1306 C Desconocido 304 Desconocido \n1307 C Desconocido Desconocido Desconocido \n1308 S Desconocido Desconocido Desconocido \n\n[1309 rows x 14 columns]" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data4.fillna(\"Desconocido\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "data5 = data" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednamesexagesibspparchticketfarecabinembarkedboatbodyhome.dest
011Allen, Miss. Elisabeth Waltonfemale29.00000024160211.3375B5S20.0St Louis, MO
111Allison, Master. Hudson Trevormale0.916712113781151.5500C22 C26S110.0Montreal, PQ / Chesterville, ON
210Allison, Miss. Helen Lorainefemale2.000012113781151.5500C22 C26SNaN0.0Montreal, PQ / Chesterville, ON
310Allison, Mr. Hudson Joshua Creightonmale30.000012113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)female25.000012113781151.5500C22 C26SNaN0.0Montreal, PQ / Chesterville, ON
511Anderson, Mr. Harrymale48.0000001995226.5500E12S30.0New York, NY
611Andrews, Miss. Kornelia Theodosiafemale63.0000101350277.9583D7S100.0Hudson, NY
710Andrews, Mr. Thomas Jrmale39.0000001120500.0000A36SNaN0.0Belfast, NI
811Appleton, Mrs. Edward Dale (Charlotte Lamson)female53.0000201176951.4792C101SD0.0Bayside, Queens, NY
910Artagaveytia, Mr. Ramonmale71.000000PC 1760949.5042NaNCNaN22.0Montevideo, Uruguay
1010Astor, Col. John Jacobmale47.000010PC 17757227.5250C62 C64CNaN124.0New York, NY
1111Astor, Mrs. John Jacob (Madeleine Talmadge Force)female18.000010PC 17757227.5250C62 C64C40.0New York, NY
1211Aubart, Mme. Leontine Paulinefemale24.000000PC 1747769.3000B35C90.0Paris, France
1311Barber, Miss. Ellen \"Nellie\"female26.0000001987778.8500NaNS60.0Desconocido
1411Barkworth, Mr. Algernon Henry Wilsonmale80.0000002704230.0000A23SB0.0Hessle, Yorks
1510Baumann, Mr. John DmaleNaN00PC 1731825.9250NaNSNaN0.0New York, NY
1610Baxter, Mr. Quigg Edmondmale24.000001PC 17558247.5208B58 B60CNaN0.0Montreal, PQ
1711Baxter, Mrs. James (Helene DeLaudeniere Chaput)female50.000001PC 17558247.5208B58 B60C60.0Montreal, PQ
1811Bazzani, Miss. Albinafemale32.0000001181376.2917D15C80.0Desconocido
1910Beattie, Mr. Thomsonmale36.0000001305075.2417C6CA0.0Winnipeg, MN
\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n5 1 1 Anderson, Mr. Harry \n6 1 1 Andrews, Miss. Kornelia Theodosia \n7 1 0 Andrews, Mr. Thomas Jr \n8 1 1 Appleton, Mrs. Edward Dale (Charlotte Lamson) \n9 1 0 Artagaveytia, Mr. Ramon \n10 1 0 Astor, Col. John Jacob \n11 1 1 Astor, Mrs. John Jacob (Madeleine Talmadge Force) \n12 1 1 Aubart, Mme. Leontine Pauline \n13 1 1 Barber, Miss. Ellen \"Nellie\" \n14 1 1 Barkworth, Mr. Algernon Henry Wilson \n15 1 0 Baumann, Mr. John D \n16 1 0 Baxter, Mr. Quigg Edmond \n17 1 1 Baxter, Mrs. James (Helene DeLaudeniere Chaput) \n18 1 1 Bazzani, Miss. Albina \n19 1 0 Beattie, Mr. Thomson \n\n sex age sibsp parch ticket fare cabin embarked boat \\\n0 female 29.0000 0 0 24160 211.3375 B5 S 2 \n1 male 0.9167 1 2 113781 151.5500 C22 C26 S 11 \n2 female 2.0000 1 2 113781 151.5500 C22 C26 S NaN \n3 male 30.0000 1 2 113781 151.5500 C22 C26 S NaN \n4 female 25.0000 1 2 113781 151.5500 C22 C26 S NaN \n5 male 48.0000 0 0 19952 26.5500 E12 S 3 \n6 female 63.0000 1 0 13502 77.9583 D7 S 10 \n7 male 39.0000 0 0 112050 0.0000 A36 S NaN \n8 female 53.0000 2 0 11769 51.4792 C101 S D \n9 male 71.0000 0 0 PC 17609 49.5042 NaN C NaN \n10 male 47.0000 1 0 PC 17757 227.5250 C62 C64 C NaN \n11 female 18.0000 1 0 PC 17757 227.5250 C62 C64 C 4 \n12 female 24.0000 0 0 PC 17477 69.3000 B35 C 9 \n13 female 26.0000 0 0 19877 78.8500 NaN S 6 \n14 male 80.0000 0 0 27042 30.0000 A23 S B \n15 male NaN 0 0 PC 17318 25.9250 NaN S NaN \n16 male 24.0000 0 1 PC 17558 247.5208 B58 B60 C NaN \n17 female 50.0000 0 1 PC 17558 247.5208 B58 B60 C 6 \n18 female 32.0000 0 0 11813 76.2917 D15 C 8 \n19 male 36.0000 0 0 13050 75.2417 C6 C A \n\n body home.dest \n0 0.0 St Louis, MO \n1 0.0 Montreal, PQ / Chesterville, ON \n2 0.0 Montreal, PQ / Chesterville, ON \n3 135.0 Montreal, PQ / Chesterville, ON \n4 0.0 Montreal, PQ / Chesterville, ON \n5 0.0 New York, NY \n6 0.0 Hudson, NY \n7 0.0 Belfast, NI \n8 0.0 Bayside, Queens, NY \n9 22.0 Montevideo, Uruguay \n10 124.0 New York, NY \n11 0.0 New York, NY \n12 0.0 Paris, France \n13 0.0 Desconocido \n14 0.0 Hessle, Yorks \n15 0.0 New York, NY \n16 0.0 Montreal, PQ \n17 0.0 Montreal, PQ \n18 0.0 Desconocido \n19 0.0 Winnipeg, MN " + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data5[\"body\"] = data5[\"body\"].fillna(0)\n", + "data[\"home.dest\"] = data5[\"home.dest\"].fillna(\"Desconocido\")\n", + "data5.head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "263" + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.isnull(data5[\"age\"]).values.ravel().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 29.000000\n1 0.916700\n2 2.000000\n3 30.000000\n4 25.000000\n ... \n1304 14.500000\n1305 29.881135\n1306 26.500000\n1307 27.000000\n1308 29.000000\nName: age, Length: 1309, dtype: float64" + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data5[\"age\"].fillna(data5[\"age\"].mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 29.0000\n1 0.9167\n2 2.0000\n3 30.0000\n4 25.0000\n ... \n1304 14.5000\n1305 14.5000\n1306 26.5000\n1307 27.0000\n1308 29.0000\nName: age, Length: 1309, dtype: float64" + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data5[\"age\"].fillna(method=\"ffill\")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 29.0000\n1 0.9167\n2 2.0000\n3 30.0000\n4 25.0000\n ... \n1304 14.5000\n1305 26.5000\n1306 26.5000\n1307 27.0000\n1308 29.0000\nName: age, Length: 1309, dtype: float64" + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data5[\"age\"].fillna(method=\"backfill\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "0 female\n1 male\n2 female\n3 male\n4 female\n ... \n1304 female\n1305 female\n1306 male\n1307 male\n1308 male\nName: sex, Length: 1309, dtype: object" + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[\"sex\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "dummy_sex = pd.get_dummies(data[\"sex\"], prefix = \"sex\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sex_femalesex_male
010
101
210
301
410
\n
", + "text/plain": " sex_female sex_male\n0 1 0\n1 0 1\n2 1 0\n3 0 1\n4 1 0" + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dummy_sex.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "['pclass',\n 'survived',\n 'name',\n 'sex',\n 'age',\n 'sibsp',\n 'parch',\n 'ticket',\n 'fare',\n 'cabin',\n 'embarked',\n 'boat',\n 'body',\n 'home.dest']" + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "column_name = data.columns.values.tolist()\n", + "column_name" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "data = data.drop([\"sex\"], axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.concat([data, dummy_sex], axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "def createDummies(df, var_name):\n", + " dummy = pd.get_dummies(df[var_name], prefix = var_name)\n", + " df = df.drop(var_name, axis = 1)\n", + " df = pd.concat([df, dummy], axis = 1)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
pclasssurvivednameagesibspparchticketfarecabinembarkedboatbodyhome.destsex_femalesex_male
011Allen, Miss. Elisabeth Walton29.00000024160211.3375B5S20.0St Louis, MO10
111Allison, Master. Hudson Trevor0.916712113781151.5500C22 C26S110.0Montreal, PQ / Chesterville, ON01
210Allison, Miss. Helen Loraine2.000012113781151.5500C22 C26SNaN0.0Montreal, PQ / Chesterville, ON10
310Allison, Mr. Hudson Joshua Creighton30.000012113781151.5500C22 C26SNaN135.0Montreal, PQ / Chesterville, ON01
410Allison, Mrs. Hudson J C (Bessie Waldo Daniels)25.000012113781151.5500C22 C26SNaN0.0Montreal, PQ / Chesterville, ON10
................................................
130430Zabour, Miss. Hileni14.500010266514.4542NaNCNaN328.0Desconocido10
130530Zabour, Miss. ThamineNaN10266514.4542NaNCNaN0.0Desconocido10
130630Zakarian, Mr. Mapriededer26.50000026567.2250NaNCNaN304.0Desconocido01
130730Zakarian, Mr. Ortin27.00000026707.2250NaNCNaN0.0Desconocido01
130830Zimmerman, Mr. Leo29.0000003150827.8750NaNSNaN0.0Desconocido01
\n

1309 rows × 15 columns

\n
", + "text/plain": " pclass survived name \\\n0 1 1 Allen, Miss. Elisabeth Walton \n1 1 1 Allison, Master. Hudson Trevor \n2 1 0 Allison, Miss. Helen Loraine \n3 1 0 Allison, Mr. Hudson Joshua Creighton \n4 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) \n... ... ... ... \n1304 3 0 Zabour, Miss. Hileni \n1305 3 0 Zabour, Miss. Thamine \n1306 3 0 Zakarian, Mr. Mapriededer \n1307 3 0 Zakarian, Mr. Ortin \n1308 3 0 Zimmerman, Mr. Leo \n\n age sibsp parch ticket fare cabin embarked boat body \\\n0 29.0000 0 0 24160 211.3375 B5 S 2 0.0 \n1 0.9167 1 2 113781 151.5500 C22 C26 S 11 0.0 \n2 2.0000 1 2 113781 151.5500 C22 C26 S NaN 0.0 \n3 30.0000 1 2 113781 151.5500 C22 C26 S NaN 135.0 \n4 25.0000 1 2 113781 151.5500 C22 C26 S NaN 0.0 \n... ... ... ... ... ... ... ... ... ... \n1304 14.5000 1 0 2665 14.4542 NaN C NaN 328.0 \n1305 NaN 1 0 2665 14.4542 NaN C NaN 0.0 \n1306 26.5000 0 0 2656 7.2250 NaN C NaN 304.0 \n1307 27.0000 0 0 2670 7.2250 NaN C NaN 0.0 \n1308 29.0000 0 0 315082 7.8750 NaN S NaN 0.0 \n\n home.dest sex_female sex_male \n0 St Louis, MO 1 0 \n1 Montreal, PQ / Chesterville, ON 0 1 \n2 Montreal, PQ / Chesterville, ON 1 0 \n3 Montreal, PQ / Chesterville, ON 0 1 \n4 Montreal, PQ / Chesterville, ON 1 0 \n... ... ... ... \n1304 Desconocido 1 0 \n1305 Desconocido 1 0 \n1306 Desconocido 0 1 \n1307 Desconocido 0 1 \n1308 Desconocido 0 1 \n\n[1309 rows x 15 columns]" + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "createDummies(data3,\"sex\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T1 - 3 - Data Cleaning - Plots.ipynb b/scratch/T1 - 3 - Data Cleaning - Plots.ipynb new file mode 100644 index 00000000..377d979a --- /dev/null +++ b/scratch/T1 - 3 - Data Cleaning - Plots.ipynb @@ -0,0 +1,403 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Plots y visualización de los datos" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"../datasets/customer-churn-model/Customer Churn Model.txt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS128415382-4657noyes25265.111045.07...9916.78244.79111.0110.032.701False.
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n", + "0 KS 128 415 382-4657 no yes \n", + "1 OH 107 415 371-7191 no yes \n", + "2 NJ 137 415 358-1921 no no \n", + "3 OH 84 408 375-9999 yes no \n", + "4 OK 75 415 330-6626 yes no \n", + "\n", + " VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge \\\n", + "0 25 265.1 110 45.07 ... 99 16.78 \n", + "1 26 161.6 123 27.47 ... 103 16.62 \n", + "2 0 243.4 114 41.38 ... 110 10.30 \n", + "3 0 299.4 71 50.90 ... 88 5.26 \n", + "4 0 166.7 113 28.34 ... 122 12.61 \n", + "\n", + " Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n", + "0 244.7 91 11.01 10.0 3 2.70 \n", + "1 254.4 103 11.45 13.7 3 3.70 \n", + "2 162.6 104 7.32 12.2 5 3.29 \n", + "3 196.9 89 8.86 6.6 7 1.78 \n", + "4 186.9 121 8.41 10.1 3 2.73 \n", + "\n", + " CustServ Calls Churn? \n", + "0 1 False. \n", + "1 1 False. \n", + "2 0 False. \n", + "3 2 False. \n", + "4 3 False. \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#savefig(\"path_donde_guardar_im.ext\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "### Scatter Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data.plot(kind=\"scatter\", x=\"Day Mins\", y=\"Day Charge\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data.plot(kind=\"scatter\", x=\"Night Mins\", y=\"Night Charge\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "figure, axs = plt.subplots(2,2, sharey=True, sharex=True)\n", + "data.plot(kind=\"scatter\", x=\"Day Mins\", y=\"Day Charge\", ax=axs[0][0])\n", + "data.plot(kind=\"scatter\", x=\"Night Mins\", y=\"Night Charge\", ax=axs[0][1])\n", + "data.plot(kind=\"scatter\", x=\"Day Calls\", y=\"Day Charge\", ax=axs[1][0])\n", + "data.plot(kind=\"scatter\", x=\"Night Mins\", y=\"Night Charge\", ax=axs[1][1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scratch/T2 - 1 - Data Cleaning - Data Wrangling.ipynb b/scratch/T2 - 1 - Data Cleaning - Data Wrangling.ipynb new file mode 100644 index 00000000..9fd561ff --- /dev/null +++ b/scratch/T2 - 1 - Data Cleaning - Data Wrangling.ipynb @@ -0,0 +1,958 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Wrangling\n", + "\n", + "La disputa de datos, a veces denominada mezcla de datos, es el proceso de transformar y mapear datos de un formulario de datos \"en bruto\" a otro formato con la intención de hacerlo más apropiado y valioso para una variedad de propósitos posteriores, como el análisis. Un administrador de datos es una persona que realiza estas operaciones de transformación.\n", + "\n", + "Esto puede incluir más munging, visualización de datos, agregación de datos, capacitación de un modelo estadístico, así como muchos otros usos potenciales. La mezcla de datos como un proceso generalmente sigue un conjunto de pasos generales que comienzan con la extracción de los datos en una forma sin procesar desde la fuente de datos, \"mezclando\" los datos sin procesar utilizando algoritmos (por ejemplo, ordenando) o analizando los datos en estructuras de datos predefinidas, y finalmente depositar el contenido resultante en un sumidero de datos para su almacenamiento y uso futuro." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"../datasets/customer-churn-model/Customer Churn Model.txt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n0 KS 128 415 382-4657 no yes \n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge \\\n0 25 265.1 110 45.07 ... 99 16.78 \n1 26 161.6 123 27.47 ... 103 16.62 \n2 0 243.4 114 41.38 ... 110 10.30 \n3 0 299.4 71 50.90 ... 88 5.26 \n4 0 166.7 113 28.34 ... 122 12.61 \n\n Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n0 244.7 91 11.01 10.0 3 2.70 \n1 254.4 103 11.45 13.7 3 3.70 \n2 162.6 104 7.32 12.2 5 3.29 \n3 196.9 89 8.86 6.6 7 1.78 \n4 186.9 121 8.41 10.1 3 2.73 \n\n CustServ Calls Churn? \n0 1 False. \n1 1 False. \n2 0 False. \n3 2 False. \n4 3 False. \n\n[5 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS128415382-4657noyes25265.111045.07...9916.78244.79111.0110.032.701False.
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
\n

5 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Crear un subconjunto de datos" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "account_length = data[\"Account Length\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 128\n1 107\n2 137\n3 84\n4 75\nName: Account Length, dtype: int64" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "account_length.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "pandas.core.series.Series" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "type(account_length)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "subset = data[[\"Account Length\", \"Phone\", \"Eve Charge\", \"Day Calls\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Account Length Phone Eve Charge Day Calls\n0 128 382-4657 16.78 110\n1 107 371-7191 16.62 123\n2 137 358-1921 10.30 114\n3 84 375-9999 5.26 71\n4 75 330-6626 12.61 113", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Account LengthPhoneEve ChargeDay Calls
0128382-465716.78110
1107371-719116.62123
2137358-192110.30114
384375-99995.2671
475330-662612.61113
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "subset.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "pandas.core.frame.DataFrame" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "type(subset)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Account Length Phone Eve Charge Night Calls\n0 128 382-4657 16.78 91\n1 107 371-7191 16.62 103\n2 137 358-1921 10.30 104\n3 84 375-9999 5.26 89\n4 75 330-6626 12.61 121", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Account LengthPhoneEve ChargeNight Calls
0128382-465716.7891
1107371-719116.62103
2137358-192110.30104
384375-99995.2689
475330-662612.61121
\n
" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "desired_columns = [\"Account Length\", \"Phone\", \"Eve Charge\", \"Night Calls\"]\n", + "subset = data[desired_columns]\n", + "subset.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['Account Length', 'VMail Message', 'Day Calls']" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "desired_columns = [\"Account Length\", \"VMail Message\", \"Day Calls\"]\n", + "desired_columns" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['State',\n 'Account Length',\n 'Area Code',\n 'Phone',\n \"Int'l Plan\",\n 'VMail Plan',\n 'VMail Message',\n 'Day Mins',\n 'Day Calls',\n 'Day Charge',\n 'Eve Mins',\n 'Eve Calls',\n 'Eve Charge',\n 'Night Mins',\n 'Night Calls',\n 'Night Charge',\n 'Intl Mins',\n 'Intl Calls',\n 'Intl Charge',\n 'CustServ Calls',\n 'Churn?']" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "source": [ + "all_columns_list = data.columns.values.tolist()\n", + "all_columns_list" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['State',\n 'Area Code',\n 'Phone',\n \"Int'l Plan\",\n 'VMail Plan',\n 'Day Mins',\n 'Day Charge',\n 'Eve Mins',\n 'Eve Calls',\n 'Eve Charge',\n 'Night Mins',\n 'Night Calls',\n 'Night Charge',\n 'Intl Mins',\n 'Intl Calls',\n 'Intl Charge',\n 'CustServ Calls',\n 'Churn?']" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "sublist = [x for x in all_columns_list if x not in desired_columns]\n", + "sublist" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Area Code Phone Int'l Plan VMail Plan Day Mins Day Charge \\\n0 KS 415 382-4657 no yes 265.1 45.07 \n1 OH 415 371-7191 no yes 161.6 27.47 \n2 NJ 415 358-1921 no no 243.4 41.38 \n3 OH 408 375-9999 yes no 299.4 50.90 \n4 OK 415 330-6626 yes no 166.7 28.34 \n\n Eve Mins Eve Calls Eve Charge Night Mins Night Calls Night Charge \\\n0 197.4 99 16.78 244.7 91 11.01 \n1 195.5 103 16.62 254.4 103 11.45 \n2 121.2 110 10.30 162.6 104 7.32 \n3 61.9 88 5.26 196.9 89 8.86 \n4 148.3 122 12.61 186.9 121 8.41 \n\n Intl Mins Intl Calls Intl Charge CustServ Calls Churn? \n0 10.0 3 2.70 1 False. \n1 13.7 3 3.70 1 False. \n2 12.2 5 3.29 0 False. \n3 6.6 7 1.78 2 False. \n4 10.1 3 2.73 3 False. ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateArea CodePhoneInt'l PlanVMail PlanDay MinsDay ChargeEve MinsEve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS415382-4657noyes265.145.07197.49916.78244.79111.0110.032.701False.
1OH415371-7191noyes161.627.47195.510316.62254.410311.4513.733.701False.
2NJ415358-1921nono243.441.38121.211010.30162.61047.3212.253.290False.
3OH408375-9999yesno299.450.9061.9885.26196.9898.866.671.782False.
4OK415330-6626yesno166.728.34148.312212.61186.91218.4110.132.733False.
\n
" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "subset = data[sublist]\n", + "subset.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n5 AL 118 510 391-8027 yes no \n6 MA 121 510 355-9993 no yes \n7 MO 147 415 329-9001 yes no \n8 LA 117 408 335-4719 no no \n9 WV 141 415 330-8173 yes yes \n10 IN 65 415 329-6603 no no \n11 RI 74 415 344-9403 no no \n12 IA 168 408 363-1107 no no \n13 MT 95 510 394-8006 no no \n14 IA 62 415 366-9238 no no \n15 NY 161 415 351-7269 no no \n16 ID 85 408 350-8884 no yes \n17 VT 93 510 386-2923 no no \n18 VA 76 510 356-2992 no yes \n19 TX 73 415 373-2782 no no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n1 26 161.6 123 27.47 ... 103 \n2 0 243.4 114 41.38 ... 110 \n3 0 299.4 71 50.90 ... 88 \n4 0 166.7 113 28.34 ... 122 \n5 0 223.4 98 37.98 ... 101 \n6 24 218.2 88 37.09 ... 108 \n7 0 157.0 79 26.69 ... 94 \n8 0 184.5 97 31.37 ... 80 \n9 37 258.6 84 43.96 ... 111 \n10 0 129.1 137 21.95 ... 83 \n11 0 187.7 127 31.91 ... 148 \n12 0 128.8 96 21.90 ... 71 \n13 0 156.6 88 26.62 ... 75 \n14 0 120.7 70 20.52 ... 76 \n15 0 332.9 67 56.59 ... 97 \n16 27 196.4 139 33.39 ... 90 \n17 0 190.7 114 32.42 ... 111 \n18 33 189.7 66 32.25 ... 65 \n19 0 224.4 90 38.15 ... 88 \n\n Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls \\\n1 16.62 254.4 103 11.45 13.7 3 \n2 10.30 162.6 104 7.32 12.2 5 \n3 5.26 196.9 89 8.86 6.6 7 \n4 12.61 186.9 121 8.41 10.1 3 \n5 18.75 203.9 118 9.18 6.3 6 \n6 29.62 212.6 118 9.57 7.5 7 \n7 8.76 211.8 96 9.53 7.1 6 \n8 29.89 215.8 90 9.71 8.7 4 \n9 18.87 326.4 97 14.69 11.2 5 \n10 19.42 208.8 111 9.40 12.7 6 \n11 13.89 196.0 94 8.82 9.1 5 \n12 8.92 141.1 128 6.35 11.2 2 \n13 21.05 192.3 115 8.65 12.3 5 \n14 26.11 203.0 99 9.14 13.1 6 \n15 27.01 160.6 128 7.23 5.4 9 \n16 23.88 89.3 75 4.02 13.8 4 \n17 18.55 129.6 121 5.83 8.1 3 \n18 18.09 165.7 108 7.46 10.0 5 \n19 13.56 192.8 74 8.68 13.0 2 \n\n Intl Charge CustServ Calls Churn? \n1 3.70 1 False. \n2 3.29 0 False. \n3 1.78 2 False. \n4 2.73 3 False. \n5 1.70 0 False. \n6 2.03 3 False. \n7 1.92 0 False. \n8 2.35 1 False. \n9 3.02 0 False. \n10 3.43 4 True. \n11 2.46 0 False. \n12 3.02 1 False. \n13 3.32 3 False. \n14 3.54 4 False. \n15 1.46 4 True. \n16 3.73 1 False. \n17 2.19 3 False. \n18 2.70 1 False. \n19 3.51 1 False. \n\n[19 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
5AL118510391-8027yesno0223.49837.98...10118.75203.91189.186.361.700False.
6MA121510355-9993noyes24218.28837.09...10829.62212.61189.577.572.033False.
7MO147415329-9001yesno0157.07926.69...948.76211.8969.537.161.920False.
8LA117408335-4719nono0184.59731.37...8029.89215.8909.718.742.351False.
9WV141415330-8173yesyes37258.68443.96...11118.87326.49714.6911.253.020False.
10IN65415329-6603nono0129.113721.95...8319.42208.81119.4012.763.434True.
11RI74415344-9403nono0187.712731.91...14813.89196.0948.829.152.460False.
12IA168408363-1107nono0128.89621.90...718.92141.11286.3511.223.021False.
13MT95510394-8006nono0156.68826.62...7521.05192.31158.6512.353.323False.
14IA62415366-9238nono0120.77020.52...7626.11203.0999.1413.163.544False.
15NY161415351-7269nono0332.96756.59...9727.01160.61287.235.491.464True.
16ID85408350-8884noyes27196.413933.39...9023.8889.3754.0213.843.731False.
17VT93510386-2923nono0190.711432.42...11118.55129.61215.838.132.193False.
18VA76510356-2992noyes33189.76632.25...6518.09165.71087.4610.052.701False.
19TX73415373-2782nono0224.49038.15...8813.56192.8748.6813.023.511False.
\n

19 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "data[1:20]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n0 KS 128 415 382-4657 no yes \n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n5 AL 118 510 391-8027 yes no \n6 MA 121 510 355-9993 no yes \n7 MO 147 415 329-9001 yes no \n8 LA 117 408 335-4719 no no \n9 WV 141 415 330-8173 yes yes \n10 IN 65 415 329-6603 no no \n11 RI 74 415 344-9403 no no \n12 IA 168 408 363-1107 no no \n13 MT 95 510 394-8006 no no \n14 IA 62 415 366-9238 no no \n15 NY 161 415 351-7269 no no \n16 ID 85 408 350-8884 no yes \n17 VT 93 510 386-2923 no no \n18 VA 76 510 356-2992 no yes \n19 TX 73 415 373-2782 no no \n20 FL 147 415 396-5800 no no \n21 CO 77 408 393-7984 no no \n22 AZ 130 415 358-1958 no no \n23 SC 111 415 350-2565 no no \n24 VA 132 510 343-4696 no no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n0 25 265.1 110 45.07 ... 99 \n1 26 161.6 123 27.47 ... 103 \n2 0 243.4 114 41.38 ... 110 \n3 0 299.4 71 50.90 ... 88 \n4 0 166.7 113 28.34 ... 122 \n5 0 223.4 98 37.98 ... 101 \n6 24 218.2 88 37.09 ... 108 \n7 0 157.0 79 26.69 ... 94 \n8 0 184.5 97 31.37 ... 80 \n9 37 258.6 84 43.96 ... 111 \n10 0 129.1 137 21.95 ... 83 \n11 0 187.7 127 31.91 ... 148 \n12 0 128.8 96 21.90 ... 71 \n13 0 156.6 88 26.62 ... 75 \n14 0 120.7 70 20.52 ... 76 \n15 0 332.9 67 56.59 ... 97 \n16 27 196.4 139 33.39 ... 90 \n17 0 190.7 114 32.42 ... 111 \n18 33 189.7 66 32.25 ... 65 \n19 0 224.4 90 38.15 ... 88 \n20 0 155.1 117 26.37 ... 93 \n21 0 62.4 89 10.61 ... 121 \n22 0 183.0 112 31.11 ... 99 \n23 0 110.4 103 18.77 ... 102 \n24 0 81.1 86 13.79 ... 72 \n\n Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls \\\n0 16.78 244.7 91 11.01 10.0 3 \n1 16.62 254.4 103 11.45 13.7 3 \n2 10.30 162.6 104 7.32 12.2 5 \n3 5.26 196.9 89 8.86 6.6 7 \n4 12.61 186.9 121 8.41 10.1 3 \n5 18.75 203.9 118 9.18 6.3 6 \n6 29.62 212.6 118 9.57 7.5 7 \n7 8.76 211.8 96 9.53 7.1 6 \n8 29.89 215.8 90 9.71 8.7 4 \n9 18.87 326.4 97 14.69 11.2 5 \n10 19.42 208.8 111 9.40 12.7 6 \n11 13.89 196.0 94 8.82 9.1 5 \n12 8.92 141.1 128 6.35 11.2 2 \n13 21.05 192.3 115 8.65 12.3 5 \n14 26.11 203.0 99 9.14 13.1 6 \n15 27.01 160.6 128 7.23 5.4 9 \n16 23.88 89.3 75 4.02 13.8 4 \n17 18.55 129.6 121 5.83 8.1 3 \n18 18.09 165.7 108 7.46 10.0 5 \n19 13.56 192.8 74 8.68 13.0 2 \n20 20.37 208.8 133 9.40 10.6 4 \n21 14.44 209.6 64 9.43 5.7 6 \n22 6.20 181.8 78 8.18 9.5 19 \n23 11.67 189.6 105 8.53 7.7 6 \n24 20.84 237.0 115 10.67 10.3 2 \n\n Intl Charge CustServ Calls Churn? \n0 2.70 1 False. \n1 3.70 1 False. \n2 3.29 0 False. \n3 1.78 2 False. \n4 2.73 3 False. \n5 1.70 0 False. \n6 2.03 3 False. \n7 1.92 0 False. \n8 2.35 1 False. \n9 3.02 0 False. \n10 3.43 4 True. \n11 2.46 0 False. \n12 3.02 1 False. \n13 3.32 3 False. \n14 3.54 4 False. \n15 1.46 4 True. \n16 3.73 1 False. \n17 2.19 3 False. \n18 2.70 1 False. \n19 3.51 1 False. \n20 2.86 0 False. \n21 1.54 5 True. \n22 2.57 0 False. \n23 2.08 2 False. \n24 2.78 0 False. \n\n[25 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS128415382-4657noyes25265.111045.07...9916.78244.79111.0110.032.701False.
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
5AL118510391-8027yesno0223.49837.98...10118.75203.91189.186.361.700False.
6MA121510355-9993noyes24218.28837.09...10829.62212.61189.577.572.033False.
7MO147415329-9001yesno0157.07926.69...948.76211.8969.537.161.920False.
8LA117408335-4719nono0184.59731.37...8029.89215.8909.718.742.351False.
9WV141415330-8173yesyes37258.68443.96...11118.87326.49714.6911.253.020False.
10IN65415329-6603nono0129.113721.95...8319.42208.81119.4012.763.434True.
11RI74415344-9403nono0187.712731.91...14813.89196.0948.829.152.460False.
12IA168408363-1107nono0128.89621.90...718.92141.11286.3511.223.021False.
13MT95510394-8006nono0156.68826.62...7521.05192.31158.6512.353.323False.
14IA62415366-9238nono0120.77020.52...7626.11203.0999.1413.163.544False.
15NY161415351-7269nono0332.96756.59...9727.01160.61287.235.491.464True.
16ID85408350-8884noyes27196.413933.39...9023.8889.3754.0213.843.731False.
17VT93510386-2923nono0190.711432.42...11118.55129.61215.838.132.193False.
18VA76510356-2992noyes33189.76632.25...6518.09165.71087.4610.052.701False.
19TX73415373-2782nono0224.49038.15...8813.56192.8748.6813.023.511False.
20FL147415396-5800nono0155.111726.37...9320.37208.81339.4010.642.860False.
21CO77408393-7984nono062.48910.61...12114.44209.6649.435.761.545True.
22AZ130415358-1958nono0183.011231.11...996.20181.8788.189.5192.570False.
23SC111415350-2565nono0110.410318.77...10211.67189.61058.537.762.082False.
24VA132510343-4696nono081.18613.79...7220.84237.011510.6710.322.780False.
\n

25 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "data[:25]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n3120 AR 96 415 365-2341 no yes \n3121 GA 98 408 388-8797 no no \n3122 TN 3 415 400-4713 no no \n3123 MA 77 408 420-3042 no yes \n3124 ND 75 408 396-4171 no yes \n... ... ... ... ... ... ... \n3326 OH 96 415 347-6812 no no \n3327 SC 79 415 348-3830 no no \n3328 AZ 192 415 414-4276 no yes \n3329 WV 68 415 370-3271 no no \n3330 RI 28 510 328-8230 no no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n3120 21 247.6 95 42.09 ... 150 \n3121 0 169.9 77 28.88 ... 155 \n3122 0 185.0 120 31.45 ... 129 \n3123 17 204.9 84 34.83 ... 102 \n3124 24 225.5 119 38.34 ... 108 \n... ... ... ... ... ... ... \n3326 0 106.6 128 18.12 ... 87 \n3327 0 134.7 98 22.90 ... 68 \n3328 36 156.2 77 26.55 ... 126 \n3329 0 231.1 57 39.29 ... 55 \n3330 0 180.8 109 30.74 ... 58 \n\n Eve Charge Night Mins Night Calls Night Charge Intl Mins \\\n3120 21.79 158.6 72 7.14 10.8 \n3121 11.76 142.6 105 6.42 8.5 \n3122 17.31 170.5 89 7.67 14.1 \n3123 17.09 219.7 97 9.89 11.3 \n3124 15.47 270.9 106 12.19 9.4 \n... ... ... ... ... ... \n3326 24.21 178.9 92 8.05 14.9 \n3327 16.12 221.4 128 9.96 11.8 \n3328 18.32 279.1 83 12.56 9.9 \n3329 13.04 191.3 123 8.61 9.6 \n3330 24.55 191.9 91 8.64 14.1 \n\n Intl Calls Intl Charge CustServ Calls Churn? \n3120 6 2.92 2 False. \n3121 7 2.30 1 False. \n3122 3 3.81 3 False. \n3123 5 3.05 0 False. \n3124 2 2.54 3 False. \n... ... ... ... ... \n3326 7 4.02 1 False. \n3327 5 3.19 2 False. \n3328 6 2.67 2 False. \n3329 4 2.59 3 False. \n3330 6 3.81 2 False. \n\n[211 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
3120AR96415365-2341noyes21247.69542.09...15021.79158.6727.1410.862.922False.
3121GA98408388-8797nono0169.97728.88...15511.76142.61056.428.572.301False.
3122TN3415400-4713nono0185.012031.45...12917.31170.5897.6714.133.813False.
3123MA77408420-3042noyes17204.98434.83...10217.09219.7979.8911.353.050False.
3124ND75408396-4171noyes24225.511938.34...10815.47270.910612.199.422.543False.
..................................................................
3326OH96415347-6812nono0106.612818.12...8724.21178.9928.0514.974.021False.
3327SC79415348-3830nono0134.79822.90...6816.12221.41289.9611.853.192False.
3328AZ192415414-4276noyes36156.27726.55...12618.32279.18312.569.962.672False.
3329WV68415370-3271nono0231.15739.29...5513.04191.31238.619.642.593False.
3330RI28510328-8230nono0180.810930.74...5824.55191.9918.6414.163.812False.
\n

211 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "data[3120:3331]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n10 IN 65 415 329-6603 no no \n11 RI 74 415 344-9403 no no \n12 IA 168 408 363-1107 no no \n13 MT 95 510 394-8006 no no \n14 IA 62 415 366-9238 no no \n15 NY 161 415 351-7269 no no \n16 ID 85 408 350-8884 no yes \n17 VT 93 510 386-2923 no no \n18 VA 76 510 356-2992 no yes \n19 TX 73 415 373-2782 no no \n20 FL 147 415 396-5800 no no \n21 CO 77 408 393-7984 no no \n22 AZ 130 415 358-1958 no no \n23 SC 111 415 350-2565 no no \n24 VA 132 510 343-4696 no no \n25 NE 174 415 331-3698 no no \n26 WY 57 408 357-3817 no yes \n27 MT 54 408 418-6412 no no \n28 MO 20 415 353-2630 no no \n29 HI 49 510 410-7789 no no \n30 IL 142 415 416-8428 no no \n31 NH 75 510 370-3359 no no \n32 LA 172 408 383-1121 no no \n33 AZ 12 408 360-1596 no no \n34 OK 57 408 395-2854 no yes \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n10 0 129.1 137 21.95 ... 83 \n11 0 187.7 127 31.91 ... 148 \n12 0 128.8 96 21.90 ... 71 \n13 0 156.6 88 26.62 ... 75 \n14 0 120.7 70 20.52 ... 76 \n15 0 332.9 67 56.59 ... 97 \n16 27 196.4 139 33.39 ... 90 \n17 0 190.7 114 32.42 ... 111 \n18 33 189.7 66 32.25 ... 65 \n19 0 224.4 90 38.15 ... 88 \n20 0 155.1 117 26.37 ... 93 \n21 0 62.4 89 10.61 ... 121 \n22 0 183.0 112 31.11 ... 99 \n23 0 110.4 103 18.77 ... 102 \n24 0 81.1 86 13.79 ... 72 \n25 0 124.3 76 21.13 ... 112 \n26 39 213.0 115 36.21 ... 112 \n27 0 134.3 73 22.83 ... 100 \n28 0 190.0 109 32.30 ... 84 \n29 0 119.3 117 20.28 ... 109 \n30 0 84.8 95 14.42 ... 63 \n31 0 226.1 105 38.44 ... 107 \n32 0 212.0 121 36.04 ... 115 \n33 0 249.6 118 42.43 ... 119 \n34 25 176.8 94 30.06 ... 75 \n\n Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls \\\n10 19.42 208.8 111 9.40 12.7 6 \n11 13.89 196.0 94 8.82 9.1 5 \n12 8.92 141.1 128 6.35 11.2 2 \n13 21.05 192.3 115 8.65 12.3 5 \n14 26.11 203.0 99 9.14 13.1 6 \n15 27.01 160.6 128 7.23 5.4 9 \n16 23.88 89.3 75 4.02 13.8 4 \n17 18.55 129.6 121 5.83 8.1 3 \n18 18.09 165.7 108 7.46 10.0 5 \n19 13.56 192.8 74 8.68 13.0 2 \n20 20.37 208.8 133 9.40 10.6 4 \n21 14.44 209.6 64 9.43 5.7 6 \n22 6.20 181.8 78 8.18 9.5 19 \n23 11.67 189.6 105 8.53 7.7 6 \n24 20.84 237.0 115 10.67 10.3 2 \n25 23.55 250.7 115 11.28 15.5 5 \n26 16.24 182.7 115 8.22 9.5 3 \n27 13.22 102.1 68 4.59 14.7 4 \n28 21.95 181.5 102 8.17 6.3 6 \n29 18.28 178.7 90 8.04 11.1 1 \n30 11.62 250.5 148 11.27 14.2 6 \n31 17.13 246.2 98 11.08 10.3 5 \n32 2.65 293.3 78 13.20 12.6 10 \n33 21.45 280.2 90 12.61 11.8 3 \n34 16.58 213.5 116 9.61 8.3 4 \n\n Intl Charge CustServ Calls Churn? \n10 3.43 4 True. \n11 2.46 0 False. \n12 3.02 1 False. \n13 3.32 3 False. \n14 3.54 4 False. \n15 1.46 4 True. \n16 3.73 1 False. \n17 2.19 3 False. \n18 2.70 1 False. \n19 3.51 1 False. \n20 2.86 0 False. \n21 1.54 5 True. \n22 2.57 0 False. \n23 2.08 2 False. \n24 2.78 0 False. \n25 4.19 3 False. \n26 2.57 0 False. \n27 3.97 3 False. \n28 1.70 0 False. \n29 3.00 1 False. \n30 3.83 2 False. \n31 2.78 1 False. \n32 3.40 3 False. \n33 3.19 1 True. \n34 2.24 0 False. \n\n[25 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
10IN65415329-6603nono0129.113721.95...8319.42208.81119.4012.763.434True.
11RI74415344-9403nono0187.712731.91...14813.89196.0948.829.152.460False.
12IA168408363-1107nono0128.89621.90...718.92141.11286.3511.223.021False.
13MT95510394-8006nono0156.68826.62...7521.05192.31158.6512.353.323False.
14IA62415366-9238nono0120.77020.52...7626.11203.0999.1413.163.544False.
15NY161415351-7269nono0332.96756.59...9727.01160.61287.235.491.464True.
16ID85408350-8884noyes27196.413933.39...9023.8889.3754.0213.843.731False.
17VT93510386-2923nono0190.711432.42...11118.55129.61215.838.132.193False.
18VA76510356-2992noyes33189.76632.25...6518.09165.71087.4610.052.701False.
19TX73415373-2782nono0224.49038.15...8813.56192.8748.6813.023.511False.
20FL147415396-5800nono0155.111726.37...9320.37208.81339.4010.642.860False.
21CO77408393-7984nono062.48910.61...12114.44209.6649.435.761.545True.
22AZ130415358-1958nono0183.011231.11...996.20181.8788.189.5192.570False.
23SC111415350-2565nono0110.410318.77...10211.67189.61058.537.762.082False.
24VA132510343-4696nono081.18613.79...7220.84237.011510.6710.322.780False.
25NE174415331-3698nono0124.37621.13...11223.55250.711511.2815.554.193False.
26WY57408357-3817noyes39213.011536.21...11216.24182.71158.229.532.570False.
27MT54408418-6412nono0134.37322.83...10013.22102.1684.5914.743.973False.
28MO20415353-2630nono0190.010932.30...8421.95181.51028.176.361.700False.
29HI49510410-7789nono0119.311720.28...10918.28178.7908.0411.113.001False.
30IL142415416-8428nono084.89514.42...6311.62250.514811.2714.263.832False.
31NH75510370-3359nono0226.110538.44...10717.13246.29811.0810.352.781False.
32LA172408383-1121nono0212.012136.04...1152.65293.37813.2012.6103.403False.
33AZ12408360-1596nono0249.611842.43...11921.45280.29012.6111.833.191True.
34OK57408395-2854noyes25176.89430.06...7516.58213.51169.618.342.240False.
\n

25 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "data[10:35]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(43, 21)" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "## Usuarios con Day Mins > 300\n", + "data1 = data[data[\"Day Mins\"] > 300]\n", + "data1.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(83, 21)" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "## Usuarios de Nueva York (State = \"NY\")\n", + "data2 = data[data[\"State\"] == \"NY\"]\n", + "data2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(2, 21)" + }, + "metadata": {}, + "execution_count": 21 + } + ], + "source": [ + "## AND -> &\n", + "data3 = data[(data[\"Day Mins\"]>300) & (data[\"State\"]==\"NY\")]\n", + "data3.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(124, 21)" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "data4 = data[(data[\"Day Mins\"] > 300) | (data[\"State\"] == \"NY\")]\n", + "data4.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Day Mins Night Mins Account Length\n0 265.1 244.7 128\n1 161.6 254.4 107\n2 243.4 162.6 137\n3 299.4 196.9 84\n4 166.7 186.9 75", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Day MinsNight MinsAccount Length
0265.1244.7128
1161.6254.4107
2243.4162.6137
3299.4196.984
4166.7186.975
\n
" + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "## Minutos de día, minutos de noche y Longitud de la Cuenta de los primeros 50 individuos\n", + "subset_first_50 = data[[\"Day Mins\", \"Night Mins\", \"Account Length\"]][:50]\n", + "subset_first_50.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Area Code Phone Int'l Plan VMail Plan Day Mins Day Charge \\\n0 KS 415 382-4657 no yes 265.1 45.07 \n1 OH 415 371-7191 no yes 161.6 27.47 \n2 NJ 415 358-1921 no no 243.4 41.38 \n3 OH 408 375-9999 yes no 299.4 50.90 \n4 OK 415 330-6626 yes no 166.7 28.34 \n5 AL 510 391-8027 yes no 223.4 37.98 \n6 MA 510 355-9993 no yes 218.2 37.09 \n7 MO 415 329-9001 yes no 157.0 26.69 \n8 LA 408 335-4719 no no 184.5 31.37 \n9 WV 415 330-8173 yes yes 258.6 43.96 \n\n Eve Mins Eve Calls Eve Charge Night Mins Night Calls Night Charge \\\n0 197.4 99 16.78 244.7 91 11.01 \n1 195.5 103 16.62 254.4 103 11.45 \n2 121.2 110 10.30 162.6 104 7.32 \n3 61.9 88 5.26 196.9 89 8.86 \n4 148.3 122 12.61 186.9 121 8.41 \n5 220.6 101 18.75 203.9 118 9.18 \n6 348.5 108 29.62 212.6 118 9.57 \n7 103.1 94 8.76 211.8 96 9.53 \n8 351.6 80 29.89 215.8 90 9.71 \n9 222.0 111 18.87 326.4 97 14.69 \n\n Intl Mins Intl Calls Intl Charge CustServ Calls Churn? \n0 10.0 3 2.70 1 False. \n1 13.7 3 3.70 1 False. \n2 12.2 5 3.29 0 False. \n3 6.6 7 1.78 2 False. \n4 10.1 3 2.73 3 False. \n5 6.3 6 1.70 0 False. \n6 7.5 7 2.03 3 False. \n7 7.1 6 1.92 0 False. \n8 8.7 4 2.35 1 False. \n9 11.2 5 3.02 0 False. ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateArea CodePhoneInt'l PlanVMail PlanDay MinsDay ChargeEve MinsEve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS415382-4657noyes265.145.07197.49916.78244.79111.0110.032.701False.
1OH415371-7191noyes161.627.47195.510316.62254.410311.4513.733.701False.
2NJ415358-1921nono243.441.38121.211010.30162.61047.3212.253.290False.
3OH408375-9999yesno299.450.9061.9885.26196.9898.866.671.782False.
4OK415330-6626yesno166.728.34148.312212.61186.91218.4110.132.733False.
5AL510391-8027yesno223.437.98220.610118.75203.91189.186.361.700False.
6MA510355-9993noyes218.237.09348.510829.62212.61189.577.572.033False.
7MO415329-9001yesno157.026.69103.1948.76211.8969.537.161.920False.
8LA408335-4719nono184.531.37351.68029.89215.8909.718.742.351False.
9WV415330-8173yesyes258.643.96222.011118.87326.49714.6911.253.020False.
\n
" + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "subset[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Phone Int'l Plan VMail Plan\n1 371-7191 no yes\n2 358-1921 no no\n3 375-9999 yes no\n4 330-6626 yes no\n5 391-8027 yes no\n6 355-9993 no yes\n7 329-9001 yes no\n8 335-4719 no no\n9 330-8173 yes yes\n10 329-6603 no no", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PhoneInt'l PlanVMail Plan
1371-7191noyes
2358-1921nono
3375-9999yesno
4330-6626yesno
5391-8027yesno
6355-9993noyes
7329-9001yesno
8335-4719nono
9330-8173yesyes
10329-6603nono
\n
" + }, + "metadata": {}, + "execution_count": 25 + } + ], + "source": [ + "data.ix[1:10, 3:6] ##Primeras 10 filas, columnas de la 3 a la 6" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Phone Int'l Plan VMail Plan\n1 371-7191 no yes\n2 358-1921 no no\n3 375-9999 yes no\n4 330-6626 yes no\n5 391-8027 yes no\n6 355-9993 no yes\n7 329-9001 yes no\n8 335-4719 no no\n9 330-8173 yes yes", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PhoneInt'l PlanVMail Plan
1371-7191noyes
2358-1921nono
3375-9999yesno
4330-6626yesno
5391-8027yesno
6355-9993noyes
7329-9001yesno
8335-4719nono
9330-8173yesyes
\n
" + }, + "metadata": {}, + "execution_count": 26 + } + ], + "source": [ + "data.iloc[1:10, 3:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n5 AL 118 510 391-8027 yes no \n6 MA 121 510 355-9993 no yes \n7 MO 147 415 329-9001 yes no \n8 LA 117 408 335-4719 no no \n9 WV 141 415 330-8173 yes yes \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge \\\n1 26 161.6 123 27.47 ... 103 16.62 \n2 0 243.4 114 41.38 ... 110 10.30 \n3 0 299.4 71 50.90 ... 88 5.26 \n4 0 166.7 113 28.34 ... 122 12.61 \n5 0 223.4 98 37.98 ... 101 18.75 \n6 24 218.2 88 37.09 ... 108 29.62 \n7 0 157.0 79 26.69 ... 94 8.76 \n8 0 184.5 97 31.37 ... 80 29.89 \n9 37 258.6 84 43.96 ... 111 18.87 \n\n Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n1 254.4 103 11.45 13.7 3 3.70 \n2 162.6 104 7.32 12.2 5 3.29 \n3 196.9 89 8.86 6.6 7 1.78 \n4 186.9 121 8.41 10.1 3 2.73 \n5 203.9 118 9.18 6.3 6 1.70 \n6 212.6 118 9.57 7.5 7 2.03 \n7 211.8 96 9.53 7.1 6 1.92 \n8 215.8 90 9.71 8.7 4 2.35 \n9 326.4 97 14.69 11.2 5 3.02 \n\n CustServ Calls Churn? \n1 1 False. \n2 0 False. \n3 2 False. \n4 3 False. \n5 0 False. \n6 3 False. \n7 0 False. \n8 1 False. \n9 0 False. \n\n[9 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
5AL118510391-8027yesno0223.49837.98...10118.75203.91189.186.361.700False.
6MA121510355-9993noyes24218.28837.09...10829.62212.61189.577.572.033False.
7MO147415329-9001yesno0157.07926.69...948.76211.8969.537.161.920False.
8LA117408335-4719nono0184.59731.37...8029.89215.8909.718.742.351False.
9WV141415330-8173yesyes37258.68443.96...11118.87326.49714.6911.253.020False.
\n

9 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 27 + } + ], + "source": [ + "data.iloc[:,3:6] ##Todas las filas para las columnas entre la 3 y la 6\n", + "data.iloc[1:10,:] ##Totas las columnas para las filas de la 1 a la 10" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Area Code VMail Plan Day Mins\n1 415 yes 161.6\n2 415 no 243.4\n3 408 no 299.4\n4 415 no 166.7\n5 510 no 223.4\n6 510 yes 218.2\n7 415 no 157.0\n8 408 no 184.5\n9 415 yes 258.6", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Area CodeVMail PlanDay Mins
1415yes161.6
2415no243.4
3408no299.4
4415no166.7
5510no223.4
6510yes218.2
7415no157.0
8408no184.5
9415yes258.6
\n
" + }, + "metadata": {}, + "execution_count": 28 + } + ], + "source": [ + "data.iloc[1:10,[2,5,7]]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Area Code VMail Plan Day Mins\n1 415 yes 161.6\n5 510 no 223.4\n8 408 no 184.5\n36 408 yes 146.3", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Area CodeVMail PlanDay Mins
1415yes161.6
5510no223.4
8408no184.5
36408yes146.3
\n
" + }, + "metadata": {}, + "execution_count": 29 + } + ], + "source": [ + "data.iloc[[1,5,8,36],[2,5,7]]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Area Code VMail Plan Day Mins\n1 415 yes 161.6\n5 510 no 223.4\n9 415 yes 258.6\n36 408 yes 146.3", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Area CodeVMail PlanDay Mins
1415yes161.6
5510no223.4
9415yes258.6
36408yes146.3
\n
" + }, + "metadata": {}, + "execution_count": 30 + } + ], + "source": [ + "data.loc[[1,5,9,36],[\"Area Code\", \"VMail Plan\", \"Day Mins\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"Total Mins\"] = data[\"Day Mins\"] + data[\"Night Mins\"] + data[\"Eve Mins\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 707.2\n1 611.5\n2 527.2\n3 558.2\n4 501.9\nName: Total Mins, dtype: float64" + }, + "metadata": {}, + "execution_count": 32 + } + ], + "source": [ + "data[\"Total Mins\"].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"Total Calls\"] = data[\"Day Calls\"] + data[\"Night Calls\"] + data[\"Eve Calls\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 300\n1 329\n2 328\n3 248\n4 356\nName: Total Calls, dtype: int64" + }, + "metadata": {}, + "execution_count": 34 + } + ], + "source": [ + "data[\"Total Calls\"].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(3333, 23)" + }, + "metadata": {}, + "execution_count": 35 + } + ], + "source": [ + "data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n0 KS 128 415 382-4657 no yes \n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n\n VMail Message Day Mins Day Calls Day Charge ... Night Mins \\\n0 25 265.1 110 45.07 ... 244.7 \n1 26 161.6 123 27.47 ... 254.4 \n2 0 243.4 114 41.38 ... 162.6 \n3 0 299.4 71 50.90 ... 196.9 \n4 0 166.7 113 28.34 ... 186.9 \n\n Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n0 91 11.01 10.0 3 2.70 \n1 103 11.45 13.7 3 3.70 \n2 104 7.32 12.2 5 3.29 \n3 89 8.86 6.6 7 1.78 \n4 121 8.41 10.1 3 2.73 \n\n CustServ Calls Churn? Total Mins Total Calls \n0 1 False. 707.2 300 \n1 1 False. 611.5 329 \n2 0 False. 527.2 328 \n3 2 False. 558.2 248 \n4 3 False. 501.9 356 \n\n[5 rows x 23 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Night MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?Total MinsTotal Calls
0KS128415382-4657noyes25265.111045.07...244.79111.0110.032.701False.707.2300
1OH107415371-7191noyes26161.612327.47...254.410311.4513.733.701False.611.5329
2NJ137415358-1921nono0243.411441.38...162.61047.3212.253.290False.527.2328
3OH84408375-9999yesno0299.47150.90...196.9898.866.671.782False.558.2248
4OK75415330-6626yesno0166.711328.34...186.91218.4110.132.733False.501.9356
\n

5 rows × 23 columns

\n
" + }, + "metadata": {}, + "execution_count": 36 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generación de números aleatorios" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "31" + }, + "metadata": {}, + "execution_count": 38 + } + ], + "source": [ + "### Generar un número aleatorio entero entre 1 y 100\n", + "np.random.randint(1,100)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.5738206559642778" + }, + "metadata": {}, + "execution_count": 39 + } + ], + "source": [ + "### La forma más clásica de generar un número aleatorio es entre 0 y 1 (con decimales)\n", + "np.random.random()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "### Función que genera una lista de n números aleatorios enteros dentro del intervalo [a,b]\n", + "def randint_list(n, a, b):\n", + " x = []\n", + " for i in range(n):\n", + " x.append(np.random.randint(a,b))\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[38,\n 4,\n 47,\n 33,\n 6,\n 9,\n 18,\n 13,\n 37,\n 41,\n 4,\n 49,\n 44,\n 49,\n 20,\n 43,\n 2,\n 33,\n 25,\n 21,\n 4,\n 42,\n 3,\n 22,\n 14]" + }, + "metadata": {}, + "execution_count": 41 + } + ], + "source": [ + "randint_list(25,1,50)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "70" + }, + "metadata": {}, + "execution_count": 43 + } + ], + "source": [ + "random.randrange(0,100,7)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "63\n42\n28\n91\n98\n63\n7\n35\n70\n77\n" + } + ], + "source": [ + "for i in range(10):\n", + " print(random.randrange(0,100,7))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Shuffling" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,\n 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,\n 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])" + }, + "metadata": {}, + "execution_count": 45 + } + ], + "source": [ + "a = np.arange(100)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([70, 85, 6, 38, 51, 32, 18, 75, 88, 31, 37, 86, 60, 43, 40, 26, 30,\n 89, 22, 21, 27, 2, 72, 17, 99, 16, 4, 79, 25, 96, 98, 44, 71, 3,\n 95, 20, 12, 94, 91, 57, 46, 80, 53, 73, 15, 42, 14, 84, 56, 10, 58,\n 7, 97, 36, 28, 5, 83, 69, 33, 93, 87, 35, 76, 50, 1, 90, 8, 19,\n 11, 39, 54, 62, 47, 0, 74, 41, 92, 24, 23, 13, 55, 34, 67, 66, 61,\n 49, 9, 29, 65, 59, 77, 78, 52, 81, 68, 45, 48, 64, 63, 82])" + }, + "metadata": {}, + "execution_count": 46 + } + ], + "source": [ + "np.random.shuffle(a)\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Choice" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n0 KS 128 415 382-4657 no yes \n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n\n VMail Message Day Mins Day Calls Day Charge ... Night Mins \\\n0 25 265.1 110 45.07 ... 244.7 \n1 26 161.6 123 27.47 ... 254.4 \n2 0 243.4 114 41.38 ... 162.6 \n3 0 299.4 71 50.90 ... 196.9 \n4 0 166.7 113 28.34 ... 186.9 \n\n Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n0 91 11.01 10.0 3 2.70 \n1 103 11.45 13.7 3 3.70 \n2 104 7.32 12.2 5 3.29 \n3 89 8.86 6.6 7 1.78 \n4 121 8.41 10.1 3 2.73 \n\n CustServ Calls Churn? Total Mins Total Calls \n0 1 False. 707.2 300 \n1 1 False. 611.5 329 \n2 0 False. 527.2 328 \n3 2 False. 558.2 248 \n4 3 False. 501.9 356 \n\n[5 rows x 23 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Night MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?Total MinsTotal Calls
0KS128415382-4657noyes25265.111045.07...244.79111.0110.032.701False.707.2300
1OH107415371-7191noyes26161.612327.47...254.410311.4513.733.701False.611.5329
2NJ137415358-1921nono0243.411441.38...162.61047.3212.253.290False.527.2328
3OH84408375-9999yesno0299.47150.90...196.9898.866.671.782False.558.2248
4OK75415330-6626yesno0166.711328.34...186.91218.4110.132.733False.501.9356
\n

5 rows × 23 columns

\n
" + }, + "metadata": {}, + "execution_count": 47 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(3333, 23)" + }, + "metadata": {}, + "execution_count": 48 + } + ], + "source": [ + "data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['State',\n 'Account Length',\n 'Area Code',\n 'Phone',\n \"Int'l Plan\",\n 'VMail Plan',\n 'VMail Message',\n 'Day Mins',\n 'Day Calls',\n 'Day Charge',\n 'Eve Mins',\n 'Eve Calls',\n 'Eve Charge',\n 'Night Mins',\n 'Night Calls',\n 'Night Charge',\n 'Intl Mins',\n 'Intl Calls',\n 'Intl Charge',\n 'CustServ Calls',\n 'Churn?',\n 'Total Mins',\n 'Total Calls']" + }, + "metadata": {}, + "execution_count": 49 + } + ], + "source": [ + "column_list = data.columns.values.tolist()\n", + "column_list" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "'Account Length'" + }, + "metadata": {}, + "execution_count": 53 + } + ], + "source": [ + "np.random.choice(column_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Seed" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "0.8823493117539459\n0.10432773786047767\n0.9070093335163405\n0.3063988986063515\n0.446408872427422\n" + } + ], + "source": [ + "np.random.seed(2018)\n", + "for i in range(5):\n", + " print(np.random.random())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "version": "3.7.4-final" + }, + "orig_nbformat": 2, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3, + "kernelspec": { + "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45", + "display_name": "Python 3.7.4 64-bit ('base': conda)" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git "a/scratch/T2 - 2 - Data Cleaning - Funciones de distribuci\303\263n de probabilidad.ipynb" "b/scratch/T2 - 2 - Data Cleaning - Funciones de distribuci\303\263n de probabilidad.ipynb" new file mode 100644 index 00000000..3b21353f --- /dev/null +++ "b/scratch/T2 - 2 - Data Cleaning - Funciones de distribuci\303\263n de probabilidad.ipynb" @@ -0,0 +1,569 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Funcionesde distribución de probabilidad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Distribución Uniforme" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "a = 1\n", + "b = 100\n", + "n = 200\n", + "data = np.random.uniform(a, b, n)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([22., 20., 13., 28., 14., 16., 31., 21., 17., 18.]),\n array([ 1.55255775, 11.31181219, 21.07106662, 30.83032106, 40.5895755 ,\n 50.34882993, 60.10808437, 69.8673388 , 79.62659324, 89.38584768,\n 99.14510211]),\n )" + }, + "metadata": {}, + "execution_count": 41 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "plt.hist(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Distribución Normal" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.random.randn(1000000)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 43 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "x = range(1,1000001)\n", + "plt.plot(x, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([1.02000e+02, 2.71100e+03, 3.46230e+04, 1.79489e+05, 3.68143e+05,\n 3.02156e+05, 9.91140e+04, 1.30450e+04, 6.09000e+02, 8.00000e+00]),\n array([-4.76604668, -3.76954746, -2.77304823, -1.77654901, -0.78004979,\n 0.21644943, 1.21294866, 2.20944788, 3.2059471 , 4.20244632,\n 5.19894555]),\n )" + }, + "metadata": {}, + "execution_count": 44 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "plt.hist(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 45 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(x,sorted(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 16., 104., 507., 1442., 2612., 2755., 1651., 710., 175.,\n 28.]),\n array([-3.56928365, -1.79851648, -0.0277493 , 1.74301787, 3.51378505,\n 5.28455222, 7.05531939, 8.82608657, 10.59685374, 12.36762092,\n 14.13838809]),\n )" + }, + "metadata": {}, + "execution_count": 46 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "# Generar nuestra propia distribución normal\n", + "mu = 5.5\n", + "sd = 2.5\n", + "data = mu + sd * np.random.randn(10000) # z = (x - mu) / sd -> N(0,1), x = mu + sd * z\n", + "plt.hist(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([[-1.14052828, -0.94925133, -0.82011929, 1.54816167],\n [ 0.61757105, 1.61850134, 0.56472397, 2.48627858]])" + }, + "metadata": {}, + "execution_count": 47 + } + ], + "source": [ + "data = np.random.randn(2,4)\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## La simulación de Monte-Carlo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Generamos dos números aleatorios x e y entre 0 y 1\n", + "* Calcularemos x * x + y * y\n", + " * Si el valor es inferior a 1 -> estamos dentro del círculo\n", + " * Si el valor es supeior a 1 -> estamos fuera del círculo\n", + "* Calculamos el número total de veces que están dentro del círculo y lo dividimos entre el número total de intentos para obtener una aproximación de la probabilidad de caer dentro del círculo.\n", + "* Usamos dicha probabilidad para aproximar el valor de PI.\n", + "* Repetiremos el experimento un número suficiente de veces (por ejemplo 1000), para obtener (1000) diferentes aproximaciones de PI.\n", + "* Calculamos el promedio de los 1000 experimentos anteriores para dar un valor final a PI. " + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "def pi_montecarlo(n, n_exp):\n", + " pi_avg = 0\n", + " pi_value_list = []\n", + " for i in range(n_exp):\n", + " value = 0\n", + " x = np.random.uniform(0,1,n).tolist()\n", + " y = np.random.uniform(0,1,n).tolist()\n", + " for j in range(n):\n", + " z = np.sqrt(x[j] * x[j] + y[j] * y[j]) \n", + " if z <= 1:\n", + " value += 1\n", + " float_value = float(value)\n", + " pi_value = float_value * 4 / n\n", + " pi_value_list.append(pi_value)\n", + " pi_avg += pi_value\n", + " pi = pi_avg/n_exp\n", + "\n", + " print(pi)\n", + " return (pi, plt.plot(pi_value_list))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "3.141822000000001\n" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "(3.141822000000001, [])" + }, + "metadata": {}, + "execution_count": 49 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "pi_montecarlo(10000,200)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dummy Data Sets" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "n = 1000000\n", + "data = pd.DataFrame(\n", + " {\n", + " 'A' : np.random.randn(n),\n", + " 'B' : 1.5 + 2.5 * np.random.randn(n),\n", + " 'C' : np.random.uniform(5, 32, n)\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " A B C\n0 0.459402 -0.179924 8.993737\n1 0.432205 3.317874 19.616762\n2 -1.775045 -2.481288 13.011111\n3 -1.881380 4.478374 24.142000\n4 -0.621718 3.286841 26.707542", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ABC
00.459402-0.1799248.993737
10.4322053.31787419.616762
2-1.775045-2.48128813.011111
3-1.8813804.47837424.142000
4-0.6217183.28684126.707542
\n
" + }, + "metadata": {}, + "execution_count": 56 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " A B C\ncount 1000000.000000 1000000.000000 1000000.000000\nmean 0.000105 1.500627 18.499926\nstd 1.000304 2.496344 7.799350\nmin -4.635824 -9.939073 5.000004\n25% -0.674967 -0.182305 11.743574\n50% -0.002076 1.501585 18.501807\n75% 0.675022 3.184989 25.268787\nmax 4.711265 13.323347 31.999970", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ABC
count1000000.0000001000000.0000001000000.000000
mean0.0001051.50062718.499926
std1.0003042.4963447.799350
min-4.635824-9.9390735.000004
25%-0.674967-0.18230511.743574
50%-0.0020761.50158518.501807
75%0.6750223.18498925.268787
max4.71126513.32334731.999970
\n
" + }, + "metadata": {}, + "execution_count": 57 + } + ], + "source": [ + "data.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([9.90000e+01, 2.66400e+03, 3.06480e+04, 1.51461e+05, 3.30768e+05,\n 3.18975e+05, 1.36914e+05, 2.61740e+04, 2.22300e+03, 7.40000e+01]),\n array([-4.63582411, -3.70111519, -2.76640628, -1.83169736, -0.89698844,\n 0.03772047, 0.97242939, 1.9071383 , 2.84184722, 3.77655614,\n 4.71126505]),\n
)" + }, + "metadata": {}, + "execution_count": 58 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"A\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([1.45000e+02, 3.15600e+03, 3.40710e+04, 1.58665e+05, 3.34118e+05,\n 3.13207e+05, 1.30556e+05, 2.41740e+04, 1.84500e+03, 6.30000e+01]),\n array([-9.93907295, -7.61283094, -5.28658892, -2.96034691, -0.63410489,\n 1.69213712, 4.01837914, 6.34462116, 8.67086317, 10.99710519,\n 13.3233472 ]),\n )" + }, + "metadata": {}, + "execution_count": 59 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"B\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([100310., 99977., 100105., 99708., 99837., 99992., 99751.,\n 99757., 100425., 100138.]),\n array([ 5.00000392, 7.70000055, 10.39999718, 13.09999381, 15.79999044,\n 18.49998707, 21.1999837 , 23.89998033, 26.59997695, 29.29997358,\n 31.99997021]),\n )" + }, + "metadata": {}, + "execution_count": 60 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"C\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/customer-churn-model/Customer Churn Model.txt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n0 KS 128 415 382-4657 no yes \n1 OH 107 415 371-7191 no yes \n2 NJ 137 415 358-1921 no no \n3 OH 84 408 375-9999 yes no \n4 OK 75 415 330-6626 yes no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge \\\n0 25 265.1 110 45.07 ... 99 16.78 \n1 26 161.6 123 27.47 ... 103 16.62 \n2 0 243.4 114 41.38 ... 110 10.30 \n3 0 299.4 71 50.90 ... 88 5.26 \n4 0 166.7 113 28.34 ... 122 12.61 \n\n Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge \\\n0 244.7 91 11.01 10.0 3 2.70 \n1 254.4 103 11.45 13.7 3 3.70 \n2 162.6 104 7.32 12.2 5 3.29 \n3 196.9 89 8.86 6.6 7 1.78 \n4 186.9 121 8.41 10.1 3 2.73 \n\n CustServ Calls Churn? \n0 1 False. \n1 1 False. \n2 0 False. \n3 2 False. \n4 3 False. \n\n[5 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
0KS128415382-4657noyes25265.111045.07...9916.78244.79111.0110.032.701False.
1OH107415371-7191noyes26161.612327.47...10316.62254.410311.4513.733.701False.
2NJ137415358-1921nono0243.411441.38...11010.30162.61047.3212.253.290False.
3OH84408375-9999yesno0299.47150.90...885.26196.9898.866.671.782False.
4OK75415330-6626yesno0166.711328.34...12212.61186.91218.4110.132.733False.
\n

5 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 67 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "colum_names = data.columns.values.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "21" + }, + "metadata": {}, + "execution_count": 69 + } + ], + "source": [ + "a = len(colum_names)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "new_data = pd.DataFrame(\n", + " {\n", + " 'Column Name' : colum_names,\n", + " 'A' : np.random.randn(a),\n", + " 'B' : np.random.uniform(0,1,a)\n", + " }, index = range(42, 42 + a)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Column Name A B\n42 State 2.064734 0.949781\n43 Account Length -1.083645 0.676468\n44 Area Code 1.237574 0.307111\n45 Phone -0.021266 0.801347\n46 Int'l Plan 0.023434 0.228772\n47 VMail Plan 0.822456 0.065225\n48 VMail Message -0.312629 0.778738\n49 Day Mins 1.053152 0.060335\n50 Day Calls -1.399244 0.722378\n51 Day Charge -1.971448 0.124607\n52 Eve Mins 0.311641 0.189084\n53 Eve Calls -1.187583 0.644716\n54 Eve Charge -0.383881 0.363445\n55 Night Mins -1.556619 0.859548\n56 Night Calls -0.904272 0.530129\n57 Night Charge -0.871204 0.405712\n58 Intl Mins -0.282519 0.532047\n59 Intl Calls 0.314266 0.671893\n60 Intl Charge 0.153121 0.697902\n61 CustServ Calls -0.187246 0.225129\n62 Churn? 0.107535 0.737828", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Column NameAB
42State2.0647340.949781
43Account Length-1.0836450.676468
44Area Code1.2375740.307111
45Phone-0.0212660.801347
46Int'l Plan0.0234340.228772
47VMail Plan0.8224560.065225
48VMail Message-0.3126290.778738
49Day Mins1.0531520.060335
50Day Calls-1.3992440.722378
51Day Charge-1.9714480.124607
52Eve Mins0.3116410.189084
53Eve Calls-1.1875830.644716
54Eve Charge-0.3838810.363445
55Night Mins-1.5566190.859548
56Night Calls-0.9042720.530129
57Night Charge-0.8712040.405712
58Intl Mins-0.2825190.532047
59Intl Calls0.3142660.671893
60Intl Charge0.1531210.697902
61CustServ Calls-0.1872460.225129
62Churn?0.1075350.737828
\n
" + }, + "metadata": {}, + "execution_count": 76 + } + ], + "source": [ + "new_data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.7.4 64-bit ('base': conda)", + "language": "python", + "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45" + }, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git "a/scratch/T2 - 3 - Data Cleaning - Agrupaci\303\263n de datos.ipynb" "b/scratch/T2 - 3 - Data Cleaning - Agrupaci\303\263n de datos.ipynb" new file mode 100644 index 00000000..66ff49ee --- /dev/null +++ "b/scratch/T2 - 3 - Data Cleaning - Agrupaci\303\263n de datos.ipynb" @@ -0,0 +1,1049 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Agregación de datos por categoría" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "gender = [\"Male\", \"Female\"]\n", + "income = [\"Poor\", \"Middle Class\", \"Rich\"]\n", + "religion = [\"Catolica\", \"Cristiana\", \"Atea\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "n = 500 \n", + "\n", + "gender_data = []\n", + "income_data = []\n", + "religion_data = []\n", + "\n", + "for i in range(0, n):\n", + " gender_data.append(np.random.choice(gender))\n", + " income_data.append(np.random.choice(income))\n", + " religion_data.append(np.random.choice(religion))" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['Male',\n 'Male',\n 'Female',\n 'Female',\n 'Female',\n 'Male',\n 'Female',\n 'Male',\n 'Female']" + }, + "metadata": {}, + "execution_count": 74 + } + ], + "source": [ + "gender_data[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['Middle Class',\n 'Rich',\n 'Poor',\n 'Middle Class',\n 'Middle Class',\n 'Poor',\n 'Rich',\n 'Rich',\n 'Middle Class']" + }, + "metadata": {}, + "execution_count": 75 + } + ], + "source": [ + "income_data[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['Cristiana',\n 'Catolica',\n 'Atea',\n 'Catolica',\n 'Atea',\n 'Cristiana',\n 'Cristiana',\n 'Catolica',\n 'Atea']" + }, + "metadata": {}, + "execution_count": 76 + } + ], + "source": [ + "religion_data[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [], + "source": [ + "# z -> N(0,1)\n", + "# N(m, s) -> m + s * z\n", + "\n", + "height = 160 + 30 * np.random.randn(n)\n", + "weight = 65 + 25 * np.random.randn(n)\n", + "age = 30 + 12 * np.random.randn(n)\n", + "income = 18000 + 3500 *np.random.randn(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.DataFrame(\n", + " {\n", + " \"Gender\" : gender_data,\n", + " \"Economic Status\" : income_data,\n", + " \"Height\" : height,\n", + " \"Weight\" : weight,\n", + " \"Age\" : age,\n", + " \"Income\" : income\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n0 Male Middle Class 137.908120 82.795885 17.956254 20996.621555\n1 Male Middle Class 225.030922 81.801529 12.663339 25088.697310\n2 Male Rich 103.395009 52.924286 23.085472 16031.358534\n3 Female Poor 191.320809 109.246958 43.643251 23331.963906\n4 Female Middle Class 177.575859 101.706515 41.805981 19443.643634", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
0MaleMiddle Class137.90812082.79588517.95625420996.621555
1MaleMiddle Class225.03092281.80152912.66333925088.697310
2MaleRich103.39500952.92428623.08547216031.358534
3FemalePoor191.320809109.24695843.64325123331.963906
4FemaleMiddle Class177.575859101.70651541.80598119443.643634
\n
" + }, + "metadata": {}, + "execution_count": 79 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Agrupación de datos" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "grouped_gender = data.groupby(\"Gender\")" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "{'Female': Int64Index([ 3, 4, 5, 7, 9, 10, 12, 13, 14, 16,\n ...\n 476, 477, 482, 483, 484, 485, 491, 495, 496, 497],\n dtype='int64', length=234),\n 'Male': Int64Index([ 0, 1, 2, 6, 8, 11, 15, 17, 18, 19,\n ...\n 486, 487, 488, 489, 490, 492, 493, 494, 498, 499],\n dtype='int64', length=266)}" + }, + "metadata": {}, + "execution_count": 81 + } + ], + "source": [ + "grouped_gender.groups" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "Female\n Gender Economic Status Height Weight Age Income\n3 Female Poor 191.320809 109.246958 43.643251 23331.963906\n4 Female Middle Class 177.575859 101.706515 41.805981 19443.643634\n5 Female Middle Class 165.336778 36.294863 9.393712 16583.234151\n7 Female Rich 202.368736 48.838333 24.954494 21769.196284\n9 Female Middle Class 197.570978 80.451294 28.241586 21053.856942\n.. ... ... ... ... ... ...\n485 Female Middle Class 201.787437 30.640316 63.252944 13562.648695\n491 Female Middle Class 154.807416 47.537277 31.064185 12026.248565\n495 Female Rich 131.497665 89.031399 20.300270 13315.800799\n496 Female Rich 130.296930 48.729713 31.950557 22441.710828\n497 Female Middle Class 142.294451 62.327304 13.972160 18534.784189\n\n[234 rows x 6 columns]\nMale\n Gender Economic Status Height Weight Age Income\n0 Male Middle Class 137.908120 82.795885 17.956254 20996.621555\n1 Male Middle Class 225.030922 81.801529 12.663339 25088.697310\n2 Male Rich 103.395009 52.924286 23.085472 16031.358534\n6 Male Poor 167.209354 36.495428 36.084783 26034.382928\n8 Male Rich 136.527967 77.573778 20.476402 18957.859078\n.. ... ... ... ... ... ...\n492 Male Poor 168.343504 42.709051 31.047280 18622.351483\n493 Male Rich 202.937452 101.996988 28.603263 20392.309117\n494 Male Rich 228.120172 71.748480 47.375524 20948.772800\n498 Male Middle Class 137.654015 90.267841 29.066714 20582.413558\n499 Male Rich 118.725577 116.067448 18.672584 13598.050349\n\n[266 rows x 6 columns]\n" + } + ], + "source": [ + "for names, groups in grouped_gender:\n", + " print(names)\n", + " print(groups)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n3 Female Poor 191.320809 109.246958 43.643251 23331.963906\n4 Female Middle Class 177.575859 101.706515 41.805981 19443.643634\n5 Female Middle Class 165.336778 36.294863 9.393712 16583.234151\n7 Female Rich 202.368736 48.838333 24.954494 21769.196284\n9 Female Middle Class 197.570978 80.451294 28.241586 21053.856942\n.. ... ... ... ... ... ...\n485 Female Middle Class 201.787437 30.640316 63.252944 13562.648695\n491 Female Middle Class 154.807416 47.537277 31.064185 12026.248565\n495 Female Rich 131.497665 89.031399 20.300270 13315.800799\n496 Female Rich 130.296930 48.729713 31.950557 22441.710828\n497 Female Middle Class 142.294451 62.327304 13.972160 18534.784189\n\n[234 rows x 6 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
3FemalePoor191.320809109.24695843.64325123331.963906
4FemaleMiddle Class177.575859101.70651541.80598119443.643634
5FemaleMiddle Class165.33677836.2948639.39371216583.234151
7FemaleRich202.36873648.83833324.95449421769.196284
9FemaleMiddle Class197.57097880.45129428.24158621053.856942
.....................
485FemaleMiddle Class201.78743730.64031663.25294413562.648695
491FemaleMiddle Class154.80741647.53727731.06418512026.248565
495FemaleRich131.49766589.03139920.30027013315.800799
496FemaleRich130.29693048.72971331.95055722441.710828
497FemaleMiddle Class142.29445162.32730413.97216018534.784189
\n

234 rows × 6 columns

\n
" + }, + "metadata": {}, + "execution_count": 83 + } + ], + "source": [ + "grouped_gender.get_group(\"Female\")" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "double_group = data.groupby([\"Gender\", \"Economic Status\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6" + }, + "metadata": {}, + "execution_count": 85 + } + ], + "source": [ + "len(double_group)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "('Female', 'Middle Class')\n Gender Economic Status Height Weight Age Income\n4 Female Middle Class 177.575859 101.706515 41.805981 19443.643634\n5 Female Middle Class 165.336778 36.294863 9.393712 16583.234151\n9 Female Middle Class 197.570978 80.451294 28.241586 21053.856942\n12 Female Middle Class 206.830765 38.749039 15.565446 23074.712184\n16 Female Middle Class 178.222931 81.950567 22.660157 21408.657463\n.. ... ... ... ... ... ...\n477 Female Middle Class 106.361620 93.149866 14.389006 16119.671670\n484 Female Middle Class 150.276331 29.274715 37.499921 14401.620104\n485 Female Middle Class 201.787437 30.640316 63.252944 13562.648695\n491 Female Middle Class 154.807416 47.537277 31.064185 12026.248565\n497 Female Middle Class 142.294451 62.327304 13.972160 18534.784189\n\n[72 rows x 6 columns]\n('Female', 'Poor')\n Gender Economic Status Height Weight Age Income\n3 Female Poor 191.320809 109.246958 43.643251 23331.963906\n14 Female Poor 138.248097 72.914932 34.552739 21131.132339\n29 Female Poor 158.288030 69.383530 27.255319 22509.054710\n35 Female Poor 161.207498 62.048297 56.785802 22109.157412\n41 Female Poor 163.067779 42.622682 45.781862 20213.693286\n.. ... ... ... ... ... ...\n415 Female Poor 126.723591 57.848047 43.226231 20088.831502\n421 Female Poor 139.254684 31.594096 35.952976 13656.709045\n457 Female Poor 115.180786 33.106761 37.359967 17129.224156\n466 Female Poor 130.465156 84.210524 45.844388 19910.073269\n482 Female Poor 157.175130 62.539977 42.918571 23685.324030\n\n[84 rows x 6 columns]\n('Female', 'Rich')\n Gender Economic Status Height Weight Age Income\n7 Female Rich 202.368736 48.838333 24.954494 21769.196284\n10 Female Rich 165.989612 74.212534 50.702016 21641.607669\n13 Female Rich 132.861468 19.771442 34.811571 14417.322678\n26 Female Rich 122.005913 28.049326 41.600512 17285.487847\n51 Female Rich 136.581384 60.919712 23.240242 16955.237781\n.. ... ... ... ... ... ...\n475 Female Rich 168.632049 58.736414 34.055432 18854.404897\n476 Female Rich 126.528545 75.682567 49.721268 17785.259266\n483 Female Rich 128.967857 51.026261 24.486608 16237.123438\n495 Female Rich 131.497665 89.031399 20.300270 13315.800799\n496 Female Rich 130.296930 48.729713 31.950557 22441.710828\n\n[78 rows x 6 columns]\n('Male', 'Middle Class')\n Gender Economic Status Height Weight Age Income\n0 Male Middle Class 137.908120 82.795885 17.956254 20996.621555\n1 Male Middle Class 225.030922 81.801529 12.663339 25088.697310\n18 Male Middle Class 122.006401 56.277052 34.520513 18805.081061\n19 Male Middle Class 162.439128 72.021414 12.655463 25980.885784\n22 Male Middle Class 131.609813 81.245582 34.019179 14200.464517\n.. ... ... ... ... ... ...\n461 Male Middle Class 186.961965 56.832493 16.393340 20749.047114\n464 Male Middle Class 209.822062 42.558823 41.059639 13936.446351\n486 Male Middle Class 124.140000 70.303256 22.896730 17105.658067\n489 Male Middle Class 172.004985 30.308493 20.668982 17000.713320\n498 Male Middle Class 137.654015 90.267841 29.066714 20582.413558\n\n[89 rows x 6 columns]\n('Male', 'Poor')\n Gender Economic Status Height Weight Age Income\n6 Male Poor 167.209354 36.495428 36.084783 26034.382928\n11 Male Poor 183.576849 15.448080 35.819098 17548.950452\n21 Male Poor 170.216607 65.526387 22.766972 21101.439972\n36 Male Poor 184.839846 54.774836 5.624462 16196.840803\n37 Male Poor 140.285851 89.918523 35.455996 15112.341051\n.. ... ... ... ... ... ...\n479 Male Poor 151.875073 5.969566 28.914249 27912.380521\n480 Male Poor 159.935162 56.776948 27.654425 17840.459762\n487 Male Poor 134.041939 112.238430 55.363725 20765.601038\n490 Male Poor 161.019896 41.328741 24.157446 20445.818302\n492 Male Poor 168.343504 42.709051 31.047280 18622.351483\n\n[90 rows x 6 columns]\n('Male', 'Rich')\n Gender Economic Status Height Weight Age Income\n2 Male Rich 103.395009 52.924286 23.085472 16031.358534\n8 Male Rich 136.527967 77.573778 20.476402 18957.859078\n15 Male Rich 105.480167 63.424531 51.384725 21812.139397\n17 Male Rich 137.111661 16.143032 34.040955 22012.503924\n27 Male Rich 204.911049 66.816274 23.930933 16274.604898\n.. ... ... ... ... ... ...\n481 Male Rich 160.650951 61.489385 41.958201 19695.419855\n488 Male Rich 120.280234 79.204980 44.189815 17398.022870\n493 Male Rich 202.937452 101.996988 28.603263 20392.309117\n494 Male Rich 228.120172 71.748480 47.375524 20948.772800\n499 Male Rich 118.725577 116.067448 18.672584 13598.050349\n\n[87 rows x 6 columns]\n" + } + ], + "source": [ + "for names, groups in double_group:\n", + " print(names)\n", + " print(groups)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operaciones sobre datos agrupados" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height Weight Age Income\nGender Economic Status \nFemale Middle Class 11734.957123 4466.602458 2146.287619 1.298767e+06\n Poor 13508.976532 5223.995119 2538.090845 1.521119e+06\n Rich 12259.980674 5045.140952 2522.951113 1.407588e+06\nMale Middle Class 14063.306445 6218.415317 2683.903712 1.562747e+06\n Poor 14753.554894 5906.533783 2631.470556 1.649761e+06\n Rich 13410.318775 5568.352973 2560.078738 1.550681e+06", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeightAgeIncome
GenderEconomic Status
FemaleMiddle Class11734.9571234466.6024582146.2876191.298767e+06
Poor13508.9765325223.9951192538.0908451.521119e+06
Rich12259.9806745045.1409522522.9511131.407588e+06
MaleMiddle Class14063.3064456218.4153172683.9037121.562747e+06
Poor14753.5548945906.5337832631.4705561.649761e+06
Rich13410.3187755568.3529732560.0787381.550681e+06
\n
" + }, + "metadata": {}, + "execution_count": 87 + } + ], + "source": [ + "double_group.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height Weight Age Income\nGender Economic Status \nFemale Middle Class 162.985516 62.036145 29.809550 18038.427002\n Poor 160.821149 62.190418 30.215367 18108.561143\n Rich 157.179239 64.681294 32.345527 18046.000231\nMale Middle Class 158.014679 69.869835 30.156221 17558.949815\n Poor 163.928388 65.628153 29.238562 18330.676883\n Rich 154.141595 64.004057 29.426192 17823.917019", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeightAgeIncome
GenderEconomic Status
FemaleMiddle Class162.98551662.03614529.80955018038.427002
Poor160.82114962.19041830.21536718108.561143
Rich157.17923964.68129432.34552718046.000231
MaleMiddle Class158.01467969.86983530.15622117558.949815
Poor163.92838865.62815329.23856218330.676883
Rich154.14159564.00405729.42619217823.917019
\n
" + }, + "metadata": {}, + "execution_count": 88 + } + ], + "source": [ + "double_group.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Gender Economic Status\nFemale Middle Class 72\n Poor 84\n Rich 78\nMale Middle Class 89\n Poor 90\n Rich 87\ndtype: int64" + }, + "metadata": {}, + "execution_count": 89 + } + ], + "source": [ + "double_group.size()" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height \\\n count mean std min 25% \nGender Economic Status \nFemale Middle Class 72.0 162.985516 28.925083 100.167174 144.199855 \n Poor 84.0 160.821149 31.773434 64.311164 138.196437 \n Rich 78.0 157.179239 29.266919 102.750138 133.870742 \nMale Middle Class 89.0 158.014679 31.408297 83.783662 137.908120 \n Poor 90.0 163.928388 31.368017 74.023552 144.775095 \n Rich 87.0 154.141595 35.258619 61.218745 127.889964 \n\n Weight \\\n 50% 75% max count mean \nGender Economic Status \nFemale Middle Class 156.800582 182.777061 234.343421 72.0 62.036145 \n Poor 161.122473 185.326335 235.683228 84.0 62.190418 \n Rich 156.253371 176.086791 231.273739 78.0 64.681294 \nMale Middle Class 157.359127 177.857875 230.334671 89.0 69.869835 \n Poor 164.404808 183.419221 250.511442 90.0 65.628153 \n Rich 158.424091 181.924591 228.120172 87.0 64.004057 \n\n ... Age Income \\\n ... 75% max count mean \nGender Economic Status ... \nFemale Middle Class ... 41.032956 63.497031 72.0 18038.427002 \n Poor ... 39.241470 56.785802 84.0 18108.561143 \n Rich ... 39.037707 63.960341 78.0 18046.000231 \nMale Middle Class ... 38.266501 59.446353 89.0 17558.949815 \n Poor ... 37.810330 60.431889 90.0 18330.676883 \n Rich ... 36.083879 51.384725 87.0 17823.917019 \n\n \\\n std min 25% 50% \nGender Economic Status \nFemale Middle Class 3303.245435 10147.307869 15488.524465 18538.938827 \n Poor 3554.282380 9365.623507 15856.479856 18424.327923 \n Rich 3297.862045 9359.111730 15956.115434 18137.484322 \nMale Middle Class 3674.230886 7776.201367 15705.982979 17854.238724 \n Poor 3142.560348 12665.056518 15930.248632 18295.348573 \n Rich 3791.631620 6975.893004 15775.319808 18059.177582 \n\n \n 75% max \nGender Economic Status \nFemale Middle Class 20733.112945 23183.993721 \n Poor 20679.837687 24434.850264 \n Rich 20319.223074 26658.110903 \nMale Middle Class 19667.512032 26038.544819 \n Poor 20429.550722 27912.380521 \n Rich 20331.399617 25918.412913 \n\n[6 rows x 32 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeight...AgeIncome
countmeanstdmin25%50%75%maxcountmean...75%maxcountmeanstdmin25%50%75%max
GenderEconomic Status
FemaleMiddle Class72.0162.98551628.925083100.167174144.199855156.800582182.777061234.34342172.062.036145...41.03295663.49703172.018038.4270023303.24543510147.30786915488.52446518538.93882720733.11294523183.993721
Poor84.0160.82114931.77343464.311164138.196437161.122473185.326335235.68322884.062.190418...39.24147056.78580284.018108.5611433554.2823809365.62350715856.47985618424.32792320679.83768724434.850264
Rich78.0157.17923929.266919102.750138133.870742156.253371176.086791231.27373978.064.681294...39.03770763.96034178.018046.0002313297.8620459359.11173015956.11543418137.48432220319.22307426658.110903
MaleMiddle Class89.0158.01467931.40829783.783662137.908120157.359127177.857875230.33467189.069.869835...38.26650159.44635389.017558.9498153674.2308867776.20136715705.98297917854.23872419667.51203226038.544819
Poor90.0163.92838831.36801774.023552144.775095164.404808183.419221250.51144290.065.628153...37.81033060.43188990.018330.6768833142.56034812665.05651815930.24863218295.34857320429.55072227912.380521
Rich87.0154.14159535.25861961.218745127.889964158.424091181.924591228.12017287.064.004057...36.08387951.38472587.017823.9170193791.6316206975.89300415775.31980818059.17758220331.39961725918.412913
\n

6 rows × 32 columns

\n
" + }, + "metadata": {}, + "execution_count": 90 + } + ], + "source": [ + "double_group.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " count mean std min \\\nGender Economic Status \nFemale Middle Class 72.0 18038.427002 3303.245435 10147.307869 \n Poor 84.0 18108.561143 3554.282380 9365.623507 \n Rich 78.0 18046.000231 3297.862045 9359.111730 \nMale Middle Class 89.0 17558.949815 3674.230886 7776.201367 \n Poor 90.0 18330.676883 3142.560348 12665.056518 \n Rich 87.0 17823.917019 3791.631620 6975.893004 \n\n 25% 50% 75% max \nGender Economic Status \nFemale Middle Class 15488.524465 18538.938827 20733.112945 23183.993721 \n Poor 15856.479856 18424.327923 20679.837687 24434.850264 \n Rich 15956.115434 18137.484322 20319.223074 26658.110903 \nMale Middle Class 15705.982979 17854.238724 19667.512032 26038.544819 \n Poor 15930.248632 18295.348573 20429.550722 27912.380521 \n Rich 15775.319808 18059.177582 20331.399617 25918.412913 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
countmeanstdmin25%50%75%max
GenderEconomic Status
FemaleMiddle Class72.018038.4270023303.24543510147.30786915488.52446518538.93882720733.11294523183.993721
Poor84.018108.5611433554.2823809365.62350715856.47985618424.32792320679.83768724434.850264
Rich78.018046.0002313297.8620459359.11173015956.11543418137.48432220319.22307426658.110903
MaleMiddle Class89.017558.9498153674.2308867776.20136715705.98297917854.23872419667.51203226038.544819
Poor90.018330.6768833142.56034812665.05651815930.24863218295.34857320429.55072227912.380521
Rich87.017823.9170193791.6316206975.89300415775.31980818059.17758220331.39961725918.412913
\n
" + }, + "metadata": {}, + "execution_count": 91 + } + ], + "source": [ + "grouped_income = double_group[\"Income\"]\n", + "grouped_income.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Income Age Height\nGender Economic Status \nFemale Middle Class 1.298767e+06 29.809550 28.925083\n Poor 1.521119e+06 30.215367 31.773434\n Rich 1.407588e+06 32.345527 29.266919\nMale Middle Class 1.562747e+06 30.156221 31.408297\n Poor 1.649761e+06 29.238562 31.368017\n Rich 1.550681e+06 29.426192 35.258619", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
IncomeAgeHeight
GenderEconomic Status
FemaleMiddle Class1.298767e+0629.80955028.925083
Poor1.521119e+0630.21536731.773434
Rich1.407588e+0632.34552729.266919
MaleMiddle Class1.562747e+0630.15622131.408297
Poor1.649761e+0629.23856231.368017
Rich1.550681e+0629.42619235.258619
\n
" + }, + "metadata": {}, + "execution_count": 92 + } + ], + "source": [ + "double_group.aggregate(\n", + " {\n", + " \"Income\" : np.sum,\n", + " \"Age\" : np.mean,\n", + " \"Height\" : np.std\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Age Height\nGender Economic Status \nFemale Middle Class 29.809550 5.674289\n Poor 30.215367 5.091897\n Rich 32.345527 5.405304\nMale Middle Class 30.156221 5.059490\n Poor 29.238562 5.255250\n Rich 29.426192 4.397086", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AgeHeight
GenderEconomic Status
FemaleMiddle Class29.8095505.674289
Poor30.2153675.091897
Rich32.3455275.405304
MaleMiddle Class30.1562215.059490
Poor29.2385625.255250
Rich29.4261924.397086
\n
" + }, + "metadata": {}, + "execution_count": 93 + } + ], + "source": [ + "double_group.aggregate(\n", + " {\n", + " \"Age\" : np.mean,\n", + " \"Height\" : lambda h:(np.mean(h))/np.std(h)\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height Weight \\\n sum mean std sum \nGender Economic Status \nFemale Middle Class 11734.957123 162.985516 28.925083 4466.602458 \n Poor 13508.976532 160.821149 31.773434 5223.995119 \n Rich 12259.980674 157.179239 29.266919 5045.140952 \nMale Middle Class 14063.306445 158.014679 31.408297 6218.415317 \n Poor 14753.554894 163.928388 31.368017 5906.533783 \n Rich 13410.318775 154.141595 35.258619 5568.352973 \n\n Age \\\n mean std sum mean \nGender Economic Status \nFemale Middle Class 62.036145 28.181712 2146.287619 29.809550 \n Poor 62.190418 23.980353 2538.090845 30.215367 \n Rich 64.681294 24.963181 2522.951113 32.345527 \nMale Middle Class 69.869835 23.954720 2683.903712 30.156221 \n Poor 65.628153 26.116241 2631.470556 29.238562 \n Rich 64.004057 23.273013 2560.078738 29.426192 \n\n Income \n std sum mean std \nGender Economic Status \nFemale Middle Class 13.688388 1.298767e+06 18038.427002 3303.245435 \n Poor 12.147209 1.521119e+06 18108.561143 3554.282380 \n Rich 12.556400 1.407588e+06 18046.000231 3297.862045 \nMale Middle Class 12.189654 1.562747e+06 17558.949815 3674.230886 \n Poor 12.630171 1.649761e+06 18330.676883 3142.560348 \n Rich 11.512112 1.550681e+06 17823.917019 3791.631620 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeightAgeIncome
summeanstdsummeanstdsummeanstdsummeanstd
GenderEconomic Status
FemaleMiddle Class11734.957123162.98551628.9250834466.60245862.03614528.1817122146.28761929.80955013.6883881.298767e+0618038.4270023303.245435
Poor13508.976532160.82114931.7734345223.99511962.19041823.9803532538.09084530.21536712.1472091.521119e+0618108.5611433554.282380
Rich12259.980674157.17923929.2669195045.14095264.68129424.9631812522.95111332.34552712.5564001.407588e+0618046.0002313297.862045
MaleMiddle Class14063.306445158.01467931.4082976218.41531769.86983523.9547202683.90371230.15622112.1896541.562747e+0617558.9498153674.230886
Poor14753.554894163.92838831.3680175906.53378365.62815326.1162412631.47055629.23856212.6301711.649761e+0618330.6768833142.560348
Rich13410.318775154.14159535.2586195568.35297364.00405723.2730132560.07873829.42619211.5121121.550681e+0617823.9170193791.631620
\n
" + }, + "metadata": {}, + "execution_count": 94 + } + ], + "source": [ + "double_group.aggregate([np.sum, np.mean, np.std])" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height Weight Age Income\n \nGender Economic Status \nFemale Middle Class 5.674289 2.216739 2.193008 5.499141\n Poor 5.091897 2.608966 2.502373 5.125457\n Rich 5.405304 2.607839 2.592693 5.507448\nMale Middle Class 5.059490 2.933272 2.487936 4.806022\n Poor 5.255250 2.527003 2.327947 5.865717\n Rich 4.397086 2.766084 2.570925 4.728108", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeightAgeIncome
<lambda><lambda><lambda><lambda>
GenderEconomic Status
FemaleMiddle Class5.6742892.2167392.1930085.499141
Poor5.0918972.6089662.5023735.125457
Rich5.4053042.6078392.5926935.507448
MaleMiddle Class5.0594902.9332722.4879364.806022
Poor5.2552502.5270032.3279475.865717
Rich4.3970862.7660842.5709254.728108
\n
" + }, + "metadata": {}, + "execution_count": 95 + } + ], + "source": [ + "double_group.aggregate([lambda x: np.mean(x) / np.std(x)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Filtrado de datos" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Height Weight Age Income\nGender Economic Status \nFemale Middle Class 11734.957123 4466.602458 2146.287619 1.298767e+06\n Poor 13508.976532 5223.995119 2538.090845 1.521119e+06\n Rich 12259.980674 5045.140952 2522.951113 1.407588e+06\nMale Middle Class 14063.306445 6218.415317 2683.903712 1.562747e+06\n Poor 14753.554894 5906.533783 2631.470556 1.649761e+06\n Rich 13410.318775 5568.352973 2560.078738 1.550681e+06", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
HeightWeightAgeIncome
GenderEconomic Status
FemaleMiddle Class11734.9571234466.6024582146.2876191.298767e+06
Poor13508.9765325223.9951192538.0908451.521119e+06
Rich12259.9806745045.1409522522.9511131.407588e+06
MaleMiddle Class14063.3064456218.4153172683.9037121.562747e+06
Poor14753.5548945906.5337832631.4705561.649761e+06
Rich13410.3187755568.3529732560.0787381.550681e+06
\n
" + }, + "metadata": {}, + "execution_count": 96 + } + ], + "source": [ + "double_group.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 17.956254\n1 12.663339\n2 23.085472\n3 43.643251\n6 36.084783\n ... \n494 47.375524\n495 20.300270\n496 31.950557\n498 29.066714\n499 18.672584\nName: Age, Length: 428, dtype: float64" + }, + "metadata": {}, + "execution_count": 97 + } + ], + "source": [ + "double_group[\"Age\"].filter(lambda x: x.sum()>2400)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Transformación de variables" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + " zscore = lambda x : (x - x.mean()) / x.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "z_group = double_group.transform(zscore)" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 2., 3., 24., 61., 95., 102., 101., 68., 32., 12.]),\n array([-3.28293682, -2.70286067, -2.12278452, -1.54270838, -0.96263223,\n -0.38255608, 0.19752007, 0.77759622, 1.35767237, 1.93774852,\n 2.51782466]),\n
)" + }, + "metadata": {}, + "execution_count": 101 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(z_group[\"Age\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operaciones diversas muy útiles" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n0 Male Middle Class 137.908120 82.795885 17.956254 20996.621555\n2 Male Rich 103.395009 52.924286 23.085472 16031.358534\n3 Female Poor 191.320809 109.246958 43.643251 23331.963906\n4 Female Middle Class 177.575859 101.706515 41.805981 19443.643634\n6 Male Poor 167.209354 36.495428 36.084783 26034.382928\n7 Female Rich 202.368736 48.838333 24.954494 21769.196284", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
0MaleMiddle Class137.90812082.79588517.95625420996.621555
2MaleRich103.39500952.92428623.08547216031.358534
3FemalePoor191.320809109.24695843.64325123331.963906
4FemaleMiddle Class177.575859101.70651541.80598119443.643634
6MalePoor167.20935436.49542836.08478326034.382928
7FemaleRich202.36873648.83833324.95449421769.196284
\n
" + }, + "metadata": {}, + "execution_count": 102 + } + ], + "source": [ + "double_group.head(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n482 Female Poor 157.175130 62.539977 42.918571 23685.324030\n492 Male Poor 168.343504 42.709051 31.047280 18622.351483\n496 Female Rich 130.296930 48.729713 31.950557 22441.710828\n497 Female Middle Class 142.294451 62.327304 13.972160 18534.784189\n498 Male Middle Class 137.654015 90.267841 29.066714 20582.413558\n499 Male Rich 118.725577 116.067448 18.672584 13598.050349", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
482FemalePoor157.17513062.53997742.91857123685.324030
492MalePoor168.34350442.70905131.04728018622.351483
496FemaleRich130.29693048.72971331.95055722441.710828
497FemaleMiddle Class142.29445162.32730413.97216018534.784189
498MaleMiddle Class137.65401590.26784129.06671420582.413558
499MaleRich118.725577116.06744818.67258413598.050349
\n
" + }, + "metadata": {}, + "execution_count": 103 + } + ], + "source": [ + "double_group.tail(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [], + "source": [ + "# Antes de crear el objeto groupby primero ordenar los valores a lo que necesitamos\n", + "\n", + "#Realizaremos una copia del data frame original\n", + "data_sorted = data.sort_values([\"Age\", \"Income\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n468 Male Rich 182.477381 110.944963 -8.367343 11837.458111\n276 Female Rich 151.774559 87.744414 -5.923006 17153.747964\n427 Female Middle Class 120.571178 53.856381 -0.518397 14731.320266\n443 Male Middle Class 193.756762 79.493080 2.025271 19130.437969\n363 Female Poor 208.827149 86.860995 2.693760 14811.953572", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
468MaleRich182.477381110.944963-8.36734311837.458111
276FemaleRich151.77455987.744414-5.92300617153.747964
427FemaleMiddle Class120.57117853.856381-0.51839714731.320266
443MaleMiddle Class193.75676279.4930802.02527119130.437969
363FemalePoor208.82714986.8609952.69376014811.953572
\n
" + }, + "metadata": {}, + "execution_count": 105 + } + ], + "source": [ + "data_sorted.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "# Agrupación por género\n", + "age_grouped = data_sorted.groupby(\"Gender\")" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n468 Male Rich 182.477381 110.944963 -8.367343 11837.458111\n276 Female Rich 151.774559 87.744414 -5.923006 17153.747964\n427 Female Middle Class 120.571178 53.856381 -0.518397 14731.320266\n443 Male Middle Class 193.756762 79.493080 2.025271 19130.437969\n363 Female Poor 208.827149 86.860995 2.693760 14811.953572\n116 Male Middle Class 168.677433 32.254815 5.401274 17108.414979\n329 Female Middle Class 200.026781 43.241869 5.428041 18240.232140\n36 Male Poor 184.839846 54.774836 5.624462 16196.840803\n155 Male Poor 208.353610 74.450065 5.986088 17391.839407\n390 Female Poor 129.217617 79.490725 6.149408 21744.959332", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
468MaleRich182.477381110.944963-8.36734311837.458111
276FemaleRich151.77455987.744414-5.92300617153.747964
427FemaleMiddle Class120.57117853.856381-0.51839714731.320266
443MaleMiddle Class193.75676279.4930802.02527119130.437969
363FemalePoor208.82714986.8609952.69376014811.953572
116MaleMiddle Class168.67743332.2548155.40127417108.414979
329FemaleMiddle Class200.02678143.2418695.42804118240.232140
36MalePoor184.83984654.7748365.62446216196.840803
155MalePoor208.35361074.4500655.98608817391.839407
390FemalePoor129.21761779.4907256.14940821744.959332
\n
" + }, + "metadata": {}, + "execution_count": 107 + } + ], + "source": [ + "age_grouped.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n375 Male Poor 163.962849 8.849891 60.431889 19948.022458\n432 Female Rich 162.888941 89.600077 63.960341 26658.110903", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
375MalePoor163.9628498.84989160.43188919948.022458
432FemaleRich162.88894189.60007763.96034126658.110903
\n
" + }, + "metadata": {}, + "execution_count": 108 + } + ], + "source": [ + "# Ver a los más viejos del grupo\n", + "age_grouped.tail(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Economic Status Height Weight Age Income\n468 Male Rich 182.477381 110.944963 -8.367343 11837.458111\n276 Female Rich 151.774559 87.744414 -5.923006 17153.747964", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderEconomic StatusHeightWeightAgeIncome
468MaleRich182.477381110.944963-8.36734311837.458111
276FemaleRich151.77455987.744414-5.92300617153.747964
\n
" + }, + "metadata": {}, + "execution_count": 109 + } + ], + "source": [ + "# Los más jóvenes del grupo\n", + "age_grouped.head(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conjunto de entrenamiento y conjunto de testing" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/customer-churn-model/Customer Churn Model.txt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3333" + }, + "metadata": {}, + "execution_count": 112 + } + ], + "source": [ + "len(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dividir utilizando las distribución normal" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "# Crear un vector de la misma longitud que nuestros datos, pero distribuido de forma normal\n", + "a = np.random.randn(len(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 5., 18., 123., 392., 795., 845., 737., 320., 79., 19.]),\n array([-3.86466614, -3.14344411, -2.42222208, -1.70100005, -0.97977802,\n -0.25855599, 0.46266604, 1.18388807, 1.9051101 , 2.62633213,\n 3.34755416]),\n
)" + }, + "metadata": {}, + "execution_count": 114 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [], + "source": [ + "check = (a<0.75)" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([ True, True, True, ..., True, True, True])" + }, + "metadata": {}, + "execution_count": 125 + } + ], + "source": [ + "check" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [], + "source": [ + "training = data[check]\n", + "testing = data[~check]" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2522" + }, + "metadata": {}, + "execution_count": 127 + } + ], + "source": [ + "len(training)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "811" + }, + "metadata": {}, + "execution_count": 128 + } + ], + "source": [ + "len(testing)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Con la librería SKLEARN (Librería de aprendizaje estadístico de python)" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [], + "source": [ + "# se cambio el cross.validation (deprecated) por model_selection\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [], + "source": [ + "train, test = train_test_split(data, test_size = 0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2499" + }, + "metadata": {}, + "execution_count": 137 + } + ], + "source": [ + "len(train)" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "834" + }, + "metadata": {}, + "execution_count": 138 + } + ], + "source": [ + "len(test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Usando una función de SHUFFLE" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": {}, + "outputs": [], + "source": [ + "import sklearn" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " State Account Length Area Code Phone Int'l Plan VMail Plan \\\n1676 WA 83 408 338-4472 no no \n3070 MD 154 510 411-2977 no no \n2836 DE 112 408 351-8894 no no \n1134 TN 105 408 353-8849 no no \n1443 SD 113 415 406-4560 yes no \n... ... ... ... ... ... ... \n365 CO 154 415 343-5709 no no \n2874 WY 134 510 366-1084 no no \n2744 CA 33 408 369-2743 no no \n752 CO 22 510 327-1319 no yes \n1015 AL 122 415 336-5920 no no \n\n VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n1676 0 134.8 96 22.92 ... 78 \n3070 0 154.5 122 26.27 ... 71 \n2836 0 101.1 119 17.19 ... 67 \n1134 0 206.2 84 35.05 ... 138 \n1443 0 204.3 82 34.73 ... 115 \n... ... ... ... ... ... ... \n365 0 350.8 75 59.64 ... 94 \n2874 0 296.0 93 50.32 ... 117 \n2744 0 159.5 115 27.12 ... 118 \n752 23 182.1 94 30.96 ... 59 \n1015 0 232.5 96 39.53 ... 120 \n\n Eve Charge Night Mins Night Calls Night Charge Intl Mins \\\n1676 14.21 161.5 123 7.27 7.7 \n3070 18.21 178.0 105 8.01 12.0 \n2836 18.22 179.5 112 8.08 10.3 \n1134 21.79 117.1 91 5.27 9.0 \n1443 16.05 139.4 97 6.27 9.2 \n... ... ... ... ... ... \n365 18.40 253.9 100 11.43 10.1 \n2874 19.24 246.8 98 11.11 12.3 \n2744 16.61 102.4 86 4.61 7.1 \n752 13.99 128.8 102 5.80 12.7 \n1015 17.47 213.7 91 9.62 11.9 \n\n Intl Calls Intl Charge CustServ Calls Churn? \n1676 5 2.08 2 False. \n3070 2 3.24 3 True. \n2836 5 2.78 2 False. \n1134 3 2.43 1 False. \n1443 7 2.48 1 False. \n... ... ... ... ... \n365 9 2.73 1 True. \n2874 10 3.32 0 True. \n2744 7 1.92 1 False. \n752 4 3.43 3 False. \n1015 2 3.21 0 False. \n\n[3333 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
StateAccount LengthArea CodePhoneInt'l PlanVMail PlanVMail MessageDay MinsDay CallsDay Charge...Eve CallsEve ChargeNight MinsNight CallsNight ChargeIntl MinsIntl CallsIntl ChargeCustServ CallsChurn?
1676WA83408338-4472nono0134.89622.92...7814.21161.51237.277.752.082False.
3070MD154510411-2977nono0154.512226.27...7118.21178.01058.0112.023.243True.
2836DE112408351-8894nono0101.111917.19...6718.22179.51128.0810.352.782False.
1134TN105408353-8849nono0206.28435.05...13821.79117.1915.279.032.431False.
1443SD113415406-4560yesno0204.38234.73...11516.05139.4976.279.272.481False.
..................................................................
365CO154415343-5709nono0350.87559.64...9418.40253.910011.4310.192.731True.
2874WY134510366-1084nono0296.09350.32...11719.24246.89811.1112.3103.320True.
2744CA33408369-2743nono0159.511527.12...11816.61102.4864.617.171.921False.
752CO22510327-1319noyes23182.19430.96...5913.99128.81025.8012.743.433False.
1015AL122415336-5920nono0232.59639.53...12017.47213.7919.6211.923.210False.
\n

3333 rows × 21 columns

\n
" + }, + "metadata": {}, + "execution_count": 143 + } + ], + "source": [ + "# Primero mezclar el dataset\n", + "sklearn.utils.shuffle(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [], + "source": [ + "# lo volvemos a guardar en data\n", + "data = sklearn.utils.shuffle(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [], + "source": [ + "cut_id = int(0.75*len(data))\n", + "train_data = data[:cut_id]\n", + "test_data = data[cut_id+1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2499" + }, + "metadata": {}, + "execution_count": 146 + } + ], + "source": [ + "len(train_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "833" + }, + "metadata": {}, + "execution_count": 147 + } + ], + "source": [ + "len(test_data)" + ] + } + ], + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T2 - 4 - Data Cleaning - Concatenacion de datos.ipynb b/scratch/T2 - 4 - Data Cleaning - Concatenacion de datos.ipynb new file mode 100644 index 00000000..c0d9245b --- /dev/null +++ b/scratch/T2 - 4 - Data Cleaning - Concatenacion de datos.ipynb @@ -0,0 +1,1555 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Concatenar y apendizar data sets" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "red_wine = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/wine/winequality-red.csv\", sep=\";\")\n", + "white_wine = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/wine/winequality-white.csv\", sep=\";\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n0 7.4 0.70 0.00 1.9 0.076 \n1 7.8 0.88 0.00 2.6 0.098 \n2 7.8 0.76 0.04 2.3 0.092 \n3 11.2 0.28 0.56 1.9 0.075 \n4 7.4 0.70 0.00 1.9 0.076 \n\n free sulfur dioxide total sulfur dioxide density pH sulphates \\\n0 11.0 34.0 0.9978 3.51 0.56 \n1 25.0 67.0 0.9968 3.20 0.68 \n2 15.0 54.0 0.9970 3.26 0.65 \n3 17.0 60.0 0.9980 3.16 0.58 \n4 11.0 34.0 0.9978 3.51 0.56 \n\n alcohol quality \n0 9.4 5 \n1 9.8 5 \n2 9.8 5 \n3 9.8 6 \n4 9.4 5 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
07.40.700.001.90.07611.034.00.99783.510.569.45
17.80.880.002.60.09825.067.00.99683.200.689.85
27.80.760.042.30.09215.054.00.99703.260.659.85
311.20.280.561.90.07517.060.00.99803.160.589.86
47.40.700.001.90.07611.034.00.99783.510.569.45
\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "red_wine.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n0 7.0 0.27 0.36 20.7 0.045 \n1 6.3 0.30 0.34 1.6 0.049 \n2 8.1 0.28 0.40 6.9 0.050 \n3 7.2 0.23 0.32 8.5 0.058 \n4 7.2 0.23 0.32 8.5 0.058 \n\n free sulfur dioxide total sulfur dioxide density pH sulphates \\\n0 45.0 170.0 1.0010 3.00 0.45 \n1 14.0 132.0 0.9940 3.30 0.49 \n2 30.0 97.0 0.9951 3.26 0.44 \n3 47.0 186.0 0.9956 3.19 0.40 \n4 47.0 186.0 0.9956 3.19 0.40 \n\n alcohol quality \n0 8.8 6 \n1 9.5 6 \n2 10.1 6 \n3 9.9 6 \n4 9.9 6 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
07.00.270.3620.70.04545.0170.01.00103.000.458.86
16.30.300.341.60.04914.0132.00.99403.300.499.56
28.10.280.406.90.05030.097.00.99513.260.4410.16
37.20.230.328.50.05847.0186.00.99563.190.409.96
47.20.230.328.50.05847.0186.00.99563.190.409.96
\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "white_wine.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array(['fixed acidity', 'volatile acidity', 'citric acid',\n 'residual sugar', 'chlorides', 'free sulfur dioxide',\n 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol',\n 'quality'], dtype=object)" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "red_wine.columns.values" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(1599, 12)" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "red_wine.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array(['fixed acidity', 'volatile acidity', 'citric acid',\n 'residual sugar', 'chlorides', 'free sulfur dioxide',\n 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol',\n 'quality'], dtype=object)" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "white_wine.columns.values" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(4898, 12)" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "white_wine.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En python tenemos dos tipos de ejes\n", + "\n", + "* axis = 0 denota el eje horizontal\n", + "* axis = 1 denota el eje vertical" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "wine_data = pd.concat([red_wine, white_wine], axis= 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(6497, 12)" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "wine_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n0 7.4 0.70 0.00 1.9 0.076 \n1 7.8 0.88 0.00 2.6 0.098 \n2 7.8 0.76 0.04 2.3 0.092 \n3 11.2 0.28 0.56 1.9 0.075 \n4 7.4 0.70 0.00 1.9 0.076 \n\n free sulfur dioxide total sulfur dioxide density pH sulphates \\\n0 11.0 34.0 0.9978 3.51 0.56 \n1 25.0 67.0 0.9968 3.20 0.68 \n2 15.0 54.0 0.9970 3.26 0.65 \n3 17.0 60.0 0.9980 3.16 0.58 \n4 11.0 34.0 0.9978 3.51 0.56 \n\n alcohol quality \n0 9.4 5 \n1 9.8 5 \n2 9.8 5 \n3 9.8 6 \n4 9.4 5 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
07.40.700.001.90.07611.034.00.99783.510.569.45
17.80.880.002.60.09825.067.00.99683.200.689.85
27.80.760.042.30.09215.054.00.99703.260.659.85
311.20.280.561.90.07517.060.00.99803.160.589.86
47.40.700.001.90.07611.034.00.99783.510.569.45
\n
" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "wine_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Scramble\n", + "data1 = wine_data.head(10)\n", + "data2 = wine_data[300:310]\n", + "data3 = wine_data.tail(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n0 7.4 0.700 0.00 1.90 0.076 \n1 7.8 0.880 0.00 2.60 0.098 \n2 7.8 0.760 0.04 2.30 0.092 \n3 11.2 0.280 0.56 1.90 0.075 \n4 7.4 0.700 0.00 1.90 0.076 \n5 7.4 0.660 0.00 1.80 0.075 \n6 7.9 0.600 0.06 1.60 0.069 \n7 7.3 0.650 0.00 1.20 0.065 \n8 7.8 0.580 0.02 2.00 0.073 \n9 7.5 0.500 0.36 6.10 0.071 \n300 7.5 0.530 0.06 2.60 0.086 \n301 11.1 0.180 0.48 1.50 0.068 \n302 8.3 0.705 0.12 2.60 0.092 \n303 7.4 0.670 0.12 1.60 0.186 \n304 8.4 0.650 0.60 2.10 0.112 \n305 10.3 0.530 0.48 2.50 0.063 \n306 7.6 0.620 0.32 2.20 0.082 \n307 10.3 0.410 0.42 2.40 0.213 \n308 10.3 0.430 0.44 2.40 0.214 \n309 7.4 0.290 0.38 1.70 0.062 \n4888 6.8 0.220 0.36 1.20 0.052 \n4889 4.9 0.235 0.27 11.75 0.030 \n4890 6.1 0.340 0.29 2.20 0.036 \n4891 5.7 0.210 0.32 0.90 0.038 \n4892 6.5 0.230 0.38 1.30 0.032 \n4893 6.2 0.210 0.29 1.60 0.039 \n4894 6.6 0.320 0.36 8.00 0.047 \n4895 6.5 0.240 0.19 1.20 0.041 \n4896 5.5 0.290 0.30 1.10 0.022 \n4897 6.0 0.210 0.38 0.80 0.020 \n\n free sulfur dioxide total sulfur dioxide density pH sulphates \\\n0 11.0 34.0 0.99780 3.51 0.56 \n1 25.0 67.0 0.99680 3.20 0.68 \n2 15.0 54.0 0.99700 3.26 0.65 \n3 17.0 60.0 0.99800 3.16 0.58 \n4 11.0 34.0 0.99780 3.51 0.56 \n5 13.0 40.0 0.99780 3.51 0.56 \n6 15.0 59.0 0.99640 3.30 0.46 \n7 15.0 21.0 0.99460 3.39 0.47 \n8 9.0 18.0 0.99680 3.36 0.57 \n9 17.0 102.0 0.99780 3.35 0.80 \n300 20.0 44.0 0.99650 3.38 0.59 \n301 7.0 15.0 0.99730 3.22 0.64 \n302 12.0 28.0 0.99940 3.51 0.72 \n303 5.0 21.0 0.99600 3.39 0.54 \n304 12.0 90.0 0.99730 3.20 0.52 \n305 6.0 25.0 0.99980 3.12 0.59 \n306 7.0 54.0 0.99660 3.36 0.52 \n307 6.0 14.0 0.99940 3.19 0.62 \n308 5.0 12.0 0.99940 3.19 0.63 \n309 9.0 30.0 0.99680 3.41 0.53 \n4888 38.0 127.0 0.99330 3.04 0.54 \n4889 34.0 118.0 0.99540 3.07 0.50 \n4890 25.0 100.0 0.98938 3.06 0.44 \n4891 38.0 121.0 0.99074 3.24 0.46 \n4892 29.0 112.0 0.99298 3.29 0.54 \n4893 24.0 92.0 0.99114 3.27 0.50 \n4894 57.0 168.0 0.99490 3.15 0.46 \n4895 30.0 111.0 0.99254 2.99 0.46 \n4896 20.0 110.0 0.98869 3.34 0.38 \n4897 22.0 98.0 0.98941 3.26 0.32 \n\n alcohol quality \n0 9.4 5 \n1 9.8 5 \n2 9.8 5 \n3 9.8 6 \n4 9.4 5 \n5 9.4 5 \n6 9.4 5 \n7 10.0 7 \n8 9.5 7 \n9 10.5 5 \n300 10.7 6 \n301 10.1 6 \n302 10.0 5 \n303 9.5 5 \n304 9.2 5 \n305 9.3 6 \n306 9.4 5 \n307 9.5 6 \n308 9.5 6 \n309 9.5 6 \n4888 9.2 5 \n4889 9.4 6 \n4890 11.8 6 \n4891 10.6 6 \n4892 9.7 5 \n4893 11.2 6 \n4894 9.6 5 \n4895 9.4 6 \n4896 12.8 7 \n4897 11.8 6 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
07.40.7000.001.900.07611.034.00.997803.510.569.45
17.80.8800.002.600.09825.067.00.996803.200.689.85
27.80.7600.042.300.09215.054.00.997003.260.659.85
311.20.2800.561.900.07517.060.00.998003.160.589.86
47.40.7000.001.900.07611.034.00.997803.510.569.45
57.40.6600.001.800.07513.040.00.997803.510.569.45
67.90.6000.061.600.06915.059.00.996403.300.469.45
77.30.6500.001.200.06515.021.00.994603.390.4710.07
87.80.5800.022.000.0739.018.00.996803.360.579.57
97.50.5000.366.100.07117.0102.00.997803.350.8010.55
3007.50.5300.062.600.08620.044.00.996503.380.5910.76
30111.10.1800.481.500.0687.015.00.997303.220.6410.16
3028.30.7050.122.600.09212.028.00.999403.510.7210.05
3037.40.6700.121.600.1865.021.00.996003.390.549.55
3048.40.6500.602.100.11212.090.00.997303.200.529.25
30510.30.5300.482.500.0636.025.00.999803.120.599.36
3067.60.6200.322.200.0827.054.00.996603.360.529.45
30710.30.4100.422.400.2136.014.00.999403.190.629.56
30810.30.4300.442.400.2145.012.00.999403.190.639.56
3097.40.2900.381.700.0629.030.00.996803.410.539.56
48886.80.2200.361.200.05238.0127.00.993303.040.549.25
48894.90.2350.2711.750.03034.0118.00.995403.070.509.46
48906.10.3400.292.200.03625.0100.00.989383.060.4411.86
48915.70.2100.320.900.03838.0121.00.990743.240.4610.66
48926.50.2300.381.300.03229.0112.00.992983.290.549.75
48936.20.2100.291.600.03924.092.00.991143.270.5011.26
48946.60.3200.368.000.04757.0168.00.994903.150.469.65
48956.50.2400.191.200.04130.0111.00.992542.990.469.46
48965.50.2900.301.100.02220.0110.00.988693.340.3812.87
48976.00.2100.380.800.02022.098.00.989413.260.3211.86
\n
" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "wine_scramble = pd.concat([data1, data2, data3], axis=0)\n", + "wine_scramble" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n300 7.5 0.530 0.06 2.60 0.086 \n301 11.1 0.180 0.48 1.50 0.068 \n302 8.3 0.705 0.12 2.60 0.092 \n303 7.4 0.670 0.12 1.60 0.186 \n304 8.4 0.650 0.60 2.10 0.112 \n305 10.3 0.530 0.48 2.50 0.063 \n306 7.6 0.620 0.32 2.20 0.082 \n307 10.3 0.410 0.42 2.40 0.213 \n308 10.3 0.430 0.44 2.40 0.214 \n309 7.4 0.290 0.38 1.70 0.062 \n4888 6.8 0.220 0.36 1.20 0.052 \n4889 4.9 0.235 0.27 11.75 0.030 \n4890 6.1 0.340 0.29 2.20 0.036 \n4891 5.7 0.210 0.32 0.90 0.038 \n4892 6.5 0.230 0.38 1.30 0.032 \n4893 6.2 0.210 0.29 1.60 0.039 \n4894 6.6 0.320 0.36 8.00 0.047 \n4895 6.5 0.240 0.19 1.20 0.041 \n4896 5.5 0.290 0.30 1.10 0.022 \n4897 6.0 0.210 0.38 0.80 0.020 \n0 7.4 0.700 0.00 1.90 0.076 \n1 7.8 0.880 0.00 2.60 0.098 \n2 7.8 0.760 0.04 2.30 0.092 \n3 11.2 0.280 0.56 1.90 0.075 \n4 7.4 0.700 0.00 1.90 0.076 \n5 7.4 0.660 0.00 1.80 0.075 \n6 7.9 0.600 0.06 1.60 0.069 \n7 7.3 0.650 0.00 1.20 0.065 \n8 7.8 0.580 0.02 2.00 0.073 \n9 7.5 0.500 0.36 6.10 0.071 \n\n free sulfur dioxide total sulfur dioxide density pH sulphates \\\n300 20.0 44.0 0.99650 3.38 0.59 \n301 7.0 15.0 0.99730 3.22 0.64 \n302 12.0 28.0 0.99940 3.51 0.72 \n303 5.0 21.0 0.99600 3.39 0.54 \n304 12.0 90.0 0.99730 3.20 0.52 \n305 6.0 25.0 0.99980 3.12 0.59 \n306 7.0 54.0 0.99660 3.36 0.52 \n307 6.0 14.0 0.99940 3.19 0.62 \n308 5.0 12.0 0.99940 3.19 0.63 \n309 9.0 30.0 0.99680 3.41 0.53 \n4888 38.0 127.0 0.99330 3.04 0.54 \n4889 34.0 118.0 0.99540 3.07 0.50 \n4890 25.0 100.0 0.98938 3.06 0.44 \n4891 38.0 121.0 0.99074 3.24 0.46 \n4892 29.0 112.0 0.99298 3.29 0.54 \n4893 24.0 92.0 0.99114 3.27 0.50 \n4894 57.0 168.0 0.99490 3.15 0.46 \n4895 30.0 111.0 0.99254 2.99 0.46 \n4896 20.0 110.0 0.98869 3.34 0.38 \n4897 22.0 98.0 0.98941 3.26 0.32 \n0 11.0 34.0 0.99780 3.51 0.56 \n1 25.0 67.0 0.99680 3.20 0.68 \n2 15.0 54.0 0.99700 3.26 0.65 \n3 17.0 60.0 0.99800 3.16 0.58 \n4 11.0 34.0 0.99780 3.51 0.56 \n5 13.0 40.0 0.99780 3.51 0.56 \n6 15.0 59.0 0.99640 3.30 0.46 \n7 15.0 21.0 0.99460 3.39 0.47 \n8 9.0 18.0 0.99680 3.36 0.57 \n9 17.0 102.0 0.99780 3.35 0.80 \n\n alcohol quality \n300 10.7 6 \n301 10.1 6 \n302 10.0 5 \n303 9.5 5 \n304 9.2 5 \n305 9.3 6 \n306 9.4 5 \n307 9.5 6 \n308 9.5 6 \n309 9.5 6 \n4888 9.2 5 \n4889 9.4 6 \n4890 11.8 6 \n4891 10.6 6 \n4892 9.7 5 \n4893 11.2 6 \n4894 9.6 5 \n4895 9.4 6 \n4896 12.8 7 \n4897 11.8 6 \n0 9.4 5 \n1 9.8 5 \n2 9.8 5 \n3 9.8 6 \n4 9.4 5 \n5 9.4 5 \n6 9.4 5 \n7 10.0 7 \n8 9.5 7 \n9 10.5 5 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
3007.50.5300.062.600.08620.044.00.996503.380.5910.76
30111.10.1800.481.500.0687.015.00.997303.220.6410.16
3028.30.7050.122.600.09212.028.00.999403.510.7210.05
3037.40.6700.121.600.1865.021.00.996003.390.549.55
3048.40.6500.602.100.11212.090.00.997303.200.529.25
30510.30.5300.482.500.0636.025.00.999803.120.599.36
3067.60.6200.322.200.0827.054.00.996603.360.529.45
30710.30.4100.422.400.2136.014.00.999403.190.629.56
30810.30.4300.442.400.2145.012.00.999403.190.639.56
3097.40.2900.381.700.0629.030.00.996803.410.539.56
48886.80.2200.361.200.05238.0127.00.993303.040.549.25
48894.90.2350.2711.750.03034.0118.00.995403.070.509.46
48906.10.3400.292.200.03625.0100.00.989383.060.4411.86
48915.70.2100.320.900.03838.0121.00.990743.240.4610.66
48926.50.2300.381.300.03229.0112.00.992983.290.549.75
48936.20.2100.291.600.03924.092.00.991143.270.5011.26
48946.60.3200.368.000.04757.0168.00.994903.150.469.65
48956.50.2400.191.200.04130.0111.00.992542.990.469.46
48965.50.2900.301.100.02220.0110.00.988693.340.3812.87
48976.00.2100.380.800.02022.098.00.989413.260.3211.86
07.40.7000.001.900.07611.034.00.997803.510.569.45
17.80.8800.002.600.09825.067.00.996803.200.689.85
27.80.7600.042.300.09215.054.00.997003.260.659.85
311.20.2800.561.900.07517.060.00.998003.160.589.86
47.40.7000.001.900.07611.034.00.997803.510.569.45
57.40.6600.001.800.07513.040.00.997803.510.569.45
67.90.6000.061.600.06915.059.00.996403.300.469.45
77.30.6500.001.200.06515.021.00.994603.390.4710.07
87.80.5800.022.000.0739.018.00.996803.360.579.57
97.50.5000.366.100.07117.0102.00.997803.350.8010.55
\n
" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "wine_scramble = pd.concat([data2, data3, data1], axis=0)\n", + "wine_scramble" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Datos distribuidos" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Date sulfate nitrate ID\n0 2003-01-01 NaN NaN 1\n1 2003-01-02 NaN NaN 1\n2 2003-01-03 NaN NaN 1\n3 2003-01-04 NaN NaN 1\n4 2003-01-05 NaN NaN 1", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DatesulfatenitrateID
02003-01-01NaNNaN1
12003-01-02NaNNaN1
22003-01-03NaNNaN1
32003-01-04NaNNaN1
42003-01-05NaNNaN1
\n
" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/distributed-data/001.csv\")\n", + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Importar el primer fichero\n", + "* Hacemos un buble para ir recorriendo todos y cada uno de los ficheros\n", + " * Importante tener una consistencia en el nombre de los ficheros\n", + " * Cada uno de ellos debe apendizarse (añadir al final) del primer fichero que ya habiamos cargado\n", + "* Repetimos el bucle hasta que no queden ficheros" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "filepath = \"/Users/nuelcodes/Data-Science-Python/datasets/distributed-data/\"\n", + "\n", + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/distributed-data/001.csv\")\n", + "\n", + "for i in range(2,333):\n", + " if i < 10:\n", + " filename = \"00\" + str(i)\n", + " if 10 <= i < 100:\n", + " filename = \"0\" + str(i)\n", + " if i >= 100:\n", + " filename = str(i)\n", + " file = filepath + filename + \".csv\"\n", + " temp_data = pd.read_csv(file)\n", + "\n", + " data = pd.concat([data, temp_data], axis = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(772087, 4)" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Date sulfate nitrate ID\n726 2004-12-27 NaN NaN 332\n727 2004-12-28 NaN NaN 332\n728 2004-12-29 NaN NaN 332\n729 2004-12-30 NaN NaN 332\n730 2004-12-31 NaN NaN 332", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DatesulfatenitrateID
7262004-12-27NaNNaN332
7272004-12-28NaNNaN332
7282004-12-29NaNNaN332
7292004-12-30NaNNaN332
7302004-12-31NaNNaN332
\n
" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "data.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Date sulfate nitrate ID\n0 2003-01-01 NaN NaN 1\n1 2003-01-02 NaN NaN 1\n2 2003-01-03 NaN NaN 1\n3 2003-01-04 NaN NaN 1\n4 2003-01-05 NaN NaN 1", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DatesulfatenitrateID
02003-01-01NaNNaN1
12003-01-02NaNNaN1
22003-01-03NaNNaN1
32003-01-04NaNNaN1
42003-01-05NaNNaN1
\n
" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([84003., 81808., 75602., 73776., 67202., 85827., 77428., 78886.,\n 73413., 74142.]),\n array([ 1. , 34.1, 67.2, 100.3, 133.4, 166.5, 199.6, 232.7, 265.8,\n 298.9, 332. ]),\n
)" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.hist(data[\"ID\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([8.2892e+04, 2.6195e+04, 6.3900e+03, 2.0850e+03, 7.3100e+02,\n 2.9500e+02, 1.2800e+02, 3.5000e+01, 2.3000e+01, 9.0000e+00]),\n array([ 0. , 3.59, 7.18, 10.77, 14.36, 17.95, 21.54, 25.13, 28.72,\n 32.31, 35.9 ]),\n )" + }, + "metadata": {}, + "execution_count": 21 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"sulfate\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([1.07241e+05, 5.54700e+03, 1.02900e+03, 3.12000e+02, 1.21000e+02,\n 5.50000e+01, 2.40000e+01, 1.60000e+01, 3.00000e+00, 1.00000e+00]),\n array([ 0. , 5.39, 10.78, 16.17, 21.56, 26.95, 32.34, 37.73, 43.12,\n 48.51, 53.9 ]),\n )" + }, + "metadata": {}, + "execution_count": 22 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"nitrate\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Joins de datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "filepath = \"/Users/nuelcodes/Data-Science-Python/datasets/athletes/\"" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "data_main = pd.read_csv(filepath + \"Medals.csv\", encoding= \"ISO-8859-1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n0 Michael Phelps 23.0 2008 08/24/2008 8 \n1 Michael Phelps 19.0 2004 08/29/2004 6 \n2 Michael Phelps 27.0 2012 08/12/2012 4 \n3 Natalie Coughlin 25.0 2008 08/24/2008 1 \n4 Aleksey Nemov 24.0 2000 10/01/2000 2 \n\n Silver Medals Bronze Medals Total Medals \n0 0 0 8 \n1 0 2 8 \n2 2 0 6 \n3 2 3 6 \n4 1 3 6 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal Medals
0Michael Phelps23.0200808/24/20088008
1Michael Phelps19.0200408/29/20046028
2Michael Phelps27.0201208/12/20124206
3Natalie Coughlin25.0200808/24/20081236
4Aleksey Nemov24.0200010/01/20002136
\n
" + }, + "metadata": {}, + "execution_count": 25 + } + ], + "source": [ + "data_main.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6956" + }, + "metadata": {}, + "execution_count": 26 + } + ], + "source": [ + "a = data_main[\"Athlete\"].unique().tolist()\n", + "len(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(8618, 8)" + }, + "metadata": {}, + "execution_count": 27 + } + ], + "source": [ + "data_main.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Lugar de donde vienen los atletas\n", + "data_country = pd.read_csv(filepath + \"Athelete_Country_Map.csv\", encoding= \"ISO-8859-1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Country\n0 Michael Phelps United States\n1 Natalie Coughlin United States\n2 Aleksey Nemov Russia\n3 Alicia Coutts Australia\n4 Missy Franklin United States", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteCountry
0Michael PhelpsUnited States
1Natalie CoughlinUnited States
2Aleksey NemovRussia
3Alicia CouttsAustralia
4Missy FranklinUnited States
\n
" + }, + "metadata": {}, + "execution_count": 29 + } + ], + "source": [ + "data_country.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(6970, 2)" + }, + "metadata": {}, + "execution_count": 30 + } + ], + "source": [ + "data_country.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Country\n1029 Aleksandar Ciric Serbia\n1086 Aleksandar Ciric Serbia and Montenegro", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteCountry
1029Aleksandar CiricSerbia
1086Aleksandar CiricSerbia and Montenegro
\n
" + }, + "metadata": {}, + "execution_count": 31 + } + ], + "source": [ + "data_country[data_country[\"Athlete\"] == \"Aleksandar Ciric\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "# Deporte al cual se le asocia el atleta\n", + "data_sports = pd.read_csv(filepath + \"Athelete_Sports_Map.csv\", encoding= \"ISO-8859-1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Sport\n0 Michael Phelps Swimming\n1 Natalie Coughlin Swimming\n2 Aleksey Nemov Gymnastics\n3 Alicia Coutts Swimming\n4 Missy Franklin Swimming", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteSport
0Michael PhelpsSwimming
1Natalie CoughlinSwimming
2Aleksey NemovGymnastics
3Alicia CouttsSwimming
4Missy FranklinSwimming
\n
" + }, + "metadata": {}, + "execution_count": 33 + } + ], + "source": [ + "data_sports.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6975" + }, + "metadata": {}, + "execution_count": 34 + } + ], + "source": [ + "len(data_sports)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Sport\n528 Richard Thompson Athletics\n1308 Chen Jing Volleyball\n1419 Chen Jing Table Tennis\n2727 Matt Ryan Rowing\n5003 Matt Ryan Equestrian\n5691 Richard Thompson Baseball", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteSport
528Richard ThompsonAthletics
1308Chen JingVolleyball
1419Chen JingTable Tennis
2727Matt RyanRowing
5003Matt RyanEquestrian
5691Richard ThompsonBaseball
\n
" + }, + "metadata": {}, + "execution_count": 35 + } + ], + "source": [ + "data_sports[\n", + " (data_sports[\"Athlete\"] == \"Chen Jing\") | \n", + " (data_sports[\"Athlete\"] == \"Richard Thompson\") | \n", + " (data_sports[\"Athlete\"] == \"Matt Ryan\")\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "data_country_dp = data_country.drop_duplicates(subset = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "True" + }, + "metadata": {}, + "execution_count": 37 + } + ], + "source": [ + "# comparar la longitud de data_country_dp con a\n", + "# donde a es los atletas unicos del data set original\n", + "len(data_country_dp) == len(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6956" + }, + "metadata": {}, + "execution_count": 38 + } + ], + "source": [ + "len(data_country_dp)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "# Hacer un merge del data principal con el data del pais\n", + "data_main_country = pd.merge(left = data_main, right = data_country_dp,\n", + " left_on=\"Athlete\", right_on=\"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n8613 Olena Sadovnycha 32.0 2000 10/01/2000 0 \n8614 Kateryna Serdiuk 17.0 2000 10/01/2000 0 \n8615 Wietse van Alten 21.0 2000 10/01/2000 0 \n8616 Sandra Wagner-Sachse 31.0 2000 10/01/2000 0 \n8617 Rod White 23.0 2000 10/01/2000 0 \n\n Silver Medals Bronze Medals Total Medals Country \n8613 1 0 1 Ukraine \n8614 1 0 1 Ukraine \n8615 0 1 1 Netherlands \n8616 0 1 1 Germany \n8617 0 1 1 United States ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
8613Olena Sadovnycha32.0200010/01/20000101Ukraine
8614Kateryna Serdiuk17.0200010/01/20000101Ukraine
8615Wietse van Alten21.0200010/01/20000011Netherlands
8616Sandra Wagner-Sachse31.0200010/01/20000011Germany
8617Rod White23.0200010/01/20000011United States
\n
" + }, + "metadata": {}, + "execution_count": 40 + } + ], + "source": [ + "data_main_country.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(8618, 9)" + }, + "metadata": {}, + "execution_count": 41 + } + ], + "source": [ + "data_main_country.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n1491 Aleksandar Ciric 30.0 2008 08/24/2008 0 \n1492 Aleksandar Ciric 26.0 2004 08/29/2004 0 \n1493 Aleksandar Ciric 22.0 2000 10/01/2000 0 \n\n Silver Medals Bronze Medals Total Medals Country \n1491 0 1 1 Serbia \n1492 1 0 1 Serbia \n1493 0 1 1 Serbia ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
1491Aleksandar Ciric30.0200808/24/20080011Serbia
1492Aleksandar Ciric26.0200408/29/20040101Serbia
1493Aleksandar Ciric22.0200010/01/20000011Serbia
\n
" + }, + "metadata": {}, + "execution_count": 42 + } + ], + "source": [ + "data_main_country[data_main_country[\"Athlete\"] == \"Aleksandar Ciric\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "# Eliminando los duplicados del data set de Deportes\n", + "data_sports_dp = data_sports.drop_duplicates(subset=\"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "True" + }, + "metadata": {}, + "execution_count": 44 + } + ], + "source": [ + "# Comparando longitud data_sports_dp con el data set sin duplicados del data set original\n", + "len(data_sports_dp) == len(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "# Merge final\n", + "data_final = pd.merge(left = data_main_country, right = data_sports_dp,\n", + " left_on = \"Athlete\", right_on = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n0 Michael Phelps 23.0 2008 08/24/2008 8 \n1 Michael Phelps 19.0 2004 08/29/2004 6 \n2 Michael Phelps 27.0 2012 08/12/2012 4 \n3 Natalie Coughlin 25.0 2008 08/24/2008 1 \n4 Natalie Coughlin 21.0 2004 08/29/2004 2 \n\n Silver Medals Bronze Medals Total Medals Country Sport \n0 0 0 8 United States Swimming \n1 0 2 8 United States Swimming \n2 2 0 6 United States Swimming \n3 2 3 6 United States Swimming \n4 2 1 5 United States Swimming ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountrySport
0Michael Phelps23.0200808/24/20088008United StatesSwimming
1Michael Phelps19.0200408/29/20046028United StatesSwimming
2Michael Phelps27.0201208/12/20124206United StatesSwimming
3Natalie Coughlin25.0200808/24/20081236United StatesSwimming
4Natalie Coughlin21.0200408/29/20042215United StatesSwimming
\n
" + }, + "metadata": {}, + "execution_count": 46 + } + ], + "source": [ + "data_final.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8618" + }, + "metadata": {}, + "execution_count": 47 + } + ], + "source": [ + "len(data_final)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tipos de Joins" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Inner Join <= A (Left Join), B (Right Join) <= Outer Join**" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "# Los atletas que resultaron, se utilizaran para eliminar informacion de ellos\n", + "\n", + "out_athletes = np.random.choice(data_main[\"Athlete\"], size = 6, replace = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array(['Chris Newton', 'Beverly McDonald', 'Takehiro Kashima',\n 'Ivan Cherezov', 'Aline', 'Yoon Jin-Hee'], dtype=object)" + }, + "metadata": {}, + "execution_count": 50 + } + ], + "source": [ + "out_athletes" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "data_country_dlt = data_country_dp[(~data_country_dp[\"Athlete\"].isin(out_athletes)) &\n", + " (data_country_dp[\"Athlete\"] != \"Michael Phelps\")]\n", + "\n", + "data_sports_dlt = data_sports_dp[(~data_sports_dp[\"Athlete\"].isin(out_athletes)) &\n", + " (data_sports_dp[\"Athlete\"] != \"Michael Phelps\")]\n", + "\n", + "data_main_dlt = data_main[(~data_main[\"Athlete\"].isin(out_athletes)) &\n", + " (data_main[\"Athlete\"] != \"Michael Phelps\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Country\n1 Natalie Coughlin United States\n2 Aleksey Nemov Russia\n3 Alicia Coutts Australia\n4 Missy Franklin United States\n5 Ryan Lochte United States", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteCountry
1Natalie CoughlinUnited States
2Aleksey NemovRussia
3Alicia CouttsAustralia
4Missy FranklinUnited States
5Ryan LochteUnited States
\n
" + }, + "metadata": {}, + "execution_count": 52 + } + ], + "source": [ + "data_country_dlt.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6949" + }, + "metadata": {}, + "execution_count": 53 + } + ], + "source": [ + "len(data_country_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6949" + }, + "metadata": {}, + "execution_count": 54 + } + ], + "source": [ + "len(data_sports_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8604" + }, + "metadata": {}, + "execution_count": 55 + } + ], + "source": [ + "len(data_main_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7" + }, + "metadata": {}, + "execution_count": 56 + } + ], + "source": [ + "len(data_country_dp) - len(data_country_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inner Join\n", + "\n", + "* Devuelve un data frame con las filas que tienen valor tanto en el primer como en el segundo data frame que estamos uniendo\n", + "* El número de filas será igual al número de filas **comunes** que tengan ambos data sets\n", + " * Data Set A tiene 60 filas\n", + " * Data Set B tiene 30 filas\n", + " * Ambos comparten 30 filas\n", + " * Entonces A Inner Join B tendrá 30 filas\n", + "* En términos de teoría de conjuntos, se trata de la intersección de los dos conjuntos" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "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\n", + "text/plain": "" + }, + "metadata": {}, + "execution_count": 57 + } + ], + "source": [ + "Image(filename=\"/Users/nuelcodes/Data-Science-Python/notebooks/resources/inner-join.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "# Unir un data set que contenga toda la información, con uno que le falte una parte\n", + "\n", + "# data_main contiene toda la informacion\n", + "# data_country_dlt le falta la informacion de 7 atletas\n", + "\n", + "merged_inner = pd.merge(left = data_main, right = data_country_dlt, how = \"inner\", left_on = \"Athlete\", right_on = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8604" + }, + "metadata": {}, + "execution_count": 62 + } + ], + "source": [ + "len(merged_inner)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n0 Natalie Coughlin 25.0 2008 08/24/2008 1 \n1 Natalie Coughlin 21.0 2004 08/29/2004 2 \n2 Natalie Coughlin 29.0 2012 08/12/2012 0 \n3 Aleksey Nemov 24.0 2000 10/01/2000 2 \n4 Alicia Coutts 24.0 2012 08/12/2012 1 \n\n Silver Medals Bronze Medals Total Medals Country \n0 2 3 6 United States \n1 2 1 5 United States \n2 0 1 1 United States \n3 1 3 6 Russia \n4 3 1 5 Australia ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
0Natalie Coughlin25.0200808/24/20081236United States
1Natalie Coughlin21.0200408/29/20042215United States
2Natalie Coughlin29.0201208/12/20120011United States
3Aleksey Nemov24.0200010/01/20002136Russia
4Alicia Coutts24.0201208/12/20121315Australia
\n
" + }, + "metadata": {}, + "execution_count": 63 + } + ], + "source": [ + "merged_inner.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Left Join\n", + "\n", + "* Devuelve un data frame con las filas que tuvieran valor en el dataset de la izquierda, sin importar si tienen correspondencia en la de la derecha o no.\n", + "* Las filas del data frame final que no correspondan a ningula fila del data frame derecho, tendrán NA's en las columnas del data frame derecho.\n", + "* El número de filas será igual al número de filas del data frame izquierdo\n", + " * Data Set A tiene 60 filas\n", + " * Data Set B tiene 50 filas\n", + " * Entonces A Left Join B tendrá 60 filas\n", + "* En términos de teoría de conjuntos, se trata del propio data set de la izquierda quien, además tiene la intersección en su interior" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "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\n", + "text/plain": "" + }, + "metadata": {}, + "execution_count": 58 + } + ], + "source": [ + "Image(filename=\"/Users/nuelcodes/Data-Science-Python/notebooks/resources/left-join.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "merged_left = pd.merge(left = data_main, right = data_country_dlt, how = \"left\", left_on = \"Athlete\", right_on = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8618" + }, + "metadata": {}, + "execution_count": 65 + } + ], + "source": [ + "len(merged_left)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n0 Michael Phelps 23.0 2008 08/24/2008 8 \n1 Michael Phelps 19.0 2004 08/29/2004 6 \n2 Michael Phelps 27.0 2012 08/12/2012 4 \n3 Natalie Coughlin 25.0 2008 08/24/2008 1 \n4 Aleksey Nemov 24.0 2000 10/01/2000 2 \n\n Silver Medals Bronze Medals Total Medals Country \n0 0 0 8 NaN \n1 0 2 8 NaN \n2 2 0 6 NaN \n3 2 3 6 United States \n4 1 3 6 Russia ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
0Michael Phelps23.0200808/24/20088008NaN
1Michael Phelps19.0200408/29/20046028NaN
2Michael Phelps27.0201208/12/20124206NaN
3Natalie Coughlin25.0200808/24/20081236United States
4Aleksey Nemov24.0200010/01/20002136Russia
\n
" + }, + "metadata": {}, + "execution_count": 66 + } + ], + "source": [ + "merged_left.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Right Join\n", + "\n", + "* Devuelve un data frame con las filas que tuvieran valor en el dataset de la derecha, sin importar si tienen correspondencia en el de la izquierda o no.\n", + "* Las filas del data frame final que no correspondan a ninguna fila del data frame izquierdo, tendrán NA's en las columnas del data frame izquierdo.\n", + " * Data Set A tiene 60 filas\n", + " * Data Set B tiene 50 filas\n", + " * Entonces A Right Join B tendrá 50 filas\n", + "* En términos de teoría de conjuntos, se trata del propio data set de la derecha quien, además tiene la intersección en su interior." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "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\n", + "text/plain": "" + }, + "metadata": {}, + "execution_count": 59 + } + ], + "source": [ + "Image(\"/Users/nuelcodes/Data-Science-Python/notebooks/resources/right-join.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "merged_right = pd.merge(left = data_main_dlt, right = data_country_dp, how = \"right\", left_on = \"Athlete\", right_on = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8611" + }, + "metadata": {}, + "execution_count": 69 + } + ], + "source": [ + "len(merged_right)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n0 Natalie Coughlin 25.0 2008.0 08/24/2008 1.0 \n1 Natalie Coughlin 21.0 2004.0 08/29/2004 2.0 \n2 Natalie Coughlin 29.0 2012.0 08/12/2012 0.0 \n3 Aleksey Nemov 24.0 2000.0 10/01/2000 2.0 \n4 Alicia Coutts 24.0 2012.0 08/12/2012 1.0 \n5 Missy Franklin 17.0 2012.0 08/12/2012 4.0 \n6 Ryan Lochte 27.0 2012.0 08/12/2012 2.0 \n7 Ryan Lochte 24.0 2008.0 08/24/2008 2.0 \n8 Ryan Lochte 20.0 2004.0 08/29/2004 1.0 \n9 Allison Schmitt 22.0 2012.0 08/12/2012 3.0 \n\n Silver Medals Bronze Medals Total Medals Country \n0 2.0 3.0 6.0 United States \n1 2.0 1.0 5.0 United States \n2 0.0 1.0 1.0 United States \n3 1.0 3.0 6.0 Russia \n4 3.0 1.0 5.0 Australia \n5 0.0 1.0 5.0 United States \n6 2.0 1.0 5.0 United States \n7 0.0 2.0 4.0 United States \n8 1.0 0.0 2.0 United States \n9 1.0 1.0 5.0 United States ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
0Natalie Coughlin25.02008.008/24/20081.02.03.06.0United States
1Natalie Coughlin21.02004.008/29/20042.02.01.05.0United States
2Natalie Coughlin29.02012.008/12/20120.00.01.01.0United States
3Aleksey Nemov24.02000.010/01/20002.01.03.06.0Russia
4Alicia Coutts24.02012.008/12/20121.03.01.05.0Australia
5Missy Franklin17.02012.008/12/20124.00.01.05.0United States
6Ryan Lochte27.02012.008/12/20122.02.01.05.0United States
7Ryan Lochte24.02008.008/24/20082.00.02.04.0United States
8Ryan Lochte20.02004.008/29/20041.01.00.02.0United States
9Allison Schmitt22.02012.008/12/20123.01.01.05.0United States
\n
" + }, + "metadata": {}, + "execution_count": 70 + } + ], + "source": [ + "merged_right.head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outer Join\n", + "\n", + "* Devuleve un data frame con todas las filas de ambos, reemplazando las ausencias de uno o de otro con NA's en la región específica.\n", + "* Las filas del data frame final que no correspondan a ninguna fila del data frame derecho (o izquierdo), tendrán NA's en las columnas del data frame derecho (o izquierdo).\n", + "* El número de filas será igual al máximo número de filas de ambos data frames.\n", + " * Data Set A tinen 60 filas\n", + " * Data Set B tiene 50 filas\n", + " * Ambos comparten 30 filas\n", + " * Entonces A Outer Join B tendrá 60 + 50 -30 = 80 filas\n", + "* En términos de teoría de conjuntos, se trata de la unión de conjuntos." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/png": "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\n", + "text/plain": "" + }, + "metadata": {}, + "execution_count": 60 + } + ], + "source": [ + "Image(\"/Users/nuelcodes/Data-Science-Python/notebooks/resources/outer-join.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "data_country_mc = data_country_dlt.append(\n", + " {\n", + " \"Athlete\" : \"Manuel Castillo\",\n", + " \"Country\" : \"Mexico\"\n", + " },ignore_index = True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Country\n0 Natalie Coughlin United States\n1 Aleksey Nemov Russia\n2 Alicia Coutts Australia\n3 Missy Franklin United States\n4 Ryan Lochte United States\n... ... ...\n6945 Kateryna Serdiuk Ukraine\n6946 Wietse van Alten Netherlands\n6947 Sandra Wagner-Sachse Germany\n6948 Rod White United States\n6949 Manuel Castillo Mexico\n\n[6950 rows x 2 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteCountry
0Natalie CoughlinUnited States
1Aleksey NemovRussia
2Alicia CouttsAustralia
3Missy FranklinUnited States
4Ryan LochteUnited States
.........
6945Kateryna SerdiukUkraine
6946Wietse van AltenNetherlands
6947Sandra Wagner-SachseGermany
6948Rod WhiteUnited States
6949Manuel CastilloMexico
\n

6950 rows × 2 columns

\n
" + }, + "metadata": {}, + "execution_count": 72 + } + ], + "source": [ + "data_country_mc" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "merged_outer = pd.merge(left = data_main, right = data_country_mc, how = \"outer\", left_on = \"Athlete\", right_on = \"Athlete\")" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8619" + }, + "metadata": {}, + "execution_count": 74 + } + ], + "source": [ + "len(merged_outer)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Athlete Age Year Closing Ceremony Date Gold Medals \\\n8614 Kateryna Serdiuk 17.0 2000.0 10/01/2000 0.0 \n8615 Wietse van Alten 21.0 2000.0 10/01/2000 0.0 \n8616 Sandra Wagner-Sachse 31.0 2000.0 10/01/2000 0.0 \n8617 Rod White 23.0 2000.0 10/01/2000 0.0 \n8618 Manuel Castillo NaN NaN NaN NaN \n\n Silver Medals Bronze Medals Total Medals Country \n8614 1.0 0.0 1.0 Ukraine \n8615 0.0 1.0 1.0 Netherlands \n8616 0.0 1.0 1.0 Germany \n8617 0.0 1.0 1.0 United States \n8618 NaN NaN NaN Mexico ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
AthleteAgeYearClosing Ceremony DateGold MedalsSilver MedalsBronze MedalsTotal MedalsCountry
8614Kateryna Serdiuk17.02000.010/01/20000.01.00.01.0Ukraine
8615Wietse van Alten21.02000.010/01/20000.00.01.01.0Netherlands
8616Sandra Wagner-Sachse31.02000.010/01/20000.00.01.01.0Germany
8617Rod White23.02000.010/01/20000.00.01.01.0United States
8618Manuel CastilloNaNNaNNaNNaNNaNNaNNaNMexico
\n
" + }, + "metadata": {}, + "execution_count": 75 + } + ], + "source": [ + "merged_outer.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8618" + }, + "metadata": {}, + "execution_count": 76 + } + ], + "source": [ + "len(data_main)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8604" + }, + "metadata": {}, + "execution_count": 77 + } + ], + "source": [ + "len(data_main_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6956" + }, + "metadata": {}, + "execution_count": 78 + } + ], + "source": [ + "len(data_country_dp)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6949" + }, + "metadata": {}, + "execution_count": 79 + } + ], + "source": [ + "len(data_country_dlt)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8604" + }, + "metadata": {}, + "execution_count": 80 + } + ], + "source": [ + "len(merged_inner)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8618" + }, + "metadata": {}, + "execution_count": 81 + } + ], + "source": [ + "len(merged_left)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8611" + }, + "metadata": {}, + "execution_count": 82 + } + ], + "source": [ + "len(merged_right)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "8619" + }, + "metadata": {}, + "execution_count": 83 + } + ], + "source": [ + "len(merged_outer)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T3 - 1 - Statistics - Correlacion.ipynb b/scratch/T3 - 1 - Statistics - Correlacion.ipynb new file mode 100644 index 00000000..4b67b79d --- /dev/null +++ b/scratch/T3 - 1 - Statistics - Correlacion.ipynb @@ -0,0 +1,335 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "data_ads = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")\n", + "data_ads2 = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")\n", + "data_ads3 = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " TV Radio Newspaper Sales\n0 230.1 37.8 69.2 22.1\n1 44.5 39.3 45.1 10.4\n2 17.2 45.9 69.3 9.3\n3 151.5 41.3 58.5 18.5\n4 180.8 10.8 58.4 12.9", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TVRadioNewspaperSales
0230.137.869.222.1
144.539.345.110.4
217.245.969.39.3
3151.541.358.518.5
4180.810.858.412.9
\n
" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "data_ads.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "data_ads[\"corrn\"] = (data_ads[\"TV\"] - np.mean(data_ads[\"TV\"]))*(data_ads[\"Sales\"] - np.mean(data_ads[\"Sales\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "data_ads[\"corr1\"] = (data_ads[\"TV\"] - np.mean(data_ads[\"TV\"]))**2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " TV Radio Newspaper Sales corrn corr1\n0 230.1 37.8 69.2 22.1 670.896956 6898.548306\n1 44.5 39.3 45.1 10.4 371.460206 10514.964306\n2 17.2 45.9 69.3 9.3 613.181206 16859.074806\n3 151.5 41.3 58.5 18.5 19.958456 19.869306\n4 180.8 10.8 58.4 12.9 -37.892794 1139.568806", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TVRadioNewspaperSalescorrncorr1
0230.137.869.222.1670.8969566898.548306
144.539.345.110.4371.46020610514.964306
217.245.969.39.3613.18120616859.074806
3151.541.358.518.519.95845619.869306
4180.810.858.412.9-37.8927941139.568806
\n
" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "source": [ + "data_ads.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "data_ads[\"corr2\"] = (data_ads[\"Sales\"] - np.mean(data_ads[\"Sales\"]))**2" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " TV Radio Newspaper Sales corrn corr1 corr2\n0 230.1 37.8 69.2 22.1 670.896956 6898.548306 65.246006\n1 44.5 39.3 45.1 10.4 371.460206 10514.964306 13.122506\n2 17.2 45.9 69.3 9.3 613.181206 16859.074806 22.302006\n3 151.5 41.3 58.5 18.5 19.958456 19.869306 20.048006\n4 180.8 10.8 58.4 12.9 -37.892794 1139.568806 1.260006", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TVRadioNewspaperSalescorrncorr1corr2
0230.137.869.222.1670.8969566898.54830665.246006
144.539.345.110.4371.46020610514.96430613.122506
217.245.969.39.3613.18120616859.07480622.302006
3151.541.358.518.519.95845619.86930620.048006
4180.810.858.412.9-37.8927941139.5688061.260006
\n
" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "data_ads.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "corre_pearson = sum(data_ads[\"corrn\"]) / np.sqrt(sum(data_ads[\"corr1\"]) * sum(data_ads[\"corr2\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.782224424861606" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "corre_pearson" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def corr_coeff(df, var1, var2):\n", + " df[\"corrn\"] = (df[var1] - np.mean(df[var1]))*(df[var2] - np.mean(df[var2]))\n", + " df[\"corr1\"] = (df[var1] - np.mean(df[var1]))**2\n", + " df[\"corr2\"] = (df[var2] - np.mean(df[var2]))**2\n", + " corre_p = sum(df[\"corrn\"]) / np.sqrt(sum(df[\"corr1\"]) * sum(df[\"corr2\"]))\n", + " return corre_p" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.22829902637616525" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "corr_coeff(data_ads, \"Newspaper\", \"Sales\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "cols = data_ads2.columns.values" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array(['TV', 'Radio', 'Newspaper', 'Sales'], dtype=object)" + }, + "metadata": {}, + "execution_count": 30 + } + ], + "source": [ + "cols" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "TV - TV : 1.0\nTV - Radio : 0.05480866446583009\nTV - Newspaper : 0.056647874965056993\nTV - Sales : 0.782224424861606\nRadio - TV : 0.05480866446583009\nRadio - Radio : 1.0\nRadio - Newspaper : 0.3541037507611752\nRadio - Sales : 0.5762225745710553\nNewspaper - TV : 0.056647874965056993\nNewspaper - Radio : 0.3541037507611752\nNewspaper - Newspaper : 1.0\nNewspaper - Sales : 0.22829902637616525\nSales - TV : 0.782224424861606\nSales - Radio : 0.5762225745710553\nSales - Newspaper : 0.22829902637616525\nSales - Sales : 1.0\n" + } + ], + "source": [ + "for x in cols:\n", + " for y in cols:\n", + " print(x + \" - \" + y + \" : \" + str(corr_coeff(data_ads2, x, y)))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Text(0.5, 1.0, 'Gato en TV vs Ventas del Producto')" + }, + "metadata": {}, + "execution_count": 41 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(data_ads[\"TV\"], data_ads[\"Sales\"], \"ro\")\n", + "plt.title(\"Gato en TV vs Ventas del Producto\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " TV Radio Newspaper Sales\nTV 1.000000 0.054809 0.056648 0.782224\nRadio 0.054809 1.000000 0.354104 0.576223\nNewspaper 0.056648 0.354104 1.000000 0.228299\nSales 0.782224 0.576223 0.228299 1.000000", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TVRadioNewspaperSales
TV1.0000000.0548090.0566480.782224
Radio0.0548091.0000000.3541040.576223
Newspaper0.0566480.3541041.0000000.228299
Sales0.7822240.5762230.2282991.000000
\n
" + }, + "metadata": {}, + "execution_count": 44 + } + ], + "source": [ + "data_ads3.corr()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "" + }, + "metadata": {}, + "execution_count": 45 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.matshow(data_ads3.corr())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T4 - 1 - Linear Regression - Datos ficticios.ipynb b/scratch/T4 - 1 - Linear Regression - Datos ficticios.ipynb new file mode 100644 index 00000000..fdbade44 --- /dev/null +++ b/scratch/T4 - 1 - Linear Regression - Datos ficticios.ipynb @@ -0,0 +1,633 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modelos de Regresión Linear\n", + "## Modelo con datos simulados\n", + "* y = a + b * x\n", + "* X : 100 valores distribuídos según una N(1.5, 2.5)\n", + "* Ye = 5 + 1.7 * x + e\n", + "* e estará distribuido según una N(0, 0.8)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "x = 1.5 + 2.5 * np.random.randn(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "res = 0 + 0.8 * np.random.randn(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = 5 + 1.7 * x" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "y_act = 5 + 1.7 * x + res" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "x_list = x.tolist()\n", + "y_pred_list = y_pred.tolist()\n", + "y_act_list = y_act.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.DataFrame(\n", + " {\n", + " \"x\":x_list,\n", + " \"y_actual\":y_act_list,\n", + " \"y_prediccion\":y_pred_list\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " x y_actual y_prediccion\n0 2.484583 9.201748 9.223792\n1 1.910287 9.414866 8.247489\n2 0.159052 6.034435 5.270389\n3 -1.223286 2.073480 2.920414\n4 2.764770 9.167735 9.700109", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
xy_actualy_prediccion
02.4845839.2017489.223792
11.9102879.4148668.247489
20.1590526.0344355.270389
3-1.2232862.0734802.920414
42.7647709.1677359.700109
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "y_mean = [np.mean(y_act) for i in range(1, len(x_list) + 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Text(0.5, 1.0, 'Valor actual vs Predicción')" + }, + "metadata": {}, + "execution_count": 11 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "plt.plot(x, y_pred)\n", + "plt.plot(x, y_act, \"ro\") #Valores actuales\n", + "plt.plot(x, y_mean, \"g\")\n", + "plt.title(\"Valor actual vs Predicción\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ¿Cómo es la predicción de buena?\n", + "\n", + "* SST = SSD + SSR\n", + "* SST : Variabilidad de los datos con respecto a su media\n", + "* SSD : DIferencia entre los datos originales y las predicciones que el modelo no es capaz de explicar (errores que deberían seguir una distribución normal)\n", + "* SSR : Diferencia entre la regresión y el valor medio que el modelo busca explicar \n", + "* R2 = SSR / SST, coeficiente de determinación entre 0 y 1" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"SSR\"] = (data[\"y_prediccion\"] - np.mean(y_act))**2\n", + "data[\"SSD\"] = (data[\"y_prediccion\"] - data[\"y_actual\"])**2\n", + "data[\"SST\"] = (data[\"y_actual\"] - np.mean(y_act))**2" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " x y_actual y_prediccion SSR SSD SST\n0 2.484583 9.201748 9.223792 2.174110 0.000486 2.109590\n1 1.910287 9.414866 8.247489 0.248186 1.362771 2.774093\n2 0.159052 6.034435 5.270389 6.145026 0.583766 2.940780\n3 -1.223286 2.073480 2.920414 23.318194 0.717297 32.214996\n4 2.764770 9.167735 9.700109 3.805636 0.283422 2.011943", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
xy_actualy_prediccionSSRSSDSST
02.4845839.2017489.2237922.1741100.0004862.109590
11.9102879.4148668.2474890.2481861.3627712.774093
20.1590526.0344355.2703896.1450260.5837662.940780
3-1.2232862.0734802.92041423.3181940.71729732.214996
42.7647709.1677359.7001093.8056360.2834222.011943
\n
" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "SSR = sum(data[\"SSR\"])\n", + "SSD = sum(data[\"SSD\"])\n", + "SST = sum(data[\"SST\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1855.7865601674973" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "SSR" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "64.79923613482606" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "SSD # Lo que no se puede explicar por el modelo" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1945.4061189165095" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "SST" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1920.5857963023234" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "SSR + SSD" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "R2 = SSR / SST" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.9539327249577453" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "R2" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 2., 1., 11., 14., 23., 20., 10., 13., 5., 1.]),\n array([-2.17712714, -1.75032151, -1.32351588, -0.89671025, -0.46990462,\n -0.04309899, 0.38370664, 0.81051227, 1.23731789, 1.66412352,\n 2.09092915]),\n
)" + }, + "metadata": {}, + "execution_count": 21 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"y_prediccion\"] - data[\"y_actual\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Obteniendo la recta de regresión\n", + "\n", + "* y = a + b * x\n", + "* b = sum((xi - x_m)*(y_i - y_m)) / sum((xi - x_m)^2)\n", + "* a = y_m - b * x_m" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(1.6142735956748504, 7.749305373878656)" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "# Obteniendo la media tanto de x como de y\n", + "x_mean = np.mean(data[\"x\"])\n", + "y_mean = np.mean(data[\"y_actual\"])\n", + "x_mean, y_mean" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "# Calculando el numerador de beta\n", + "data[\"beta_n\"] = (data[\"x\"] - x_mean) * (data[\"y_actual\"] - y_mean)\n", + "# Calculando el denominador de beta\n", + "data[\"beta_d\"] = (data[\"x\"] - x_mean)**2" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "beta = sum(data[\"beta_n\"]) / sum(data[\"beta_d\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "alpha = y_mean - beta * x_mean" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(4.986684814719274, 1.7113707159438871)" + }, + "metadata": {}, + "execution_count": 26 + } + ], + "source": [ + "# Estos son los valores que en un principio habiamos definido (fecha de cumpleaños)\n", + "alpha, beta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### El modelo lineal obtenido por regresión es:\n", + "y = 4.953078171728445 + 1.7118526118946151 * x" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "# Valor modelado\n", + "data[\"y_model\"] = alpha + beta * data[\"x\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " x y_actual y_prediccion SSR SSD SST \\\n0 2.484583 9.201748 9.223792 2.174110 0.000486 2.109590 \n1 1.910287 9.414866 8.247489 0.248186 1.362771 2.774093 \n2 0.159052 6.034435 5.270389 6.145026 0.583766 2.940780 \n3 -1.223286 2.073480 2.920414 23.318194 0.717297 32.214996 \n4 2.764770 9.167735 9.700109 3.805636 0.283422 2.011943 \n\n beta_n beta_d y_model \n0 1.264075 0.757439 9.238728 \n1 0.493029 0.087624 8.255895 \n2 2.495516 2.117669 5.258883 \n3 16.105493 8.051744 2.893189 \n4 1.631899 1.323642 9.718232 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
xy_actualy_prediccionSSRSSDSSTbeta_nbeta_dy_model
02.4845839.2017489.2237922.1741100.0004862.1095901.2640750.7574399.238728
11.9102879.4148668.2474890.2481861.3627712.7740930.4930290.0876248.255895
20.1590526.0344355.2703896.1450260.5837662.9407802.4955162.1176695.258883
3-1.2232862.0734802.92041423.3181940.71729732.21499616.1054938.0517442.893189
42.7647709.1677359.7001093.8056360.2834222.0119431.6318991.3236429.718232
\n
" + }, + "metadata": {}, + "execution_count": 28 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "SSR = sum((data[\"y_model\"] - y_mean)**2)\n", + "SSD = sum((data[\"y_model\"] - data[\"y_actual\"])**2)\n", + "SST = sum((data[\"y_actual\"] - y_mean)**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(1880.6924475023486, 64.71367141416098, 1945.4061189165097)" + }, + "metadata": {}, + "execution_count": 30 + } + ], + "source": [ + "SSR, SSD, SST" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.9667351352579259" + }, + "metadata": {}, + "execution_count": 31 + } + ], + "source": [ + "R2 = SSR / SST\n", + "R2" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Text(0.5, 1.0, 'Valor actual vs Predicción')" + }, + "metadata": {}, + "execution_count": 32 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "y_mean = [np.mean(y_act) for i in range(1, len(x_list) + 1)]\n", + "\n", + "%matplotlib inline\n", + "plt.plot(x, y_pred)\n", + "plt.plot(x, y_act, \"ro\") #Valores actuales\n", + "plt.plot(x, y_mean, \"g\")\n", + "plt.plot(data[\"x\"], data[\"y_model\"])\n", + "plt.title(\"Valor actual vs Predicción\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Error estándar de los residuos (RSE)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "RSE = np.sqrt(SSD / (len(data) - 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.8126152754279147" + }, + "metadata": {}, + "execution_count": 34 + } + ], + "source": [ + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7.749305373878656" + }, + "metadata": {}, + "execution_count": 35 + } + ], + "source": [ + "np.mean(data[\"y_actual\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.10486298270901502" + }, + "metadata": {}, + "execution_count": 36 + } + ], + "source": [ + "RSE / np.mean(data[\"y_actual\"])" + ] + } + ], + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T4 - 2 - Linear Regression - Regresion lineal simple.ipynb b/scratch/T4 - 2 - Linear Regression - Regresion lineal simple.ipynb new file mode 100644 index 00000000..c9784189 --- /dev/null +++ b/scratch/T4 - 2 - Linear Regression - Regresion lineal simple.ipynb @@ -0,0 +1,833 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regresión lineal simple en Python\n", + "\n", + "## El paquete statsmodel para regresión lineal" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " TV Radio Newspaper Sales\n0 230.1 37.8 69.2 22.1\n1 44.5 39.3 45.1 10.4\n2 17.2 45.9 69.3 9.3\n3 151.5 41.3 58.5 18.5\n4 180.8 10.8 58.4 12.9", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TVRadioNewspaperSales
0230.137.869.222.1
144.539.345.110.4
217.245.969.39.3
3151.541.358.518.5
4180.810.858.412.9
\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import statsmodels.formula.api as smf" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + " lm = smf.ols(formula = \"Sales~TV\", data = data).fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Intercept 7.032594\nTV 0.047537\ndtype: float64" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "lm.params" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El modelo lineal predictivo sería Sales = 7.032594 + 0.047537 * TV" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Intercept 1.406300e-35\nTV 1.467390e-42\ndtype: float64" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "lm.pvalues" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.611875050850071" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "lm.rsquared" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6099148238341623" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "lm.rsquared_adj" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\n\"\"\"\n OLS Regression Results \n==============================================================================\nDep. Variable: Sales R-squared: 0.612\nModel: OLS Adj. R-squared: 0.610\nMethod: Least Squares F-statistic: 312.1\nDate: Sat, 20 Jun 2020 Prob (F-statistic): 1.47e-42\nTime: 05:23:44 Log-Likelihood: -519.05\nNo. Observations: 200 AIC: 1042.\nDf Residuals: 198 BIC: 1049.\nDf Model: 1 \nCovariance Type: nonrobust \n==============================================================================\n coef std err t P>|t| [0.025 0.975]\n------------------------------------------------------------------------------\nIntercept 7.0326 0.458 15.360 0.000 6.130 7.935\nTV 0.0475 0.003 17.668 0.000 0.042 0.053\n==============================================================================\nOmnibus: 0.531 Durbin-Watson: 1.935\nProb(Omnibus): 0.767 Jarque-Bera (JB): 0.669\nSkew: -0.089 Prob(JB): 0.716\nKurtosis: 2.779 Cond. No. 338.\n==============================================================================\n\nWarnings:\n[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n\"\"\"", + "text/html": "\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
OLS Regression Results
Dep. Variable: Sales R-squared: 0.612
Model: OLS Adj. R-squared: 0.610
Method: Least Squares F-statistic: 312.1
Date: Sat, 20 Jun 2020 Prob (F-statistic): 1.47e-42
Time: 05:23:44 Log-Likelihood: -519.05
No. Observations: 200 AIC: 1042.
Df Residuals: 198 BIC: 1049.
Df Model: 1
Covariance Type: nonrobust
\n\n\n \n\n\n \n\n\n \n\n
coef std err t P>|t| [0.025 0.975]
Intercept 7.0326 0.458 15.360 0.000 6.130 7.935
TV 0.0475 0.003 17.668 0.000 0.042 0.053
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
Omnibus: 0.531 Durbin-Watson: 1.935
Prob(Omnibus): 0.767 Jarque-Bera (JB): 0.669
Skew: -0.089 Prob(JB): 0.716
Kurtosis: 2.779 Cond. No. 338.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "lm.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 17.970775\n1 9.147974\n2 7.850224\n3 14.234395\n4 15.627218\n ... \n195 8.848493\n196 11.510545\n197 15.446579\n198 20.513985\n199 18.065848\nLength: 200, dtype: float64" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "sales_pred = lm.predict(pd.DataFrame(data[\"TV\"]))\n", + "sales_pred" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "data.plot(kind = \"scatter\", x = \"TV\", y = \"Sales\")\n", + "plt.plot(pd.DataFrame(data[\"TV\"]), sales_pred, c=\"red\", linewidth = 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"sales_pred\"] = 7.032594 + 0.047537 * data[\"TV\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"RSE\"] = (data[\"Sales\"] - data[\"sales_pred\"]) ** 2" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2102.5305838896525" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "SSD = sum(data[\"RSE\"])\n", + "SSD" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2.917645098268167" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "RSE = np.sqrt(SSD / len(data) - 2)\n", + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "14.022500000000003" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "sales_m = np.mean(data[\"Sales\"])\n", + "sales_m" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.20806882497900991" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "error = RSE / sales_m\n", + "error" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 4., 10., 13., 17., 40., 42., 33., 16., 17., 8.]),\n array([-8.3860819 , -6.82624404, -5.26640618, -3.70656832, -2.14673046,\n -0.5868926 , 0.97294526, 2.53278312, 4.09262098, 5.65245884,\n 7.2122967 ]),\n )" + }, + "metadata": {}, + "execution_count": 20 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(data[\"Sales\"] - data[\"sales_pred\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regresión lineal múltiple en Python\n", + "\n", + "## El paquete statsmodel para regresión múltiple\n", + "\n", + "* Sales ~ TV\n", + "* Sales ~ Newspaper\n", + "* Sales ~ Radio\n", + "* Sales ~ TV + Newspaper\n", + "* Sales ~ TV + Radio\n", + "* Sales ~ Newspaper + Radio\n", + "* Sales ~ TV + Newspaper + Radio" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Añadir el Newspaper al modelo existene\n", + "lm2 = smf.ols(formula=\"Sales~TV+Newspaper\", data = data).fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Intercept 5.774948\nTV 0.046901\nNewspaper 0.044219\ndtype: float64" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "lm2.params" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Intercept 3.145860e-22\nTV 5.507584e-44\nNewspaper 2.217084e-05\ndtype: float64" + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "lm2.pvalues" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sales = 5.774948 + (0.046901 * TV) + (0.044219 * Newspaper)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6458354938293271" + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "lm2.rsquared" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6422399150864777" + }, + "metadata": {}, + "execution_count": 25 + } + ], + "source": [ + "lm2.rsquared_adj" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "sales_predTN = lm2.predict(data[[\"TV\", \"Newspaper\"]])" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0 19.626901\n1 9.856348\n2 9.646055\n3 15.467318\n4 16.837102\n ... \n195 8.176802\n196 10.551220\n197 14.359467\n198 22.003458\n199 17.045429\nLength: 200, dtype: float64" + }, + "metadata": {}, + "execution_count": 27 + } + ], + "source": [ + "sales_predTN" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Desviación estandar de los residuos\n", + "SSD = sum((data[\"Sales\"] - sales_predTN)**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1918.5618118968275" + }, + "metadata": {}, + "execution_count": 29 + } + ], + "source": [ + "SSD" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "RSE = np.sqrt(SSD / (len(data) - 3))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3.1207198602528856" + }, + "metadata": {}, + "execution_count": 31 + } + ], + "source": [ + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "error = RSE / sales_m" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.2225508903728212" + }, + "metadata": {}, + "execution_count": 33 + } + ], + "source": [ + "error" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\n\"\"\"\n OLS Regression Results \n==============================================================================\nDep. Variable: Sales R-squared: 0.646\nModel: OLS Adj. R-squared: 0.642\nMethod: Least Squares F-statistic: 179.6\nDate: Sat, 20 Jun 2020 Prob (F-statistic): 3.95e-45\nTime: 05:23:45 Log-Likelihood: -509.89\nNo. Observations: 200 AIC: 1026.\nDf Residuals: 197 BIC: 1036.\nDf Model: 2 \nCovariance Type: nonrobust \n==============================================================================\n coef std err t P>|t| [0.025 0.975]\n------------------------------------------------------------------------------\nIntercept 5.7749 0.525 10.993 0.000 4.739 6.811\nTV 0.0469 0.003 18.173 0.000 0.042 0.052\nNewspaper 0.0442 0.010 4.346 0.000 0.024 0.064\n==============================================================================\nOmnibus: 0.658 Durbin-Watson: 1.969\nProb(Omnibus): 0.720 Jarque-Bera (JB): 0.415\nSkew: -0.093 Prob(JB): 0.813\nKurtosis: 3.122 Cond. No. 410.\n==============================================================================\n\nWarnings:\n[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n\"\"\"", + "text/html": "\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
OLS Regression Results
Dep. Variable: Sales R-squared: 0.646
Model: OLS Adj. R-squared: 0.642
Method: Least Squares F-statistic: 179.6
Date: Sat, 20 Jun 2020 Prob (F-statistic): 3.95e-45
Time: 05:23:45 Log-Likelihood: -509.89
No. Observations: 200 AIC: 1026.
Df Residuals: 197 BIC: 1036.
Df Model: 2
Covariance Type: nonrobust
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
coef std err t P>|t| [0.025 0.975]
Intercept 5.7749 0.525 10.993 0.000 4.739 6.811
TV 0.0469 0.003 18.173 0.000 0.042 0.052
Newspaper 0.0442 0.010 4.346 0.000 0.024 0.064
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
Omnibus: 0.658 Durbin-Watson: 1.969
Prob(Omnibus): 0.720 Jarque-Bera (JB): 0.415
Skew: -0.093 Prob(JB): 0.813
Kurtosis: 3.122 Cond. No. 410.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." + }, + "metadata": {}, + "execution_count": 34 + } + ], + "source": [ + "lm2.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Añadir la Radio al modelo existene\n", + "lm3 = smf.ols(formula=\"Sales~TV+Radio\", data = data).fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\n\"\"\"\n OLS Regression Results \n==============================================================================\nDep. Variable: Sales R-squared: 0.897\nModel: OLS Adj. R-squared: 0.896\nMethod: Least Squares F-statistic: 859.6\nDate: Sat, 20 Jun 2020 Prob (F-statistic): 4.83e-98\nTime: 05:23:45 Log-Likelihood: -386.20\nNo. Observations: 200 AIC: 778.4\nDf Residuals: 197 BIC: 788.3\nDf Model: 2 \nCovariance Type: nonrobust \n==============================================================================\n coef std err t P>|t| [0.025 0.975]\n------------------------------------------------------------------------------\nIntercept 2.9211 0.294 9.919 0.000 2.340 3.502\nTV 0.0458 0.001 32.909 0.000 0.043 0.048\nRadio 0.1880 0.008 23.382 0.000 0.172 0.204\n==============================================================================\nOmnibus: 60.022 Durbin-Watson: 2.081\nProb(Omnibus): 0.000 Jarque-Bera (JB): 148.679\nSkew: -1.323 Prob(JB): 5.19e-33\nKurtosis: 6.292 Cond. No. 425.\n==============================================================================\n\nWarnings:\n[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n\"\"\"", + "text/html": "\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
OLS Regression Results
Dep. Variable: Sales R-squared: 0.897
Model: OLS Adj. R-squared: 0.896
Method: Least Squares F-statistic: 859.6
Date: Sat, 20 Jun 2020 Prob (F-statistic): 4.83e-98
Time: 05:23:45 Log-Likelihood: -386.20
No. Observations: 200 AIC: 778.4
Df Residuals: 197 BIC: 788.3
Df Model: 2
Covariance Type: nonrobust
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
coef std err t P>|t| [0.025 0.975]
Intercept 2.9211 0.294 9.919 0.000 2.340 3.502
TV 0.0458 0.001 32.909 0.000 0.043 0.048
Radio 0.1880 0.008 23.382 0.000 0.172 0.204
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
Omnibus: 60.022 Durbin-Watson: 2.081
Prob(Omnibus): 0.000 Jarque-Bera (JB): 148.679
Skew: -1.323 Prob(JB): 5.19e-33
Kurtosis: 6.292 Cond. No. 425.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." + }, + "metadata": {}, + "execution_count": 36 + } + ], + "source": [ + "lm3.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "sales_predTR = lm3.predict(data[[\"TV\", \"Radio\"]])\n", + "SSD = sum((data[\"Sales\"] - sales_predTR)**2)\n", + "RSE = np.sqrt(SSD / (len(data) - 3))" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.6813609125080011" + }, + "metadata": {}, + "execution_count": 38 + } + ], + "source": [ + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.1199045043685506" + }, + "metadata": {}, + "execution_count": 39 + } + ], + "source": [ + "RSE / sales_m" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "# Añadir la Radio y Newspaper al modelo existene\n", + "lm4 = smf.ols(formula=\"Sales~TV+Radio+Newspaper\", data = data).fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\n\"\"\"\n OLS Regression Results \n==============================================================================\nDep. Variable: Sales R-squared: 0.897\nModel: OLS Adj. R-squared: 0.896\nMethod: Least Squares F-statistic: 570.3\nDate: Sat, 20 Jun 2020 Prob (F-statistic): 1.58e-96\nTime: 05:23:46 Log-Likelihood: -386.18\nNo. Observations: 200 AIC: 780.4\nDf Residuals: 196 BIC: 793.6\nDf Model: 3 \nCovariance Type: nonrobust \n==============================================================================\n coef std err t P>|t| [0.025 0.975]\n------------------------------------------------------------------------------\nIntercept 2.9389 0.312 9.422 0.000 2.324 3.554\nTV 0.0458 0.001 32.809 0.000 0.043 0.049\nRadio 0.1885 0.009 21.893 0.000 0.172 0.206\nNewspaper -0.0010 0.006 -0.177 0.860 -0.013 0.011\n==============================================================================\nOmnibus: 60.414 Durbin-Watson: 2.084\nProb(Omnibus): 0.000 Jarque-Bera (JB): 151.241\nSkew: -1.327 Prob(JB): 1.44e-33\nKurtosis: 6.332 Cond. No. 454.\n==============================================================================\n\nWarnings:\n[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n\"\"\"", + "text/html": "\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
OLS Regression Results
Dep. Variable: Sales R-squared: 0.897
Model: OLS Adj. R-squared: 0.896
Method: Least Squares F-statistic: 570.3
Date: Sat, 20 Jun 2020 Prob (F-statistic): 1.58e-96
Time: 05:23:46 Log-Likelihood: -386.18
No. Observations: 200 AIC: 780.4
Df Residuals: 196 BIC: 793.6
Df Model: 3
Covariance Type: nonrobust
\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
coef std err t P>|t| [0.025 0.975]
Intercept 2.9389 0.312 9.422 0.000 2.324 3.554
TV 0.0458 0.001 32.809 0.000 0.043 0.049
Radio 0.1885 0.009 21.893 0.000 0.172 0.206
Newspaper -0.0010 0.006 -0.177 0.860 -0.013 0.011
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
Omnibus: 60.414 Durbin-Watson: 2.084
Prob(Omnibus): 0.000 Jarque-Bera (JB): 151.241
Skew: -1.327 Prob(JB): 1.44e-33
Kurtosis: 6.332 Cond. No. 454.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." + }, + "metadata": {}, + "execution_count": 41 + } + ], + "source": [ + "lm4.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "sales_predTRN = lm4.predict(data[[\"TV\", \"Radio\", \"Newspaper\"]])\n", + "SSD = sum((data[\"Sales\"] - sales_predTRN)**2)\n", + "RSE = np.sqrt(SSD / (len(data) - 4))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.6855103734147439" + }, + "metadata": {}, + "execution_count": 43 + } + ], + "source": [ + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.12020041885646236" + }, + "metadata": {}, + "execution_count": 44 + } + ], + "source": [ + "RSE / sales_m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multicolinealidad\n", + "### Factor Inflación de la Varianza\n", + "* VIF = 1 : Las variables no están correlacionadas\n", + "* VIF < 5 : Las variables tienen una correlación moderada y se pueden queda en el modelo\n", + "* VIF > 5 : Las variables están altamente correlacionadas y deben desaparecer del modelo" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.1451873787239286" + }, + "metadata": {}, + "execution_count": 48 + } + ], + "source": [ + "# Newspaper ~ TV + Radio -> R^2 VIF = 1 / (1 - R^2)\n", + "lm_n = smf.ols(formula=\"Newspaper~TV+Radio\", data = data).fit()\n", + "rsquared_n = lm_n.rsquared\n", + "VIF = 1 / (1 - rsquared_n)\n", + "VIF" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.0046107849396502" + }, + "metadata": {}, + "execution_count": 49 + } + ], + "source": [ + "# TV ~ Newspaper + Radio -> R^2 VIF = 1 / (1 - R^2)\n", + "lm_tv = smf.ols(formula=\"TV~Newspaper+Radio\", data = data).fit()\n", + "rsquared_tv = lm_tv.rsquared\n", + "VIF = 1 / (1 - rsquared_tv)\n", + "VIF" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.1449519171055353" + }, + "metadata": {}, + "execution_count": 50 + } + ], + "source": [ + "# Radio ~ Newspaper + TV -> R^2 VIF = 1 / (1 - R^2)\n", + "lm_r = smf.ols(formula=\"Radio~Newspaper+TV\", data = data).fit()\n", + "rsquared_r = lm_r.rsquared\n", + "VIF = 1 / (1 - rsquared_r)\n", + "VIF" + ] + } + ], + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T4 - 3 - Linear Regression - Validacion del modelo.ipynb b/scratch/T4 - 3 - Linear Regression - Validacion del modelo.ipynb new file mode 100644 index 00000000..dc14d6ff --- /dev/null +++ b/scratch/T4 - 3 - Linear Regression - Validacion del modelo.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dividir el dataset en conjunto de entrenamiento y de testing" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "a = np.random.randn(len(data))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([ 0.36687233, 0.45808315, -1.45144984, -0.13613686, -1.48220124,\n -1.49833479, -0.68407735, 1.72243095, 0.33392265, -1.49026089,\n -0.81489182, 0.22001632, 1.44137897, -0.26370132, 0.63640279,\n 0.03718162, 0.82458266, 0.40541446, -0.97434413, 1.66530442,\n -0.42014164, -0.02405733, -1.15049529, -0.3884896 , 0.98458238,\n 0.04893312, -0.29342351, -1.32515642, -0.01812654, -1.92209238,\n 0.27182326, -0.06978159, -0.25954674, 1.28014444, 2.30917488,\n 0.77426567, 0.00823344, -1.973878 , 0.26329629, 1.20898566,\n 0.8519872 , 1.17781785, -1.22649426, 0.06207098, -1.10737754,\n -0.99449949, -0.28840083, -0.59665972, 0.53703308, -1.63746003,\n 0.48752742, 1.05976577, -0.25074101, -1.28285412, -1.41640347,\n -0.53017583, -1.44879074, 1.68443752, -0.2298861 , 0.48805636,\n 1.52105777, 1.87285745, -1.03702954, 0.31575394, 1.07541203,\n 1.07397124, 1.63334968, -0.53261089, -0.11557526, 1.18143398,\n 1.28983089, -0.05233819, -1.22009896, 0.41996021, -1.20592642,\n -0.27887785, 1.09002504, 0.12963409, -0.54682584, 0.21253258,\n -0.21004755, -0.15938423, -0.02442085, 2.99961591, -1.89408838,\n -1.00362335, 0.13228457, 0.27460835, -0.64274632, 0.02641197,\n 0.60378937, 1.12665405, -0.36467653, -1.37193704, -0.50170802,\n 0.034628 , 0.97539916, 1.11835443, -0.63265352, -0.78730859,\n -0.5646103 , -1.42338695, -1.8285947 , -0.31037653, -0.38400247,\n -0.16423981, -1.03497656, -0.25272579, -1.68367882, 0.16779502,\n -1.21409463, 1.04525209, -0.13336547, 0.01898907, -1.34021422,\n 0.94656578, -0.7466614 , 0.01406659, 1.38838299, -1.03707124,\n -0.62786872, -0.85246017, -0.15806953, -1.15875131, -0.33264612,\n -0.50292468, -0.39442723, 0.430377 , -2.50268805, -0.36868897,\n -1.32375232, 0.247999 , 0.91782102, 0.48761713, -0.33817031,\n 0.02485768, -1.10836405, 1.17637721, 0.72635465, 0.70023199,\n 0.62297123, 2.32609404, -0.08430335, 0.44413356, -0.8729922 ,\n -0.04333839, -0.61088631, -2.29359636, 1.39660996, -0.37890677,\n -1.16120277, 0.32576508, 1.13931695, 1.0986169 , -0.77355196,\n -0.96656813, -0.43814668, 0.35775302, -0.15751476, 1.19762557,\n -1.75058487, 0.54078561, 0.58870616, -0.1762035 , 1.77902501,\n 0.22273288, 0.98970917, 0.4334152 , 0.78421617, -1.78096369,\n -1.09654625, 0.34181012, 0.37242086, -0.04031815, 0.65400005,\n 0.82810953, 1.37697768, -2.80844234, -1.46053396, -0.35494248,\n 0.17629351, 1.10045927, -1.34141089, 0.82347242, 0.65085735,\n -0.0095106 , 0.23882727, -0.15119893, -1.08678347, -0.89525089,\n -1.25792904, -0.73350121, 1.50404891, 0.03200713, -1.7558799 ,\n 0.33401312, 0.89544735, 0.0538985 , 0.03395399, 1.76769277])" + }, + "metadata": {}, + "execution_count": 21 + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(array([ 3., 8., 27., 27., 51., 37., 29., 14., 3., 1.]),\n array([-2.80844234, -2.22763651, -1.64683069, -1.06602486, -0.48521904,\n 0.09558679, 0.67639261, 1.25719844, 1.83800426, 2.41881008,\n 2.99961591]),\n
)" + }, + "metadata": {}, + "execution_count": 10 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "check = (a < 0.8) # Condicion de que me quedare con el 80% de los elementos\n", + "training = data[check]\n", + "testing = data[~check]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(157, 43)" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "len(training), len(testing)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import statsmodels.formula.api as smf # smf = statsmodelformula\n", + "lm = smf.ols(formula=\"Sales~TV+Radio\", data = training).fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\n\"\"\"\n OLS Regression Results \n==============================================================================\nDep. Variable: Sales R-squared: 0.886\nModel: OLS Adj. R-squared: 0.884\nMethod: Least Squares F-statistic: 597.0\nDate: Sun, 21 Jun 2020 Prob (F-statistic): 2.84e-73\nTime: 06:04:30 Log-Likelihood: -309.20\nNo. Observations: 157 AIC: 624.4\nDf Residuals: 154 BIC: 633.6\nDf Model: 2 \nCovariance Type: nonrobust \n==============================================================================\n coef std err t P>|t| [0.025 0.975]\n------------------------------------------------------------------------------\nIntercept 2.7244 0.354 7.693 0.000 2.025 3.424\nTV 0.0457 0.002 28.064 0.000 0.042 0.049\nRadio 0.1921 0.009 20.458 0.000 0.174 0.211\n==============================================================================\nOmnibus: 51.363 Durbin-Watson: 2.120\nProb(Omnibus): 0.000 Jarque-Bera (JB): 125.414\nSkew: -1.376 Prob(JB): 5.84e-28\nKurtosis: 6.406 Cond. No. 438.\n==============================================================================\n\nWarnings:\n[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n\"\"\"", + "text/html": "\n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n\n \n\n
OLS Regression Results
Dep. Variable: Sales R-squared: 0.886
Model: OLS Adj. R-squared: 0.884
Method: Least Squares F-statistic: 597.0
Date: Sun, 21 Jun 2020 Prob (F-statistic): 2.84e-73
Time: 06:04:30 Log-Likelihood: -309.20
No. Observations: 157 AIC: 624.4
Df Residuals: 154 BIC: 633.6
Df Model: 2
Covariance Type: nonrobust
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
coef std err t P>|t| [0.025 0.975]
Intercept 2.7244 0.354 7.693 0.000 2.025 3.424
TV 0.0457 0.002 28.064 0.000 0.042 0.049
Radio 0.1921 0.009 20.458 0.000 0.174 0.211
\n\n\n \n\n\n \n\n\n \n\n\n \n\n
Omnibus: 51.363 Durbin-Watson: 2.120
Prob(Omnibus): 0.000 Jarque-Bera (JB): 125.414
Skew: -1.376 Prob(JB): 5.84e-28
Kurtosis: 6.406 Cond. No. 438.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "lm.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sales = 2.7244 + 0.0457 * TV + 0.1921 * Radio" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Validación del modelo con el conjunto de testing" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7 11.982065\n12 10.553545\n16 12.852459\n19 14.046423\n24 7.991560\n33 18.703729\n34 7.366832\n39 20.384935\n40 16.261782\n41 17.228337\n51 9.156553\n57 12.636446\n60 5.553514\n61 22.867080\n64 16.936094\n65 7.663941\n66 8.888761\n69 21.063890\n70 17.700536\n76 4.288478\n83 14.397189\n91 4.319542\n96 12.427039\n97 15.207771\n111 21.068650\n115 12.878769\n118 15.556132\n132 8.332450\n137 20.783276\n141 18.375663\n148 12.201226\n152 16.229915\n153 18.177851\n159 12.277142\n164 10.903848\n166 10.764074\n175 24.770806\n176 19.876740\n181 13.747099\n183 24.126620\n192 4.297925\n196 7.970507\n199 14.983231\ndtype: float64" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "# Predecir los valores de ventas de los datos que no se han utilizado\n", + "sales_pred = lm.predict(testing)\n", + "sales_pred #Datos que no se habían utilizado en el modelo" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "87.97004854281634" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "SSD = sum((testing[\"Sales\"] - sales_pred)**2)\n", + "SSD" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.4829872600836491" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "RSE = np.sqrt(SSD / (len(testing) - 2 - 1))\n", + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.10288553111261198" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "sales_mean = np.mean(testing[\"Sales\"])\n", + "error = RSE / sales_mean\n", + "error # porcentaje de error" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T4 - 4 - Linear Regression - SciKit-Learn.ipynb b/scratch/T4 - 4 - Linear Regression - SciKit-Learn.ipynb new file mode 100644 index 00000000..1332f026 --- /dev/null +++ b/scratch/T4 - 4 - Linear Regression - SciKit-Learn.ipynb @@ -0,0 +1,205 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regresión Lineal en Python\n", + "\n", + "## El paquete scikit-learn para regresión lineal y la selección de rasgos" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.feature_selection import RFE\n", + "from sklearn.svm import SVR\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ads/Advertising.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "feature_cols = [\"TV\", \"Radio\", \"Newspaper\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Candidatas a ser variables predictoras\n", + "X = data[feature_cols]\n", + "# Variable a ser predecida\n", + "Y = data[\"Sales\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Queremos estimar un modelo lineal\n", + "estimator = SVR(kernel=\"linear\")\n", + "# Numero deseador de variables predictoras\n", + "selector = RFE(estimator, 2, step=1)\n", + "selector = selector.fit(X,Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([ True, True, False])" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "selector.support_" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "X_pred = X[[\"TV\", \"Radio\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "lm = LinearRegression()\n", + "lm.fit(X_pred, Y) # Ajustar las variables predictoras" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2.9210999124051362" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "lm.intercept_ # Donde corta la alpha" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "array([0.04575482, 0.18799423])" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "source": [ + "lm.coef_ # Coeficientes" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.8971942610828956" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "lm.score(X_pred, Y) # Obtener el valor de R2 ajustado" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb new file mode 100644 index 00000000..5c5db70b --- /dev/null +++ b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb @@ -0,0 +1,416 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.linear_model import LinearRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/ecom-expense/Ecom Expense.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Transaction ID Age Items Monthly Income Transaction Time Record \\\n0 TXN001 42 10 7313 627.668127 5 \n1 TXN002 24 8 17747 126.904567 3 \n2 TXN003 47 11 22845 873.469701 2 \n3 TXN004 50 11 18552 380.219428 7 \n4 TXN005 60 2 14439 403.374223 2 \n\n Gender City Tier Total Spend \n0 Female Tier 1 4198.385084 \n1 Female Tier 2 4134.976648 \n2 Male Tier 2 5166.614455 \n3 Female Tier 1 7784.447676 \n4 Female Tier 2 3254.160485 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal Spend
0TXN00142107313627.6681275FemaleTier 14198.385084
1TXN00224817747126.9045673FemaleTier 24134.976648
2TXN003471122845873.4697012MaleTier 25166.614455
3TXN004501118552380.2194287FemaleTier 17784.447676
4TXN00560214439403.3742232FemaleTier 23254.160485
\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Creando las variables dummy, tanto para Gender y City Tier\n", + "dummy_gender = pd.get_dummies(df[\"Gender\"], prefix=\"Gender\")\n", + "dummy_city_tier = pd.get_dummies(df[\"City Tier\"], prefix=\"City\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender_Female Gender_Male\n0 1 0\n1 1 0\n2 0 1\n3 1 0\n4 1 0", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Gender_FemaleGender_Male
010
110
201
310
410
\n
" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "dummy_gender.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " City_Tier 1 City_Tier 2 City_Tier 3\n0 1 0 0\n1 0 1 0\n2 0 1 0\n3 1 0 0\n4 0 1 0", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
City_Tier 1City_Tier 2City_Tier 3
0100
1010
2010
3100
4010
\n
" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "dummy_city_tier.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "['Transaction ID',\n 'Age ',\n ' Items ',\n 'Monthly Income',\n 'Transaction Time',\n 'Record',\n 'Gender',\n 'City Tier',\n 'Total Spend']" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "column_names = df.columns.values.tolist()\n", + "column_names" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Transaction ID Age Items Monthly Income Transaction Time Record \\\n0 TXN001 42 10 7313 627.668127 5 \n1 TXN002 24 8 17747 126.904567 3 \n2 TXN003 47 11 22845 873.469701 2 \n3 TXN004 50 11 18552 380.219428 7 \n4 TXN005 60 2 14439 403.374223 2 \n\n Gender City Tier Total Spend Gender_Female Gender_Male \n0 Female Tier 1 4198.385084 1 0 \n1 Female Tier 2 4134.976648 1 0 \n2 Male Tier 2 5166.614455 0 1 \n3 Female Tier 1 7784.447676 1 0 \n4 Female Tier 2 3254.160485 1 0 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_Male
0TXN00142107313627.6681275FemaleTier 14198.38508410
1TXN00224817747126.9045673FemaleTier 24134.97664810
2TXN003471122845873.4697012MaleTier 25166.61445501
3TXN004501118552380.2194287FemaleTier 17784.44767610
4TXN00560214439403.3742232FemaleTier 23254.16048510
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "df_new = df[column_names].join(dummy_gender)\n", + "column_names = df_new.columns.values.tolist()\n", + "df_new.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Transaction ID Age Items Monthly Income Transaction Time Record \\\n0 TXN001 42 10 7313 627.668127 5 \n1 TXN002 24 8 17747 126.904567 3 \n2 TXN003 47 11 22845 873.469701 2 \n3 TXN004 50 11 18552 380.219428 7 \n4 TXN005 60 2 14439 403.374223 2 \n\n Gender City Tier Total Spend Gender_Female Gender_Male City_Tier 1 \\\n0 Female Tier 1 4198.385084 1 0 1 \n1 Female Tier 2 4134.976648 1 0 0 \n2 Male Tier 2 5166.614455 0 1 0 \n3 Female Tier 1 7784.447676 1 0 1 \n4 Female Tier 2 3254.160485 1 0 0 \n\n City_Tier 2 City_Tier 3 \n0 0 0 \n1 1 0 \n2 1 0 \n3 0 0 \n4 1 0 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3
0TXN00142107313627.6681275FemaleTier 14198.38508410100
1TXN00224817747126.9045673FemaleTier 24134.97664810010
2TXN003471122845873.4697012MaleTier 25166.61445501010
3TXN004501118552380.2194287FemaleTier 17784.44767610100
4TXN00560214439403.3742232FemaleTier 23254.16048510010
\n
" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "df_new =df_new[column_names].join(dummy_city_tier)\n", + "df_new.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Lo siguiente es ver como incluir las variables dummy en el modelo lineal y acceder a sus coeficientes\n", + "# Variables predictoras\n", + "feature_cols = [\"Monthly Income\", \"Transaction Time\",\n", + " \"Gender_Female\", \"Gender_Male\",\n", + " \"City_Tier 1\", \"City_Tier 2\", \"City_Tier 3\",\n", + " \"Record\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Conjunto de datos con los cuales vamos a crear el modelo\n", + "X = df_new[feature_cols]\n", + "# Lo que quiero predecir\n", + "Y = df_new[\"Total Spend\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "source": [ + "# Creacion del modelo lineal\n", + "lm = LinearRegression()\n", + "lm.fit(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "-79.41713030137362\n[ 1.47538980e-01 1.54946125e-01 -1.31025013e+02 1.31025013e+02\n 7.67643260e+01 5.51389743e+01 -1.31903300e+02 7.72233446e+02]\n" + } + ], + "source": [ + "# Observar los parametros del modelo\n", + "print(lm.intercept_) # Corte con el eje de las ordenadas\n", + "print(lm.coef_) # Coeficientes" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[('Monthly Income', 0.14753898049205738),\n ('Transaction Time', 0.15494612549589545),\n ('Gender_Female', -131.02501325554567),\n ('Gender_Male', 131.0250132555456),\n ('City_Tier 1', 76.76432601049527),\n ('City_Tier 2', 55.138974309232474),\n ('City_Tier 3', -131.9033003197278),\n ('Record', 772.2334457445648)]" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "source": [ + "# Unir las variables predictoras con sus coeficientes\n", + "list(zip(feature_cols, lm.coef_))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.9179923586131016" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "# Si queremos ver que tan bueno es el modelo\n", + "lm.score(X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El modelo puede ser escrito como: \n", + " Total_Spend = -79.41713030137362 + Monthly Income * 0.14753898049205738 +\n", + " Transaction Time * 0.15494612549589545 + Gender_Female * (-131.02501325554567) +\n", + " Gender_Male * 131.0250132555456 + City_Tier 1 * 76.76432601049527 +\n", + " City_Tier 2 * 55.138974309232474 + City_Tier 3 * (-131.9033003197278) + \n", + " Record * 772.2334457445648" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Calcular la Desviacion Tipica de los Residuos\n", + "df_new[\"Prediction\"] = -79.41713030137362 + df_new['Monthly Income'] * 0.14753898049205738 + df_new['Transaction Time'] * 0.15494612549589545 + df_new['Gender_Female'] * (-131.02501325554567) + df_new['Gender_Male'] * 131.0250132555456 + df_new['City_Tier 1'] * 76.76432601049527 + df_new['City_Tier 2'] * 55.138974309232474 + df_new['City_Tier 3'] * (-131.9033003197278) + df_new['Record'] * 772.2334457445648" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Transaction ID Age Items Monthly Income Transaction Time Record \\\n0 TXN001 42 10 7313 627.668127 5 \n1 TXN002 24 8 17747 126.904567 3 \n2 TXN003 47 11 22845 873.469701 2 \n3 TXN004 50 11 18552 380.219428 7 \n4 TXN005 60 2 14439 403.374223 2 \n\n Gender City Tier Total Spend Gender_Female Gender_Male City_Tier 1 \\\n0 Female Tier 1 4198.385084 1 0 1 \n1 Female Tier 2 4134.976648 1 0 0 \n2 Male Tier 2 5166.614455 0 1 0 \n3 Female Tier 1 7784.447676 1 0 1 \n4 Female Tier 2 3254.160485 1 0 0 \n\n City_Tier 2 City_Tier 3 Prediction \n0 0 0 4903.696720 \n1 1 0 4799.434826 \n2 1 0 5157.082504 \n3 0 0 8068.012996 \n4 1 0 3581.980335 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3Prediction
0TXN00142107313627.6681275FemaleTier 14198.385084101004903.696720
1TXN00224817747126.9045673FemaleTier 24134.976648100104799.434826
2TXN003471122845873.4697012MaleTier 25166.614455010105157.082504
3TXN004501118552380.2194287FemaleTier 17784.447676101008068.012996
4TXN00560214439403.3742232FemaleTier 23254.160485100103581.980335
\n
" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "df_new.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1517733985.3408163" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "# Calcula la raiz de la suma de los cuadrados de los errores entre el numero de registros menos las variables predictoras menos 1\n", + "SSD = np.sum((df_new['Prediction'] - df_new[\"Total Spend\"])**2)\n", + "SSD" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "803.1318809818165" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "RSE = np.sqrt(SSD / (len(df_new) - len(feature_cols) - 1))\n", + "RSE" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6163.176415976714" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "# Promedio de ventas\n", + "sales_mean = np.mean(df_new[\"Total Spend\"])\n", + "sales_mean" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.13031135680294162" + }, + "metadata": {}, + "execution_count": 21 + } + ], + "source": [ + "error = RSE / sales_mean\n", + "error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Eliminar variable dummy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "El modelo orginal: \n", + " Total_Spend = -79.41713030137362 + Monthly Income * 0.14753898049205738 +\n", + " Transaction Time * 0.15494612549589545 + Gender_Female * (-131.02501325554567) +\n", + " Gender_Male * 131.0250132555456 + City_Tier 1 * 76.76432601049527 +\n", + " City_Tier 2 * 55.138974309232474 + City_Tier 3 * (-131.9033003197278) + \n", + " Record * 772.2334457445648" + ] + } + ], + "metadata": { + "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.7.4-final" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45", + "display_name": "Python 3.7.4 64-bit ('base': conda)" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file From 0ce62741e29c64746a61385013e5d3864d62c8ce Mon Sep 17 00:00:00 2001 From: Manuel Castillo Date: Mon, 27 Jul 2020 06:41:48 -0500 Subject: [PATCH 02/12] Transformar las variables en relaciones no lineales --- ... - Problemas con la regresion lineal.ipynb | 268 +++++++++++++++--- 1 file changed, 230 insertions(+), 38 deletions(-) diff --git a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb index 5c5db70b..f75a4bed 100644 --- a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb +++ b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -32,7 +32,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal Spend
0TXN00142107313627.6681275FemaleTier 14198.385084
1TXN00224817747126.9045673FemaleTier 24134.976648
2TXN003471122845873.4697012MaleTier 25166.614455
3TXN004501118552380.2194287FemaleTier 17784.447676
4TXN00560214439403.3742232FemaleTier 23254.160485
\n
" }, "metadata": {}, - "execution_count": 3 + "execution_count": 17 } ], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Gender_FemaleGender_Male
010
110
201
310
410
\n
" }, "metadata": {}, - "execution_count": 5 + "execution_count": 19 } ], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -81,7 +81,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
City_Tier 1City_Tier 2City_Tier 3
0100
1010
2010
3100
4010
\n
" }, "metadata": {}, - "execution_count": 6 + "execution_count": 20 } ], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -99,7 +99,7 @@ "text/plain": "['Transaction ID',\n 'Age ',\n ' Items ',\n 'Monthly Income',\n 'Transaction Time',\n 'Record',\n 'Gender',\n 'City Tier',\n 'Total Spend']" }, "metadata": {}, - "execution_count": 7 + "execution_count": 21 } ], "source": [ @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -119,7 +119,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_Male
0TXN00142107313627.6681275FemaleTier 14198.38508410
1TXN00224817747126.9045673FemaleTier 24134.97664810
2TXN003471122845873.4697012MaleTier 25166.61445501
3TXN004501118552380.2194287FemaleTier 17784.44767610
4TXN00560214439403.3742232FemaleTier 23254.16048510
\n
" }, "metadata": {}, - "execution_count": 8 + "execution_count": 22 } ], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -140,7 +140,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3
0TXN00142107313627.6681275FemaleTier 14198.38508410100
1TXN00224817747126.9045673FemaleTier 24134.97664810010
2TXN003471122845873.4697012MaleTier 25166.61445501010
3TXN004501118552380.2194287FemaleTier 17784.44767610100
4TXN00560214439403.3742232FemaleTier 23254.16048510010
\n
" }, "metadata": {}, - "execution_count": 9 + "execution_count": 23 } ], "source": [ @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -185,7 +185,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 12 + "execution_count": 26 } ], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 27, "metadata": { "tags": [] }, @@ -215,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -224,7 +224,7 @@ "text/plain": "[('Monthly Income', 0.14753898049205738),\n ('Transaction Time', 0.15494612549589545),\n ('Gender_Female', -131.02501325554567),\n ('Gender_Male', 131.0250132555456),\n ('City_Tier 1', 76.76432601049527),\n ('City_Tier 2', 55.138974309232474),\n ('City_Tier 3', -131.9033003197278),\n ('Record', 772.2334457445648)]" }, "metadata": {}, - "execution_count": 14 + "execution_count": 28 } ], "source": [ @@ -234,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ "text/plain": "0.9179923586131016" }, "metadata": {}, - "execution_count": 15 + "execution_count": 29 } ], "source": [ @@ -265,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3Prediction
0TXN00142107313627.6681275FemaleTier 14198.385084101004903.696720
1TXN00224817747126.9045673FemaleTier 24134.976648100104799.434826
2TXN003471122845873.4697012MaleTier 25166.614455010105157.082504
3TXN004501118552380.2194287FemaleTier 17784.447676101008068.012996
4TXN00560214439403.3742232FemaleTier 23254.160485100103581.980335
\n
" }, "metadata": {}, - "execution_count": 17 + "execution_count": 31 } ], "source": [ @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -303,7 +303,7 @@ "text/plain": "1517733985.3408163" }, "metadata": {}, - "execution_count": 18 + "execution_count": 32 } ], "source": [ @@ -314,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -323,7 +323,7 @@ "text/plain": "803.1318809818165" }, "metadata": {}, - "execution_count": 19 + "execution_count": 33 } ], "source": [ @@ -333,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -342,7 +342,7 @@ "text/plain": "6163.176415976714" }, "metadata": {}, - "execution_count": 20 + "execution_count": 34 } ], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -362,7 +362,7 @@ "text/plain": "0.13031135680294162" }, "metadata": {}, - "execution_count": 21 + "execution_count": 35 } ], "source": [ @@ -378,10 +378,8 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ "El modelo orginal: \n", " Total_Spend = -79.41713030137362 + Monthly Income * 0.14753898049205738 +\n", @@ -390,6 +388,200 @@ " City_Tier 2 * 55.138974309232474 + City_Tier 3 * (-131.9033003197278) + \n", " Record * 772.2334457445648" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transformación de variables para conseguir una relación no lineal" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " mpg cylinders displacement horsepower weight acceleration \\\n0 18.0 8 307.0 130.0 3504 12.0 \n1 15.0 8 350.0 165.0 3693 11.5 \n2 18.0 8 318.0 150.0 3436 11.0 \n3 16.0 8 304.0 150.0 3433 12.0 \n4 17.0 8 302.0 140.0 3449 10.5 \n\n model year origin car name \n0 70 1 chevrolet chevelle malibu \n1 70 1 buick skylark 320 \n2 70 1 plymouth satellite \n3 70 1 amc rebel sst \n4 70 1 ford torino ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
018.08307.0130.0350412.0701chevrolet chevelle malibu
115.08350.0165.0369311.5701buick skylark 320
218.08318.0150.0343611.0701plymouth satellite
316.08304.0150.0343312.0701amc rebel sst
417.08302.0140.0344910.5701ford torino
\n
" + }, + "metadata": {}, + "execution_count": 45 + } + ], + "source": [ + "data_auto = pd.read_csv(\"/Users/nuelcodes/Data-Science-Python/datasets/auto/auto-mpg.csv\")\n", + "data_auto.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(406, 9)" + }, + "metadata": {}, + "execution_count": 46 + } + ], + "source": [ + "# Numero de filas y columnas\n", + "data_auto.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Text(0.5, 1.0, 'CV vs MPG')" + }, + "metadata": {}, + "execution_count": 48 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "data_auto[\"mpg\"] = data_auto[\"mpg\"].dropna() # Eliminando los N/A de la columna mpg\n", + "data_auto[\"horsepower\"] = data_auto[\"horsepower\"].dropna() # Eliminando los N/A de la columna horsepower\n", + "plt.plot(data_auto[\"horsepower\"], data_auto[\"mpg\"], \"r.\")\n", + "plt.xlabel(\"Caballos de potencia\")\n", + "plt.ylabel(\"Consumo (millas por galeón)\")\n", + "plt.title(\"CV vs MPG\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modelo de regresión lineal\n", + "* mpg = a + b * horsepower" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "# Rellenamos los N/A con el promedio de cada columna\n", + "X = data_auto[\"horsepower\"].fillna(data_auto[\"horsepower\"].mean())\n", + "Y = data_auto[\"mpg\"].fillna(data_auto[\"mpg\"].mean())\n", + "X_data = X[:, np.newaxis]" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 53 + } + ], + "source": [ + "lm = LinearRegression()\n", + "lm.fit(X_data,Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 54 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "plt.plot(X, Y, \"r.\")\n", + "plt.plot(X, lm.predict(X_data), color=\"blue\")" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.574653340645025" + }, + "metadata": {}, + "execution_count": 55 + } + ], + "source": [ + "lm.score(X_data, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 4bfa36189658bd57d96f46cc926ad66899326a3f Mon Sep 17 00:00:00 2001 From: Manuel Castillo Date: Tue, 28 Jul 2020 07:30:11 -0500 Subject: [PATCH 03/12] Transformar las variables en relaciones lineales (Parte 2) --- ... - Problemas con la regresion lineal.ipynb | 233 ++++++++++++++---- 1 file changed, 180 insertions(+), 53 deletions(-) diff --git a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb index f75a4bed..e979058e 100644 --- a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb +++ b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 15, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -32,7 +32,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal Spend
0TXN00142107313627.6681275FemaleTier 14198.385084
1TXN00224817747126.9045673FemaleTier 24134.976648
2TXN003471122845873.4697012MaleTier 25166.614455
3TXN004501118552380.2194287FemaleTier 17784.447676
4TXN00560214439403.3742232FemaleTier 23254.160485
\n
" }, "metadata": {}, - "execution_count": 17 + "execution_count": 3 } ], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Gender_FemaleGender_Male
010
110
201
310
410
\n
" }, "metadata": {}, - "execution_count": 19 + "execution_count": 5 } ], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -81,7 +81,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
City_Tier 1City_Tier 2City_Tier 3
0100
1010
2010
3100
4010
\n
" }, "metadata": {}, - "execution_count": 20 + "execution_count": 6 } ], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -99,7 +99,7 @@ "text/plain": "['Transaction ID',\n 'Age ',\n ' Items ',\n 'Monthly Income',\n 'Transaction Time',\n 'Record',\n 'Gender',\n 'City Tier',\n 'Total Spend']" }, "metadata": {}, - "execution_count": 21 + "execution_count": 7 } ], "source": [ @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -119,7 +119,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_Male
0TXN00142107313627.6681275FemaleTier 14198.38508410
1TXN00224817747126.9045673FemaleTier 24134.97664810
2TXN003471122845873.4697012MaleTier 25166.61445501
3TXN004501118552380.2194287FemaleTier 17784.44767610
4TXN00560214439403.3742232FemaleTier 23254.16048510
\n
" }, "metadata": {}, - "execution_count": 22 + "execution_count": 8 } ], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -140,7 +140,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3
0TXN00142107313627.6681275FemaleTier 14198.38508410100
1TXN00224817747126.9045673FemaleTier 24134.97664810010
2TXN003471122845873.4697012MaleTier 25166.61445501010
3TXN004501118552380.2194287FemaleTier 17784.44767610100
4TXN00560214439403.3742232FemaleTier 23254.16048510010
\n
" }, "metadata": {}, - "execution_count": 23 + "execution_count": 9 } ], "source": [ @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -185,7 +185,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 26 + "execution_count": 12 } ], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 13, "metadata": { "tags": [] }, @@ -215,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -224,7 +224,7 @@ "text/plain": "[('Monthly Income', 0.14753898049205738),\n ('Transaction Time', 0.15494612549589545),\n ('Gender_Female', -131.02501325554567),\n ('Gender_Male', 131.0250132555456),\n ('City_Tier 1', 76.76432601049527),\n ('City_Tier 2', 55.138974309232474),\n ('City_Tier 3', -131.9033003197278),\n ('Record', 772.2334457445648)]" }, "metadata": {}, - "execution_count": 28 + "execution_count": 14 } ], "source": [ @@ -234,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ "text/plain": "0.9179923586131016" }, "metadata": {}, - "execution_count": 29 + "execution_count": 15 } ], "source": [ @@ -265,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3Prediction
0TXN00142107313627.6681275FemaleTier 14198.385084101004903.696720
1TXN00224817747126.9045673FemaleTier 24134.976648100104799.434826
2TXN003471122845873.4697012MaleTier 25166.614455010105157.082504
3TXN004501118552380.2194287FemaleTier 17784.447676101008068.012996
4TXN00560214439403.3742232FemaleTier 23254.160485100103581.980335
\n
" }, "metadata": {}, - "execution_count": 31 + "execution_count": 17 } ], "source": [ @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -303,7 +303,7 @@ "text/plain": "1517733985.3408163" }, "metadata": {}, - "execution_count": 32 + "execution_count": 18 } ], "source": [ @@ -314,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -323,7 +323,7 @@ "text/plain": "803.1318809818165" }, "metadata": {}, - "execution_count": 33 + "execution_count": 19 } ], "source": [ @@ -333,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -342,7 +342,7 @@ "text/plain": "6163.176415976714" }, "metadata": {}, - "execution_count": 34 + "execution_count": 20 } ], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -362,7 +362,7 @@ "text/plain": "0.13031135680294162" }, "metadata": {}, - "execution_count": 35 + "execution_count": 21 } ], "source": [ @@ -398,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -407,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -417,7 +417,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
018.08307.0130.0350412.0701chevrolet chevelle malibu
115.08350.0165.0369311.5701buick skylark 320
218.08318.0150.0343611.0701plymouth satellite
316.08304.0150.0343312.0701amc rebel sst
417.08302.0140.0344910.5701ford torino
\n
" }, "metadata": {}, - "execution_count": 45 + "execution_count": 23 } ], "source": [ @@ -427,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -436,7 +436,7 @@ "text/plain": "(406, 9)" }, "metadata": {}, - "execution_count": 46 + "execution_count": 24 } ], "source": [ @@ -446,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -455,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -464,13 +464,13 @@ "text/plain": "Text(0.5, 1.0, 'CV vs MPG')" }, "metadata": {}, - "execution_count": 48 + "execution_count": 26 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -498,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -510,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -519,7 +519,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 53 + "execution_count": 28 } ], "source": [ @@ -529,22 +529,22 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 29, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "[]" + "text/plain": "[]" }, "metadata": {}, - "execution_count": 54 + "execution_count": 29 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -560,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -569,13 +569,140 @@ "text/plain": "0.574653340645025" }, "metadata": {}, - "execution_count": 55 + "execution_count": 30 + } + ], + "source": [ + "lm.score(X_data, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(10315.75196006092, 5.046879480825511, 23.51457286432162, 21.46277336163346)" + }, + "metadata": {}, + "execution_count": 31 + } + ], + "source": [ + "# Suma de los cuadrados de las desviaciones\n", + "SSD = np.sum((Y - lm.predict(X_data))**2)\n", + "RSE = np.sqrt(SSD / (len(X_data) - 1))\n", + "y_mean = np.mean(Y)\n", + "error = RSE / y_mean\n", + "SSD, RSE, y_mean, error*100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modelo de regresión cuadrático\n", + "* mpg = a + b * horsepower^2" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "X_data = X**2\n", + "X_data = X_data[:, np.newaxis]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 33 + } + ], + "source": [ + "lm = LinearRegression()\n", + "lm.fit(X_data, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.4849887034823205" + }, + "metadata": {}, + "execution_count": 34 } ], "source": [ "lm.score(X_data, Y)" ] }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(12490.350340501926, 5.553410772769817, 23.51457286432162, 23.6168898529981)" + }, + "metadata": {}, + "execution_count": 35 + } + ], + "source": [ + "SSD = np.sum((Y - lm.predict(X_data))**2)\n", + "RSE = np.sqrt(SSD / (len(X_data) - 1))\n", + "y_mean = np.mean(Y)\n", + "error = RSE / y_mean\n", + "SSD, RSE, y_mean, error*100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modelo de regresión lineal y cuadrático\n", + "* mpg = a + b * horsepower + c * horsepower^2" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn import linear_model" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "poly = PolynomialFeatures(degree=2)" + ] + }, { "cell_type": "code", "execution_count": null, From 61ad3312411f1007571b9eaee0742616d0451999 Mon Sep 17 00:00:00 2001 From: Manuel Castillo Date: Wed, 29 Jul 2020 06:28:52 -0500 Subject: [PATCH 04/12] Transformar las variabls en relaciones no lineales (Parte 3) --- ... - Problemas con la regresion lineal.ipynb | 213 ++++++++++++------ 1 file changed, 147 insertions(+), 66 deletions(-) diff --git a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb index e979058e..2c772168 100644 --- a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb +++ b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -32,7 +32,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal Spend
0TXN00142107313627.6681275FemaleTier 14198.385084
1TXN00224817747126.9045673FemaleTier 24134.976648
2TXN003471122845873.4697012MaleTier 25166.614455
3TXN004501118552380.2194287FemaleTier 17784.447676
4TXN00560214439403.3742232FemaleTier 23254.160485
\n
" }, "metadata": {}, - "execution_count": 3 + "execution_count": 4 } ], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Gender_FemaleGender_Male
010
110
201
310
410
\n
" }, "metadata": {}, - "execution_count": 5 + "execution_count": 6 } ], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -81,7 +81,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
City_Tier 1City_Tier 2City_Tier 3
0100
1010
2010
3100
4010
\n
" }, "metadata": {}, - "execution_count": 6 + "execution_count": 7 } ], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -99,7 +99,7 @@ "text/plain": "['Transaction ID',\n 'Age ',\n ' Items ',\n 'Monthly Income',\n 'Transaction Time',\n 'Record',\n 'Gender',\n 'City Tier',\n 'Total Spend']" }, "metadata": {}, - "execution_count": 7 + "execution_count": 8 } ], "source": [ @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -119,7 +119,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_Male
0TXN00142107313627.6681275FemaleTier 14198.38508410
1TXN00224817747126.9045673FemaleTier 24134.97664810
2TXN003471122845873.4697012MaleTier 25166.61445501
3TXN004501118552380.2194287FemaleTier 17784.44767610
4TXN00560214439403.3742232FemaleTier 23254.16048510
\n
" }, "metadata": {}, - "execution_count": 8 + "execution_count": 9 } ], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -140,7 +140,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3
0TXN00142107313627.6681275FemaleTier 14198.38508410100
1TXN00224817747126.9045673FemaleTier 24134.97664810010
2TXN003471122845873.4697012MaleTier 25166.61445501010
3TXN004501118552380.2194287FemaleTier 17784.44767610100
4TXN00560214439403.3742232FemaleTier 23254.16048510010
\n
" }, "metadata": {}, - "execution_count": 9 + "execution_count": 10 } ], "source": [ @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -185,7 +185,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 12 + "execution_count": 13 } ], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "tags": [] }, @@ -215,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -224,7 +224,7 @@ "text/plain": "[('Monthly Income', 0.14753898049205738),\n ('Transaction Time', 0.15494612549589545),\n ('Gender_Female', -131.02501325554567),\n ('Gender_Male', 131.0250132555456),\n ('City_Tier 1', 76.76432601049527),\n ('City_Tier 2', 55.138974309232474),\n ('City_Tier 3', -131.9033003197278),\n ('Record', 772.2334457445648)]" }, "metadata": {}, - "execution_count": 14 + "execution_count": 15 } ], "source": [ @@ -234,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ "text/plain": "0.9179923586131016" }, "metadata": {}, - "execution_count": 15 + "execution_count": 16 } ], "source": [ @@ -265,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3Prediction
0TXN00142107313627.6681275FemaleTier 14198.385084101004903.696720
1TXN00224817747126.9045673FemaleTier 24134.976648100104799.434826
2TXN003471122845873.4697012MaleTier 25166.614455010105157.082504
3TXN004501118552380.2194287FemaleTier 17784.447676101008068.012996
4TXN00560214439403.3742232FemaleTier 23254.160485100103581.980335
\n
" }, "metadata": {}, - "execution_count": 17 + "execution_count": 18 } ], "source": [ @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -303,7 +303,7 @@ "text/plain": "1517733985.3408163" }, "metadata": {}, - "execution_count": 18 + "execution_count": 19 } ], "source": [ @@ -314,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -323,7 +323,7 @@ "text/plain": "803.1318809818165" }, "metadata": {}, - "execution_count": 19 + "execution_count": 20 } ], "source": [ @@ -333,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -342,7 +342,7 @@ "text/plain": "6163.176415976714" }, "metadata": {}, - "execution_count": 20 + "execution_count": 21 } ], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -362,7 +362,7 @@ "text/plain": "0.13031135680294162" }, "metadata": {}, - "execution_count": 21 + "execution_count": 22 } ], "source": [ @@ -398,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -407,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -417,7 +417,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
018.08307.0130.0350412.0701chevrolet chevelle malibu
115.08350.0165.0369311.5701buick skylark 320
218.08318.0150.0343611.0701plymouth satellite
316.08304.0150.0343312.0701amc rebel sst
417.08302.0140.0344910.5701ford torino
\n
" }, "metadata": {}, - "execution_count": 23 + "execution_count": 24 } ], "source": [ @@ -427,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -436,7 +436,7 @@ "text/plain": "(406, 9)" }, "metadata": {}, - "execution_count": 24 + "execution_count": 25 } ], "source": [ @@ -446,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -455,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -464,13 +464,13 @@ "text/plain": "Text(0.5, 1.0, 'CV vs MPG')" }, "metadata": {}, - "execution_count": 26 + "execution_count": 27 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -498,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -510,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -519,7 +519,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 28 + "execution_count": 29 } ], "source": [ @@ -529,22 +529,22 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "[]" + "text/plain": "[]" }, "metadata": {}, - "execution_count": 29 + "execution_count": 30 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -560,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -569,7 +569,7 @@ "text/plain": "0.574653340645025" }, "metadata": {}, - "execution_count": 30 + "execution_count": 31 } ], "source": [ @@ -578,7 +578,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -587,7 +587,7 @@ "text/plain": "(10315.75196006092, 5.046879480825511, 23.51457286432162, 21.46277336163346)" }, "metadata": {}, - "execution_count": 31 + "execution_count": 32 } ], "source": [ @@ -609,7 +609,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -619,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -628,7 +628,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 33 + "execution_count": 34 } ], "source": [ @@ -638,7 +638,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -647,7 +647,7 @@ "text/plain": "0.4849887034823205" }, "metadata": {}, - "execution_count": 34 + "execution_count": 35 } ], "source": [ @@ -656,7 +656,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -665,7 +665,7 @@ "text/plain": "(12490.350340501926, 5.553410772769817, 23.51457286432162, 23.6168898529981)" }, "metadata": {}, - "execution_count": 35 + "execution_count": 36 } ], "source": [ @@ -686,7 +686,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -696,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -705,10 +705,91 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "X_data = poly.fit_transform(X[:, np.newaxis])" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 42 + } + ], + "source": [ + "lm = linear_model.LinearRegression()\n", + "lm.fit(X_data, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6439066584257469" + }, + "metadata": {}, + "execution_count": 43 + } + ], + "source": [ + "# Verificando si l modelo mejoro o no\n", + "lm.score(X_data, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": "Regresión de grado 2\nR2: 0.6439066584257469\n55.026192447080355\n[ 0. -0.43404318 0.00112615]\n8636.180643524502 4.61778115803654 23.51457286432162 19.63795466190689\nRegresión de grado 3\nR2: 0.6444678885560744\n58.448774111918084\n[ 0.00000000e+00 -5.27113167e-01 1.89736722e-03 -1.95723195e-06]\n8622.56936742855 4.614140736300908 23.51457286432162 19.622473106036676\nRegresión de grado 4\nR2: 0.6467674189704502\n40.096643848138505\n[ 0.00000000e+00 1.62563541e-01 -7.10892744e-03 4.65580255e-05\n -9.15840093e-08]\n8566.799832491353 4.5991947315797574 23.51457286432162 19.55891250126878\nRegresión de grado 5\nR2: 0.6547512489366876\n-40.693812896755176\n[ 0.00000000e+00 4.00021432e+00 -7.54801920e-02 6.19621369e-04\n -2.36220932e-06 3.41982935e-09]\n8373.171393636556 4.546921735442387 23.51457286432162 19.336612073193884\nRegresión de grado 6\nR2: 0.6572844624926477\n-157.07318244319492\n[ 0.00000000e+00 1.07623366e+01 -2.30128498e-01 2.40537386e-03\n -1.33773692e-05 3.79725608e-08 -4.32487457e-11]\n8311.734440670296 4.530209828261248 23.51457286432162 19.265541646877544\nRegresión de grado 7\nR2: 0.6538574297764905\n14.78101556705461\n[ 0.00000000e+00 1.14612741e-03 4.31542691e-02 -1.25404186e-03\n 1.46299381e-05 -8.50482922e-08 2.45097435e-10 -2.79311454e-13]\n8394.84881028237 4.552803724495888 23.51457286432162 19.361626301976347\nRegresión de grado 8\nR2: 0.6512432184836425\n36.4067372682599\n[ 0.00000000e+00 4.43770809e-07 3.03135016e-06 8.84885464e-05\n -3.97067199e-06 5.47393594e-08 -3.43825953e-10 1.02689458e-12\n -1.18561695e-15]\n8458.250166976002 4.569963710306789 23.51457286432162 19.434602264201615\nRegresión de grado 9\nR2: 0.6510536294709126\n39.4663160838969\n[ 0.00000000e+00 -7.80041692e-09 -1.27991658e-09 -6.48447594e-08\n -1.77132822e-06 3.55551193e-08 -3.00241187e-10 1.32278877e-12\n -3.04048260e-15 2.92448889e-18]\n8462.848188816919 4.571205689297839 23.51457286432162 19.43988400586121\nRegresión de grado 10\nR2: 0.6523558257406572\n38.43818573621739\n[ 0.00000000e+00 -1.18722912e-09 1.01472644e-13 -2.72056157e-11\n -1.29823237e-09 -3.51560163e-08 8.70020949e-10 -8.86594135e-12\n 4.60161932e-14 -1.20804737e-16 1.27734039e-19]\n8431.266575498568 4.562668315988448 23.51457286432162 19.40357727233621\nRegresión de grado 11\nR2: 0.6511674407308179\n36.40853939442569\n[ 0.00000000e+00 -6.36831957e-12 -9.59488818e-15 -4.92414852e-15\n -3.14729553e-13 -1.49252088e-11 -4.09649856e-10 1.04700231e-11\n -1.08552660e-13 5.67262902e-16 -1.48811862e-18 1.56362014e-21]\n8460.08797264589 4.570460163407891 23.51457286432162 19.436713521352523\n" + } + ], + "source": [ + "# Ver si aunmentando el grado (con un bucle), nuestro modelo mejora\n", + "for d in range (2,12):\n", + " poly = PolynomialFeatures(degree=d)\n", + " X_data = poly.fit_transform(X[:, np.newaxis])\n", + " lm = linear_model.LinearRegression()\n", + " lm.fit(X_data, Y)\n", + " print(\"Regresión de grado \" + str(d))\n", + " print(\"R2: \" + str(lm.score(X_data, Y)))\n", + " print(lm.intercept_)\n", + " print(lm.coef_)\n", + " regresion_validation(X_data, Y, lm.predict(X_data))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def regresion_validation(X_data, Y, Y_pred):\n", + " SSD = np.sum((Y - Y_pred)**2)\n", + " RSE = np.sqrt(SSD / (len(X_data) - 1))\n", + " y_mean = np.mean(Y)\n", + " error = RSE / y_mean\n", + " print(SSD, RSE, y_mean, error*100)" + ] } ], "metadata": { From 4f2c8902f90492aba0075c21e12e4c0f1f4b2255 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Fri, 31 Jul 2020 06:42:13 -0500 Subject: [PATCH 05/12] El problema de los outliers --- ... - Problemas con la regresion lineal.ipynb | 401 ++++++++++++++---- 1 file changed, 319 insertions(+), 82 deletions(-) diff --git a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb index 2c772168..e2377483 100644 --- a/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb +++ b/scratch/T4 - 5 - Linear Regression - Problemas con la regresion lineal.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -32,7 +32,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal Spend
0TXN00142107313627.6681275FemaleTier 14198.385084
1TXN00224817747126.9045673FemaleTier 24134.976648
2TXN003471122845873.4697012MaleTier 25166.614455
3TXN004501118552380.2194287FemaleTier 17784.447676
4TXN00560214439403.3742232FemaleTier 23254.160485
\n
" }, "metadata": {}, - "execution_count": 4 + "execution_count": 3 } ], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Gender_FemaleGender_Male
010
110
201
310
410
\n
" }, "metadata": {}, - "execution_count": 6 + "execution_count": 5 } ], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -81,7 +81,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
City_Tier 1City_Tier 2City_Tier 3
0100
1010
2010
3100
4010
\n
" }, "metadata": {}, - "execution_count": 7 + "execution_count": 6 } ], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -99,7 +99,7 @@ "text/plain": "['Transaction ID',\n 'Age ',\n ' Items ',\n 'Monthly Income',\n 'Transaction Time',\n 'Record',\n 'Gender',\n 'City Tier',\n 'Total Spend']" }, "metadata": {}, - "execution_count": 8 + "execution_count": 7 } ], "source": [ @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -119,7 +119,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_Male
0TXN00142107313627.6681275FemaleTier 14198.38508410
1TXN00224817747126.9045673FemaleTier 24134.97664810
2TXN003471122845873.4697012MaleTier 25166.61445501
3TXN004501118552380.2194287FemaleTier 17784.44767610
4TXN00560214439403.3742232FemaleTier 23254.16048510
\n
" }, "metadata": {}, - "execution_count": 9 + "execution_count": 8 } ], "source": [ @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -140,7 +140,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3
0TXN00142107313627.6681275FemaleTier 14198.38508410100
1TXN00224817747126.9045673FemaleTier 24134.97664810010
2TXN003471122845873.4697012MaleTier 25166.61445501010
3TXN004501118552380.2194287FemaleTier 17784.44767610100
4TXN00560214439403.3742232FemaleTier 23254.16048510010
\n
" }, "metadata": {}, - "execution_count": 10 + "execution_count": 9 } ], "source": [ @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -185,7 +185,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 13 + "execution_count": 12 } ], "source": [ @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "tags": [] }, @@ -215,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -224,7 +224,7 @@ "text/plain": "[('Monthly Income', 0.14753898049205738),\n ('Transaction Time', 0.15494612549589545),\n ('Gender_Female', -131.02501325554567),\n ('Gender_Male', 131.0250132555456),\n ('City_Tier 1', 76.76432601049527),\n ('City_Tier 2', 55.138974309232474),\n ('City_Tier 3', -131.9033003197278),\n ('Record', 772.2334457445648)]" }, "metadata": {}, - "execution_count": 15 + "execution_count": 14 } ], "source": [ @@ -234,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ "text/plain": "0.9179923586131016" }, "metadata": {}, - "execution_count": 16 + "execution_count": 15 } ], "source": [ @@ -265,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Transaction IDAgeItemsMonthly IncomeTransaction TimeRecordGenderCity TierTotal SpendGender_FemaleGender_MaleCity_Tier 1City_Tier 2City_Tier 3Prediction
0TXN00142107313627.6681275FemaleTier 14198.385084101004903.696720
1TXN00224817747126.9045673FemaleTier 24134.976648100104799.434826
2TXN003471122845873.4697012MaleTier 25166.614455010105157.082504
3TXN004501118552380.2194287FemaleTier 17784.447676101008068.012996
4TXN00560214439403.3742232FemaleTier 23254.160485100103581.980335
\n
" }, "metadata": {}, - "execution_count": 18 + "execution_count": 17 } ], "source": [ @@ -294,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -303,7 +303,7 @@ "text/plain": "1517733985.3408163" }, "metadata": {}, - "execution_count": 19 + "execution_count": 18 } ], "source": [ @@ -314,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -323,7 +323,7 @@ "text/plain": "803.1318809818165" }, "metadata": {}, - "execution_count": 20 + "execution_count": 19 } ], "source": [ @@ -333,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -342,7 +342,7 @@ "text/plain": "6163.176415976714" }, "metadata": {}, - "execution_count": 21 + "execution_count": 20 } ], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -362,7 +362,7 @@ "text/plain": "0.13031135680294162" }, "metadata": {}, - "execution_count": 22 + "execution_count": 21 } ], "source": [ @@ -398,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -407,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -417,7 +417,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
018.08307.0130.0350412.0701chevrolet chevelle malibu
115.08350.0165.0369311.5701buick skylark 320
218.08318.0150.0343611.0701plymouth satellite
316.08304.0150.0343312.0701amc rebel sst
417.08302.0140.0344910.5701ford torino
\n
" }, "metadata": {}, - "execution_count": 24 + "execution_count": 23 } ], "source": [ @@ -427,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -436,7 +436,7 @@ "text/plain": "(406, 9)" }, "metadata": {}, - "execution_count": 25 + "execution_count": 24 } ], "source": [ @@ -446,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -455,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -464,13 +464,13 @@ "text/plain": "Text(0.5, 1.0, 'CV vs MPG')" }, "metadata": {}, - "execution_count": 27 + "execution_count": 26 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -498,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -510,7 +510,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -519,7 +519,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 29 + "execution_count": 28 } ], "source": [ @@ -529,22 +529,22 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "[]" + "text/plain": "[]" }, "metadata": {}, - "execution_count": 30 + "execution_count": 29 }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { @@ -560,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -569,7 +569,7 @@ "text/plain": "0.574653340645025" }, "metadata": {}, - "execution_count": 31 + "execution_count": 30 } ], "source": [ @@ -578,7 +578,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -587,7 +587,7 @@ "text/plain": "(10315.75196006092, 5.046879480825511, 23.51457286432162, 21.46277336163346)" }, "metadata": {}, - "execution_count": 32 + "execution_count": 31 } ], "source": [ @@ -609,7 +609,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -619,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -628,7 +628,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 34 + "execution_count": 33 } ], "source": [ @@ -638,7 +638,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -647,7 +647,7 @@ "text/plain": "0.4849887034823205" }, "metadata": {}, - "execution_count": 35 + "execution_count": 34 } ], "source": [ @@ -656,7 +656,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -665,7 +665,7 @@ "text/plain": "(12490.350340501926, 5.553410772769817, 23.51457286432162, 23.6168898529981)" }, "metadata": {}, - "execution_count": 36 + "execution_count": 35 } ], "source": [ @@ -686,7 +686,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -696,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -705,7 +705,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -714,7 +714,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -723,7 +723,7 @@ "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" }, "metadata": {}, - "execution_count": 42 + "execution_count": 39 } ], "source": [ @@ -733,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -742,7 +742,7 @@ "text/plain": "0.6439066584257469" }, "metadata": {}, - "execution_count": 43 + "execution_count": 40 } ], "source": [ @@ -752,7 +752,21 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "def regresion_validation(X_data, Y, Y_pred):\n", + " SSD = np.sum((Y - Y_pred)**2)\n", + " RSE = np.sqrt(SSD / (len(X_data) - 1))\n", + " y_mean = np.mean(Y)\n", + " error = RSE / y_mean\n", + " print(\"SSD: \" + str(SSD) + \", RSE: \" + str(RSE) + \", Y_mean: \" + str(y_mean) + \", error: \" + str(error*100) + \"%\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, "metadata": { "tags": [] }, @@ -760,7 +774,7 @@ { "output_type": "stream", "name": "stdout", - "text": "Regresión de grado 2\nR2: 0.6439066584257469\n55.026192447080355\n[ 0. -0.43404318 0.00112615]\n8636.180643524502 4.61778115803654 23.51457286432162 19.63795466190689\nRegresión de grado 3\nR2: 0.6444678885560744\n58.448774111918084\n[ 0.00000000e+00 -5.27113167e-01 1.89736722e-03 -1.95723195e-06]\n8622.56936742855 4.614140736300908 23.51457286432162 19.622473106036676\nRegresión de grado 4\nR2: 0.6467674189704502\n40.096643848138505\n[ 0.00000000e+00 1.62563541e-01 -7.10892744e-03 4.65580255e-05\n -9.15840093e-08]\n8566.799832491353 4.5991947315797574 23.51457286432162 19.55891250126878\nRegresión de grado 5\nR2: 0.6547512489366876\n-40.693812896755176\n[ 0.00000000e+00 4.00021432e+00 -7.54801920e-02 6.19621369e-04\n -2.36220932e-06 3.41982935e-09]\n8373.171393636556 4.546921735442387 23.51457286432162 19.336612073193884\nRegresión de grado 6\nR2: 0.6572844624926477\n-157.07318244319492\n[ 0.00000000e+00 1.07623366e+01 -2.30128498e-01 2.40537386e-03\n -1.33773692e-05 3.79725608e-08 -4.32487457e-11]\n8311.734440670296 4.530209828261248 23.51457286432162 19.265541646877544\nRegresión de grado 7\nR2: 0.6538574297764905\n14.78101556705461\n[ 0.00000000e+00 1.14612741e-03 4.31542691e-02 -1.25404186e-03\n 1.46299381e-05 -8.50482922e-08 2.45097435e-10 -2.79311454e-13]\n8394.84881028237 4.552803724495888 23.51457286432162 19.361626301976347\nRegresión de grado 8\nR2: 0.6512432184836425\n36.4067372682599\n[ 0.00000000e+00 4.43770809e-07 3.03135016e-06 8.84885464e-05\n -3.97067199e-06 5.47393594e-08 -3.43825953e-10 1.02689458e-12\n -1.18561695e-15]\n8458.250166976002 4.569963710306789 23.51457286432162 19.434602264201615\nRegresión de grado 9\nR2: 0.6510536294709126\n39.4663160838969\n[ 0.00000000e+00 -7.80041692e-09 -1.27991658e-09 -6.48447594e-08\n -1.77132822e-06 3.55551193e-08 -3.00241187e-10 1.32278877e-12\n -3.04048260e-15 2.92448889e-18]\n8462.848188816919 4.571205689297839 23.51457286432162 19.43988400586121\nRegresión de grado 10\nR2: 0.6523558257406572\n38.43818573621739\n[ 0.00000000e+00 -1.18722912e-09 1.01472644e-13 -2.72056157e-11\n -1.29823237e-09 -3.51560163e-08 8.70020949e-10 -8.86594135e-12\n 4.60161932e-14 -1.20804737e-16 1.27734039e-19]\n8431.266575498568 4.562668315988448 23.51457286432162 19.40357727233621\nRegresión de grado 11\nR2: 0.6511674407308179\n36.40853939442569\n[ 0.00000000e+00 -6.36831957e-12 -9.59488818e-15 -4.92414852e-15\n -3.14729553e-13 -1.49252088e-11 -4.09649856e-10 1.04700231e-11\n -1.08552660e-13 5.67262902e-16 -1.48811862e-18 1.56362014e-21]\n8460.08797264589 4.570460163407891 23.51457286432162 19.436713521352523\n" + "text": "Regresión de grado 2\nR2: 0.6439066584257469\n55.026192447080355\n[ 0. -0.43404318 0.00112615]\nSSD: 8636.180643524502, RSE: 4.61778115803654, Y_mean: 23.51457286432162, error: 19.63795466190689%\nRegresión de grado 3\nR2: 0.6444678885560744\n58.448774111918084\n[ 0.00000000e+00 -5.27113167e-01 1.89736722e-03 -1.95723195e-06]\nSSD: 8622.56936742855, RSE: 4.614140736300908, Y_mean: 23.51457286432162, error: 19.622473106036676%\nRegresión de grado 4\nR2: 0.6467674189704502\n40.096643848138505\n[ 0.00000000e+00 1.62563541e-01 -7.10892744e-03 4.65580255e-05\n -9.15840093e-08]\nSSD: 8566.799832491353, RSE: 4.5991947315797574, Y_mean: 23.51457286432162, error: 19.55891250126878%\nRegresión de grado 5\nR2: 0.6547512489366876\n-40.693812896755176\n[ 0.00000000e+00 4.00021432e+00 -7.54801920e-02 6.19621369e-04\n -2.36220932e-06 3.41982935e-09]\nSSD: 8373.171393636556, RSE: 4.546921735442387, Y_mean: 23.51457286432162, error: 19.336612073193884%\nRegresión de grado 6\nR2: 0.6572844624926477\n-157.07318244319492\n[ 0.00000000e+00 1.07623366e+01 -2.30128498e-01 2.40537386e-03\n -1.33773692e-05 3.79725608e-08 -4.32487457e-11]\nSSD: 8311.734440670296, RSE: 4.530209828261248, Y_mean: 23.51457286432162, error: 19.265541646877544%\nRegresión de grado 7\nR2: 0.6538574297764905\n14.78101556705461\n[ 0.00000000e+00 1.14612741e-03 4.31542691e-02 -1.25404186e-03\n 1.46299381e-05 -8.50482922e-08 2.45097435e-10 -2.79311454e-13]\nSSD: 8394.84881028237, RSE: 4.552803724495888, Y_mean: 23.51457286432162, error: 19.361626301976347%\nRegresión de grado 8\nR2: 0.6512432184836425\n36.4067372682599\n[ 0.00000000e+00 4.43770809e-07 3.03135016e-06 8.84885464e-05\n -3.97067199e-06 5.47393594e-08 -3.43825953e-10 1.02689458e-12\n -1.18561695e-15]\nSSD: 8458.250166976002, RSE: 4.569963710306789, Y_mean: 23.51457286432162, error: 19.434602264201615%\nRegresión de grado 9\nR2: 0.6510536294709126\n39.4663160838969\n[ 0.00000000e+00 -7.80041692e-09 -1.27991658e-09 -6.48447594e-08\n -1.77132822e-06 3.55551193e-08 -3.00241187e-10 1.32278877e-12\n -3.04048260e-15 2.92448889e-18]\nSSD: 8462.848188816919, RSE: 4.571205689297839, Y_mean: 23.51457286432162, error: 19.43988400586121%\nRegresión de grado 10\nR2: 0.6523558257406572\n38.43818573621739\n[ 0.00000000e+00 -1.18722912e-09 1.01472644e-13 -2.72056157e-11\n -1.29823237e-09 -3.51560163e-08 8.70020949e-10 -8.86594135e-12\n 4.60161932e-14 -1.20804737e-16 1.27734039e-19]\nSSD: 8431.266575498568, RSE: 4.562668315988448, Y_mean: 23.51457286432162, error: 19.40357727233621%\nRegresión de grado 11\nR2: 0.6511674407308179\n36.40853939442569\n[ 0.00000000e+00 -6.36831957e-12 -9.59488818e-15 -4.92414852e-15\n -3.14729553e-13 -1.49252088e-11 -4.09649856e-10 1.04700231e-11\n -1.08552660e-13 5.67262902e-16 -1.48811862e-18 1.56362014e-21]\nSSD: 8460.08797264589, RSE: 4.570460163407891, Y_mean: 23.51457286432162, error: 19.436713521352523%\n" } ], "source": [ @@ -777,22 +791,250 @@ " regresion_validation(X_data, Y, lm.predict(X_data))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## El problema de los outliers" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 45 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(data_auto[\"displacement\"], data_auto[\"mpg\"], \"ro\")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 46 + } + ], + "source": [ + "# Un modelo lineal para ajustarse a la recta\n", + "X = data_auto[\"displacement\"].fillna(data_auto[\"displacement\"].mean())\n", + "X = X[:, np.newaxis]\n", + "Y = data_auto[\"mpg\"].fillna(data_auto[\"mpg\"].mean())\n", + "lm = LinearRegression()\n", + "lm.fit(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6261049762826918" + }, + "metadata": {}, + "execution_count": 47 + } + ], + "source": [ + "lm.score(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 49 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2deZhcZZXwf6e3dBa2dCIGQroj8A1mkGEJDA4KSAA1QXEUEW1ijEsgEQ0yikA+ZdHoB+IYZIQYkEXSbKIOTAaHycj6uQAJYAjDx5rFQIQQiEwSCEn3+f54b9HV1Xerqnur7q0+v+e5T1W99973nvtW1am3znnPOaKqGIZhGPmjqd4CGIZhGJVhCtwwDCOnmAI3DMPIKabADcMwcoopcMMwjJzSUsuLjRkzRru6ump5ScMwjNyzfPnyV1R1bGl7TRV4V1cXy5Ytq+UlDcMwco+IrPFrNxOKYRhGTjEFbhiGkVNMgRuGYeQUU+CGYRg5xRS4YRhGTmlcBd7TA11d0NTkHnt66i2RYRhGotR0GWHN6OmBWbNg61b3es0a9xqgu7t+chmGYSRIY87A583rV94Ftm517YZhGA1CYyrwtWvLazcMw8ghjanAJ0wor90wDCOHNKYCnz8fRowY2DZihGs3DMNoEBpTgXd3w6JF0NkJIu5x0SJzYBqG0VA05ioUcMraFLZhGA1M7Bm4iDSLyKMissR7fZ2IrBKRx7ztwPTENAzDMEopZwY+F3gS2Lmo7RuqeluyIhmGYRhxiDUDF5HxwDTg6nTFMQzDMOIS14SyADgb6Ctpny8iK0TkRyIyLFnREsZC6w3DaDAiFbiInAC8rKrLS3adC+wHHAqMBr4ZcP4sEVkmIss2bNhQrbyVMWcOTJ/uQupV+0PrTYkbhpFj4szAjwA+KiKrgZuBY0RksaquV8c24FrgML+TVXWRqk5W1cljxw4q6ZY+PT2wcKFT3MVYaL1hGDknUoGr6rmqOl5Vu4BTgLtV9VQRGQcgIgJ8DFiZqqSVMm/eYOVdYM0aM6sYhpFbqlkH3iMiYwEBHgNOT0akhAnLfyLilDhYxkLDMHKHaNDsNAUmT56sNa9K39XVr6Tj0NkJq1enJY1hGEbZiMhyVZ1c2t6YofTFzJ8Pra3xj7eMhYZh5ITGV+Aw2Abe0gIdHf7HWsZCwzByQuMr8LlzYceOgW07dsCbb1rGQsMwck3jK/CNG/3bt2yxjIWGYeSaxs1GGAfLWGgYRo5p/Bl4kK07qN0wDCMnNL4Cv+yywatQWltdu2EYRo5pfAXe3Q3XXjvQ1n3ttWY6MQwj9wwNG7jZug3DaEAafwZuGIbRoJgCtzzhhmHklKFhQgmip8clsNq61b22hFaGYeSIoT0DnzevX3kXsDzhhmHkhMZV4HPmuJwnIu5xzpzBxwQlrrKEVoZh5IDGVOBz5sCVV0Jvr3vd2+telyrxoMRVltDKMIwc0JgKfNGieO3z51tCK8MwcktjKvDCzDuqvbvbEloZhpFbYq9CEZFmYBnwgqqeICITcUWORwOPANNV9a10xCyT5mZ/Jd7cPLjNgnwMw8gp5czA5wJPFr2+GPiRqu4LvAZ8IUnBqqKwFDBuu2EYRg6JpcBFZDwwDbjaey3AMcBt3iHX4yrTZ4MrroDZs/tn3M3N7vUVV9RXLsMwjASJOwNfAJwN9HmvO4BNqloodbMO2NPvRBGZJSLLRGTZhg0bqhK2LI44AsaPd7bt8ePda8MwjAYiUoGLyAnAy6q6vLjZ51Df8vaqukhVJ6vq5LFjx1YoZpkUIizXrHH1MAsRlhYmbxhGAxFnBn4E8FERWY1zWh6Dm5HvKiIFJ+h44MVUJIxDaT6TuXMtwtIwjIYnUoGr6rmqOl5Vu4BTgLtVtRu4BzjJO2wGcHtqUobhN9sOqoO5Zk1tZTMMw0iRataBfxM4S0SexdnEf5aMSGXil88kCL9lhIZhGDmlrGyEqnovcK/3/HngsORFKpNy8pYEBfgYhmHkkPxHYpaTt6SzMz05DMMwakz+FbhfPpPWVmhrG9gm4mzgVrTBMIwGIf8K3C+fybXXwjXX9M+4RZyDE5wSP/VUOPbY4D6tSs/Qwt5vI6eIqu/y7VSYPHmyLlu2rGbXA9wXMmj1iV90ZmmVHnAzfEty1ZjY+23kABFZrqqTB7U3vAIXv5gjj+Zm2LFjYFuQwu/shNWrk5TMyAL2fhs5IEiB59+EEkXY0kG/VSlWpWdoYe+3kWMaV4EX7JphSwebfG7fqvQMLez9NnJMYyrwnh6YOTM68nL48MFt5VbpMQdYvrGqTEaOaUwFPncubN8efdyWLYPbyqnSY0mz8o9VZTJyTGM6McMcl8X4OTHLwRxghmHUgKHrxAyj2tD6IEfXmjU2CzcMI3UaU4F3dMQ7rrOzOht2mKPLTCmGYaRMYyjwUiV88smDQ+n92GeffmdnwYY9cybMmeP6EYGWFvfop9z9HGAFwvKPm+PTMIwkUNWabYcccogmzuLFqiNGqDoV7LYRI1Rnz1bt7FQVUW1uHri/sIn4twdtI0a46xUze3bw8SLx5S3t1zAMwwNYpj46Nf9OzDiOxKam/lwo1VLqoAwL1fdzZprj0zCMMmlcJ2acSLokgzJKrxcWsee3ltgi/wzDSIj8K/A4kXRBwRpxlxuGXS/o+h0d/muJLfLPMIyEiFOVvl1EHhKRP4nIEyJyodd+nYisEpHHvO3A1KX1c/75KWcRmDq1/3VQsEa5ZhW/CL0wR6afc9Ii/wzDSAo/w3jxBggwynveCjwIHA5cB5wUdX7xVpUTM8z5N3v2YIdkHMdgZ6e/87Gjo39fwQHa2Rnc3+LF7pw4Ts/C8QUHa1i/hmEYmpATU0RGAP8XmO1tS1T1trjnV+XEDHP+QWWOwaBc0DNmwJ13Orv0hAludhwVWm3OScMwUqKqfOAi0gwsB/YBfqKq3xSR64D3AtuA3wLnqOo2n3NnAbMAJkyYcMiaqARTQQStJCnYsYP29fWF9ztnDixc2H9+e7vLo1IcpdnW5ir8hCnxMPmiZDAMwwihqlUoqtqrqgcC44HDRGR/4FxgP+BQYDTwzYBzF6nqZFWdPHbs2IpvINT5V6ljcM4cuPLKgYr3zTcHh9i/9ZZLkFWpfIZhGClQ1ioUVd0E3At8SFXXe+aZbcC1wGEpyNdPmPPPb19bG2ze3O/wLERXFr9euDD+9TduhDFj3OYXQWnOScMwao2fYbx4A8YCu3rPhwMPACcA47TfybkA+D9RfVUdiRnm/Cve19Gh2toaHlVZbhRmnMhMc04ahpECVOrEFJEDgOuBZtyM/VZVvUhE7vaUuwCPAaer6uawvmqWTjYsOjJpzElpGEbKVGwDV9UVqnqQqh6gqvur6kVe+zGq+h6v7dQo5V1TahnVWItrWfIrwzB8aKm3AKkwerSzWVeKSPwgn7SdlKVLHQtVf8CqxhjGECf/ofRpEBRZ6Xdc2k7KefMGrlOH8FS1hmEMGRpTgb/6anXn+9XKLCAyMBwf0jVvWPIrwzACyL8C97MPp2XWGDECbrjBBeYUHJdpFzWuZn252c4No7HxW5qS1pZ4QYewYg6l7WFLAeMuGyxdFhiUS6WzM/17jFqiaIUjDKNhIGAZYb5n4EH24TvvHJh9MAgRGD68/3VHR3g9zblzB85ia2HeCMqkGOXANNu5YTQ8+a7IEzf/SCFkvpSWFtixY+B5xxwDf/jDYOVXfM511zkFmuUEVpabxTAahsaoyFNq0x092v+4pqaBBYlvvdU9L2bYsIHKG5zCu/tul42wudm/7x07+vOiVBo+H2abTspubblZDKPx8bOrpLUlng+8tVW1ra36kHg/G3ZUqH2xXOWEz4fZppO0W5sN3DAaBgJs4PlR4FHFF8Kqz5e7FZRxHAWuWp4SD3N8Ju0UtdwshtEQBCnw/NjA49h0k6o+39EBl10Gp54avP+VV9zznh74/OddytkCYfnD08prbhhGw5J/G3gcm2659t2wFSrd3TB79uD21lan3AvMnTtQeUN4/vA08pobhjEkyY8Cnz/fzWxLWbMGRo1yTsdyMxAGzdY3bnQOxIUL+5cWirjHnXeG6dP7HYxBOVeC2svNa245xQ3DCCA/ChyCFe6WLZWZGILWfIv0R1du3AhvvAGnn+4eN27sj7qcObP8a4at6y7sK5areJ26YRhGEblQ4KtXw5dP72X19j3in1RQjmFsG1TC01H6Q7F1q1OspWvDt28P7jssIKi7291UISS/1Fb+xhv9zzduTD483zCMhiAXCvw3v4ErNn+WiaxGUM5jPjsIWKddQNUpxzCn5uYyUpiX1smMothOXg4WQWkYRkxyocBPPx2uGt1fM/n7nEcrO2iil/t5v/9JxYE4UTPxOAQF9vjR0VF5rm7LPmgYRkwiFbiItIvIQyLyJxF5QkQu9NonisiDIvKMiNwiIj4exmQQgS/++AB0xEheY1dO5F8BUJo4ivsRlI/xazaxS/9JhaIHPT3lzbT9GDECjj568KqV1tbBjtURI6Jn32HRlkErToKiTg3DGLr4LQ4v3nA1L0d5z1uBB4HDgVuBU7z2hcDsqL4SLWrc0aH37XyCNrN9UNzLVfIl7bshILIRVEeNUh05MjhIp61tYACMX3ZDEddebrDM7NmDozyLIyQXL/aPLm1ttUAcwxiikEQkJjACeAT4e+AVoMVrfy9wV9T5iaeTVVXt7NTtNOu5zB+k8/ZuWaVPsa9/pGWYAm9qGnSNRCIkFy8ODtEv7qujI9mITMMwck2QAo9lAxeRZhF5DHgZWAo8B2xS1UI2qHXAngHnzhKRZSKybMOGDWX9O4jF2rW00Mv3mIciPM9E3sMKAJ7b0cXf8DSCchY/ZHuhBKhqeNWd0iWJSdml580LdqoW9xVUUcjs4IZhFBFLgatqr6oeCIwHDgPe7XdYwLmLVHWyqk4eO3Zs5ZIGUWIznshqVvB3aGcXizv6oyF/xFm0sR1BWcqx4X02lQxLUhGSYQo4TkSpRWQahlFEWatQVHUTcC/OBr6riBRytI4HXkxWNI+o9KpB0YtTp9JND4rwOjvxaW58e/fxLEVQjucuXsFnvXZp8ExSEZJhCri4L4vINAwjDn52leINGAvs6j0fDjwAnAD8goFOzDlRfZVtA4+bErXUkRhSUu2PHKYj+Z9Bu37MGdoXlG3Q7xqVpnhtbR0sV0tL9D0l4cC07ISGkUuo1IkJHAA8CqwAVgLf9trfBTwEPOsp82FRfZWtwCt1HkalggXtRfQ7zBu0a0/+rCub3lOenOVQLwel5Qc3jNwSpMCznU620rJgZaaVXceefIJf8hB/P6D9tNNgwQJob4/dVTSV3FNPj3OArl3rzDDz55cfKJTl8m+GYYSSz3SylTrzynT2jecFHuRwFOE2PvF2+09/6szhIrBkSVldli9bUHtPjwtKKiTXWrOmstwoFuFpGA1HthV4pc48v/NKmTTJt/kT8mt0cQ9btsDMI597u/0jH3GK/P3tD/EXGQdjxritqWng86g6ln6ytbW5AhEibhszpr+PpHKj2MoWw2g8/OwqaW0VBfJU6ngrnBcUqDNliv8+kUH1KR/l73QMLw869GK+MdDxGde2XBJRqk1Ng/toa3PHhdnyyxkTs4EbRm4h9zUxKyWGQ9PXoehzXh/opZw16PDd2KjLOagyp2SYfJ2d8ep8xlXEtgrFMHJJkALPthMzCSqpkxlWn9LjJd7Bp7iF+zj67bbJPMx5fI9p/DttbPc/v9QhGVZFSCS+7OaMNIyGJZ9OzCSoxMYbVp/SY3de5l4+gCIsYRq78SovsCcf59eMZx1f51KeuLjE8+nnkIySI24qXHNGGsaQo/EVeJAjdMqU4HM2b4apU6MdoR7TuJNX6WAtE1jCNN7PA1zGV9n/nBM4/HBXzOevf8XfIRnG1KlO/tLQfj/MGWkYQ47GV+BBNSjXrw8+Z+NGuP56mDGj/7yODmhpCT4HaKGXadzJLzmJF9mDf+YsNm9268nHjYPPrrmI+zjSP2mMH3feCb/7XXS9TwuzN4yhiZ9hPK2tLk7MIOI6MwtU6Azt61N96CHV009X3Vn+qqC6N8/odzlP/8ye4eeLhDsxK12ZY05Mw8gVVJNOdshSbFcu18bszYpF4NBD4corYf3Vd3ID05nAWv438+lkDR/mTn7BSWzDp6DRhAnhtTiDiiL7kVRAkDE0iEoiZ2QDP62e1taQM3C/Ag0dHcGzW68iz3NM1G9xoe7FGgXV0byiX2WBPsYB/f0sXuy/RhwGF52IIqmiFEbjYzEDmYMhuw48iEmTwpV36Qc26EM9e3b5ZokiU8YOmvQujtNPcZO28aaC6iE8rD9p/oq++qoGVw4aObK8+w2qBCRSXj9G42M/9pkjSIE3hgklzt+90mOOOiq4v4Kjs7u7/7zp011ilI6Ofqfm8OGwcKE75/TT3eqVU08dHA5fSne3M3309dFMH8ezlJv5NOsZx+WcQS/NfLn3x4wbB5/Zsoj/Ygp9lBRU3rKlvL+3FkpvxMXy5uQHP62e1pbKDDzO372g4sZB2+zZ4X2H5BsfsBXC4cMIOPcRDtQzzlDdrek1N/lhlZ7P+bqKzsquY3+LjbjYDDxz0LAmlDgftnJXkDQ3h58XJ7w97oc+KD94R4eqqr5xzY16c9t0PZ7/UKFXQXUKS/VGTtGttA86PhRbhWLEwX7sM0eQAs+/CSXO371y//oVVn4EnRe2MqSUqGjLk08ObW+f+Wk+dc0HuavzNFYzkQv5Ns+xN5/hJvbgRb7Mv7Ccg9GNGwf3UWo2grdNN76rV2zlgQHBsRPl5qA30sdPq6e1DckZeKGvauQvBldN6Ld8QLu5QdvZqqB6AI/pggWqGzZ4x5U7i7JZl2FkFiqdgYvIXiJyj4g8KSJPiMhcr/0CEXlBRB7ztqmp/9r4ESdn+NSp/Qmq4tDe7mahmze7XN2lNDfH7ytqth40Qw9q7+igCeUY7mEx01nPOK7kdIY193LmmbDHHvDJT8JvzlpK79Y3B54blEe8p8dFnSaRd9wwjNrhp9WLN2AccLD3fCfgaWAScAHw9ajzi7fUlhGG2Xb9ZpYi0csIK5ltV2IDL3d5n19h5NZW1cWLdcUK1TPP7Der78mfdR7f0WfYO7jfKAevLTM0jLpDUk5M4HbguEwp8DCSMINUuhWKQ4QRdn6B0h+oiLXn27ap3jbmNJ3KEm1ih4LqUdyj1zNdN++1X7zxifsDZBhG6iSiwIEuYC2ws6fAV+Oq1V8D7BZwzixgGbBswoQJNb1pVQ2e4dZqiyLq3JAZdyjezHode+j3OEf34WkF1Z3a39IvfUn1D39Q7euLGB+zgRtGJqhagQOjgOXAx73XuwPNuIyG84FrovoYcjPwOLPXMAUaNjsuc9lg34ROvf9/36Wf+1y/xeTd71b9wa7f1b/wDv/xMeVtGJmgKgUOtAJ3AWcF7O8CVkb1UxcFvnixC3QpVk5tbc4MkabyDgquKTWHBNXmbGmJvkaFvP666lVXqb73vd6leEs/xq/0Dk7Q7TSXN/PO89ryPMtuDCkqVuCAAD8HFpS0jyt6/jXg5qi+6qbAg0wQQUE0hdl5NeaXpqbBCsHPYdjaGpywKiUFXsx//7fqN6Y9obs3uaLN72x+Sc8+YaU++WTMsc3r0sM8y24MOapR4O8D1LN1P+ZtU4EbgMe99juKFXrQVpUCr3S2FLbO2ssM6PslriT/t981ign6wahkGzWq8rH04a23VG+/XfXEE/t/v/7hH1SvvtrN2Mse26yTFdmz+i+gdIJTmmEzKbmzev8ZI7FVKNVsFSvwamZLUU664tci/XlQknJ+Ft9DUsq78IWqZBxjfFnWr1f9wQ9U99vPXWrkSNWZM1UfeMBzfEaNbR6WHmZB9qz+C/D71wr9ZsGk5M7q/WeQfCvwamZL5ToxC30mMQMvjsJMoj8/ZVNOCtsyvyx9faq//73qF7/oJvyguu++qt//vuoLL1T5vtSbLMieBRnKkasgW1JyZ/X+M0i+FXg1s6UgxRWmFIPOq2TlStQ9hG1xlX6cWUuVX5bNm1Wvu071yCPdaU3Sq9Na79Jf8o+6jdbyZMkCWZj9ZeFfQDlyFWRLSu6s3n8GybcCr/aX2s90EJEFMPC8oFUjQR/EgkIodwZesHHHXS2TdMRnCE9ferue13Kx7sE6BdUxvKxf44f6+C5H5EN5F6i3/TWrM9AwX43NwOtCvhV4GrOlOArcj3IVceHDWOk/gbjXi1LESX5ZvL6206z/zof1E/xCW9mmoHrYYaoLF6pu2lR+t0OOLPwL8CNMgZsNvC7kW4GrJj9bqnRGWq4ppLg/v3sIO7ec60Up4iS/LD4yvcwY/RFn6v77u6b2dtVTT1W9+27V3t7yLzFA7rDVEHmn3v8C/Aj7zBWwVSg1Jf8KPGkqnZFWOgMPIsiuHpXSthJFnNSXJWTs+vpUH37YWX522cU1T5yoetFFqmvWlHkdvyAsiJdKwKgcM21kDlPgpcSdkfolkopbni2OogmyqU+a1P9FKp0RtbW5mWi9Zi1B0a0lcmzd6pqOOab/No4/XvWWW1TffDOk78J4hzmN4ygTm91Vhpk2MocpcD+ivuBBH+TSbIB77OGvZOJkI4wb3FNQ4llQRBUk2Hr+edVvf1t1r73c4aNHq37lK6qPPlrSbzm1S6NkNCVUOfbjlymCFLi4fbVh8uTJumzZsppdr2q6uvwLK3R2upJkBVpaggs3lB5bSjmFJqL6qhVxx8WH3l64+2645hr41a/grbfgoIPg85+Hz1z8d4xetyKeDM3NsGNHKjIaRtYQkeWqOrm0Pf81MQukUc8xTr1NCK+6U249zkrkqTVxx8WH5mY47ji46SZYvx4uv9y1f+UrsMe6B/k0N7KUY+kj4octqtJRFTIaRl5oDAXe0wOzZrkZl6p7nDWreiU+YUJ57ZUc29GRXF+1IolxAUaPhjPOgEcecdusnW7iLj7I8SxlIqs4nwtYRZf/yZ2dNZHRMLJMYyjwefPSqecYp95mnD6KKf2ncPLJ7nkppbU4i69b7+rxfuMCbnY7Z05FXR50EPz4yjZeHL4Pt3Ay7+ZJvsO3eBermMJ/0cNneIN2d7BI9HuQxHtnGFnHzzCe1paaEzPNkNw4js4wR1tUfc62tsGrLQr5yv2umxXnXFiEaCEhWCUUjfca9tLvME8n8pyC6i68prP5iT7MIQOTasXoyxxxRp6hoZ2Y9XRYBV3bT4aoY4POi3O9Wjvnwu4lysEYF8853IdwH0dxDZ/nNk7iTYbznvc4x2d3N4wdW/2lDCPLNLYTs55/l6OcYsX7y3GgleuEq7VzLux6UQ7GMObMcYpb5O1+mlA+wL3cwGf5C+9kIacxfDh87Wuw555w0klw553J/GYYRp5oDAXe3Q2LFrlZqIh7XLTItadNlFOssL+nx9/WXW6/WXHOpXG9OXPgyitDfwB24XVOG9nDgw/C44+71Sv33QfTprm3/bzz4NlnkxfNMDKJn12leAP2Au4BngSeAOZ67aOBpcAz3qNvVfriLXOBPEkQFnxSsE2HHdPWNjgoJsymnRUbeJw8LuVSTrreIrZtU/3lL1WnTeuvTnfkkS797ebNCdxrmpid3ogBVZRUGwcc7D3fCXgamARcApzjtZ8DXBzVV+YUeCVfHr9zikuwFZRQcX9htTcXL3ZOv8J5zc3RTsByj0+DNBR4XOVd6hwu4oUXXMGJffd1h40a5QpS/P73OtjxGfW+pU1WfoyNzFOxAh90AtwOHAc8hVcH01PyT0WdmykFXsmXp9JzgpRQIdS+nD6z8KWPE/JeCeUUd45I+9vX50rAzZzpSsKBKxF3ySWuZFysf05pY0mjjJgkosCBLmAtsDOwqWTfa1HnZ0qBV/LlSfKcwnnl9pmFL32cDImVUNC0FZhRwnj9ddWf/cwVaS5Mtk8cfpfezkf0LVrqN55WkcaISdUKHBgFLAc+7r2OpcCBWcAyYNmECRNqd8dRVPLlSfKcghmg3D6z8KWPk6M8rX6rvMaTT6qefbbq7qxXcI/f4GL9b/ar/XhW+mNsdvMhR1UKHGgF7gLOKmrLtwml3jPwggnAZuDl9VvYRo6s6hbemrC33sEJ+jF+pS28paD6Xn6nV/EF/Ss7uWl62grSz4wTlXUyCyY0o+ZU48QU4OfAgpL2H5Q4MS+J6itTFXmStIHPnj3YUVmoHBN1nUps4GWmck2cKBt4pT8mcet/Fv8ARvUX5Owtuoe/8A69lLP03Tzhhp/NOoNr9X7ep31pK8hiR2rpPxC/62bhB9yoOdUo8PcBCqwAHvO2qUAH8FtvGeFvgdFRfWWqJmah32pXocye7V81plixxgnHjytHzGIKqVNa6iyJ92XUqPgKPGqWH/RjUKrEi1ah9IH+oekf9Ev8VHfirwqq+/C0fo9zdN2eh1V2T3GJq5izYEIzak5iq1Cq2epWlT5Nov72Jy1j1sYiyX9G5SjvKAUeVaouCE9BbmaEXs90PYp7FFSb2KFTp6redptbd544cRVzVt5/s8PXlHwr8CzPOqIcb0nLmOWxqJYkFXil5/koyGfYW8/b+fK3Cy+NGaN65pmqK1YkdufxFXMWbOBZkGGIEaTA8xFKn5Xw8UpkSFrGLI9FnghKyeuTV2efEeuZf8VurF3rcq4cfTT85CdwwAFw6KGwcCFs2lSlHGvWDK7O5JfPp7sbZsxwCcPAPc6YUZu0EQXSSt9slI+fVk9rq8oGXm/HXZhsUTbwpK9XifM1jb+7Sfdbzux7ypTK+4ryI8S4rw0bVBcsUH3Pe9zp7e2q3d2qv/2tam9vzPuNcgYXHOGl59TbB9LI/wIzCrk2oWThQxtGHIdZkpTr9EzLAZx0v+3ttVHgQakN4qxsKaGvT3XZMtU5c1R32cV109WleuGFqmvWRJwcZ9lk6ZgmKHvFZMUOP4TItwLP+gcmy/KlJVsa/ZYzA4dk+4rTZwRbt6r29LjflsKE9LjjVG+6SfWNN3xOiBu4VDymKcleFmYDrzlBCjwfBR2amtzHpBQR6OurXrBqybJ8acmWRr+lNuAowj675fYVp88yWL0arrsOrr3WpU7fbTdnpjyMfz8AABGISURBVP785135OADGjIGNG6M7Kx7TsPuq4XeZnh5n81671vlf5s+vrR1+iJHvgg5Zd9xlWb60ZMvyPUcxcmR57RXQ1QUXXACrVsHSpfChD8FVV8HBBzsFfvnlsLFvt3idFY9pDWSPRXe3+5Xq63OPprzrQj4UeNYL1GZFPr+VFWnJVu97njIlfH9LS3B7e3vy8gTQ1ATHHgs33gjr17vVK01N8NWvwh6vreRT3MxdHE9v2FexeEyDZK/hPRkZws+uktaWqVD6pKm3fGF2ybysQombC6WlJbqvsPOjEozVgEcfVf1q+0IdzSsKqnuxRr/FhfocE8Nt27VaAVLvz7MxAHLtxDSiybIjNS5x8oxDvBUXYZGYUSl+a0VHh75Jm97KSfoh7lSh920xPshv9BVGD1bgtXifzUmZOUyBNzphs8o8zaKKZ35h9xNF2A9AVJGNWlFyj2sZr9/lvEEiXX55UTWhWijXqAyaRs0xBd7oVLKmOOtUM9uMOjdoPXUG0vLuoEnP5/xBu8aPV33iCU3fvBH142fUnCAFng8nphHN1KnRx+Qh3LnYEbt5M7S1Ddwf11EadEyh/eST44Wup8n8+dDaOqi5mT4u4EK0bRhrL/s1hxzi2tetg7/9W5BTu5mz9pts01bX+LvfJStXIUzfjyx8fo491r13he3YY+stUf3w0+ppbTYDT5G4DsAshzv7mQdaW91sudzZZiGapnSbMiW4kEKti0OHpWGAQfLccov/YUuYmqzsUZ+hehL2vjYw5DqQx4gmKLCmlM5Ot243ixSSOpVSicxhAS+dncldpxqC7reAnzwtLWzpHcYcruDnzBiw68gj4dZbYffdU5SruRl27KjyAlWQlUCmGpPvQB4jmjgBNFlaO+/H2rXltWf9OpXKEba/t5eRbOV6PociLOMQduNVAO6/H975TqfjLr20Cn0W9hnp7a2wUyMNTIE3Cn6BNW1t0NHhvtGdnbBoUbYj5moV3ZmVKNKo640ePbitZAZ6CI/wKh300szFF/e3f+Mb7k/ZmDHw6KMJyFqgoyPBzoxqiVTgInKNiLwsIiuL2i4QkRdE5DFvi+FBM1Klu9sp6M7OfoV9zTXwyiv5CXdOMrozKFJzyhR/52Fra+3/nQQ4MUMJCJlvGjWCs892s+4XX4QjjnDtGze68H0RmDlzcBpvX2rpqPSLHg7K1Q7pR6KGXTuL+BnGizfgSOBgYGVR2wXA16POLd3MiWlEktQSuSgnZhbSE0c5Mf0chmU6F2+/3f/Q224LkatWTnA/Z3Jb2+Dc/8XLX9N0rmY4gIlqnJgi0gUsUdX9vdcXAJtV9dJyfizMiWnUjEZwYvo5DCt04r35Jpx5Jvz0pwPbDz0UfvUrGD8+5jWSHKOo+/e7bkuLvx0+Cedqkk70hEnDiXmGiKzwTCyBadVEZJaILBORZRs2bKjicoaREHlxYiboMGxvd6XfVOHxx2GPPVz7ww/DXns5nX3RRTEyASdpZipnvAvHBo1JEmOVlc9FGVSqwK8E9gYOBNYDPww6UFUXqepkVZ08duzYCi9nGAmSFydmZ2cql91/f3jhBaesL7usv/38891EdiSbeZDDUrn2AMoZ78KxQWOSxFhl5XNRBhUpcFV9SVV7VbUPuApq8W4bRhlEOTGzkP7XT44oecLuq0xEXFpbVdiwAY47zrVvZSSH8yCCcgo38T+M6j8pSQdn0MqpUsdu8Vik+d5l5XNRDn6G8dIN6GKgE3Nc0fOvATfH6cecmEZNKXVkFkfrZSVdaiWRhcOHDzx2+PDyrxty/3fd5S/SDXTXJm1t1HsT9r6mIU8lxxQfO3Jkv6xNTRVFzVJpMivgJpyZZDuwDvgCcAPwOLACuKNYoYdtpsANo4igYtgBofSqqjppkv+xkybFv27UagsvW+M2WvVM/nnQpfbfX3XVqkRGoHxqXUC8lHJWqixe7BR2AvIGKXALpTeMehG0oqJAgqtQBhC12sJn/1P8L6bx7zzHPgPazz3XOT+DCiAlTpqrUOJQzkqVBFMSWCi9YWSNqJUTaYWtR6228Nn/NzzNs+xLH8JVV/W3f//7zmTd1ORC+VMnzVUocShnpUrY6pWE5DUFbhj1Iixta5z9lRK12iJk1YUAX/yim+y/9hqceKJrV4WjjnJ/ED76Udi0KVmR3yZoTNIaq1LKWakStnolIXlNgRtGvZg1K3x/e/vgUO5Jk/yPDWr3I2q1Rdiqi8Jqlzlz2HVMC/96u6DNLdx74o/etu7827/Bbrs5ZX711QknCQwas6ixTIpy0jDMn+/+mviRkLymwA2jXjz9dPj+LVvcF71YiR91lP+xQe1++OXNKU50dsYZwefOnAlz5sCVV/abAXp7Oer2s+g7fQ7btzu7eIEvfcnpsH32ib7dWNx3X3ntaVDqhwjyS3R3w89/PjB/TVMTzJ4NV1yRjCjmxDSMOhHmkCym2EFWCydeVCj9unWxZFi1yplTVq4ceNjcuXDJJYOLLVUtWy10WZ3C7c2JaRh5pdgZlgUnXkwZJk50YfuqbiJa4LLLYNgwp4v/8z9TlDUNMhZubwrcMLJOsTMsC068CmSYPt0p8tdfh099qr/9gx90ivz4413m48yTsXB7U+CGUS/ihL+XhnLXwom3667B++bPr0qGnXaCm292yvyPf4QRw5zJZelSGDvWKfMf/zjEGpKEEzeMqHzglYTbp5lj3C+6J63NIjENo4TSsPBJk6LDtGfPVm1udsc3NycfhRgU7Vgcsp6EDF5U4w6a9EK+Nehy48apPv64zzkiAw8USSYVQtwoy3JD6RPIMY5FYhqGEYtaRTv6OATXsScfb1vCw28dOKD9tNNgwQJo32/wOUAyTsQ0HJQJ9RnkxDQFbhjGQGq10qOpyb8/Eejr47bb4JOfHLz7Dj7CR1jie06a8tSzT1uFYhhGPGrlKI1wCJ50ktN9W7bAjBn9uz/KvyEo7+MB1vPO8L4SlCczfRZhCtww8kbahXdrFe0Y0yE4YgRcd51T5o989046cMtVfsf72IP1CMrFh/+66gk48+cPXpze1lZdPvCUc4ybAjeMPNHT4xTpmjVOo61ZMzhas1qOOGJwesGWlv5S90kRFRHqw0Fdr/FK6x70IfyAr7/dfs4tB9HcDKNHwyOPVCFTqbmjWpNRBfdYDmYDN4w8UYtIwAwX9/WT7SXewcnD7uD+bX8/oH36dBfxXxzJXm7fQCbu25yYhtEIpOFoq8c1KiVCtiVL4CMfGbz71lv9HaLl9F1PzIlpGI1ALSIBMxZtGEsGr/2EE5wOfuMNlzOqwMknOz08eTL8+c+V9Z1FIhW4iFwjIi+LyMqittEislREnvEed0tXTMMYIqQRCVguca6RtiO1GtlwmXivuMIp85UrYa+9XPvy5U4fi8AFF5Qsd2/EosbAkcDBDCxqfAlwjvf8HODiqH7UIjENI5w0IgGrkSXoGglFF6YiWwh9far/8i+DA0zb21X/8Ifq+k4bqonEFJEuYImq7u+9fgo4WlXXi8g44F5V/ZuofswGbhghZNiJNoC8yBnCxo1uIchddw1s/+QnXRGKnXeuj1xBJG0D311V1wN4j+8IufAsEVkmIss2bNhQ4eUMYwiQsVSlgeRFzhA6OuA//sPNwZcu7W//xS9gl12ciaU4BW5WSd2JqaqLVHWyqk4eO3Zs2pczjPySFydaXuSMybHHOkX+1lvwT//U3z5jhlPkkybB88/XT74wKlXgL3mmE7zHl5MTyTCGID09sHnz4PYsOtHy6OyLQWsrXHqpU+ZPPw377uvan3wS9t7bKfNzzkk2n1e1VKrA7wAK2QlmALcnI45hDEEK0ZUbNw5s7+hINGovMVKOLswC++7rlLgq/Oxn/e0XX+wUvQjce2/dxHubSCemiNwEHA2MAV4Czgf+FbgVmACsBT6pqq9GXcycmIbhQwM4BYcCmzbB5z4Ht5dMV6dNgxtugN1SXExtkZiGkVUyHAFo+PPAA/CBDwxOm75wofszFbdedVwsEtMwskqDOQWHAu9/v7OFb98O8+b1t59+uvs9fte74Kmn0pfDFLhh1JsGdQoOBVpa4LvfdX+gVq2CAw5w7atWwX77uZn4V7/qVrikgSlww6g3Q8ApOBTo6oI//ckp88WL+9svvxyGDYP165O/ptnADcMwUmLzZmcTf/55FzC0006V9RNkA2/xO9gwDMOonlGj4MYb0+vfTCiGYRg5xRS4YRhGTjEFbhiGkVNMgRuGYeQUU+CGYRg5xRS4YRhGTjEFbhiGkVNMgRuGYeSUmkZiisgGYAvwSs0uWh5jyK5skG35TLbKybJ8JlvlJClfp6oOKmlWUwUOICLL/EJCs0CWZYNsy2eyVU6W5TPZKqcW8pkJxTAMI6eYAjcMw8gp9VDgi+pwzbhkWTbItnwmW+VkWT6TrXJSl6/mNnDDMAwjGcyEYhiGkVNMgRuGYeSU1BW4iKwWkcdF5DERWea1jRaRpSLyjPe4W9pyeNe9RkReFpGVRW2+sojjxyLyrIisEJGD6yDbBSLygjd2j4nI1KJ953qyPSUiH0xZtr1E5B4ReVJEnhCRuV57VsYuSL66j5+ItIvIQyLyJ0+2C732iSLyoDd2t4hIm9c+zHv9rLe/qw6yXSciq4rG7UCvvabvq3fNZhF5VESWeK/rPm4R8tV27FQ11Q1YDYwpabsEOMd7fg5wcdpyeNc6EjgYWBklCzAV+A0gwOHAg3WQ7QLg6z7HTgL+BAwDJgLPAc0pyjYOONh7vhPwtCdDVsYuSL66j583BqO8563Ag96Y3Aqc4rUvBGZ7z+cAC73npwC3pDhuQbJdB5zkc3xN31fvmmcBNwJLvNd1H7cI+Wo6dvUyoZwIXO89vx74WC0uqqr3A6/GlOVE4Ofq+COwq4iMq7FsQZwI3Kyq21R1FfAscFiKsq1X1Ue85/8DPAnsSXbGLki+IGo2ft4YbPZetnqbAscAt3ntpWNXGNPbgCkiIjWWLYiavq8iMh6YBlztvRYyMG5B8kWQytjVQoEr8J8islxEZnltu6vqenBfPuAdNZAjiCBZ9gT+XHTcOsKVQlqc4f3lukb6TU11k837a3oQbraWubErkQ8yMH7e3+zHgJeBpbgZ/yZV3eFz/bdl8/b/FeiolWyqWhi3+d64/UhEhpXK5iN3GiwAzgb6vNcdZGTcAuQrULOxq4UCP0JVDwY+DHxZRI6swTWTwO/Xu9ZrLq8E9gYOBNYDP/Ta6yKbiIwCfgmcqaqvhx3q01YP+TIxfqraq6oHAuNxM/13h1y/rrKJyP7AucB+wKHAaOCbtZZNRE4AXlbV5cXNIdev6bgFyAc1HrvUFbiqvug9vgz8GvcBfqnw98F7fDltOUIIkmUdsFfRceOBF2spmKq+5H3B+oCr6P+bX3PZRKQVpxx7VPVXXnNmxs5PviyNnyfPJuBenA10VxFp8bn+27J5+3chvmktCdk+5JmkVFW3AddSn3E7AvioiKwGbsaZThaQnXEbJJ+ILK712KWqwEVkpIjsVHgOHA+sBO4AZniHzQBuT1OOCIJkuQP4rOc9Phz4a8FcUCtKbGT/iBu7gmyneJ73icC+wEMpyiHAz4AnVfWfi3ZlYuyC5MvC+InIWBHZ1Xs+HDgWZ6O/BzjJO6x07ApjehJwt3pesBrJ9v+KfpQFZ2MuHreavK+qeq6qjlfVLpxT8m5V7SYD4xYi36k1H7skPKFBG/AunLf/T8ATwDyvvQP4LfCM9zg6TTmK5LkJ91d6O+4X8QtBsuD+8vwEZ698HJhcB9lu8K69wvsAjCs6fp4n21PAh1OW7X24v3srgMe8bWqGxi5IvrqPH3AA8Kgnw0rg20XfjYdwDtRfAMO89nbv9bPe/nfVQba7vXFbCSymf6VKTd/XIjmPpn+VR93HLUK+mo6dhdIbhmHkFIvENAzDyCmmwA3DMHKKKXDDMIycYgrcMAwjp5gCNwzDyCmmwA3DMHKKKXDDMIyc8v8BMIoh21GrO6IAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "# Dibujamos la recta\n", + "%matplotlib inline\n", + "plt.plot(X, Y, \"ro\")\n", + "plt.plot(X, lm.predict(X), color=\"blue\")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " mpg cylinders displacement horsepower weight acceleration \\\n395 38.0 6 262.0 85.0 3015 17.0 \n\n model year origin car name \n395 82 1 oldsmobile cutlass ciera (diesel) ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
39538.06262.085.0301517.0821oldsmobile cutlass ciera (diesel)
\n
" + }, + "metadata": {}, + "execution_count": 50 + } + ], + "source": [ + "# Detectando los outliers\n", + "data_auto[(data_auto[\"displacement\"] > 250) & (data_auto[\"mpg\"] >35)]" + ] + }, { "cell_type": "code", "execution_count": 51, "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " mpg cylinders displacement horsepower weight acceleration \\\n258 20.2 8 302.0 139.0 3570 12.8 \n305 23.0 8 350.0 125.0 3900 17.4 \n372 26.6 8 350.0 105.0 3725 19.0 \n\n model year origin car name \n258 78 1 mercury monarch ghia \n305 79 1 cadillac eldorado \n372 81 1 oldsmobile cutlass ls ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
mpgcylindersdisplacementhorsepowerweightaccelerationmodel yearorigincar name
25820.28302.0139.0357012.8781mercury monarch ghia
30523.08350.0125.0390017.4791cadillac eldorado
37226.68350.0105.0372519.0811oldsmobile cutlass ls
\n
" + }, + "metadata": {}, + "execution_count": 51 + } + ], + "source": [ + "# Detectando los outliers\n", + "data_auto[(data_auto[\"displacement\"] > 300) & (data_auto[\"mpg\"] >20)]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, "outputs": [], "source": [ - "def regresion_validation(X_data, Y, Y_pred):\n", - " SSD = np.sum((Y - Y_pred)**2)\n", - " RSE = np.sqrt(SSD / (len(X_data) - 1))\n", - " y_mean = np.mean(Y)\n", - " error = RSE / y_mean\n", - " print(SSD, RSE, y_mean, error*100)" + "# Eliminando los outliers\n", + "data_auto_clean = data_auto.drop([395,258,305,372])" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)" + }, + "metadata": {}, + "execution_count": 53 + } + ], + "source": [ + "X = data_auto_clean[\"displacement\"].fillna(data_auto_clean[\"displacement\"].mean())\n", + "X = X[:, np.newaxis]\n", + "Y = data_auto_clean[\"mpg\"].fillna(data_auto_clean[\"mpg\"].mean())\n", + "lm = LinearRegression()\n", + "lm.fit(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6466514317531822" + }, + "metadata": {}, + "execution_count": 54 + } + ], + "source": [ + "lm.score(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 56 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "%matplotlib inline\n", + "plt.plot(X, Y, \"r.\")\n", + "plt.plot(X, lm.predict(X), color=\"blue\")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { + "kernelspec": { + "display_name": "Python 3.7.4 64-bit ('base': conda)", + "language": "python", + "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45" + }, "language_info": { "codemirror_mode": { "name": "ipython", @@ -804,11 +1046,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4-final" - }, - "orig_nbformat": 2, - "kernelspec": { - "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45", - "display_name": "Python 3.7.4 64-bit ('base': conda)" } }, "nbformat": 4, From 71df5adf1af5bb52e31fc7a3821d3d3dde2ed5a1 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Thu, 6 Aug 2020 06:42:38 -0500 Subject: [PATCH 06/12] Las matematicas detras de la regresion logistica (Parte 1) --- ... - Logistic Regression - Matematicas.ipynb | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb new file mode 100644 index 00000000..709cc00b --- /dev/null +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -0,0 +1,89 @@ +{ + "metadata": { + "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 + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python_defaultSpec_1596713888771", + "display_name": "Python 3.7.4 64-bit ('nuelcodes': virtualenv)" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# La matemáticas tras la regresión logística\n", + "\n", + "## La tablas de contingencia" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " Gender Purchase\n0 Female Yes\n1 Female Yes\n2 Female No\n3 Male No\n4 Male Yes", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "df = pd.read_csv(\"/Users/nuelcodes/python-ml-course/datasets/gender-purchase/Gender Purchase.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "(511, 2)" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "# Conocer el numero de filas y columnas (respectivamente)\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +} \ No newline at end of file From 1ae246261518aa7210d3182b6440f88ece32f2a8 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Fri, 7 Aug 2020 06:01:34 -0500 Subject: [PATCH 07/12] Las matematicas detras de la regresion logistica (Parte 2) --- ... - Logistic Regression - Matematicas.ipynb | 89 +++++++++++++++++-- 1 file changed, 83 insertions(+), 6 deletions(-) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index 709cc00b..67a595d3 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -14,7 +14,7 @@ }, "orig_nbformat": 2, "kernelspec": { - "name": "python_defaultSpec_1596713888771", + "name": "python_defaultSpec_1596795242780", "display_name": "Python 3.7.4 64-bit ('nuelcodes': virtualenv)" } }, @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -41,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -51,7 +51,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n
" }, "metadata": {}, - "execution_count": 4 + "execution_count": 2 } ], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -70,7 +70,7 @@ "text/plain": "(511, 2)" }, "metadata": {}, - "execution_count": 5 + "execution_count": 3 } ], "source": [ @@ -78,6 +78,83 @@ "df.shape" ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Purchase No Yes\nGender \nFemale 106 159\nMale 125 121", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female106159
Male125121
\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "contingency_table = pd.crosstab(df[\"Gender\"], df[\"Purchase\"])\n", + "contingency_table" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Gender\nFemale 265\nMale 246\ndtype: int64" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "contingency_table.sum(axis = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Purchase\nNo 231\nYes 280\ndtype: int64" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "contingency_table.sum(axis = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Purchase No Yes\nGender \nFemale 40.000000 60.000000\nMale 50.813008 49.186992", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female40.00000060.000000
Male50.81300849.186992
\n
" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "# Proporcion de mujeres/hombres que compraron y no compraron el producto\n", + "# Dividir cada una de las columnas el valor de la suma por filas\n", + "(contingency_table.astype(\"float\").div(contingency_table.sum(axis = 1), axis = 0)) * 100" + ] + }, { "cell_type": "code", "execution_count": null, From 0f5f5548fc9ab828940cc9f782567d7b8a9fa735 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Fri, 7 Aug 2020 06:34:53 -0500 Subject: [PATCH 08/12] Probabilidades condicionales (Parte 1) --- ... - Logistic Regression - Matematicas.ipynb | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index 67a595d3..15b27b88 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -155,6 +155,67 @@ "(contingency_table.astype(\"float\").div(contingency_table.sum(axis = 1), axis = 0)) * 100" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## La probabilidad condicional" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import display, Math, Latex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* ¿Cuál es la probabilidad de que un cliente compre un producto sabiendo que es un hombre?\n", + "* ¿Cuál es la probabilidad de que un cliente compre un producto sabiendo que es una mujer?" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo}$" + }, + "metadata": {} + } + ], + "source": [ + "display(Math(r'P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo}'))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Purchase\\cap Male}{Male}$" + }, + "metadata": {} + } + ], + "source": [ + "# Los casos favorables es que sea hombre y que compre\n", + "display(Math(r'P(Purchase|Male) = \\frac{Purchase\\cap Male}{Male}'))" + ] + }, { "cell_type": "code", "execution_count": null, From adfd0706ddec844f8988c638d672146d0218216e Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Mon, 10 Aug 2020 05:38:14 -0500 Subject: [PATCH 09/12] Probabilidades condicionales (Parte 2) --- ... - Logistic Regression - Matematicas.ipynb | 161 ++++++++++++++++-- 1 file changed, 149 insertions(+), 12 deletions(-) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index 15b27b88..aaee8903 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -14,7 +14,7 @@ }, "orig_nbformat": 2, "kernelspec": { - "name": "python_defaultSpec_1596795242780", + "name": "python_defaultSpec_1597052971580", "display_name": "Python 3.7.4 64-bit ('nuelcodes': virtualenv)" } }, @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -181,47 +181,184 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo}$" + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}$" }, "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.491869918699187" + }, + "metadata": {}, + "execution_count": 17 } ], "source": [ - "display(Math(r'P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo}'))" + "display(Math(r'P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}'))\n", + "121/246" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Purchase\\cap Male}{Male}$" + "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = 1 - P(Purchase|Male)$" }, "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.508130081300813" + }, + "metadata": {}, + "execution_count": 18 } ], "source": [ - "# Los casos favorables es que sea hombre y que compre\n", - "display(Math(r'P(Purchase|Male) = \\frac{Purchase\\cap Male}{Male}'))" + "display(Math(r'P(No\\ Purchase|Male) = 1 - P(Purchase|Male)'))\n", + "125/246" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}$" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.5678571428571428" + }, + "metadata": {}, + "execution_count": 25 + } + ], + "source": [ + "display(Math(r'P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}'))\n", + "# La división se está haciendo por el número total de compras\n", + "159/280" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Male|Purchase)$" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.43214285714285716" + }, + "metadata": {}, + "execution_count": 27 + } + ], + "source": [ + "display(Math(r'P(Male|Purchase)'))\n", + "121/280" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{121}{246} =$" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": "0.491869918699187\n" + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = \\frac{125}{246} =$" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": "0.508130081300813\n" + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{159}{265} =$" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": "0.6\n" + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P(No\\ Purchase|Female) = \\frac{106}{265} =$" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": "0.4\n" + } + ], + "source": [ + "# Porbabilidades que más nos importan\n", + "display(Math(r'P(Purchase|Male) = \\frac{121}{246} ='))\n", + "print(121/246)\n", + "display(Math(r'P(No\\ Purchase|Male) = \\frac{125}{246} ='))\n", + "print(125/246)\n", + "display(Math(r'P(Purchase|Female) = \\frac{159}{265} ='))\n", + "print(159/265)\n", + "display(Math(r'P(No\\ Purchase|Female) = \\frac{106}{265} ='))\n", + "print(106/265)" + ] } ] } \ No newline at end of file From 5c1db2e172bf99f2e69422a137057cc26eccef61 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Tue, 11 Aug 2020 06:09:58 -0500 Subject: [PATCH 10/12] Cociente (ratio) de probabilidades --- ... - Logistic Regression - Matematicas.ipynb | 201 +++++++++++++++++- 1 file changed, 191 insertions(+), 10 deletions(-) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index aaee8903..f8bcb38f 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -14,7 +14,7 @@ }, "orig_nbformat": 2, "kernelspec": { - "name": "python_defaultSpec_1597052971580", + "name": "python_defaultSpec_1597140524145", "display_name": "Python 3.7.4 64-bit ('nuelcodes': virtualenv)" } }, @@ -181,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -198,7 +198,7 @@ "text/plain": "0.491869918699187" }, "metadata": {}, - "execution_count": 17 + "execution_count": 9 } ], "source": [ @@ -208,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -225,7 +225,7 @@ "text/plain": "0.508130081300813" }, "metadata": {}, - "execution_count": 18 + "execution_count": 10 } ], "source": [ @@ -235,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -252,7 +252,7 @@ "text/plain": "0.5678571428571428" }, "metadata": {}, - "execution_count": 25 + "execution_count": 11 } ], "source": [ @@ -263,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -280,7 +280,7 @@ "text/plain": "0.43214285714285716" }, "metadata": {}, - "execution_count": 27 + "execution_count": 12 } ], "source": [ @@ -290,7 +290,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 13, "metadata": { "tags": [] }, @@ -359,6 +359,187 @@ "display(Math(r'P(No\\ Purchase|Female) = \\frac{106}{265} ='))\n", "print(106/265)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ratio de probabilidades\n", + "* Cociente entre los casos de éxito sobre los de fracaso en el suceso estudiado y para cada grupo" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle odds\\in[0,+\\infty]$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}$" + }, + "metadata": {} + } + ], + "source": [ + "display(Math(r'P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre'))\n", + "display(Math(r'P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer'))\n", + "display(Math(r'odds\\in[0,+\\infty]'))\n", + "display(Math(r'odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}'))\n", + "display(Math(r'odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}'))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "pm = 121 / 246\n", + "pf = 159 / 265\n", + "odds_m = pm / (1 - pm) # 121 / 125\n", + "odds_f = pf / (1 - pf) # 159 / 106" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.9680000000000002" + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "odds_m" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.4999999999999998" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "odds_f" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Si el ratio es superior a 1, es más probable el éxito que el fracaso. Cuanto mayor es el ratio, más probabilidad de éxito en nuestro suceso\n", + "* Si el ratio es exactamente 1, el éxito y el fracaso son equiprobables (p = 0.5)\n", + "* Si el ratio es menor que 1, el fracaso es más probable que el éxito. Cuanto menor es el ratio, menor es la probabilidad de éxito del suceso." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}$" + }, + "metadata": {} + } + ], + "source": [ + "display(Math(r'odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}'))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.6453333333333335" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "odds_r = odds_m / odds_f\n", + "odds_r" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.5495867768595037" + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "1 / odds_r # odds_f / odds_m" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ] } \ No newline at end of file From 1654ddbc39e7590c5a84dbb2ddd41e1c3d256f8b Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Wed, 12 Aug 2020 07:28:11 -0500 Subject: [PATCH 11/12] De la regresion lineal a la regresion logistica (Parte 1) --- ... - Logistic Regression - Matematicas.ipynb | 639 ++++++++++++++---- 1 file changed, 500 insertions(+), 139 deletions(-) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index f8bcb38f..c9c98785 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -1,25 +1,4 @@ { - "metadata": { - "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 - }, - "orig_nbformat": 2, - "kernelspec": { - "name": "python_defaultSpec_1597140524145", - "display_name": "Python 3.7.4 64-bit ('nuelcodes': virtualenv)" - } - }, - "nbformat": 4, - "nbformat_minor": 2, "cells": [ { "cell_type": "markdown", @@ -45,13 +24,72 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": " Gender Purchase\n0 Female Yes\n1 Female Yes\n2 Female No\n3 Male No\n4 Male Yes", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n", + "
" + ], + "text/plain": [ + " Gender Purchase\n", + "0 Female Yes\n", + "1 Female Yes\n", + "2 Female No\n", + "3 Male No\n", + "4 Male Yes" + ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } ], "source": [ @@ -65,12 +103,14 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "(511, 2)" + "text/plain": [ + "(511, 2)" + ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } ], "source": [ @@ -84,13 +124,60 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Purchase No Yes\nGender \nFemale 106 159\nMale 125 121", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female106159
Male125121
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PurchaseNoYes
Gender
Female106159
Male125121
\n", + "
" + ], + "text/plain": [ + "Purchase No Yes\n", + "Gender \n", + "Female 106 159\n", + "Male 125 121" + ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } ], "source": [ @@ -104,12 +191,17 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Gender\nFemale 265\nMale 246\ndtype: int64" + "text/plain": [ + "Gender\n", + "Female 265\n", + "Male 246\n", + "dtype: int64" + ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } ], "source": [ @@ -122,12 +214,17 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Purchase\nNo 231\nYes 280\ndtype: int64" + "text/plain": [ + "Purchase\n", + "No 231\n", + "Yes 280\n", + "dtype: int64" + ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } ], "source": [ @@ -140,13 +237,60 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Purchase No Yes\nGender \nFemale 40.000000 60.000000\nMale 50.813008 49.186992", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female40.00000060.000000
Male50.81300849.186992
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PurchaseNoYes
Gender
Female40.00000060.000000
Male50.81300849.186992
\n", + "
" + ], + "text/plain": [ + "Purchase No Yes\n", + "Gender \n", + "Female 40.000000 60.000000\n", + "Male 50.813008 49.186992" + ] }, + "execution_count": 7, "metadata": {}, - "execution_count": 7 + "output_type": "execute_result" } ], "source": [ @@ -185,20 +329,26 @@ "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}$" + "text/latex": [ + "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "execute_result", "data": { - "text/plain": "0.491869918699187" + "text/plain": [ + "0.491869918699187" + ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } ], "source": [ @@ -212,20 +362,26 @@ "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = 1 - P(Purchase|Male)$" + "text/latex": [ + "$\\displaystyle P(No\\ Purchase|Male) = 1 - P(Purchase|Male)$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "execute_result", "data": { - "text/plain": "0.508130081300813" + "text/plain": [ + "0.508130081300813" + ] }, + "execution_count": 10, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } ], "source": [ @@ -239,20 +395,26 @@ "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}$" + "text/latex": [ + "$\\displaystyle P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "execute_result", "data": { - "text/plain": "0.5678571428571428" + "text/plain": [ + "0.5678571428571428" + ] }, + "execution_count": 11, "metadata": {}, - "execution_count": 11 + "output_type": "execute_result" } ], "source": [ @@ -267,20 +429,26 @@ "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(Male|Purchase)$" + "text/latex": [ + "$\\displaystyle P(Male|Purchase)$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "execute_result", "data": { - "text/plain": "0.43214285714285716" + "text/plain": [ + "0.43214285714285716" + ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 12 + "output_type": "execute_result" } ], "source": [ @@ -296,56 +464,80 @@ }, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{121}{246} =$" + "text/latex": [ + "$\\displaystyle P(Purchase|Male) = \\frac{121}{246} =$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", - "text": "0.491869918699187\n" + "output_type": "stream", + "text": [ + "0.491869918699187\n" + ] }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = \\frac{125}{246} =$" + "text/latex": [ + "$\\displaystyle P(No\\ Purchase|Male) = \\frac{125}{246} =$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", - "text": "0.508130081300813\n" + "output_type": "stream", + "text": [ + "0.508130081300813\n" + ] }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{159}{265} =$" + "text/latex": [ + "$\\displaystyle P(Purchase|Female) = \\frac{159}{265} =$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", - "text": "0.6\n" + "output_type": "stream", + "text": [ + "0.6\n" + ] }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P(No\\ Purchase|Female) = \\frac{106}{265} =$" + "text/latex": [ + "$\\displaystyle P(No\\ Purchase|Female) = \\frac{106}{265} =$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", - "text": "0.4\n" + "output_type": "stream", + "text": [ + "0.4\n" + ] } ], "source": [ @@ -370,48 +562,68 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 14, "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre$" + "text/latex": [ + "$\\displaystyle P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer$" + "text/latex": [ + "$\\displaystyle P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle odds\\in[0,+\\infty]$" + "text/latex": [ + "$\\displaystyle odds\\in[0,+\\infty]$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}$" + "text/latex": [ + "$\\displaystyle odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}$" + "text/latex": [ + "$\\displaystyle odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -424,7 +636,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -436,16 +648,18 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "0.9680000000000002" + "text/plain": [ + "0.9680000000000002" + ] }, + "execution_count": 16, "metadata": {}, - "execution_count": 17 + "output_type": "execute_result" } ], "source": [ @@ -454,16 +668,18 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "1.4999999999999998" + "text/plain": [ + "1.4999999999999998" + ] }, + "execution_count": 17, "metadata": {}, - "execution_count": 18 + "output_type": "execute_result" } ], "source": [ @@ -481,16 +697,20 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 18, "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": "", - "text/latex": "$\\displaystyle odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}$" + "text/latex": [ + "$\\displaystyle odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}$" + ], + "text/plain": [ + "" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -499,16 +719,18 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 19, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "0.6453333333333335" + "text/plain": [ + "0.6453333333333335" + ] }, + "execution_count": 19, "metadata": {}, - "execution_count": 22 + "output_type": "execute_result" } ], "source": [ @@ -518,22 +740,140 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 20, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "1.5495867768595037" + "text/plain": [ + "1.5495867768595037" + ] }, + "execution_count": 20, "metadata": {}, - "execution_count": 23 + "output_type": "execute_result" } ], "source": [ "1 / odds_r # odds_f / odds_m" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## La regresión logística desde la regresión lineal" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle y = \\alpha + \\beta \\cdot x$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle (x,y)\\in[-\\infty, +\\infty]^2$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Ecuación de la regresión lineal\n", + "display(Math(r'y = \\alpha + \\beta \\cdot x'))\n", + "# Rango de valores de x,y (variables continuas)\n", + "display(Math(r'(x,y)\\in[-\\infty, +\\infty]^2'))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle y\\in\\{0,1\\}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle p\\in [0,1]$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle P = \\alpha + \\beta \\cdot X$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle X\\in[-\\infty, +\\infty]$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Cuando pasamos \"y\" de la regresión lineal a la logistica, \"y\" se convierte en discreta\n", + "display(Math(r'y\\in\\{0,1\\}'))\n", + "# Probabilidades que intentamos estimar de una regresión lineal\n", + "display(Math(r'p\\in [0,1]'))\n", + "# El punto de partida básico para la regresión logística\n", + "display(Math(r'P = \\alpha + \\beta \\cdot X'))\n", + "# Rango de valores X\n", + "display(Math(r'X\\in[-\\infty, +\\infty]'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "P es la probabilidad condicionada de éxito o fracaso condicionada a la presencia de la variable X" + ] + }, { "cell_type": "code", "execution_count": null, @@ -541,5 +881,26 @@ "outputs": [], "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.7.4 64-bit ('base': conda)", + "language": "python", + "name": "python37464bitbasecondaf3fc408d9ea24502888acf57a6862a45" + }, + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 3db64270958e8a1160e0aa8395c70d8cb14f3df0 Mon Sep 17 00:00:00 2001 From: Manuel Castillo <47309715+nuelcodes@users.noreply.github.com> Date: Mon, 24 Aug 2020 06:56:16 -0500 Subject: [PATCH 12/12] De la regresion lineal a la regresion logistica (Parte 2) --- ... - Logistic Regression - Matematicas.ipynb | 721 ++++++++---------- 1 file changed, 309 insertions(+), 412 deletions(-) diff --git a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb index c9c98785..fdaa6207 100644 --- a/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb +++ b/scratch/T5 - 1 - Logistic Regression - Matematicas.ipynb @@ -24,72 +24,13 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n", - "
" - ], - "text/plain": [ - " Gender Purchase\n", - "0 Female Yes\n", - "1 Female Yes\n", - "2 Female No\n", - "3 Male No\n", - "4 Male Yes" - ] - }, - "execution_count": 2, + "text/plain": " Gender Purchase\n0 Female Yes\n1 Female Yes\n2 Female No\n3 Male No\n4 Male Yes", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
GenderPurchase
0FemaleYes
1FemaleYes
2FemaleNo
3MaleNo
4MaleYes
\n
" + }, "metadata": {}, - "output_type": "execute_result" + "execution_count": 2 } ], "source": [ @@ -103,14 +44,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "(511, 2)" - ] + "text/plain": "(511, 2)" }, - "execution_count": 3, "metadata": {}, - "output_type": "execute_result" + "execution_count": 3 } ], "source": [ @@ -124,60 +63,13 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
PurchaseNoYes
Gender
Female106159
Male125121
\n", - "
" - ], - "text/plain": [ - "Purchase No Yes\n", - "Gender \n", - "Female 106 159\n", - "Male 125 121" - ] - }, - "execution_count": 4, + "text/plain": "Purchase No Yes\nGender \nFemale 106 159\nMale 125 121", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female106159
Male125121
\n
" + }, "metadata": {}, - "output_type": "execute_result" + "execution_count": 4 } ], "source": [ @@ -191,17 +83,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "Gender\n", - "Female 265\n", - "Male 246\n", - "dtype: int64" - ] + "text/plain": "Gender\nFemale 265\nMale 246\ndtype: int64" }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "execution_count": 5 } ], "source": [ @@ -214,17 +101,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "Purchase\n", - "No 231\n", - "Yes 280\n", - "dtype: int64" - ] + "text/plain": "Purchase\nNo 231\nYes 280\ndtype: int64" }, - "execution_count": 6, "metadata": {}, - "output_type": "execute_result" + "execution_count": 6 } ], "source": [ @@ -237,60 +119,13 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
PurchaseNoYes
Gender
Female40.00000060.000000
Male50.81300849.186992
\n", - "
" - ], - "text/plain": [ - "Purchase No Yes\n", - "Gender \n", - "Female 40.000000 60.000000\n", - "Male 50.813008 49.186992" - ] - }, - "execution_count": 7, + "text/plain": "Purchase No Yes\nGender \nFemale 40.000000 60.000000\nMale 50.813008 49.186992", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PurchaseNoYes
Gender
Female40.00000060.000000
Male50.81300849.186992
\n
" + }, "metadata": {}, - "output_type": "execute_result" + "execution_count": 7 } ], "source": [ @@ -329,26 +164,20 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{Numero\\ total\\ de\\ compras\\ hechas\\ por\\ hombres}{Numero\\ total\\ de\\ hombres\\ del\\ grupo} = \\frac{Purchase\\cap Male}{Male}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.491869918699187" - ] + "text/plain": "0.491869918699187" }, - "execution_count": 9, "metadata": {}, - "output_type": "execute_result" + "execution_count": 9 } ], "source": [ @@ -362,26 +191,20 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(No\\ Purchase|Male) = 1 - P(Purchase|Male)$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = 1 - P(Purchase|Male)$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.508130081300813" - ] + "text/plain": "0.508130081300813" }, - "execution_count": 10, "metadata": {}, - "output_type": "execute_result" + "execution_count": 10 } ], "source": [ @@ -395,26 +218,20 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{Numero\\ de\\ compras\\ hechas\\ por\\ mujeres}{Numero\\ total\\ de\\ compras} = \\frac{Female\\cap Purchase}{Purchase}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.5678571428571428" - ] + "text/plain": "0.5678571428571428" }, - "execution_count": 11, "metadata": {}, - "output_type": "execute_result" + "execution_count": 11 } ], "source": [ @@ -429,26 +246,20 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(Male|Purchase)$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(Male|Purchase)$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.43214285714285716" - ] + "text/plain": "0.43214285714285716" }, - "execution_count": 12, "metadata": {}, - "output_type": "execute_result" + "execution_count": 12 } ], "source": [ @@ -464,80 +275,56 @@ }, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(Purchase|Male) = \\frac{121}{246} =$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Male) = \\frac{121}{246} =$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { - "name": "stdout", "output_type": "stream", - "text": [ - "0.491869918699187\n" - ] + "name": "stdout", + "text": "0.491869918699187\n" }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(No\\ Purchase|Male) = \\frac{125}{246} =$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(No\\ Purchase|Male) = \\frac{125}{246} =$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { - "name": "stdout", "output_type": "stream", - "text": [ - "0.508130081300813\n" - ] + "name": "stdout", + "text": "0.508130081300813\n" }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(Purchase|Female) = \\frac{159}{265} =$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(Purchase|Female) = \\frac{159}{265} =$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { - "name": "stdout", "output_type": "stream", - "text": [ - "0.6\n" - ] + "name": "stdout", + "text": "0.6\n" }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P(No\\ Purchase|Female) = \\frac{106}{265} =$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P(No\\ Purchase|Female) = \\frac{106}{265} =$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { - "name": "stdout", "output_type": "stream", - "text": [ - "0.4\n" - ] + "name": "stdout", + "text": "0.4\n" } ], "source": [ @@ -566,64 +353,44 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P_m = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ un\\ hombre$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P_f = \\ probabilidad\\ de\\ hacer\\ una\\ compra\\ sabiendo\\ que\\ es\\ una\\ mujer$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle odds\\in[0,+\\infty]$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle odds\\in[0,+\\infty]$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle odds_{purchase,male} = \\frac{P_m}{1 - P_m} = \\frac{N_{p,m}}{N_{\\bar p, m}}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle odds_{purchase,female} = \\frac{P_f}{1 - P_f} = \\frac{N_{p,f}}{N_{\\bar p, f}}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ @@ -652,14 +419,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.9680000000000002" - ] + "text/plain": "0.9680000000000002" }, - "execution_count": 16, "metadata": {}, - "output_type": "execute_result" + "execution_count": 16 } ], "source": [ @@ -672,14 +437,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "1.4999999999999998" - ] + "text/plain": "1.4999999999999998" }, - "execution_count": 17, "metadata": {}, - "output_type": "execute_result" + "execution_count": 17 } ], "source": [ @@ -701,16 +464,12 @@ "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle odds_{ratio} = \\frac{odds_{purchase,male}}{odds_{purchase,female}}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ @@ -723,14 +482,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "0.6453333333333335" - ] + "text/plain": "0.6453333333333335" }, - "execution_count": 19, "metadata": {}, - "output_type": "execute_result" + "execution_count": 19 } ], "source": [ @@ -744,14 +501,12 @@ "metadata": {}, "outputs": [ { + "output_type": "execute_result", "data": { - "text/plain": [ - "1.5495867768595037" - ] + "text/plain": "1.5495867768595037" }, - "execution_count": 20, "metadata": {}, - "output_type": "execute_result" + "execution_count": 20 } ], "source": [ @@ -767,32 +522,24 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle y = \\alpha + \\beta \\cdot x$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle y = \\alpha + \\beta \\cdot x$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle (x,y)\\in[-\\infty, +\\infty]^2$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle (x,y)\\in[-\\infty, +\\infty]^2$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ @@ -804,56 +551,40 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 22, "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle y\\in\\{0,1\\}$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle y\\in\\{0,1\\}$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle p\\in [0,1]$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle p\\in [0,1]$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle P = \\alpha + \\beta \\cdot X$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle P = \\alpha + \\beta \\cdot X$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} }, { + "output_type": "display_data", "data": { - "text/latex": [ - "$\\displaystyle X\\in[-\\infty, +\\infty]$" - ], - "text/plain": [ - "" - ] + "text/plain": "", + "text/latex": "$\\displaystyle X\\in[-\\infty, +\\infty]$" }, - "metadata": {}, - "output_type": "display_data" + "metadata": {} } ], "source": [ @@ -876,10 +607,176 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle \\frac{P}{1 - P} = \\alpha + \\beta \\cdot X\\in [0,+\\infty]$" + }, + "metadata": {} + } + ], + "source": [ + "display(Math(r'\\frac{P}{1 - P} = \\alpha + \\beta \\cdot X\\in [0,+\\infty]'))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle ln(\\frac{P}{1 - P}) = \\alpha + \\beta \\cdot X$" + }, + "metadata": {} + } + ], + "source": [ + "# Logaritmo Nigeriano al lado izquierdo de la ecuación\n", + "display(Math(r'ln(\\frac{P}{1 - P}) = \\alpha + \\beta \\cdot X'))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle \\begin{cases}\\frac{P}{1 - P}\\in[0,1]\\Rightarrow ln(\\frac{P}{1 - P})\\in[-\\infty,0]\\\\\\frac{P}{1 - P}\\in[1,+\\infty]\\Rightarrow ln(\\frac{P}{1 - P})\\in[0,+\\infty]\\end{cases}$" + }, + "metadata": {} + } + ], + "source": [ + "# Establecer un rango de probabilidades\n", + "display(Math(r'\\begin{cases}\\frac{P}{1 - P}\\in[0,1]\\Rightarrow ln(\\frac{P}{1 - P})\\in[-\\infty,0]\\\\\\frac{P}{1 - P}\\in[1,+\\infty]\\Rightarrow ln(\\frac{P}{1 - P})\\in[0,+\\infty]\\end{cases}'))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle ln(\\frac{P}{1 - P}) = \\alpha + \\beta \\cdot X$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle \\frac{P}{1 - P} = e^{\\alpha + \\beta \\cdot X}$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P = \\frac{e^{\\alpha + \\beta \\cdot X}}{1 + e^{\\alpha + \\beta \\cdot X}}$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P = \\frac{1}{1 + e^{-(\\alpha + \\beta \\cdot X)}}$" + }, + "metadata": {} + } + ], + "source": [ + "# Despejo de las probabilidades (P)\n", + "display(Math(r'ln(\\frac{P}{1 - P}) = \\alpha + \\beta \\cdot X'))\n", + "display(Math(r'\\frac{P}{1 - P} = e^{\\alpha + \\beta \\cdot X}'))\n", + "display(Math(r'P = \\frac{e^{\\alpha + \\beta \\cdot X}}{1 + e^{\\alpha + \\beta \\cdot X}}'))\n", + "display(Math(r'P = \\frac{1}{1 + e^{-(\\alpha + \\beta \\cdot X)}}'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Si a+bX es muy pequeño (negativo), entonces P tiende a 0\n", + "* Si a+bX = 0, p=0.5\n", + "* Si a+bX es muy grande negativo (positivo), entonces P tiende a 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regresión logística múltiple" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P = \\frac{1}{1 + e^{-(\\alpha + \\sum_{i=1}^n\\beta_i \\cdot x_i)}}$" + }, + "metadata": {} + } + ], + "source": [ + "display(Math(r'P = \\frac{1}{1 + e^{-(\\alpha + \\sum_{i=1}^n\\beta_i \\cdot x_i)}}'))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle \\vec{\\beta} = (\\beta_1,\\beta_2,\\cdots,\\beta_n)$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle \\vec{X} = (x_1,x_2,\\cdots,x_n)$" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": "", + "text/latex": "$\\displaystyle P = \\frac{1}{1 + e^{-(\\alpha + \\beta \\cdot X)}}$" + }, + "metadata": {} + } + ], + "source": [ + "# Muchos libros utilizan la siguiente notación\n", + "display(Math(r'\\vec{\\beta} = (\\beta_1,\\beta_2,\\cdots,\\beta_n)'))\n", + "display(Math(r'\\vec{X} = (x_1,x_2,\\cdots,x_n)'))\n", + "display(Math(r'P = \\frac{1}{1 + e^{-(\\alpha + \\vec{\\beta} \\cdot \\vec{X})}}'))" + ] } ], "metadata": { @@ -898,9 +795,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.4-final" } }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file