diff --git a/module-1/.gitignore b/module-1/.gitignore
index b2e5ef3d..1fb4aecd 100644
--- a/module-1/.gitignore
+++ b/module-1/.gitignore
@@ -1,2 +1,3 @@
DS_Store
-.ipynb_checkpoints
\ No newline at end of file
+.ipynb_checkpoints
+.bash_profile
diff --git a/module-3/lab-unsupervised-learning/your-code/main.ipynb b/module-3/lab-unsupervised-learning/your-code/main.ipynb
index 9d986f93..dcb1599d 100644
--- a/module-3/lab-unsupervised-learning/your-code/main.ipynb
+++ b/module-3/lab-unsupervised-learning/your-code/main.ipynb
@@ -12,7 +12,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -22,7 +22,8 @@
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
- "import pandas as pd"
+ "import pandas as pd\n",
+ "import seaborn as sns"
]
},
{
@@ -38,7 +39,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
@@ -67,20 +68,585 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Channel | \n",
+ " Region | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 12669 | \n",
+ " 9656 | \n",
+ " 7561 | \n",
+ " 214 | \n",
+ " 2674 | \n",
+ " 1338 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 7057 | \n",
+ " 9810 | \n",
+ " 9568 | \n",
+ " 1762 | \n",
+ " 3293 | \n",
+ " 1776 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 6353 | \n",
+ " 8808 | \n",
+ " 7684 | \n",
+ " 2405 | \n",
+ " 3516 | \n",
+ " 7844 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 13265 | \n",
+ " 1196 | \n",
+ " 4221 | \n",
+ " 6404 | \n",
+ " 507 | \n",
+ " 1788 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 22615 | \n",
+ " 5410 | \n",
+ " 7198 | \n",
+ " 3915 | \n",
+ " 1777 | \n",
+ " 5185 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 9413 | \n",
+ " 8259 | \n",
+ " 5126 | \n",
+ " 666 | \n",
+ " 1795 | \n",
+ " 1451 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 12126 | \n",
+ " 3199 | \n",
+ " 6975 | \n",
+ " 480 | \n",
+ " 3140 | \n",
+ " 545 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 7579 | \n",
+ " 4956 | \n",
+ " 9426 | \n",
+ " 1669 | \n",
+ " 3321 | \n",
+ " 2566 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 5963 | \n",
+ " 3648 | \n",
+ " 6192 | \n",
+ " 425 | \n",
+ " 1716 | \n",
+ " 750 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 6006 | \n",
+ " 11093 | \n",
+ " 18881 | \n",
+ " 1159 | \n",
+ " 7425 | \n",
+ " 2098 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 3366 | \n",
+ " 5403 | \n",
+ " 12974 | \n",
+ " 4400 | \n",
+ " 5977 | \n",
+ " 1744 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Channel Region Fresh Milk Grocery Frozen Detergents_Paper \\\n",
+ "0 2 3 12669 9656 7561 214 2674 \n",
+ "1 2 3 7057 9810 9568 1762 3293 \n",
+ "2 2 3 6353 8808 7684 2405 3516 \n",
+ "3 1 3 13265 1196 4221 6404 507 \n",
+ "4 2 3 22615 5410 7198 3915 1777 \n",
+ "5 2 3 9413 8259 5126 666 1795 \n",
+ "6 2 3 12126 3199 6975 480 3140 \n",
+ "7 2 3 7579 4956 9426 1669 3321 \n",
+ "8 1 3 5963 3648 6192 425 1716 \n",
+ "9 2 3 6006 11093 18881 1159 7425 \n",
+ "10 2 3 3366 5403 12974 4400 5977 \n",
+ "\n",
+ " Delicassen \n",
+ "0 1338 \n",
+ "1 1776 \n",
+ "2 7844 \n",
+ "3 1788 \n",
+ "4 5185 \n",
+ "5 1451 \n",
+ "6 545 \n",
+ "7 2566 \n",
+ "8 750 \n",
+ "9 2098 \n",
+ "10 1744 "
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your code here:\n"
+ "# Your code here:\n",
+ "customers.head(11)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Channel int64\n",
+ "Region int64\n",
+ "Fresh int64\n",
+ "Milk int64\n",
+ "Grocery int64\n",
+ "Frozen int64\n",
+ "Detergents_Paper int64\n",
+ "Delicassen int64\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your observations here"
+ "customers.dtypes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Channel | \n",
+ " Region | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 1.322727 | \n",
+ " 2.543182 | \n",
+ " 12000.297727 | \n",
+ " 5796.265909 | \n",
+ " 7951.277273 | \n",
+ " 3071.931818 | \n",
+ " 2881.493182 | \n",
+ " 1524.870455 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 0.468052 | \n",
+ " 0.774272 | \n",
+ " 12647.328865 | \n",
+ " 7380.377175 | \n",
+ " 9503.162829 | \n",
+ " 4854.673333 | \n",
+ " 4767.854448 | \n",
+ " 2820.105937 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 55.000000 | \n",
+ " 3.000000 | \n",
+ " 25.000000 | \n",
+ " 3.000000 | \n",
+ " 3.000000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 3127.750000 | \n",
+ " 1533.000000 | \n",
+ " 2153.000000 | \n",
+ " 742.250000 | \n",
+ " 256.750000 | \n",
+ " 408.250000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 8504.000000 | \n",
+ " 3627.000000 | \n",
+ " 4755.500000 | \n",
+ " 1526.000000 | \n",
+ " 816.500000 | \n",
+ " 965.500000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 2.000000 | \n",
+ " 3.000000 | \n",
+ " 16933.750000 | \n",
+ " 7190.250000 | \n",
+ " 10655.750000 | \n",
+ " 3554.250000 | \n",
+ " 3922.000000 | \n",
+ " 1820.250000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 2.000000 | \n",
+ " 3.000000 | \n",
+ " 112151.000000 | \n",
+ " 73498.000000 | \n",
+ " 92780.000000 | \n",
+ " 60869.000000 | \n",
+ " 40827.000000 | \n",
+ " 47943.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Channel Region Fresh Milk Grocery \\\n",
+ "count 440.000000 440.000000 440.000000 440.000000 440.000000 \n",
+ "mean 1.322727 2.543182 12000.297727 5796.265909 7951.277273 \n",
+ "std 0.468052 0.774272 12647.328865 7380.377175 9503.162829 \n",
+ "min 1.000000 1.000000 3.000000 55.000000 3.000000 \n",
+ "25% 1.000000 2.000000 3127.750000 1533.000000 2153.000000 \n",
+ "50% 1.000000 3.000000 8504.000000 3627.000000 4755.500000 \n",
+ "75% 2.000000 3.000000 16933.750000 7190.250000 10655.750000 \n",
+ "max 2.000000 3.000000 112151.000000 73498.000000 92780.000000 \n",
+ "\n",
+ " Frozen Detergents_Paper Delicassen \n",
+ "count 440.000000 440.000000 440.000000 \n",
+ "mean 3071.931818 2881.493182 1524.870455 \n",
+ "std 4854.673333 4767.854448 2820.105937 \n",
+ "min 25.000000 3.000000 3.000000 \n",
+ "25% 742.250000 256.750000 408.250000 \n",
+ "50% 1526.000000 816.500000 965.500000 \n",
+ "75% 3554.250000 3922.000000 1820.250000 \n",
+ "max 60869.000000 40827.000000 47943.000000 "
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "customers.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.heatmap(customers.corr())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Channel | \n",
+ " Region | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ " 440.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 1.322727 | \n",
+ " 2.543182 | \n",
+ " 12000.297727 | \n",
+ " 5796.265909 | \n",
+ " 7951.277273 | \n",
+ " 3071.931818 | \n",
+ " 2881.493182 | \n",
+ " 1524.870455 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 0.468052 | \n",
+ " 0.774272 | \n",
+ " 12647.328865 | \n",
+ " 7380.377175 | \n",
+ " 9503.162829 | \n",
+ " 4854.673333 | \n",
+ " 4767.854448 | \n",
+ " 2820.105937 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 55.000000 | \n",
+ " 3.000000 | \n",
+ " 25.000000 | \n",
+ " 3.000000 | \n",
+ " 3.000000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 3127.750000 | \n",
+ " 1533.000000 | \n",
+ " 2153.000000 | \n",
+ " 742.250000 | \n",
+ " 256.750000 | \n",
+ " 408.250000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 8504.000000 | \n",
+ " 3627.000000 | \n",
+ " 4755.500000 | \n",
+ " 1526.000000 | \n",
+ " 816.500000 | \n",
+ " 965.500000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 2.000000 | \n",
+ " 3.000000 | \n",
+ " 16933.750000 | \n",
+ " 7190.250000 | \n",
+ " 10655.750000 | \n",
+ " 3554.250000 | \n",
+ " 3922.000000 | \n",
+ " 1820.250000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 2.000000 | \n",
+ " 3.000000 | \n",
+ " 112151.000000 | \n",
+ " 73498.000000 | \n",
+ " 92780.000000 | \n",
+ " 60869.000000 | \n",
+ " 40827.000000 | \n",
+ " 47943.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Channel Region Fresh Milk Grocery \\\n",
+ "count 440.000000 440.000000 440.000000 440.000000 440.000000 \n",
+ "mean 1.322727 2.543182 12000.297727 5796.265909 7951.277273 \n",
+ "std 0.468052 0.774272 12647.328865 7380.377175 9503.162829 \n",
+ "min 1.000000 1.000000 3.000000 55.000000 3.000000 \n",
+ "25% 1.000000 2.000000 3127.750000 1533.000000 2153.000000 \n",
+ "50% 1.000000 3.000000 8504.000000 3627.000000 4755.500000 \n",
+ "75% 2.000000 3.000000 16933.750000 7190.250000 10655.750000 \n",
+ "max 2.000000 3.000000 112151.000000 73498.000000 92780.000000 \n",
+ "\n",
+ " Frozen Detergents_Paper Delicassen \n",
+ "count 440.000000 440.000000 440.000000 \n",
+ "mean 3071.931818 2881.493182 1524.870455 \n",
+ "std 4854.673333 4767.854448 2820.105937 \n",
+ "min 25.000000 3.000000 3.000000 \n",
+ "25% 742.250000 256.750000 408.250000 \n",
+ "50% 1526.000000 816.500000 965.500000 \n",
+ "75% 3554.250000 3922.000000 1820.250000 \n",
+ "max 60869.000000 40827.000000 47943.000000 "
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "customers.describe()\n",
+ "# Your observations here\n",
+ "#The dataset contains only numerical data, \n",
+ "#there aren't nulls values. There are no extreme correlations"
]
},
{
@@ -94,20 +660,177 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
- "# Your code here"
+ "# Your code here\n",
+ "customers.drop(columns=['Channel', 'Region'], inplace=True)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 12669 | \n",
+ " 9656 | \n",
+ " 7561 | \n",
+ " 214 | \n",
+ " 2674 | \n",
+ " 1338 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 7057 | \n",
+ " 9810 | \n",
+ " 9568 | \n",
+ " 1762 | \n",
+ " 3293 | \n",
+ " 1776 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 6353 | \n",
+ " 8808 | \n",
+ " 7684 | \n",
+ " 2405 | \n",
+ " 3516 | \n",
+ " 7844 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 13265 | \n",
+ " 1196 | \n",
+ " 4221 | \n",
+ " 6404 | \n",
+ " 507 | \n",
+ " 1788 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 22615 | \n",
+ " 5410 | \n",
+ " 7198 | \n",
+ " 3915 | \n",
+ " 1777 | \n",
+ " 5185 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 435 | \n",
+ " 29703 | \n",
+ " 12051 | \n",
+ " 16027 | \n",
+ " 13135 | \n",
+ " 182 | \n",
+ " 2204 | \n",
+ "
\n",
+ " \n",
+ " | 436 | \n",
+ " 39228 | \n",
+ " 1431 | \n",
+ " 764 | \n",
+ " 4510 | \n",
+ " 93 | \n",
+ " 2346 | \n",
+ "
\n",
+ " \n",
+ " | 437 | \n",
+ " 14531 | \n",
+ " 15488 | \n",
+ " 30243 | \n",
+ " 437 | \n",
+ " 14841 | \n",
+ " 1867 | \n",
+ "
\n",
+ " \n",
+ " | 438 | \n",
+ " 10290 | \n",
+ " 1981 | \n",
+ " 2232 | \n",
+ " 1038 | \n",
+ " 168 | \n",
+ " 2125 | \n",
+ "
\n",
+ " \n",
+ " | 439 | \n",
+ " 2787 | \n",
+ " 1698 | \n",
+ " 2510 | \n",
+ " 65 | \n",
+ " 477 | \n",
+ " 52 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
440 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Fresh Milk Grocery Frozen Detergents_Paper Delicassen\n",
+ "0 12669 9656 7561 214 2674 1338\n",
+ "1 7057 9810 9568 1762 3293 1776\n",
+ "2 6353 8808 7684 2405 3516 7844\n",
+ "3 13265 1196 4221 6404 507 1788\n",
+ "4 22615 5410 7198 3915 1777 5185\n",
+ ".. ... ... ... ... ... ...\n",
+ "435 29703 12051 16027 13135 182 2204\n",
+ "436 39228 1431 764 4510 93 2346\n",
+ "437 14531 15488 30243 437 14841 1867\n",
+ "438 10290 1981 2232 1038 168 2125\n",
+ "439 2787 1698 2510 65 477 52\n",
+ "\n",
+ "[440 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your comment here"
+ "customers"
]
},
{
@@ -127,7 +850,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
@@ -135,7 +858,9 @@
"\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
- "# Your code here:\n"
+ "# Your code here:\n",
+ "StandardScaler = StandardScaler().fit(customers)\n",
+ "customers_scale = StandardScaler.transform(customers)"
]
},
{
@@ -149,13 +874,183 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ " labels | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 12669 | \n",
+ " 9656 | \n",
+ " 7561 | \n",
+ " 214 | \n",
+ " 2674 | \n",
+ " 1338 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 7057 | \n",
+ " 9810 | \n",
+ " 9568 | \n",
+ " 1762 | \n",
+ " 3293 | \n",
+ " 1776 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 6353 | \n",
+ " 8808 | \n",
+ " 7684 | \n",
+ " 2405 | \n",
+ " 3516 | \n",
+ " 7844 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 13265 | \n",
+ " 1196 | \n",
+ " 4221 | \n",
+ " 6404 | \n",
+ " 507 | \n",
+ " 1788 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 22615 | \n",
+ " 5410 | \n",
+ " 7198 | \n",
+ " 3915 | \n",
+ " 1777 | \n",
+ " 5185 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 9413 | \n",
+ " 8259 | \n",
+ " 5126 | \n",
+ " 666 | \n",
+ " 1795 | \n",
+ " 1451 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 12126 | \n",
+ " 3199 | \n",
+ " 6975 | \n",
+ " 480 | \n",
+ " 3140 | \n",
+ " 545 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 7579 | \n",
+ " 4956 | \n",
+ " 9426 | \n",
+ " 1669 | \n",
+ " 3321 | \n",
+ " 2566 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 5963 | \n",
+ " 3648 | \n",
+ " 6192 | \n",
+ " 425 | \n",
+ " 1716 | \n",
+ " 750 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 6006 | \n",
+ " 11093 | \n",
+ " 18881 | \n",
+ " 1159 | \n",
+ " 7425 | \n",
+ " 2098 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 3366 | \n",
+ " 5403 | \n",
+ " 12974 | \n",
+ " 4400 | \n",
+ " 5977 | \n",
+ " 1744 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Fresh Milk Grocery Frozen Detergents_Paper Delicassen labels\n",
+ "0 12669 9656 7561 214 2674 1338 6\n",
+ "1 7057 9810 9568 1762 3293 1776 6\n",
+ "2 6353 8808 7684 2405 3516 7844 6\n",
+ "3 13265 1196 4221 6404 507 1788 2\n",
+ "4 22615 5410 7198 3915 1777 5185 0\n",
+ "5 9413 8259 5126 666 1795 1451 2\n",
+ "6 12126 3199 6975 480 3140 545 2\n",
+ "7 7579 4956 9426 1669 3321 2566 6\n",
+ "8 5963 3648 6192 425 1716 750 2\n",
+ "9 6006 11093 18881 1159 7425 2098 6\n",
+ "10 3366 5403 12974 4400 5977 1744 6"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your code here:\n"
+ "# Your code here:\n",
+ "from sklearn.cluster import KMeans\n",
+ "kmeans = KMeans()\n",
+ "customers_kmeans = kmeans.fit(customers)\n",
+ "customers['labels'] = customers_kmeans.labels_\n",
+ "customers.head(11)"
]
},
{
@@ -167,11 +1062,31 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2 186\n",
+ "0 101\n",
+ "6 93\n",
+ "1 31\n",
+ "3 22\n",
+ "4 4\n",
+ "5 2\n",
+ "7 1\n",
+ "Name: labels, dtype: int64"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your code here:\n"
+ "# Your code here:\n",
+ "customers.labels.value_counts()"
]
},
{
@@ -185,13 +1100,130 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Fresh | \n",
+ " Milk | \n",
+ " Grocery | \n",
+ " Frozen | \n",
+ " Detergents_Paper | \n",
+ " Delicassen | \n",
+ " labels | \n",
+ " labels_DBSCAN | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 12669 | \n",
+ " 9656 | \n",
+ " 7561 | \n",
+ " 214 | \n",
+ " 2674 | \n",
+ " 1338 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 7057 | \n",
+ " 9810 | \n",
+ " 9568 | \n",
+ " 1762 | \n",
+ " 3293 | \n",
+ " 1776 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 6353 | \n",
+ " 8808 | \n",
+ " 7684 | \n",
+ " 2405 | \n",
+ " 3516 | \n",
+ " 7844 | \n",
+ " 6 | \n",
+ " -1 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 13265 | \n",
+ " 1196 | \n",
+ " 4221 | \n",
+ " 6404 | \n",
+ " 507 | \n",
+ " 1788 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 22615 | \n",
+ " 5410 | \n",
+ " 7198 | \n",
+ " 3915 | \n",
+ " 1777 | \n",
+ " 5185 | \n",
+ " 0 | \n",
+ " -1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Fresh Milk Grocery Frozen Detergents_Paper Delicassen labels \\\n",
+ "0 12669 9656 7561 214 2674 1338 6 \n",
+ "1 7057 9810 9568 1762 3293 1776 6 \n",
+ "2 6353 8808 7684 2405 3516 7844 6 \n",
+ "3 13265 1196 4221 6404 507 1788 2 \n",
+ "4 22615 5410 7198 3915 1777 5185 0 \n",
+ "\n",
+ " labels_DBSCAN \n",
+ "0 0 \n",
+ "1 0 \n",
+ "2 -1 \n",
+ "3 0 \n",
+ "4 -1 "
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your code here\n"
+ "# Your code here\n",
+ "from sklearn.cluster import DBSCAN\n",
+ "dbscan = DBSCAN(eps = 0.5)\n",
+ "customers_dbscan = dbscan.fit(customers_scale)\n",
+ "customers['labels_DBSCAN'] = customers_dbscan.labels_\n",
+ "customers.head()"
]
},
{
@@ -203,11 +1235,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ " 0 261\n",
+ "-1 174\n",
+ " 1 5\n",
+ "Name: labels_DBSCAN, dtype: int64"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Your code here\n"
+ "# Your code here\n",
+ "customers.labels_DBSCAN.value_counts()"
]
},
{
@@ -364,9 +1411,9 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "ironhack_env",
"language": "python",
- "name": "python3"
+ "name": "ironhack_env"
},
"language_info": {
"codemirror_mode": {
@@ -378,7 +1425,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.0"
+ "version": "3.7.5"
}
},
"nbformat": 4,