diff --git a/.ipynb_checkpoints/Grad_School-checkpoint.ipynb b/.ipynb_checkpoints/Grad_School-checkpoint.ipynb new file mode 100644 index 0000000..89595b8 --- /dev/null +++ b/.ipynb_checkpoints/Grad_School-checkpoint.ipynb @@ -0,0 +1,598 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas.plotting import scatter_matrix\n", + "import numpy as np\n", + "from sklearn import linear_model\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.model_selection import cross_val_score\n", + "from itertools import combinations\n", + "from itertools import permutations\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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", + "
admitgregparank
003803.613
116603.673
218004.001
316403.194
405202.934
\n", + "
" + ], + "text/plain": [ + " admit gre gpa rank\n", + "0 0 380 3.61 3\n", + "1 1 660 3.67 3\n", + "2 1 800 4.00 1\n", + "3 1 640 3.19 4\n", + "4 0 520 2.93 4" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#df = pd.read_csv('mooc.csv', index_col=0)\n", + "df = pd.read_csv('grad.csv')\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 400 entries, 0 to 399\n", + "Data columns (total 4 columns):\n", + "admit 400 non-null int64\n", + "gre 400 non-null int64\n", + "gpa 400 non-null float64\n", + "rank 400 non-null int64\n", + "dtypes: float64(1), int64(3)\n", + "memory usage: 12.6 KB\n" + ] + }, + { + "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", + "
countmeanstdmin25%50%75%max
admit400.00.31750.4660870.000.000.0001.001.0
gre400.0587.7000115.516536220.00520.00580.000660.00800.0
gpa400.03.38990.3805672.263.133.3953.674.0
rank400.02.48500.9444601.002.002.0003.004.0
\n", + "
" + ], + "text/plain": [ + " count mean std min 25% 50% 75% max\n", + "admit 400.0 0.3175 0.466087 0.00 0.00 0.000 1.00 1.0\n", + "gre 400.0 587.7000 115.516536 220.00 520.00 580.000 660.00 800.0\n", + "gpa 400.0 3.3899 0.380567 2.26 3.13 3.395 3.67 4.0\n", + "rank 400.0 2.4850 0.944460 1.00 2.00 2.000 3.00 4.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.info()\n", + "df.describe().T" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# how many applicants from each rank of school were accepted.\n", + "pd.crosstab(df['admit'],df['rank'], normalize='columns')\n", + "\n", + "#pd.crosstab(df['admit'],df['rank'], normalize='index')\n", + "#pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEGCAYAAACevtWaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFQBJREFUeJzt3X+sX3Wd5/Hni/KjhiKM9LJxe5E2\nM52lxSotd5GNhOk6skvBlA0wph1dYKjTrG5HXcbN1OyEX5Ooy8Cqid2NOOtqMGNlNXFLKZAIYrKs\njr1aLJRSp6nd7deqc6komuFHW977x70y37nccs+9fO+97enzkdzwPee87+e8S8qLz/3c8yNVhSSp\nXU6Y6QYkSb1nuEtSCxnuktRChrsktZDhLkktZLhLUgsZ7pLUQoa7JLWQ4S5JLXTiTJ147ty5NX/+\n/Jk6vSQdk773ve89XVV949XNWLjPnz+fwcHBmTq9JB2TkvzfJnUuy0hSCxnuktRChrsktdCMrblL\n0kw5ePAgnU6H559/fqZbOaLZs2fT39/PSSedNKnvN9wlHXc6nQ6nnXYa8+fPJ8lMt/MKVcWBAwfo\ndDosWLBgUmO4LCPpuPP8889z5plnHpXBDpCEM8888zX9ZGG4SzouHa3B/huvtT/DXZJayDV3HdHO\ncxf1fMxFT+3s+ZjS0eqWW25hzpw5fOQjH5n2cztzl6QGqoqXXnpppttorFG4J7ksya4ku5OsH+P4\nm5J8M8m2JNuTXN77ViVpeu3du5dFixbxgQ98gGXLlrFmzRoGBgY477zzuPnmm1+umz9/PjfffDPL\nli1jyZIlPPXUU68Y63Of+xwrVqzgueeem5bexw33JLOADcAKYDGwOsniUWV/DtxTVUuBVcB/7XWj\nkjQTdu3axbXXXsu2bdu48847GRwcZPv27XzrW99i+/btL9fNnTuX73//+7z//e/njjvu+EdjfOYz\nn+Hee+/l61//Oq973eumpe8mM/cLgd1VtaeqXgQ2AleOqing9SOfTwf2965FSZo555xzDhdddBEA\n99xzD8uWLWPp0qXs2LGDJ5988uW6q666CoALLriAvXv3vrz/7rvv5v777+drX/sap5xyyrT13STc\n5wH7urY7I/u63QK8N0kH2AL8SU+6k6QZduqppwLwox/9iDvuuIOHHnqI7du3c8UVV/yj69B/E9yz\n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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make a bar plot of the percent of applicants from each rank who were accepted. \n", + "dfct = pd.crosstab(df['admit'],df['rank'], normalize='columns')\n", + "dfct.plot.bar()\n", + "\n", + "#df2.plot(kind=\"bar\", figsize=(12,12),use_index=True)\n", + "#df[['admit','rank']].plot(kind=\"bar\")\n", + "#dfct.plot.bar(); plt.axhline(0, color='k')\n", + "#DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[,\n", + " ],\n", + " [,\n", + " ]], dtype=object)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nxr/aWglluAbxdQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# What does the distribution of the GPA and GRE scores look like? Do the distributions differ much?\n", + "df.hist(figsize=(12,7))\n", + "\n", + "#Very similar, except for large spike in gpa towards a 4.0." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.3175" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What percentage of the data was admitted? Do you think this will be a problem?\n", + "df.loc[df['admit'] == 1,'admit'].count() / df.admit.count()\n", + "# " + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "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", + "
AccuracyCoefColumns
40.717079[[0.582042079324, -0.615856478477]]gpa, rank
60.702073[[0.319297035401, 0.00188725540496, -0.605383852449]]gpa, gre, rank
50.699762[[0.00228116386246, -0.611731663545]]gre, rank
00.682570[[0.4034918775]]gpa
10.682570[[0.00234883628163]]gre
30.682570[[0.0144050758336, 0.00211962492503]]gpa, gre
20.659994[[-0.557887607601]]rank
\n", + "
" + ], + "text/plain": [ + " Accuracy Coef \\\n", + "4 0.717079 [[0.582042079324, -0.615856478477]] \n", + "6 0.702073 [[0.319297035401, 0.00188725540496, -0.605383852449]] \n", + "5 0.699762 [[0.00228116386246, -0.611731663545]] \n", + "0 0.682570 [[0.4034918775]] \n", + "1 0.682570 [[0.00234883628163]] \n", + "3 0.682570 [[0.0144050758336, 0.00211962492503]] \n", + "2 0.659994 [[-0.557887607601]] \n", + "\n", + " Columns \n", + "4 gpa, rank \n", + "6 gpa, gre, rank \n", + "5 gre, rank \n", + "0 gpa \n", + "1 gre \n", + "3 gpa, gre \n", + "2 rank " + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dffinal = df\n", + "rows = []\n", + "y = dffinal.admit\n", + "flist = ['gpa','gre','rank']\n", + "for i in range(1,len(flist)+1):\n", + " combos = list(combinations(flist,i))\n", + " for j,com in enumerate(combos):\n", + " X = pd.DataFrame(dffinal, columns=com)\n", + " model = LogisticRegression(fit_intercept=True)\n", + " #model = LogisticRegression()\n", + " accuracy = cross_val_score(model, X, y, cv=10, scoring='accuracy').mean()\n", + " s = ', '.join(com)\n", + " rows.append({'Accuracy':accuracy,'Columns':s, 'Coef': model.fit(X, y).coef_})\n", + "dfresult = pd.DataFrame(rows)\n", + "pd.options.display.max_colwidth = 100\n", + "dfresult.sort_values('Accuracy',ascending=False)\n", + "# Accuracy = (True Neg + True Pos) / All (True Neg, True Pos, False Neg, False Pos)\n", + "# or (TN+TP) / (TN+TP+FN+FP)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "# Add the best features to the below to calc confusion matrix on entire dataset\n", + "y = df.admit\n", + "X = df[['gpa','rank']]" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m1 = LogisticRegression().fit(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "y_hat = m1.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([90, 0, 32, 10], dtype=int64)" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "confusion_matrix(y_test,y_hat).ravel()" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy : 0.757575757576\n", + "Recall : 0.238095238095\n", + "Precision : 1.0\n" + ] + } + ], + "source": [ + "TN,FP,FN,TP = confusion_matrix(y_test,y_hat).ravel()\n", + "TOTAL = TP + TN + FP + FN\n", + "acc = (TP + TN) / TOTAL\n", + "recall = TP / (TP + FN)\n", + "precision = TP / (TP + FP)\n", + "print (\"Accuracy :\",acc)\n", + "print (\"Recall :\", recall)\n", + "print (\"Precision :\", precision)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Grad_School.ipynb b/Grad_School.ipynb new file mode 100644 index 0000000..89595b8 --- /dev/null +++ b/Grad_School.ipynb @@ -0,0 +1,598 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas.plotting import scatter_matrix\n", + "import numpy as np\n", + "from sklearn import linear_model\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.model_selection import cross_val_score\n", + "from itertools import combinations\n", + "from itertools import permutations\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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", + "
admitgregparank
003803.613
116603.673
218004.001
316403.194
405202.934
\n", + "
" + ], + "text/plain": [ + " admit gre gpa rank\n", + "0 0 380 3.61 3\n", + "1 1 660 3.67 3\n", + "2 1 800 4.00 1\n", + "3 1 640 3.19 4\n", + "4 0 520 2.93 4" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#df = pd.read_csv('mooc.csv', index_col=0)\n", + "df = pd.read_csv('grad.csv')\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 400 entries, 0 to 399\n", + "Data columns (total 4 columns):\n", + "admit 400 non-null int64\n", + "gre 400 non-null int64\n", + "gpa 400 non-null float64\n", + "rank 400 non-null int64\n", + "dtypes: float64(1), int64(3)\n", + "memory usage: 12.6 KB\n" + ] + }, + { + "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", + "
countmeanstdmin25%50%75%max
admit400.00.31750.4660870.000.000.0001.001.0
gre400.0587.7000115.516536220.00520.00580.000660.00800.0
gpa400.03.38990.3805672.263.133.3953.674.0
rank400.02.48500.9444601.002.002.0003.004.0
\n", + "
" + ], + "text/plain": [ + " count mean std min 25% 50% 75% max\n", + "admit 400.0 0.3175 0.466087 0.00 0.00 0.000 1.00 1.0\n", + "gre 400.0 587.7000 115.516536 220.00 520.00 580.000 660.00 800.0\n", + "gpa 400.0 3.3899 0.380567 2.26 3.13 3.395 3.67 4.0\n", + "rank 400.0 2.4850 0.944460 1.00 2.00 2.000 3.00 4.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.info()\n", + "df.describe().T" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# how many applicants from each rank of school were accepted.\n", + "pd.crosstab(df['admit'],df['rank'], normalize='columns')\n", + "\n", + "#pd.crosstab(df['admit'],df['rank'], normalize='index')\n", + "#pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEGCAYAAACevtWaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFQBJREFUeJzt3X+sX3Wd5/Hni/KjhiKM9LJxe5E2\nM52lxSotd5GNhOk6skvBlA0wph1dYKjTrG5HXcbN1OyEX5Ooy8Cqid2NOOtqMGNlNXFLKZAIYrKs\njr1aLJRSp6nd7deqc6komuFHW977x70y37nccs+9fO+97enzkdzwPee87+e8S8qLz/3c8yNVhSSp\nXU6Y6QYkSb1nuEtSCxnuktRChrsktZDhLkktZLhLUgsZ7pLUQoa7JLWQ4S5JLXTiTJ147ty5NX/+\n/Jk6vSQdk773ve89XVV949XNWLjPnz+fwcHBmTq9JB2TkvzfJnUuy0hSCxnuktRChrsktdCMrblL\n0kw5ePAgnU6H559/fqZbOaLZs2fT39/PSSedNKnvN9wlHXc6nQ6nnXYa8+fPJ8lMt/MKVcWBAwfo\ndDosWLBgUmO4LCPpuPP8889z5plnHpXBDpCEM8888zX9ZGG4SzouHa3B/huvtT/DXZJayDV3HdHO\ncxf1fMxFT+3s+ZjS0eqWW25hzpw5fOQjH5n2cztzl6QGqoqXXnpppttorFG4J7ksya4ku5OsH+P4\nm5J8M8m2JNuTXN77ViVpeu3du5dFixbxgQ98gGXLlrFmzRoGBgY477zzuPnmm1+umz9/PjfffDPL\nli1jyZIlPPXUU68Y63Of+xwrVqzgueeem5bexw33JLOADcAKYDGwOsniUWV/DtxTVUuBVcB/7XWj\nkjQTdu3axbXXXsu2bdu48847GRwcZPv27XzrW99i+/btL9fNnTuX73//+7z//e/njjvu+EdjfOYz\nn+Hee+/l61//Oq973eumpe8mM/cLgd1VtaeqXgQ2AleOqing9SOfTwf2965FSZo555xzDhdddBEA\n99xzD8uWLWPp0qXs2LGDJ5988uW6q666CoALLriAvXv3vrz/7rvv5v777+drX/sap5xyyrT13STc\n5wH7urY7I/u63QK8N0kH2AL8SU+6k6QZduqppwLwox/9iDvuuIOHHnqI7du3c8UVV/yj69B/E9yz\n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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make a bar plot of the percent of applicants from each rank who were accepted. \n", + "dfct = pd.crosstab(df['admit'],df['rank'], normalize='columns')\n", + "dfct.plot.bar()\n", + "\n", + "#df2.plot(kind=\"bar\", figsize=(12,12),use_index=True)\n", + "#df[['admit','rank']].plot(kind=\"bar\")\n", + "#dfct.plot.bar(); plt.axhline(0, color='k')\n", + "#DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[,\n", + " ],\n", + " [,\n", + " ]], dtype=object)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAGrCAYAAAAy4QohAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xu0ZHV95/33JyCKDYabnvQAsckM\nY2LsqHgWIXFN5ii5tOIIzgNZOEQbh0xPMmo09kxsnXliMhnXkEyIt0xM2oC0E+Qi0YFRY2QIZ3xM\ntFUQbS4qLXagpaVNBLTVQQ9+nz9qtymKc6lzTtWuqsP7tVavU7Xrt2t/9j777Pr2rt/+7VQVkiRJ\nkv7BD4w6gCRJkjRuLJIlSZKkHhbJkiRJUg+LZEmSJKmHRbIkSZLUwyJZkiRJ6mGRrImTZEOSSnLo\nCuc/kORHBp1LkiStHSsqMqRJVlVHHHyc5FJgb1X9p9ElkiRJ48YzyZIkSVIPi2SNjSTbknwxyTeS\n3JbkRc30Q5L8fpK/S3IncEbPfLNJ/kuSv2m6UvyvJMcmuSzJ15N8MsmGrvaV5J8k2QKcB/zGwfla\nXF1JUiPJKUk+3Rz/35Pkyua4PpNkb5LXN58Be5Kc1zXfGc18X09yd5LfGuFqaI2xSNY4+SLwz4Af\nBH4b+LMk64F/A7wAeCYwDZw9z7znAi8Bjgf+MfAx4J3AMcDtwBt6Z6iq7cBlwO9V1RFV9S8GvUKS\npMUlOQx4H3ApnWP25cCLupr8EHAcneP7ZmB7kqc0r30TeClwFJ0TKL+a5Kx2kmuts0jW2Kiq91TV\nPVX1vaq6ErgDOBX4ReDNVXV3VX0N+K/zzP7OqvpiVT0A/AXwxar631U1B7yHToEtSRo/p9G5Ruqt\nVfXdqnov8ImeNv9vVT1YVf8H+ACdzwWqaraqdjWfG5+lU2D/8zbDa+2ySNbYSPLSJDcnuT/J/cDT\n6Jw9+EfA3V1N/3ae2e/tevzteZ4fgSRpHP0j4MtVVV3Tuo/591XVN7ue/20zD0l+MskNSb6a5AHg\nV+h8bkirZpGssZDkycA7gFcAx1bVUcAtQIB9wIldzX94gIuupZtIkoZoH3B8knRN6z7mH51kXdfz\nHwbuaR6/G7gWOLGqfhD4YzqfG9KqWSRrXKyjU7B+FSDJy+icSQa4Cvi1JCckORrYNsDl3gs4ZrIk\njc7HgIeAVyQ5NMmZdLradfvtJIcl+Wd0rlF5TzP9SOBrVfV/k5wK/KvWUmvNs0jWWKiq24CL6Bws\n7wU2An/dvPwO4C+BzwA3Ae8d4KIvBp7adPH4nwN8X0lSH6rqO8C/BC4A7gd+CXg/8GDT5CvAfXTO\nHl8G/EpVfa557d8B/znJN4DfpHNSRRqIPLwLkCRJ0mgl2Umn68SXgD+rqhNGHEmPQp5JliRJI5Xk\nnyf5oaa7xWbgJ4APjTqXHt0skiVJi0ry60luTXJLksuTPC7JSUl2JrmjufHDYaPOqYn2FDpd6h4A\ntgJnV9W+0UbSo53dLSRJC0pyPPBR4KlV9e0kVwEfBJ4PvLeqrkjyx8Bnqurto8wqSYPkmWRJ0lIO\nBQ5PcijweDpDdj0XuLp5fQfgXc4krSmHjjoAwHHHHVcbNmxY1jzf/OY3Wbdu3dINJ4jrNBlcp8mw\nknW68cYb/66qnjikSBOpqr6c5PeBu+jcmOfDwI3A/c0dLQH20rll8CMk2QJsATj88MOfdeKJJ87X\n7BG+973v8QM/MH7nccy1POZavnHNtpZyfeELX+jvWF9VI//3rGc9q5brhhtuWPY84851mgyu02RY\nyToBn6oxOCaO0z/gaOCvgCcCjwH+J/ASYHdXmxOBXUu913KO9eO6T5precy1fOOabS3l6vdYP37/\nJZAkjZOfBb5UVV+tqu/SGaf8p4Gjmu4XACfwD3dAk6Q1wSJZkrSYu4DTkjy+uW3w6cBtwA3A2U2b\nzcA1I8onSUNhkSxJWlBV7aRzgd5NwC46nxvbgdcCr0myGziWzt0rJWnNGIsL9yRJ46uq3gC8oWfy\nncCpI4gjSa3wTLIkSZLUwyJZkiRJ6jGx3S12ffkBzt/2gVaWtefCM1pZjiRJGg8brDEe9TyTLEmS\nJPWwSJYkSZJ6WCRLkiRJPSySJUmSpB4WyZIkSVIPi2RJkiSph0WyJEmS1MMiWZIkSephkSxJkiT1\nWLJITnJikhuS3J7k1iSvaqb/VpIvJ7m5+ff8rnlel2R3ks8n+YVhroAkaXiSPKXrOH9zkq8neXWS\nY5Jcl+SO5ufRo84qSYPUz5nkOWBrVf0YcBrw8iRPbV57U1U9o/n3QYDmtXOBHwc2AX+U5JAhZJck\nDVlVff7gcR54FvAt4H3ANuD6qjoZuL55LklrxpJFclXtq6qbmsffAG4Hjl9kljOBK6rqwar6ErAb\nOHUQYSVJI3U68MWq+ls6x/odzfQdwFkjSyVJQ5Cq6r9xsgH4CPA04DXA+cDXgU/ROdt8X5I/BD5e\nVX/WzHMx8BdVdXXPe20BtgBMTU0964orrlhW8P1fe4B7v72sWVZs4/E/2MpyDhw4wBFHHNHKstri\nOk0G16njOc95zo1VNT2kSBMvySXATVX1h0nur6qjul67r6oe0eVipcf6cd0nzbU8k5xr15cfaCVL\nb40xydtsFIZ5rD+03zdMcgTw58Crq+rrSd4O/A5Qzc+LgH8NZJ7ZH1GJV9V2YDvA9PR0zczM9BsF\ngLdddg0X7eo7/qrsOW+mleXMzs6y3O0w7lynyeA6aSlJDgNeCLxuOfOt9Fg/rr8/cy3PJOc6f9sH\nWsnSW2NM8jYbhWHm6mt0iySPoVMgX1ZV7wWoqnur6qGq+h7wDv6hS8Ve4MSu2U8A7hlcZEnSCDyP\nzlnke5vn9yZZD9D83D+yZJI0BP2MbhHgYuD2qvqDrunru5q9CLileXwtcG6SxyY5CTgZ+MTgIkuS\nRuDFwOVdz68FNjePNwPXtJ5Ikoaon/4KzwZeAuxKcnMz7fXAi5M8g05Xij3AvwWoqluTXAXcRmdk\njJdX1UODDi5JakeSxwM/R3Ocb1wIXJXkAuAu4JxRZJOkYVmySK6qjzJ/P+MPLjLPG4E3riKXJGlM\nVNW3gGN7pv09ndEuJGlN8o57kiRJUg+LZEmSJKlHO2OoSZIk6RE29Aw1t3Xj3NCGn9tz4RlDed+1\nyjPJkiRJUg+LZEmSJKmHRbIkSZLUwyJZkiRJ6mGRLEmSJPVwdAtJkiQNTO+IHcN06aZ1Q3tvzyRL\nkiRJPSySJUmSpB4WyZKkRSU5KsnVST6X5PYkP5XkmCTXJbmj+Xn0qHNK0iBZJEuSlvIW4ENV9aPA\n04HbgW3A9VV1MnB981yS1gyLZEnSgpI8AfgZ4GKAqvpOVd0PnAnsaJrtAM4aTUJJGg5Ht5AkLeZH\ngK8C70zydOBG4FXAVFXtA6iqfUmeNN/MSbYAWwCmpqaYnZ3ta6EHDhzou22bzLU8k5xr68a5dsL0\nmDp8eMteze9iOb/LNrfdMPcxi2RJ0mIOBU4BXllVO5O8hWV0raiq7cB2gOnp6ZqZmelrvtnZWfpt\n2yZzLc8k5zq/xWHMum3dOMdFu4ZTnu05b2bF8y7nd9nmtrt007qh7WN2t5AkLWYvsLeqdjbPr6ZT\nNN+bZD1A83P/iPJJ0lBYJEuSFlRVXwHuTvKUZtLpwG3AtcDmZtpm4JoRxJOkobG7hSRpKa8ELkty\nGHAn8DI6J1muSnIBcBdwzgjzSdLAWSRLkhZVVTcD0/O8dHrbWSSpLUt2t0hyYpIbmgHkb03yqmb6\nvAPJp+OtSXYn+WySU4a9EpIkSdIg9XMmeQ7YWlU3JTkSuDHJdcD5dAaSvzDJNjpXO78WeB5wcvPv\nJ4G3Nz8lSZJWbMOARk3YunFuZKNXaHIseSa5qvZV1U3N42/QudPS8Sw8kPyZwLuq4+PAUQevgJYk\nSZImwbL6JCfZADwT2MnCA8kfD9zdNdveZtq+nvda0QDzBw1zsO1ebQ2EPq6Drq+G6zQZXCdJkh6u\n7yI5yRHAnwOvrqqvJ1mw6TzT6hETVjjA/EFvu+yaoQ223Ws1g28vx7gOur4artNkcJ0kSXq4vsZJ\nTvIYOgXyZVX13mbyQgPJ7wVO7Jr9BOCewcSVJEmShq+f0S0CXAzcXlV/0PXSQgPJXwu8tBnl4jTg\ngYPdMiRJkqRJ0E9/hWcDLwF2Jbm5mfZ64ELmH0j+g8Dzgd3At+gMOi9JkiRNjCWL5Kr6KPP3M4Z5\nBpKvqgJevspckiRJ0sj01SdZkiRJejSxSJYkSZJ6WCRLkiRJPdoZaFiSNLGS7AG+ATwEzFXVdJJj\ngCuBDcAe4Ber6r5RZZSkQfNMsiSpH8+pqmdU1XTzfBtwfVWdDFzfPJekNcMiWZK0EmcCO5rHO4Cz\nRphFkgbO7haSpKUU8OEkBfxJVW0Hpg7eKKqq9iV50nwzJtkCbAGYmppidna2rwUeOHCg77ZtMtfy\nDDrX1o1zA3mfqcMH916DNsxsq/ldLOd32ea2Hea+b5EsSVrKs6vqnqYQvi7J5/qdsSmotwNMT0/X\nzMxMX/PNzs7Sb9s2mWt5Bp3r/G0fGMj7bN04x0W7xrMEGma2PefNrHje5fwuB/V76selm9YNbd+3\nu4UkaVFVdU/zcz/wPuBU4N4k6wGan/tHl1CSBs8iWZK0oCTrkhx58DHw88AtwLXA5qbZZuCa0SSU\npOEYz+8aJEnjYgp4XxLofGa8u6o+lOSTwFVJLgDuAs4ZYUZJGjiLZEnSgqrqTuDp80z/e+D09hNJ\nUjvsbiFJkiT1sEiWJEmSelgkS5IkST0skiVJkqQeFsmSJElSD4tkSZIkqYdFsiRJktTDIlmSJEnq\nsWSRnOSSJPuT3NI17beSfDnJzc2/53e99roku5N8PskvDCu4JEmSNCz9nEm+FNg0z/Q3VdUzmn8f\nBEjyVOBc4Mebef4oySGDCitJkiS1Yckiuao+Anytz/c7E7iiqh6sqi8Bu4FTV5FPkiRJat2hq5j3\nFUleCnwK2FpV9wHHAx/varO3mfYISbYAWwCmpqaYnZ1d1sKnDoetG+dWEHv5lpttpQ4cONDastri\nOk0G10nSamzY9oF5p2/dOMf5C7wmjbuVFslvB34HqObnRcC/BjJP25rvDapqO7AdYHp6umZmZpYV\n4G2XXcNFu1ZT4/dvz3kzrSxndnaW5W6Hcec6TQbXSUtpus59CvhyVb0gyUnAFcAxwE3AS6rqO6PM\nKEmDtKLRLarq3qp6qKq+B7yDf+hSsRc4savpCcA9q4soSRoDrwJu73r+u3SuTTkZuA+4YCSpJGlI\nVlQkJ1nf9fRFwMGRL64Fzk3y2OYsw8nAJ1YXUZI0SklOAM4A/rR5HuC5wNVNkx3AWaNJJ0nDsWR/\nhSSXAzPAcUn2Am8AZpI8g05Xij3AvwWoqluTXAXcBswBL6+qh4YTXZLUkjcDvwEc2Tw/Fri/qg5e\nGDLw60/GtU+5uea30DVCbV4/tBzjmguGm201+8hy9rE2t+0w9/0li+SqevE8ky9epP0bgTeuJpQk\naTwkeQGwv6puTDJzcPI8TQd6/cm49ik31/wWujhv68a51q4fWo5xzQXDzbaaa6yWs4+1ebHmpZvW\nDW3fH889RJI0Lp4NvLC5adTjgCfQObN8VJJDm7PJXn8iTYCFRiHpx6NxpBJvSy1JWlBVva6qTqiq\nDXRuFvVXVXUecANwdtNsM3DNiCJK0lBYJEuSVuK1wGuS7KbTR3nBbniSNInsbiFJ6ktVzQKzzeM7\n8Y6qktYwzyRLkiRJPSySJUmSpB4WyZIkSVIP+yRLatVqhiBajks3rWtlOZKktckzyZIkSVIPi2RJ\nkiSph90tJElag9rq2iStVZ5JliRJknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEnSgpI8Lsknknwm\nya1JfruZflKSnUnuSHJlksNGnVWSBskiWZK0mAeB51bV04FnAJuSnAb8LvCmqjoZuA+4YIQZJWng\nLJIlSQuqjgPN08c0/wp4LnB1M30HcNYI4knS0FgkS5IWleSQJDcD+4HrgC8C91fVXNNkL3D8qPJJ\n0jB4MxFJ0qKq6iHgGUmOAt4H/Nh8zeabN8kWYAvA1NQUs7OzfS3zwIEDfbdt0yTl2rpxbv7GLZo6\nfDxy9BrXXDC+2cY11zD/JpcskpNcArwA2F9VT2umHQNcCWwA9gC/WFX3JQnwFuD5wLeA86vqpqEk\nlyS1qqruTzILnAYcleTQ5mzyCcA9C8yzHdgOMD09XTMzM30ta3Z2ln7btmmScp0/Bnfc27pxjot2\njd/5uHHNBeObbVxzXbpp3dD+JvvpbnEpsKln2jbg+uaCjeub5wDPA05u/m0B3j6YmJKkUUjyxOYM\nMkkOB34WuB24ATi7abYZuGY0CSVpOJYskqvqI8DXeiafSedCDXj4BRtnAu9qLvT4OJ0zDesHFVaS\n1Lr1wA1JPgt8Eriuqt4PvBZ4TZLdwLHAxSPMKEkDt9Lz5lNVtQ+gqvYleVIz/Xjg7q52By/m2Nf7\nBivtp/b9AC32jWmr/9m49nVbDddpMrS5Tm393a7F39MoVNVngWfOM/1O4NT2E0lSOwbduSTzTJv3\nYo6V9lM76G2XXdNa35g95820spxx7eu2Gq7TZGhzndrqJznMfmqSpLVvpUPA3XuwG0Xzc38zfS9w\nYle7BS/mkCRJksbVSovka+lcqAEPv2DjWuCl6TgNeOBgtwxJkiRpUvQzBNzlwAxwXJK9wBuAC4Gr\nklwA3AWc0zT/IJ3h33bTGQLuZUPILEmSJA3VkkVyVb14gZdOn6dtAS9fbShJkiRplLwttSRJktTD\nIlmSJEnqYZEsSZIk9bBIliRJknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEnSgpKcmOSGJLcnuTXJ\nq5rpxyS5Lskdzc+jR51VkgbJIlmStJg5YGtV/RhwGvDyJE8FtgHXV9XJwPXNc0laMyySJUkLqqp9\nVXVT8/gbwO3A8cCZwI6m2Q7grNEklKThWPK21JIkASTZADwT2AlMVdU+6BTSSZ60wDxbgC0AU1NT\nzM7O9rWsAwcO9N22TZOUa+vGudGE6TJ1+Hjk6DWuuWB8s41rrmH+TVokS5KWlOQI4M+BV1fV15P0\nNV9VbQe2A0xPT9fMzExf883OztJv2zZNUq7zt31gNGG6bN04x0W7xq/UGNdcML7ZxjXXpZvWDe1v\n0u4WkqRFJXkMnQL5sqp6bzP53iTrm9fXA/tHlU+ShsEiWZK0oHROGV8M3F5Vf9D10rXA5ubxZuCa\ntrNJ0jCN33lzSdI4eTbwEmBXkpubaa8HLgSuSnIBcBdwzojySdJQWCRLkhZUVR8FFuqAfHqbWSSp\nTXa3kCRJknpYJEuSJEk9LJIlSZKkHvZJliSpRRuGMH7x1o1zYzEusrSWrKpITrIH+AbwEDBXVdNJ\njgGuBDYAe4BfrKr7VhdTkiRJas8guls8p6qeUVXTzfNtwPVVdTJwffNckiRJmhjD6JN8JrCjebwD\nOGsIy5AkSZKGZrV9kgv4cJIC/qSqtgNTVbUPoKr2JXnSfDMm2QJsAZiammJ2dnZZC546vNMHqw3L\nzbZSBw4caG1ZbXGdJkOb69TW3+1a/D1Jktqz2iL52VV1T1MIX5fkc/3O2BTU2wGmp6drZmZmWQt+\n22XXcNGudq473HPeTCvLmZ2dZbnbYdy5TpOhzXVq6+KiSzetW3O/J0lSe1bV3aKq7ml+7gfeB5wK\n3JtkPUDzc/9qQ0qSJEltWnGRnGRdkiMPPgZ+HrgFuBbY3DTbDFyz2pCSJElSm1bTX2EKeF+Sg+/z\n7qr6UJJPAlcluQC4Czhn9TElSZKk9qy4SK6qO4GnzzP974HTVxNKkjQeklwCvADYX1VPa6Y5Hr6k\nNc/bUkuSFnMpsKlnmuPhS1rzLJIlSQuqqo8AX+uZ7Hj4kta8dsZQkyStJX2Nhw8rHxN/XMe5HkSu\nYYwV3ua9A5bDXMs3rtnGNdcwjxUWyZKkoVnpmPjjOh75IHINY6zwrRvnWrt3wHKYa/nGNdu45hrm\nmPh2t5AkLZfj4Uta8yySJUnL5Xj4ktY8i2RJ0oKSXA58DHhKkr3NGPgXAj+X5A7g55rnkrSmjF/n\nEknS2KiqFy/wkuPhS1rTPJMsSZIk9bBIliRJknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEmSJKmH\nQ8BJkh71NvR5q+itG+eGcltpSePHM8mSJElSD4tkSZIkqYfdLSRJY6vfbhCSNGieSZYkSZJ6WCRL\nkiRJPYZWJCfZlOTzSXYn2Tas5UiSRsPjvKS1bChFcpJDgP8OPA94KvDiJE8dxrIkSe3zOC9prRvW\nmeRTgd1VdWdVfQe4AjhzSMuSJLXP47ykNS1VNfg3Tc4GNlXVLzfPXwL8ZFW9oqvNFmBL8/QpwOeX\nuZjjgL8bQNxx4jpNBtdpMqxknZ5cVU8cRpi1pp/jfDN9pcf6cd0nzbU85lq+cc22lnL1dawf1hBw\nmWfaw6rxqtoObF/xApJPVdX0SucfR67TZHCdJsNaXKcxs+RxHlZ+rB/X35+5lsdcyzeu2R6NuYbV\n3WIvcGLX8xOAe4a0LElS+zzOS1rThlUkfxI4OclJSQ4DzgWuHdKyJEnt8zgvaU0bSneLqppL8grg\nL4FDgEuq6tYBL2bFXTXGmOs0GVynybAW12lstHCcH9ffn7mWx1zLN67ZHnW5hnLhniRJkjTJvOOe\nJEmS1MMiWZIkSeox9kXyUrc9TfLYJFc2r+9MsqH9lMvTxzq9JsltST6b5PokTx5FzuXo9/a0Sc5O\nUknGbhiZXv2sU5JfbH5XtyZ5d9sZl6uPfe+Hk9yQ5NPN/vf8UeTsV5JLkuxPcssCryfJW5v1/WyS\nU9rOqIdLcmKzj93e/N28ap425zW/r88m+ZskT+96bU+SXUluTvKplnPNJHmgWfbNSX6z67Wh3KK7\nz1z/oSvTLUkeSnJM89qwttfjknwiyWeaXL89T5sFP5+TvK6Z/vkkv9ByrgU/Y5ttd3BbDuxC1D5z\nnZ/kq13L/+Wu1zYnuaP5t7nlXG/qyvSFJPd3vTaU7dX1/oc0n0fvn+e14e9fVTW2/+hcDPJF4EeA\nw4DPAE/tafPvgD9uHp8LXDnq3ANYp+cAj28e/+paWKem3ZHAR4CPA9Ojzj2A39PJwKeBo5vnTxp1\n7gGs03bgV5vHTwX2jDr3Euv0M8ApwC0LvP584C/ojOl7GrBz1Jkf7f+A9cApzeMjgS/Msx/+dNff\n1fO6f2/AHuC4EeWaAd4/z7x9HQOHlaun/b8A/qqF7RXgiObxY4CdwGk9beb9fG6OLZ8BHguc1Gy7\nQ1rMteBnLHBg0NtqGbnOB/5wnnmPAe5sfh7dPD66rVw97V9J5yLdoW6vrvd/DfDuBf7uhr5/jfuZ\n5H5ue3omsKN5fDVwepL5BrkfF0uuU1XdUFXfap5+nM74o+Os39vT/g7we8D/bTPcCvWzTv8G+O9V\ndR9AVe1vOeNy9bNOBTyhefyDjPm4t1X1EeBrizQ5E3hXdXwcOCrJ+nbSaT5Vta+qbmoefwO4HTi+\np83fHPy7oqVjYD+5FjG0W3SvINeLgcsHsewlclVVHWiePqb51zsSwEKfz2cCV1TVg1X1JWA3nW3Y\nSq5RfMb2ub0W8gvAdVX1tebv4jpg04hytbJ/ASQ5ATgD+NMFmgx9/xr3Ivl44O6u53t55MHh+22q\nag54ADi2lXQr0886dbuAzpmwcbbkOiV5JnBiVT3iK5Mx1c/v6Z8C/zTJXyf5eJKBHLSGqJ91+i3g\nl5LsBT5I56zBJFvu35ta1Hw9+kw6Z68W0nsMLODDSW5M55bXbef6qear6b9I8uPNtFb2s6W2V5LH\n0yme/rxr8tC2V/NV+M3AfjpFXG+uhT6fh7q9+sjVrXf/elySTzXH9LMGlWkZuf6fphvI1UkO3qxn\nLLZX0y3lJOCvuiYPbXsBbwZ+A/jeAq8Pff8a9yK5n9ue9nVr1DHSd94kvwRMA/9tqIlWb9F1SvID\nwJuAra0lWr1+fk+H0ulyMUPnf9d/muSoIedajX7W6cXApVV1Ap2uCv+j+f1Nqkk7PjxqJDmCTjH3\n6qr6+gJtnkOniHlt1+RnV9UpdLphvDzJz7SY6ybgyVX1dOBtwP88ONs8bzXQ/ayf7UWnq8VfV1X3\ntytD215V9VBVPYPOmdhTkzytN/Z8sy0yva1cnXDzf8b+cHVucfyvgDcn+cct5vpfwIaq+gngf/MP\nZ0nHYnvR6dJwdVU91DVtKNsryQuA/VV142LN5pk20P1r3D/8+rnt6ffbJDmUzlfEi339Omp93co1\nyc8C/xF4YVU92FK2lVpqnY4EngbMJtlDp2/otRnvi/f63feuqarvNl/pfJ5O0Tyu+lmnC4CrAKrq\nY8DjgONaSTcc3jp5DCV5DJ2C77Kqeu8CbX6CztesZ1bV3x+cXlX3ND/3A+9jQF/T95Orqr5+8Kvp\nqvog8JgkxzHk/ayf7dU4l56vwoe5vbqWcT8wyyO7ACz0+dzK3+UiuRb8jO3aXnc28z6zrVxV9fdd\nWd4BPKt5PPLt1Vhs/xr09no28MKmZrgCeG6SP+tpM/z9q5+Oy6P6R+dM3Z10Tu8fvBjix3vavJyH\nd9y+atS5B7BOz6TT0fzkUecd1Dr1tJ9l/C/c6+f3tAnY0Tw+js7XO8eOOvsq1+kvgPObxz/WHFgy\n6uxLrNcGFr5w7wwefuHeJ0ad99H+r/ldvAt48yJtfphOP8Kf7pm+Djiy6/HfAJtazPVDB/8e6BSb\ndzXzLesYOOhcTbuDBcK6lrbXE4GjmseHA/8f8IKeNvN+PgM/zsMvrLqTwV2410+ueT9j6VwU99jm\n8XHAHQzuAsx+cq3vevwi4OPN42OALzX5jm4eH9NWrua1p9C5CDRd04a2vXqWPcP8F+4Nff8aym2p\nB6UWuO1pkv8MfKqqrgUupvOV8G46B4hzR5d4aX2u038DjgDe01yDeFdVvXBkoZfQ5zpNlD7X6S+B\nn09yG/AQ8B+q64zXuOlznbYC70jy63S+njq/mqPOOEpyOZ0D6HFNP+o30LnwhKr6Yzr9qp9Pp+D6\nFvCy0SRVl2cDLwF2Nf0gAV6G7mTwAAAeo0lEQVRPpzA++Hv7TTp9C/+oOQbOVecr3Sngfc20Q4F3\nV9WHWsx1NvCrSeaAbwPnNn8fw7xFdz+5oFNUfbiqvtk17zC313pgR5JD6HwrfVVVvb+fz+fmuHMV\ncBswB7y8Hv4V/rBzLfQZ+2PAnyT5XjPvhVV1W4u5fi3JC+lsk6/RGe2Cqvpakt8BPtm813+uh3ep\nGXYu6HTFu6Ln82CY22tebe9f3pZakiRJ6jHufZIlSZKk1lkkS5IkST0skiVJkqQeFsmSJElSD4tk\nSZIkqYdFsiRJktTDIlmSJEnqYZEsSZIk9bBIliRJknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEmS\nJKmHRbIkSZLUwyJZkiRJ6mGRLEmSJPWwSJYkSZJ6WCRLkqSJl2Q2yS+POofWDotkSZIkqYdFstaU\nJIeOOoMkafk8fmvcWCRrIiQ5Jcmnk3wjyXuSXJnkvySZSbI3yWuTfAV4Z9P+BUluTnJ/kr9J8hMj\nXgVJUo8ke5rj92eBbyb5T0m+2Bzrb0vyoq625yf5aJLfT3Jfki8led4C77s+yWeT/PvWVkZrjkWy\nxl6Sw4D3AZcCxwCXAy/qavJDzfQnA1uSnAJcAvxb4FjgT4Brkzy2xdiSpP68GDgDOAr4PPDPgB8E\nfhv4syTru9r+ZNPmOOD3gIuTpPvNkmwA/g/wh1X1+8MOr7XLIlmT4DTgUOCtVfXdqnov8Imu178H\nvKGqHqyqbwP/BviTqtpZVQ9V1Q7gweZ9JEnj5a1VdXdVfbuq3lNV91TV96rqSuAO4NSutn9bVe+o\nqoeAHcB6YKrr9acCs3Q+E7a3tQJamyySNQn+EfDlqqquaXd3Pf5qVf3frudPBrY2XS3uT3I/cGLz\nPpKk8fL943mSl3Z1lbsfeBqds8YHfeXgg6r6VvPwiK7XzwO+DFw9xLx6lLBI1iTYBxzf85XaiV2P\nq6f93cAbq+qorn+Pr6rLh55UkrRcBZDkycA7gFcAx1bVUcAtQBaZt9dvAX8HvDvJIQPOqUcZi2RN\ngo8BDwGvSHJokjN5+Ndvvd4B/EqSn0zHuiRnJDmylbSSpJVYR6dg/ipAkpfROZO8HN8Fzmne638k\nsc7RirnzaOxV1XeAfwlcANwP/BLwfjr9jOdr/yk6/ZL/ELgP2A2c30ZWSdLKVNVtwEV0TozcC2wE\n/noF73PwM+NJwCUWylqpPLybpzQZkuwE/riq3jnqLJIkae3xf1eaCEn+eZIfarpbbAZ+AvjQqHNJ\nkqS1ybvbaFI8BbiKzlXMXwTOrqp9o40kSZLWKrtbSJIkST3sbiFJkiT1GIvuFscdd1xt2LDh+8+/\n+c1vsm7dutEFWiFzt2cSM8Nk5p7EzLCy3DfeeOPfVdUThxTpUa/3WN+PSdv/zDtc5h2uScsLQz7W\nV9XI/z3rWc+qbjfccENNInO3ZxIzV01m7knMXLWy3MCnagyOiWv1X++xvh+Ttv+Zd7jMO1yTlrdq\nuMd6u1tIkiRJPSySJUmSpB4WyZIkSVIPi2RJkiSph0WyJEmS1MMiWZIkSeoxFuMkS5Nkw7YPrHje\nrRvnOH8Z8++58IwVL0vSo1s/x6rlHpMW4rFKa9GqziQn+fUktya5JcnlSR6X5KQkO5PckeTKJIcN\nKqwkSZLUhhUXyUmOB34NmK6qpwGHAOcCvwu8qapOBu4DLhhEUEmSJKktq+2TfChweJJDgccD+4Dn\nAlc3r+8AzlrlMiRJkqRWrbhPclV9OcnvA3cB3wY+DNwI3F9Vc02zvcDx882fZAuwBWBqaorZ2dnv\nv3bgwIGHPZ8U5m7PKDNv3Ti3dKMFTB2+vPnH4fcyifsHTG5uSdJ4WHGRnORo4EzgJOB+4D3A8+Zp\nWvPNX1Xbge0A09PTNTMz8/3XZmdn6X4+KczdnlFmXs1FLls3znHRrv7/7PacN7PiZQ3KJO4fMLm5\nJUnjYTXdLX4W+FJVfbWqvgu8F/hp4Kim+wXACcA9q8woSZIktWo1RfJdwGlJHp8kwOnAbcANwNlN\nm83ANauLKEmSJLVrxUVyVe2kc4HeTcCu5r22A68FXpNkN3AscPEAckqSJEmtWdXoFlX1hqr60ap6\nWlW9pKoerKo7q+rUqvonVXVOVT04qLCSpOFIckmS/Ulumee1f5+kkhzXPE+StybZneSzSU5pP7Ek\nDZe3pZYkAVwKbOqdmORE4OfodLE76HnAyc2/LcDbW8gnSa2ySJYkUVUfAb42z0tvAn6Dh49UdCbw\nrur4OJ0Ltte3EFOSWrPiIeAkSWtbkhcCX66qz3Suz/6+44G7u54fHBN/3zzvseCY+P2YtPGuxylv\nP2OyL3fs9oW0tc7jtH37Yd7hG2Zmi2RJ0iMkeTzwH4Gfn+/leaYte0z8fkzaeNfjlLefMd2XO3b7\nQtoa032ctm8/zDt8w8xskaw1Y8MqbvIh6RH+MZ2bRR08i3wCcFOSU+mcOT6xq61j4ktac+yTLEl6\nhKraVVVPqqoNVbWBTmF8SlV9BbgWeGkzysVpwANV9YiuFpI0ySySJUkkuRz4GPCUJHuTXLBI8w8C\ndwK7gXcA/66FiJLUKrtbSJKoqhcv8fqGrscFvHzYmSRplDyTLEmSJPWwSJYkSZJ6WCRLkiRJPSyS\nJUmSpB4WyZIkSVIPi2RJkiSph0WyJEmS1MMiWZIkSephkSxJkiT1sEiWJEmSelgkS5IkST0skiVJ\nkqQeFsmSJJJckmR/klu6pv23JJ9L8tkk70tyVNdrr0uyO8nnk/zCaFJL0vBYJEuSAC4FNvVMuw54\nWlX9BPAF4HUASZ4KnAv8eDPPHyU5pL2okjR8h446gCRp9KrqI0k29Ez7cNfTjwNnN4/PBK6oqgeB\nLyXZDZwKfKyFqFIrNmz7wKrfY+vGOc5f4n32XHjGqpej4bBIlsbYIA7S/fAgrT78a+DK5vHxdIrm\ng/Y20x4hyRZgC8DU1BSzs7PLWuiBAweWPc8ojVPerRvnlmwzdXh/7ZbS1jq3uX0HsV362b7jsr/A\neO2//RpmZotkSdKikvxHYA647OCkeZrVfPNW1XZgO8D09HTNzMwsa9mzs7Msd55RGqe8S53BhE4B\nd9Gu1ZcCe86bWfV79KPN7dvP9ltKP9u3rW3Xj3Haf/s1zMwWyZKkBSXZDLwAOL2qDhbCe4ETu5qd\nANzTdjZJGiYv3JMkzSvJJuC1wAur6ltdL10LnJvksUlOAk4GPjGKjJI0LJ5JliSR5HJgBjguyV7g\nDXRGs3gscF0SgI9X1a9U1a1JrgJuo9MN4+VV9dBokkvScFgkS5KoqhfPM/niRdq/EXjj8BJJ0mit\nqrtFkqOSXN0MNn97kp9KckyS65Lc0fw8elBhJUmSpDastk/yW4APVdWPAk8Hbge2AddX1cnA9c1z\nSZIkaWKsuEhO8gTgZ2i+jquq71TV/XQGmd/RNNsBnLXakJIkSVKbVnMm+UeArwLvTPLpJH+aZB0w\nVVX7AJqfTxpATkmSJKk1q7lw71DgFOCVVbUzyVtYRteKxe7CNIl3fAFzt2m+zIO4O9KwDeruVoO2\n2O9/EvcPmNzckqTxsJoieS+wt6p2Ns+vplMk35tkfVXtS7Ie2D/fzIvdhWkS7/gC5m7TfJkHcXek\nYRvU3a0GbbE7Pk3i/gGTm1uSNB5W3N2iqr4C3J3kKc2k0+mMmXktsLmZthm4ZlUJJUmSpJat9pTW\nK4HLkhwG3Am8jE7hfVWSC4C7gHNWuQxJkiSpVasqkqvqZmB6npdOX837SpIkSaO02nGSJUmSpDXH\nIlmSJEnqYZEsSSLJJUn2J7mla9oxSa5Lckfz8+hmepK8NcnuJJ9NcsrokkvScFgkS5IALgU29Uzb\nBlxfVScD1/MPY+E/Dzi5+bcFeHtLGSWpNRbJkiSq6iPA13omnwnsaB7vAM7qmv6u6vg4cFQzLr4k\nrRnjd1cDSdK4mKqqfQDNDaKe1Ew/Hri7q93eZtq+3jdY7O6q/Zi0OyeOU95+7u45qLuAtrXObW7f\nQWyXfrbvuOwvMF77b7+GmdkiWZK0XJlnWs3XcLG7q/Zj0u6cOE55+7kL6aDuArrYXTsHqc3tO4i7\nuPazfdvadv0Yp/23X8PMbHcLSdJC7j3YjaL5ub+Zvhc4savdCcA9LWeTpKGySJYkLeRaYHPzeDNw\nTdf0lzajXJwGPHCwW4YkrRV2t5AkkeRyYAY4Lsle4A3AhcBVSS4A7gLOaZp/EHg+sBv4FvCy1gNL\n0pBZJEuSqKoXL/DS6fO0LeDlw00kSaNldwtJkiSph2eSNVQbBnB18Hy2bpwbyJXHkiRJ8/FMsiRJ\nktTDIlmSJEnqYZEsSZIk9bBIliRJknpYJEuSJEk9LJIlSZKkHhbJkiRJUg+LZEmSJKmHRbIkSZLU\nwyJZkiRJ6mGRLElaVJJfT3JrkluSXJ7kcUlOSrIzyR1Jrkxy2KhzStIgWSRLkhaU5Hjg14Dpqnoa\ncAhwLvC7wJuq6mTgPuCC0aWUpME7dNQBJI3ehm0fWPC1rRvnOH+R15drz4VnDOy91JpDgcOTfBd4\nPLAPeC7wr5rXdwC/Bbx9JOkkaQgskiVJC6qqLyf5feAu4NvAh4Ebgfuraq5pthc4fr75k2wBtgBM\nTU0xOzu7rOUfOHBg2fOM0jjl3bpxbsk2U4f3124pba1zm9t3ENuln+07LvsLjNf+269hZrZIliQt\nKMnRwJnAScD9wHuA583TtOabv6q2A9sBpqena2ZmZlnLn52dZbnzjNI45e3nG6CtG+e4aNfqS4E9\n582s+j360eb2HcQ3aP1s37a2XT/Gaf/t1zAz2ydZkrSYnwW+VFVfrarvAu8Ffho4KsnBT/8TgHtG\nFVCShsEiWZK0mLuA05I8PkmA04HbgBuAs5s2m4FrRpRPkoZi1UVykkOSfDrJ+5vnDgskSWtEVe0E\nrgZuAnbR+dzYDrwWeE2S3cCxwMUjCylJQzCIM8mvAm7veu6wQJK0hlTVG6rqR6vqaVX1kqp6sKru\nrKpTq+qfVNU5VfXgqHNK0iCtqkhOcgJwBvCnzfPQGRbo6qbJDuCs1SxDkiRJattqL2l9M/AbwJHN\n82MZwLBAkzgECZh7PoMYQmc+gxq2qG2TmHvQmdfiUFGSpLVnxUVykhcA+6vqxiQzByfP03TZwwJN\n4hAkYO75DPImFN0GNWxR2yYx96Azr8WhoiRJa89qPvmeDbwwyfOBxwFPoHNm+agkhzZnkx0WSJIk\nSRNnxX2Sq+p1VXVCVW0AzgX+qqrOw2GBJEmSNOGGMU6ywwJJkiRpog2ko2FVzQKzzeM7gVMH8b6S\nJEnSKHjHPUmSJKnHZF1mL0mSpLG2YUgjW83n0k3rhvbenkmWJEmSelgkS5IkST3sbiGpVW19DTfM\nr+AkSWufZ5IlSYtKclSSq5N8LsntSX4qyTFJrktyR/Pz6FHnlKRBskiWJC3lLcCHqupHgacDtwPb\ngOur6mTg+ua5JK0ZdreQJC0oyROAnwHOB6iq7wDfSXImMNM020FnrPzXDnr5u778AOe30EVnz4Vn\nDH0ZkiaLRbIkaTE/AnwVeGeSpwM3Aq8CpqpqH0BV7UvypPlmTrIF2AIwNTXF7OzsshY+dThs3Ti3\n8vR9Wm6uhRw4cGBg77Va/Wy3QW3ftta5ze07iO3Sz/Ydl/0FBrd92/ibPWiY+4RFsiRpMYcCpwCv\nrKqdSd7CMrpWVNV2YDvA9PR0zczMLGvhb7vsGi7aNfyPqj3nzQzkfWZnZ1nuOg5LP2fgt26cG8j2\nHdT2W0qb23cQ32D0s33b2nb9GNT2bePbn4Mu3bRuaPuEfZIlSYvZC+ytqp3N86vpFM33JlkP0Pzc\nP6J8kjQUFsmSpAVV1VeAu5M8pZl0OnAbcC2wuZm2GbhmBPEkaWjsbiFJWsorgcuSHAbcCbyMzkmW\nq5JcANwFnDPCfJI0cBbJkqRFVdXNwPQ8L53edhZJaovdLSRJkqQeFsmSJElSD4tkSZIkqYd9kh+l\nNnSNYbh141yrYxpKkiSNO88kS5IkST0skiVJkqQeFsmSJElSD4tkSZIkqYdFsiRJktTDIlmSJEnq\nYZEsSZIk9bBIliRJknpYJEuSlpTkkCSfTvL+5vlJSXYmuSPJlUkOG3VGSRoki2RJUj9eBdze9fx3\ngTdV1cnAfcAFI0klSUNikSxJWlSSE4AzgD9tngd4LnB102QHcNZo0knScBy60hmTnAi8C/gh4HvA\n9qp6S5JjgCuBDcAe4Ber6r7VR5Ukjcibgd8AjmyeHwvcX1VzzfO9wPHzzZhkC7AFYGpqitnZ2WUt\neOpw2LpxbumGq7TcXAs5cODAwN5rtfrZboPavm2tc5vbdxDbpZ/tOy77Cwxu+7bxN3vQMPeJFRfJ\nwBywtapuSnIkcGOS64Dzgeur6sIk24BtwGtXH1WS1LYkLwD2V9WNSWYOTp6nac03f1VtB7YDTE9P\n18zMzHzNFvS2y67hol2r+ajqz57zZgbyPrOzsyx3HYfl/G0fWLLN1o1zA9m+g9p+S2lz+/az/ZbS\nz/Zta9v1Y1DbdxDbrl+Xblo3tH1ixX8ZVbUP2Nc8/kaS2+mcSTgTmGma7QBmsUiWpEn1bOCFSZ4P\nPA54Ap0zy0clObQ5m3wCcM8IM0rSwA3kv+dJNgDPBHYCU00BTVXtS/KkBeZZ8Cu4cfq6ajkmKXf3\nVyFtfZ05SJOYGSYz9yRmhsn6exxnVfU64HUAzZnkf19V5yV5D3A2cAWwGbhmZCElaQhWXSQnOQL4\nc+DVVfX1zvUcS1vsK7hx+rpqOSYpd/dXIYP6uq1Nk5gZJjP3JGaG4X4FJ6DzDeEVSf4L8Gng4hHn\nkaSBWtUnX5LH0CmQL6uq9zaT702yvjmLvB7Yv9qQkqTRq6pZOl3oqKo7gVNHmUeShmnFQ8A1QwBd\nDNxeVX/Q9dK1dL56A7+CkyRJ0gRazZnkZwMvAXYlubmZ9nrgQuCqJBcAdwHnrC6iJEmS1K7VjG7x\nUeYfBgjg9JW+ryRJkjRq3nFPkiRJ6mGRLEmSJPWYvHGd1rANLd6hRpIkSQvzTLIkSZLUwyJZkiRJ\n6mGRLEmSJPWwSJYkSZJ6WCRLkiRJPSySJUmSpB4WyZKkBSU5MckNSW5PcmuSVzXTj0lyXZI7mp9H\njzqrJA2SRbIkaTFzwNaq+jHgNODlSZ4KbAOur6qTgeub55K0ZlgkS5IWVFX7quqm5vE3gNuB44Ez\ngR1Nsx3AWaNJKEnD4R33JEl9SbIBeCawE5iqqn3QKaSTPGmBebYAWwCmpqaYnZ1d1jKnDoetG+dW\nHrpPy821kAMHDgzsvVarn+02qO3b1jq3uX0HsV362b7jsr/A4LZvG3+zBw1zn7BIliQtKckRwJ8D\nr66qryfpa76q2g5sB5ienq6ZmZllLfdtl13DRbuG/1G157yZgbzP7Owsy13HYTl/2weWbLN149xA\ntu+gtt9S2ty+/Wy/pfSzfdvadv0Y1PYdxLbr16Wb1g1tn7C7hSRpUUkeQ6dAvqyq3ttMvjfJ+ub1\n9cD+UeWTpGGwSJYkLSidU8YXA7dX1R90vXQtsLl5vBm4pu1skjRMdreQJC3m2cBLgF1Jbm6mvR64\nELgqyQXAXcA5I8onSUNhkSxJWlBVfRRYqAPy6W1mkaQ22d1CkiRJ6mGRLEmSJPWwSJYkSZJ6WCRL\nkiRJPSySJUmSpB4WyZIkSVIPi2RJkiSph0WyJEmS1MMiWZIkSerhHff6sGHbB/pqt3XjHOf32VaS\nJEnjyzPJkiRJUg+LZEmSJKnH0IrkJJuSfD7J7iTbhrUcSdJoeJyXtJYNpU9ykkOA/w78HLAX+GSS\na6vqtkEto99+wpKkwWvjOC9JozSsM8mnArur6s6q+g5wBXDmkJYlSWqfx3lJa1qqavBvmpwNbKqq\nX26evwT4yap6RVebLcCW5ulTgM93vcVxwN8NPNjwmbs9k5gZJjP3JGaGleV+clU9cRhh1pp+jvPN\n9MWO9f2YtP3PvMNl3uGatLwwxGP9sIaAyzzTHlaNV9V2YPu8MyefqqrpYQQbJnO3ZxIzw2TmnsTM\nMLm5J8iSx3lY/Fjf10Im7Pdo3uEy73BNWl4YbuZhdbfYC5zY9fwE4J4hLUuS1D6P85LWtGEVyZ8E\nTk5yUpLDgHOBa4e0LElS+zzOS1rThtLdoqrmkrwC+EvgEOCSqrp1GW+x4q/mRszc7ZnEzDCZuScx\nM0xu7okwgON8vybt92je4TLvcE1aXhhi5qFcuCdJkiRNMu+4J0mSJPWwSJYkSZJ6jKRITnJikhuS\n3J7k1iSvaqYfk+S6JHc0P49upifJW5tbn342ySkjyPy4JJ9I8pkm8283009KsrPJfGVzAQtJHts8\n3928vqHtzD35D0ny6STvn5TcSfYk2ZXk5iSfaqaN7T7S5DgqydVJPtfs3z81AZmf0mzjg/++nuTV\nE5D715u/xVuSXN78jY79fq1HSnJJkv1Jblng9bHY57ryLJV3JskDXX9Tv9l2xp48837m9rQZm23c\nZ96x2cZZoD7oaTM2x6A+856f5Ktd2/eXR5G1J9PD6pie14azfauq9X/AeuCU5vGRwBeApwK/B2xr\npm8Dfrd5/HzgL+iMy3kasHMEmQMc0Tx+DLCzyXLV/9/e2YVYVUVx/LdIM7VySvvU0HypKEwtxDRE\nMiIrxiAfjCKFerCPh+ghiCCol14ihIqEjOjTPiazDwoqNXqSaCatKYMUTS11xFCrh7JaPex1Z07b\ne2aOytyzLq0fHM7ea++B/113zd7rnL3vOcASs68E7rbyPcBKKy8B3qjD1wX9DwCvAR9Y3b1uYAcw\nIbO5jRHT8SJwl5VPBjq8a870nwTsBSZ71g1MBLYDo63+JrCsHeI6jqbf5zxgJtBb0l57zB2j3vmN\nsdbDQcmc69XHFfW68TEl+UHWx80YVFHvMuDpun2bafpPHtMK/9ZyJ1lV96hqj5V/BbaQJr1FpCQD\nO99s5UXAS5rYCHSIyHkt1qyq+ptVR9qhwDVAV4nmxmfpAhaISLOH7w87IjIJuBFYZXWhDXSX4DZG\nROR00uT5PICq/qmqBz1rbsICYJuq/oh/3SOA0SIyAhgD7KF94/p/jap+DvwySBcvMQdU0uuKQebc\nIm58XFGvGwbJD4q4GYMq6nVFnsc0YVj8W/ueZLslPoN0JXOOqu6B9E8CnG3dJgK7Cn+2mxr+YexW\n/yagD/gE2AYcVNW/mujq12zth4DxrVXczwrgQeAfq4+nPXQr8LGIdEt6tS34jpGpwH7gBVsSWiUi\nY/GtOWcJsNrKbnWr6k/AE8BOUnJ8COimPeI6OHZqj7nj4Cpbzv5IRC6tW0yDbM4t4tLHg+gFRz7O\n8wNVLfWvhzGogl6AW2zrTZeIXNCkvZXkeUzOsPi31iRZRE4F3gbuV9XDg3VtYmv5VY+q/q2q00lv\nlpoFXNKsm51daBaRm4A+Ve0umpt0daXbmKuqM4GFwL0iMm+Qvh50jyAtwT6rqjOA30nbFMrwoLkf\n27/bCbw1VNcmtpbqlrQ/ehFwIXA+MJYUJ2W6atccnBDt9v31AJNV9XLgKWBtzXqAIedcdz4eQq8r\nH+f5gYhclnVx5d8Ket8HpqjqNOBTBu7StpySPOaobk1sJ+zf2pJkERlJCv5XVXWNmfc1lnfs3Gd2\nV68/tSX0z0j7tjpsuTfX1a/Z2sdRz/LcXKBTRHYAr5OWo1fgXzeq+rOd+4B3SBcmnmNkN7C7cEXe\nRUqaPWsushDoUdV9Vves+1pgu6ruV9UjwBpgDm0Q18Fx4SHmKqOqhxvL2ar6ITBSRCbUqalkzi3i\nysdD6fXoY9PSyA+uz5pcjkFlelX1gKr+YdXngCtaLK3IUXmMiLyS9RkW/9b1dAsh7dvcoqpPFpre\nA5ZaeSnwbsF+h/36djZwqLEM3CpE5CwR6bDyaNIkvQXYACwu0dz4LIuB9apax93vh1R1kqpOIS2l\nr1fV23CuW0TGishpjTJwHdCL4xhR1b3ALhG5yEwLgO88a864lYGtFuBb905gtoiMsfGk4WvXcR0c\nNx5irjIicm5jP6SIzCLNtQdq1FM25xZx4+Mqej35uCQ/+D7r5mYMqqI324/eScp3aqEkj7k96zY8\n/tV6fqF4Nek2+NfAJjtuIO0fWQf8YOczdeCXmM+Q9gB/A1xZg+ZpwFemuRd4xOxTgS+AraRl6lFm\nP8XqW619ah2+zj7DfAaebuFat+nbbMe3wMNmdxsjpmM68KXFyVrgDO+aTcsY0gQzrmBzrRt4lDSw\n9wIvA6O8x3Ucpd/latLe8iOkO0J3AsuB5dbuIuaOQe99Nm5tBjYCc2rWWzbnuvRxRb1ufEx5fvAY\n0GllN2NQRb2PF/y7Abi4zhguaJ/PQB4z7P6N11IHQRAEQRAEQUbtT7cIgiAIgiAIAm9EkhwEQRAE\nQRAEGZEkB0EQBEEQBEFGJMlBEARBEARBkBFJchAEQRAEQRBkRJIcBEEQBEEQBBmRJAdBEARBEARB\nxr/aWglluAbxdQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# What does the distribution of the GPA and GRE scores look like? Do the distributions differ much?\n", + "df.hist(figsize=(12,7))\n", + "\n", + "#Very similar, except for large spike in gpa towards a 4.0." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.3175" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What percentage of the data was admitted? Do you think this will be a problem?\n", + "df.loc[df['admit'] == 1,'admit'].count() / df.admit.count()\n", + "# " + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "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", + "
AccuracyCoefColumns
40.717079[[0.582042079324, -0.615856478477]]gpa, rank
60.702073[[0.319297035401, 0.00188725540496, -0.605383852449]]gpa, gre, rank
50.699762[[0.00228116386246, -0.611731663545]]gre, rank
00.682570[[0.4034918775]]gpa
10.682570[[0.00234883628163]]gre
30.682570[[0.0144050758336, 0.00211962492503]]gpa, gre
20.659994[[-0.557887607601]]rank
\n", + "
" + ], + "text/plain": [ + " Accuracy Coef \\\n", + "4 0.717079 [[0.582042079324, -0.615856478477]] \n", + "6 0.702073 [[0.319297035401, 0.00188725540496, -0.605383852449]] \n", + "5 0.699762 [[0.00228116386246, -0.611731663545]] \n", + "0 0.682570 [[0.4034918775]] \n", + "1 0.682570 [[0.00234883628163]] \n", + "3 0.682570 [[0.0144050758336, 0.00211962492503]] \n", + "2 0.659994 [[-0.557887607601]] \n", + "\n", + " Columns \n", + "4 gpa, rank \n", + "6 gpa, gre, rank \n", + "5 gre, rank \n", + "0 gpa \n", + "1 gre \n", + "3 gpa, gre \n", + "2 rank " + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dffinal = df\n", + "rows = []\n", + "y = dffinal.admit\n", + "flist = ['gpa','gre','rank']\n", + "for i in range(1,len(flist)+1):\n", + " combos = list(combinations(flist,i))\n", + " for j,com in enumerate(combos):\n", + " X = pd.DataFrame(dffinal, columns=com)\n", + " model = LogisticRegression(fit_intercept=True)\n", + " #model = LogisticRegression()\n", + " accuracy = cross_val_score(model, X, y, cv=10, scoring='accuracy').mean()\n", + " s = ', '.join(com)\n", + " rows.append({'Accuracy':accuracy,'Columns':s, 'Coef': model.fit(X, y).coef_})\n", + "dfresult = pd.DataFrame(rows)\n", + "pd.options.display.max_colwidth = 100\n", + "dfresult.sort_values('Accuracy',ascending=False)\n", + "# Accuracy = (True Neg + True Pos) / All (True Neg, True Pos, False Neg, False Pos)\n", + "# or (TN+TP) / (TN+TP+FN+FP)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "# Add the best features to the below to calc confusion matrix on entire dataset\n", + "y = df.admit\n", + "X = df[['gpa','rank']]" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m1 = LogisticRegression().fit(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "y_hat = m1.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([90, 0, 32, 10], dtype=int64)" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "confusion_matrix(y_test,y_hat).ravel()" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy : 0.757575757576\n", + "Recall : 0.238095238095\n", + "Precision : 1.0\n" + ] + } + ], + "source": [ + "TN,FP,FN,TP = confusion_matrix(y_test,y_hat).ravel()\n", + "TOTAL = TP + TN + FP + FN\n", + "acc = (TP + TN) / TOTAL\n", + "recall = TP / (TP + FN)\n", + "precision = TP / (TP + FP)\n", + "print (\"Accuracy :\",acc)\n", + "print (\"Recall :\", recall)\n", + "print (\"Precision :\", precision)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}