{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Chapter 5 - Data Discretization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5.2. Equal Width Discretization"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43\n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31\n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31\n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63\n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"plt.rcParams[\"figure.figsize\"] = [8,6]\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"diamond_data = sns.load_dataset('diamonds')\n",
"\n",
"diamond_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\mmalik\\anaconda3\\lib\\site-packages\\seaborn\\distributions.py:2551: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
" warnings.warn(msg, FutureWarning)\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.distplot(diamond_data['price'])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"18497\n"
]
}
],
"source": [
"price_range = diamond_data['price'].max() - diamond_data['price'].min()\n",
"print(price_range )\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1849.7"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"price_range / 10"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"326\n",
"18823\n",
"1850\n"
]
}
],
"source": [
"lower_interval = int(np.floor( diamond_data['price'].min()))\n",
"upper_interval = int(np.ceil( diamond_data['price'].max()))\n",
"\n",
"\n",
"interval_length = int(np.round(price_range / 10))\n",
"\n",
"print(lower_interval)\n",
"print(upper_interval)\n",
"print(interval_length)\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[326, 2176, 4026, 5876, 7726, 9576, 11426, 13276, 15126, 16976, 18826]\n"
]
}
],
"source": [
"total_bins = [i for i in range(lower_interval, upper_interval+interval_length, interval_length)]\n",
"print(total_bins)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Bin_no_1', 'Bin_no_2', 'Bin_no_3', 'Bin_no_4', 'Bin_no_5', 'Bin_no_6', 'Bin_no_7', 'Bin_no_8', 'Bin_no_9', 'Bin_no_10']\n"
]
}
],
"source": [
"bin_labels = ['Bin_no_' + str(i) for i in range(1, len(total_bins))]\n",
"print(bin_labels)\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
" price_bins | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.24 | \n",
" Very Good | \n",
" J | \n",
" VVS2 | \n",
" 62.8 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.94 | \n",
" 3.96 | \n",
" 2.48 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.24 | \n",
" Very Good | \n",
" I | \n",
" VVS1 | \n",
" 62.3 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.47 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.26 | \n",
" Very Good | \n",
" H | \n",
" SI1 | \n",
" 61.9 | \n",
" 55.0 | \n",
" 337 | \n",
" 4.07 | \n",
" 4.11 | \n",
" 2.53 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.22 | \n",
" Fair | \n",
" E | \n",
" VS2 | \n",
" 65.1 | \n",
" 61.0 | \n",
" 337 | \n",
" 3.87 | \n",
" 3.78 | \n",
" 2.49 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.23 | \n",
" Very Good | \n",
" H | \n",
" VS1 | \n",
" 59.4 | \n",
" 61.0 | \n",
" 338 | \n",
" 4.00 | \n",
" 4.05 | \n",
" 2.39 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z \\\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 \n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 \n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 \n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 \n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 \n",
"5 0.24 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48 \n",
"6 0.24 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47 \n",
"7 0.26 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53 \n",
"8 0.22 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49 \n",
"9 0.23 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39 \n",
"\n",
" price_bins \n",
"0 Bin_no_1 \n",
"1 Bin_no_1 \n",
"2 Bin_no_1 \n",
"3 Bin_no_1 \n",
"4 Bin_no_1 \n",
"5 Bin_no_1 \n",
"6 Bin_no_1 \n",
"7 Bin_no_1 \n",
"8 Bin_no_1 \n",
"9 Bin_no_1 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"diamond_data['price_bins'] = pd.cut(x=diamond_data['price'], bins=total_bins, labels=bin_labels, include_lowest=True)\n",
"diamond_data.head(10)\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),\n",
" [Text(0, 0, 'Bin_no_1'),\n",
" Text(1, 0, 'Bin_no_2'),\n",
" Text(2, 0, 'Bin_no_3'),\n",
" Text(3, 0, 'Bin_no_4'),\n",
" Text(4, 0, 'Bin_no_5'),\n",
" Text(5, 0, 'Bin_no_6'),\n",
" Text(6, 0, 'Bin_no_7'),\n",
" Text(7, 0, 'Bin_no_8'),\n",
" Text(8, 0, 'Bin_no_9'),\n",
" Text(9, 0, 'Bin_no_10')])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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6dJFN910k/7zP/9TL730klJSUqqcmw907ks1iiPvShcvXvQ9yD7Yvj7uasjsf6bllcjcEEzLK5G5PpWUlOjtt9/W3/72t8vOzaempl52bj7YBMe7WE8qNxBJQbOBVIfM/mdaXonMDcG0vBKZ65NJ5+avpFEdeQMAUBvBfm7+ahrFOW8AAOoimM/NXwtH3gCAG16wnpu/GsobAADDBPeuBQAAuAzlDQCAYShvAAAMQ3kDN4gtW7Zox44d172czz//XCNHjrxs+p/+9Cfl5uZe9/IBVI9bxYAbxLBhw/y6/HHjxvl1+QD+H+UNNBKVR9Zut1tnzpzRxIkTtXTpUrVr105hYWFq3769WrRooVGjRum5555Tbm6uysrKNHnyZA0cOFCLFi3S/v37ZVmWHnnkEd17771Xfa3CwkKNHz9ehYWF+tnPfqaJEydq5syZuu+++3T69Gnt2rVLJSUlOnbsmB5//HENGzZM69at09atWxUSEqKePXsqKSmpAd8doHGhvIFG5MKFC1q9erUKCws1YsQIlZeX64knntCtt96qpUuXSpJ27NihM2fOaNOmTSooKNDatWvlcDj0+eefa/369fJ6vRo5cqT69eunqKioq77Oiy++qKZNm+qhhx7S3XffXeX3brdbr776qo4cOaLx48dr2LBh2rJli+bOnavu3bsrLS2tyn21AGqHc95AI9KnTx+FhISoRYsWioqKUmFhodq3b19lnsOHD6t79+6SpJYtW2ratGn69NNPlZeXp8TERD322GO6ePGiTp48edXX6dSpk1wul+x2u37yk5/o8OHDl/1ekn7wgx+otLRUkjR//nytX79eDz/8sE6ePBm0z4wGTEB5A41IXl6eJOn06dNyu9367ne/e9mTojp06KB//OMfkqSioiKNHTtWHTp0UN++fbVmzRr95S9/0b333qvWrVtf9XXy8/Pl8Xh08eJF5ebmqmPHjlV+f6XHSm7YsEGpqalau3at/vu//1sHDhy43tUFbliMWQGNyOnTp/XrX/9aRUVFSk5OVkpKymXz3H333crMzFR8fLzKy8s1ceJEDRgwQPv27VNCQoIuXLiggQMHyul0XvV1vvOd72jatGkqLCzUfffdp5tvvrnabLfccouGDx+uZs2a6fvf/766det2PasK3NB4PCrQSGzZskWfffaZpk+fHugoAPyMI28AV/T666/rr3/962XTf/vb36pHjx4BSASgEkfeAAAYhgvWAAAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAY5n8B3XEWqEdsDB8AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diamond_data.groupby('price_bins')['price'].count().plot.bar()\n",
"plt.xticks(rotation=45)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5.3. Equal Frequency Discretization"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43\n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31\n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31\n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63\n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"plt.rcParams[\"figure.figsize\"] = [8,6]\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"diamond_data = sns.load_dataset('diamonds')\n",
"\n",
"diamond_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" price | \n",
" price | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" (325.999, 646.0] | \n",
" 326 | \n",
"
\n",
" \n",
" | 1 | \n",
" (325.999, 646.0] | \n",
" 326 | \n",
"
\n",
" \n",
" | 2 | \n",
" (325.999, 646.0] | \n",
" 327 | \n",
"
\n",
" \n",
" | 3 | \n",
" (325.999, 646.0] | \n",
" 334 | \n",
"
\n",
" \n",
" | 4 | \n",
" (325.999, 646.0] | \n",
" 335 | \n",
"
\n",
" \n",
" | 5 | \n",
" (325.999, 646.0] | \n",
" 336 | \n",
"
\n",
" \n",
" | 6 | \n",
" (325.999, 646.0] | \n",
" 336 | \n",
"
\n",
" \n",
" | 7 | \n",
" (325.999, 646.0] | \n",
" 337 | \n",
"
\n",
" \n",
" | 8 | \n",
" (325.999, 646.0] | \n",
" 337 | \n",
"
\n",
" \n",
" | 9 | \n",
" (325.999, 646.0] | \n",
" 338 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" price price\n",
"0 (325.999, 646.0] 326\n",
"1 (325.999, 646.0] 326\n",
"2 (325.999, 646.0] 327\n",
"3 (325.999, 646.0] 334\n",
"4 (325.999, 646.0] 335\n",
"5 (325.999, 646.0] 336\n",
"6 (325.999, 646.0] 336\n",
"7 (325.999, 646.0] 337\n",
"8 (325.999, 646.0] 337\n",
"9 (325.999, 646.0] 338"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"discretised_price, bins = pd.qcut(diamond_data['price'], 10, labels=None, retbins=True, precision=3, duplicates='raise')\n",
"\n",
"pd.concat([discretised_price, diamond_data['price']], axis=1).head(10)\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 326. 646. 837. 1087. 1698. 2401. 3465. 4662. 6301.2\n",
" 9821. 18823. ]\n",
"\n"
]
}
],
"source": [
"print(bins)\n",
"print(type(bins))\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(325.999, 646.0] 5411\n",
"(1698.0, 2401.0] 5405\n",
"(837.0, 1087.0] 5396\n",
"(6301.2, 9821.0] 5395\n",
"(3465.0, 4662.0] 5394\n",
"(9821.0, 18823.0] 5393\n",
"(4662.0, 6301.2] 5389\n",
"(1087.0, 1698.0] 5388\n",
"(646.0, 837.0] 5385\n",
"(2401.0, 3465.0] 5384\n",
"Name: price, dtype: int64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"discretised_price.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Bin_no_1', 'Bin_no_2', 'Bin_no_3', 'Bin_no_4', 'Bin_no_5', 'Bin_no_6', 'Bin_no_7', 'Bin_no_8', 'Bin_no_9', 'Bin_no_10']\n"
]
}
],
"source": [
"bin_labels = ['Bin_no_' +str(i) for i in range(1,11)]\n",
"print(bin_labels)\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
" price_bins | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.24 | \n",
" Very Good | \n",
" J | \n",
" VVS2 | \n",
" 62.8 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.94 | \n",
" 3.96 | \n",
" 2.48 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.24 | \n",
" Very Good | \n",
" I | \n",
" VVS1 | \n",
" 62.3 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.47 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.26 | \n",
" Very Good | \n",
" H | \n",
" SI1 | \n",
" 61.9 | \n",
" 55.0 | \n",
" 337 | \n",
" 4.07 | \n",
" 4.11 | \n",
" 2.53 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.22 | \n",
" Fair | \n",
" E | \n",
" VS2 | \n",
" 65.1 | \n",
" 61.0 | \n",
" 337 | \n",
" 3.87 | \n",
" 3.78 | \n",
" 2.49 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.23 | \n",
" Very Good | \n",
" H | \n",
" VS1 | \n",
" 59.4 | \n",
" 61.0 | \n",
" 338 | \n",
" 4.00 | \n",
" 4.05 | \n",
" 2.39 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z \\\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 \n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 \n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 \n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 \n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 \n",
"5 0.24 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48 \n",
"6 0.24 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47 \n",
"7 0.26 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53 \n",
"8 0.22 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49 \n",
"9 0.23 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39 \n",
"\n",
" price_bins \n",
"0 Bin_no_1 \n",
"1 Bin_no_1 \n",
"2 Bin_no_1 \n",
"3 Bin_no_1 \n",
"4 Bin_no_1 \n",
"5 Bin_no_1 \n",
"6 Bin_no_1 \n",
"7 Bin_no_1 \n",
"8 Bin_no_1 \n",
"9 Bin_no_1 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"diamond_data['price_bins'] = pd.cut(x=diamond_data['price'], bins=bins, labels=bin_labels, include_lowest=True)\n",
"diamond_data.head(10)\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),\n",
" [Text(0, 0, 'Bin_no_1'),\n",
" Text(1, 0, 'Bin_no_2'),\n",
" Text(2, 0, 'Bin_no_3'),\n",
" Text(3, 0, 'Bin_no_4'),\n",
" Text(4, 0, 'Bin_no_5'),\n",
" Text(5, 0, 'Bin_no_6'),\n",
" Text(6, 0, 'Bin_no_7'),\n",
" Text(7, 0, 'Bin_no_8'),\n",
" Text(8, 0, 'Bin_no_9'),\n",
" Text(9, 0, 'Bin_no_10')])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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t3n5ZO5YdsvbvHwydyy75W1evt0yS/+6nm5ZljZt2qTKykrdc8892rhxo95//32FhoZq8ODByszM9F9Pf/TRR4N+qt4WR9SS1KVLF40ZM0a33XabunbtqgEDBkiS5s2bJ5/P5x8Qpuy12S2vROZAsFteicyBYLe8kv0y2/l6uu3e9e3z+fTmm2+quLhYBw8e1NChQ/X4449L6vjbuF0Ku+WVyBwIdssrkTkQ7JZXskfmkpISZWRkaPny5YqNjdWGDRu0a9cunTp1Stu3b9fMmTPVt29fHTp0yH+q3iS2OPV9pvDwcCUkJOjkyZOKiooybkCczW55JTIHgt3ySmQOBLvllczPfKHr6QMGDNDVV1+t//3f/9XixYuVmZnZ4nq6Cdmb2e6Iutnp06f9N3I38WvRzma3vBKZA8FueSUyB4Ld8kpmZ66rq9OmTZv0pz/96Zzr6fPnzz/nerppzNmS7dQ8ICQZNSAuxG55JTIHgt3ySmQOBLvllczObLfr6Wez7RE1AADtYYfr6edju2vUAABcCtOvp18IR9QAgCuKydfTz4eiBgDAYGbvRgAAcIWjqAEAMBhFDQCAwShqoBNav369CgsLv/LzfPrpp0pMTDxn+u9//3vt3r37Kz8/gNbx8SygExo/fnyHPv/DDz/coc8P4F8oasCGmo+YvV6vjh07pmnTpun5559X37595XK51K9fP3Xv3l0TJkzQM888o927d6uhoUHTp0/X6NGjtXDhQm3fvl2WZemBBx7QnXfeecFlVVVVacqUKaqqqtLNN9+sadOmafbs2brrrrt05MgRFRUVqa6uTv/85z/10EMPafz48Vq9erU2bNigkJAQxcfHKy0tLYBbB+hcKGrApk6dOqWVK1eqqqpK9913nxobG/XII4/ohhtu0PPPPy9JKiws1LFjx7Ru3TpVVlYqNzdXYWFh+vTTT5Wfny+fz6fExESNHDlSUVFRF1zOc889p65du+pnP/uZbr/99haPe71erVixQp988ommTJmi8ePHa/369UpPT9egQYOUl5fX4nOrANqHa9SATQ0dOlQhISHq3r27oqKiVFVVpX79+rWYZ9++fRo0aJAkqUePHkpNTdVHH32k8vJypaSkaPLkyTp9+rQOHTp0weVcf/318ng8cjqd+u53v6t9+/ad87gkffOb31R9fb0kKSsrS/n5+br//vt16NAhY++hDNgBRQ3YVHl5uSTpyJEj8nq9+vrXv37OHZZiY2P117/+VZJUXV2tBx98ULGxsRo+fLhWrVql//7v/9add96pXr16XXA5FRUVqqmp0enTp7V7927179+/xePnu/ViQUGB5s+fr9zcXP3tb3/Tjh07vurqAlcszkUBNnXkyBH9/Oc/V3V1tTIyMpSZmXnOPLfffrtKSkqUlJSkxsZGTZs2TaNGjdK2bduUnJysU6dOafTo0YqMjLzgcr72ta8pNTVVVVVVuuuuu3Tttde2mu26667Tvffeq27duukb3/iGvve9732VVQWuaNxCFLCh9evX6+OPP9bMmTODHQVAB+OIGoBeffVV/fGPfzxn+q9+9SsNHjw4CIkANOOIGgAAg/FmMgAADEZRAwBgMIoaAACDUdQAABiMogYAwGAUNQAABvt/jld8/iSPurYAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diamond_data.groupby('price_bins')['price'].count().plot.bar()\n",
"plt.xticks(rotation=45)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5.4. K-Means Discretization"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43\n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31\n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31\n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63\n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"\n",
"plt.rcParams[\"figure.figsize\"] = [8,6]\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"diamond_data = sns.load_dataset('diamonds')\n",
"\n",
"diamond_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"KBinsDiscretizer(encode='ordinal', n_bins=10, strategy='kmeans')"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"discretization = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='kmeans')\n",
"\n",
"discretization.fit(diamond_data[['price']])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[array([ 326. , 1493.84917743, 2885.73742232, 4320.85056658,\n",
" 5859.43951991, 7668.1310657 , 9654.5661831 , 11758.64435923,\n",
" 13997.26275408, 16341.520841 , 18823. ])]\n"
]
}
],
"source": [
"intervals = discretization.bin_edges_.tolist()\n",
"print(intervals)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"intervals = [ 326. , 1417.67543928, 2627.50524806, 3950.3762392 ,\n",
" 5441.70606939, 7160.05893161, 9140.61465361, 11308.37609661,\n",
" 13634.55462656, 16130.22549621, 18823. ]\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Bin_no_1', 'Bin_no_2', 'Bin_no_3', 'Bin_no_4', 'Bin_no_5', 'Bin_no_6', 'Bin_no_7', 'Bin_no_8', 'Bin_no_9', 'Bin_no_10']\n"
]
}
],
"source": [
"bin_labels = ['Bin_no_' +str(i) for i in range(1,11)]\n",
"print(bin_labels)\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
" price_bins | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.24 | \n",
" Very Good | \n",
" J | \n",
" VVS2 | \n",
" 62.8 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.94 | \n",
" 3.96 | \n",
" 2.48 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.24 | \n",
" Very Good | \n",
" I | \n",
" VVS1 | \n",
" 62.3 | \n",
" 57.0 | \n",
" 336 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.47 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 7 | \n",
" 0.26 | \n",
" Very Good | \n",
" H | \n",
" SI1 | \n",
" 61.9 | \n",
" 55.0 | \n",
" 337 | \n",
" 4.07 | \n",
" 4.11 | \n",
" 2.53 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.22 | \n",
" Fair | \n",
" E | \n",
" VS2 | \n",
" 65.1 | \n",
" 61.0 | \n",
" 337 | \n",
" 3.87 | \n",
" 3.78 | \n",
" 2.49 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
" | 9 | \n",
" 0.23 | \n",
" Very Good | \n",
" H | \n",
" VS1 | \n",
" 59.4 | \n",
" 61.0 | \n",
" 338 | \n",
" 4.00 | \n",
" 4.05 | \n",
" 2.39 | \n",
" Bin_no_1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z \\\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 \n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 \n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 \n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 \n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 \n",
"5 0.24 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48 \n",
"6 0.24 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47 \n",
"7 0.26 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53 \n",
"8 0.22 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49 \n",
"9 0.23 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39 \n",
"\n",
" price_bins \n",
"0 Bin_no_1 \n",
"1 Bin_no_1 \n",
"2 Bin_no_1 \n",
"3 Bin_no_1 \n",
"4 Bin_no_1 \n",
"5 Bin_no_1 \n",
"6 Bin_no_1 \n",
"7 Bin_no_1 \n",
"8 Bin_no_1 \n",
"9 Bin_no_1 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diamond_data['price_bins'] = pd.cut(x=diamond_data['price'], bins=intervals, labels=bin_labels, include_lowest=True)\n",
"diamond_data.head(10)\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),\n",
" [Text(0, 0, 'Bin_no_1'),\n",
" Text(1, 0, 'Bin_no_2'),\n",
" Text(2, 0, 'Bin_no_3'),\n",
" Text(3, 0, 'Bin_no_4'),\n",
" Text(4, 0, 'Bin_no_5'),\n",
" Text(5, 0, 'Bin_no_6'),\n",
" Text(6, 0, 'Bin_no_7'),\n",
" Text(7, 0, 'Bin_no_8'),\n",
" Text(8, 0, 'Bin_no_9'),\n",
" Text(9, 0, 'Bin_no_10')])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAGRCAYAAABMoTt8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAxEUlEQVR4nO3deXwTdcLH8W+apqUk6dYuuMpCOZR6wBa5lF0K6wHiufqggK3ACqgLAiIrWEROCwqrRRSpByrP8yrQisi6uvjyUVGpSAUsUqSK7lYu8SqUowk0Lek8f/iQpRz2sGnyK5/3X2Y6mXwnDvlmfjOZsVmWZQkAABgjItQBAABA7VDeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYSJDHaCmKisr5fcH51dtdrstaMsOBtPySmRuCKbllczLbFpeicwNIZh5HQ77KacbU95+v6UDBw4HZdlxcU2DtuxgMC2vROaGYFpeybzMpuWVyNwQgpm3eXP3KaczbA4AgGEobwAADEN5AwBgGMobAADD/OwJaxUVFZo8ebL27Nmj8vJyjRo1Sueff74mTZokm82m9u3ba/r06YqIiNDy5cuVk5OjyMhIjRo1SldccYXKyso0ceJE7du3T06nU3PnzlV8fLw2b96s2bNny263Kzk5WWPGjGmo9QUAwHg/u+f9+uuvKy4uTsuWLdOiRYuUnp6uRx99VPfdd5+WLVsmy7K0evVqFRcXKysrSzk5OXrxxRc1b948lZeXKzs7W4mJiVq2bJluvvlmZWZmSpKmT5+ujIwMZWdnq6CgQIWFhQ2ysgAANAY/W97XXHONxo0bF3hst9tVWFioSy+9VJLUu3dvrVu3Tlu2bFHnzp0VFRUlt9uthIQEbdu2Tfn5+erVq1dg3ry8PHk8HpWXlyshIUE2m03JycnKy8sL4ioCANC4/Gx5O51OuVwueTwe3XvvvbrvvvtkWZZsNlvg76WlpfJ4PHK73VWe5/F4qkw/fl6Xy1Vl3tLS0mCsGwAAjVK1F2n57rvvNHr0aKWmpurGG2/UY489Fvib1+tVbGysXC6XvF5vlelut7vK9J+bNzY2ttqgdrtNcXFNa7VyNWW3RwRt2cFgWl6JzA3BtLySeZlNyyuRuSGEIu/PlvfevXs1fPhwTZs2Tb///e8lSRdffLHWr1+vyy67TLm5uerRo4eSkpI0f/58+Xw+lZeXq6ioSImJierSpYvWrFmjpKQk5ebmqmvXrnK5XHI4HNq1a5datWqltWvX1uiENa6w9h+m5ZXI3BBMyyuZl9m0vBKZG0IorrD2s+X97LPP6tChQ8rMzAycbPbQQw9p1qxZmjdvntq1a6d+/frJbrdryJAhSk1NlWVZGj9+vKKjo5WSkqK0tDSlpKTI4XAoIyNDkjRz5kxNmDBBfr9fycnJ6tSpUz2vLgAAjZfNsiwjrv5eUeFnz/v/mZZXInNDMC2vZF5m0/JKZG4IXNscAABUi/IGAMAwxtwStDZcsTGKia7dqp1uaOJER3xH5Tl0pC6xAACoF42yvGOiI9Vm0qqgLHvHnOvlCcqSAQCoGYbNAQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYJjImsxUUFCgxx9/XFlZWRo/frz27t0rSdqzZ486deqkJ554QrNmzdKmTZvkdDolSZmZmXI4HJo4caL27dsnp9OpuXPnKj4+Xps3b9bs2bNlt9uVnJysMWPGBG8NAQBoZKot70WLFun1119XTEyMJOmJJ56QJB08eFBDhw7Vgw8+KEkqLCzUCy+8oPj4+MBzFy9erMTERI0dO1arVq1SZmampkyZounTp2vBggVq1aqV7r77bhUWFqpDhw7BWD8AABqdaofNExIStGDBgpOmL1iwQIMHD9bZZ5+tyspK7dy5U9OmTdNtt92mFStWSJLy8/PVq1cvSVLv3r2Vl5cnj8ej8vJyJSQkyGazKTk5WXl5efW8WgAANF7V7nn369dP33zzTZVp+/btU15eXmCv+/Dhwxo8eLCGDRsmv9+voUOHqmPHjvJ4PHK73ZIkp9Op0tJSeTweuVyuwLKcTqd2795dbVC73aa4uKa1WrlgCXUOuz0i5Blqi8zBZ1peybzMpuWVyNwQQpG3Rse8T/TWW2/phhtukN1ulyTFxMRo6NChgaH1Hj16aNu2bXK5XPJ6vZIkr9er2NjYKtOOn14dv9/SgQOHa5SveXN3bVepVmqaI1ji4pqGPENtkTn4TMsrmZfZtLwSmRtCMPOers/qdLZ5Xl6eevfuHXi8Y8cOpaamyu/3q6KiQps2bVKHDh3UpUsXrVmzRpKUm5urrl27yuVyyeFwaNeuXbIsS2vXrlW3bt3qEgMAgDNSnfa8t2/frlatWgUen3feebrxxhs1cOBAORwO3XTTTWrfvr1atmyptLQ0paSkyOFwKCMjQ5I0c+ZMTZgwQX6/X8nJyerUqVP9rA0AAGcAm2VZVqhD1ERFhb9Ww+ZtJq0KSo4dc65XcXFpUJZdU6YNKUlkbgim5ZXMy2xaXonMDcGYYXMAABA6lDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMPUqLwLCgo0ZMgQSVJhYaF69eqlIUOGaMiQIXrzzTclScuXL1f//v01cOBAvf/++5KksrIyjR07VqmpqbrrrrtUUlIiSdq8ebMGDBig2267TU8//XQw1gsAgEYrsroZFi1apNdff10xMTGSpM8//1zDhg3T8OHDA/MUFxcrKytLr776qnw+n1JTU9WzZ09lZ2crMTFRY8eO1apVq5SZmakpU6Zo+vTpWrBggVq1aqW7775bhYWF6tChQ/DWEgCARqTaPe+EhAQtWLAg8Hjr1q364IMPdPvtt2vy5MnyeDzasmWLOnfurKioKLndbiUkJGjbtm3Kz89Xr169JEm9e/dWXl6ePB6PysvLlZCQIJvNpuTkZOXl5QVvDQEAaGSqLe9+/fopMvI/O+hJSUl64IEHtHTpUrVq1UoLFy6Ux+OR2+0OzON0OuXxeKpMdzqdKi0tlcfjkcvlqjJvaWlpfa4TAACNWrXD5ifq27evYmNjA/+dnp6ubt26yev1Bubxer1yu91yuVyB6V6vV7GxsVWmHT+9Ona7TXFxTWsbNyhCncNujwh5htoic/CZllcyL7NpeSUyN4RQ5K11eY8YMUJTp05VUlKS8vLy1KFDByUlJWn+/Pny+XwqLy9XUVGREhMT1aVLF61Zs0ZJSUnKzc1V165d5XK55HA4tGvXLrVq1Upr167VmDFjqn1dv9/SgQOHa5SxeXN39TP9AjXNESxxcU1DnqG2yBx8puWVzMtsWl6JzA0hmHlP12e1Lu8ZM2YoPT1dDodDzZo1U3p6ulwul4YMGaLU1FRZlqXx48crOjpaKSkpSktLU0pKihwOhzIyMiRJM2fO1IQJE+T3+5WcnKxOnTr9srUDAOAMYrMsywp1iJqoqPDXas+7zaRVQcmxY871Ki4O7TF6076VSmRuCKbllczLbFpeicwNIRR73lykBQAAw1DeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGCYyJrMVFBQoMcff1xZWVn64osvlJ6eLrvdrqioKM2dO1fNmjXTrFmztGnTJjmdTklSZmamHA6HJk6cqH379snpdGru3LmKj4/X5s2bNXv2bNntdiUnJ2vMmDFBXUkAABqTave8Fy1apClTpsjn80mSZs+eralTpyorK0t9+/bVokWLJEmFhYV64YUXlJWVpaysLLndbmVnZysxMVHLli3TzTffrMzMTEnS9OnTlZGRoezsbBUUFKiwsDCIqwgAQONSbXknJCRowYIFgcfz5s3TRRddJEny+/2Kjo5WZWWldu7cqWnTpum2227TihUrJEn5+fnq1auXJKl3797Ky8uTx+NReXm5EhISZLPZlJycrLy8vGCsGwAAjVK1w+b9+vXTN998E3h89tlnS5I2bdqkJUuWaOnSpTp8+LAGDx6sYcOGye/3a+jQoerYsaM8Ho/cbrckyel0qrS0VB6PRy6XK7A8p9Op3bt3VxvUbrcpLq5prVcwGEKdw26PCHmG2iJz8JmWVzIvs2l5JTI3hFDkrdEx7xO9+eabeuaZZ/T8888rPj4+UNgxMTGSpB49emjbtm1yuVzyer2SJK/Xq9jY2CrTjp9eHb/f0oEDh2uUr3lzdx3WquZqmiNY4uKahjxDbZE5+EzLK5mX2bS8EpkbQjDznq7Pan22+T/+8Q8tWbJEWVlZatWqlSRpx44dSk1Nld/vV0VFhTZt2qQOHTqoS5cuWrNmjSQpNzdXXbt2lcvlksPh0K5du2RZltauXatu3br9glUDAODMUqs9b7/fr9mzZ+vcc8/V2LFjJUndu3fXvffeqxtvvFEDBw6Uw+HQTTfdpPbt26tly5ZKS0tTSkqKHA6HMjIyJEkzZ87UhAkT5Pf7lZycrE6dOtX/mgEA0EjZLMuyQh2iJioq/LUaNm8zaVVQcuyYc72Ki0uDsuyaMm1ISSJzQzAtr2ReZtPySmRuCEYMmwMAgNCivAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYhvIGAMAwlDcAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMDUq74KCAg0ZMkSStHPnTqWkpCg1NVXTp09XZWWlJGn58uXq37+/Bg4cqPfff1+SVFZWprFjxyo1NVV33XWXSkpKJEmbN2/WgAEDdNttt+npp58OxnoBANBoVVveixYt0pQpU+Tz+SRJjz76qO677z4tW7ZMlmVp9erVKi4uVlZWlnJycvTiiy9q3rx5Ki8vV3Z2thITE7Vs2TLdfPPNyszMlCRNnz5dGRkZys7OVkFBgQoLC4O7lgAANCLVlndCQoIWLFgQeFxYWKhLL71UktS7d2+tW7dOW7ZsUefOnRUVFSW3262EhARt27ZN+fn56tWrV2DevLw8eTwelZeXKyEhQTabTcnJycrLywvS6gEA0PhEVjdDv3799M033wQeW5Ylm80mSXI6nSotLZXH45Hb7Q7M43Q65fF4qkw/fl6Xy1Vl3t27d1cb1G63KS6uac3XLIhCncNujwh5htoic/CZllcyL7NpeSUyN4RQ5K22vE8UEfGfnXWv16vY2Fi5XC55vd4q091ud5XpPzdvbGxsta/r91s6cOBwjTI2b+6ufqZfoKY5giUurmnIM9QWmYPPtLySeZlNyyuRuSEEM+/p+qzWZ5tffPHFWr9+vSQpNzdX3bp1U1JSkvLz8+Xz+VRaWqqioiIlJiaqS5cuWrNmTWDerl27yuVyyeFwaNeuXbIsS2vXrlW3bt1+waoBAHBmqfWed1pamqZOnap58+apXbt26tevn+x2u4YMGaLU1FRZlqXx48crOjpaKSkpSktLU0pKihwOhzIyMiRJM2fO1IQJE+T3+5WcnKxOnTrV+4oBANBY2SzLskIdoiYqKvy1GjZvM2lVUHLsmHO9iotLg7LsmjJtSEkic0MwLa9kXmbT8kpkbghGDJsDAIDQorwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYhvIGAMAwkaEOgJ+4YmMUE13z/x2nu0H7iY74jspz6EhdYwEAwhDlHSZioiPVZtKqel/ujjnXy1PvSwUAhBLD5gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBh6nRXsZUrV+rvf/+7JMnn8+mLL75QTk6ORo4cqTZt2kiSUlJSdN1112n58uXKyclRZGSkRo0apSuuuEJlZWWaOHGi9u3bJ6fTqblz5yo+Pr7eVgoAgMasTuXdv39/9e/fX5I0c+ZM3XLLLfr88881bNgwDR8+PDBfcXGxsrKy9Oqrr8rn8yk1NVU9e/ZUdna2EhMTNXbsWK1atUqZmZmaMmVK/awRAACN3C8aNv/ss8/073//W4MGDdLWrVv1wQcf6Pbbb9fkyZPl8Xi0ZcsWde7cWVFRUXK73UpISNC2bduUn5+vXr16SZJ69+6tvLy8elkZAADOBL+ovJ977jmNHj1akpSUlKQHHnhAS5cuVatWrbRw4UJ5PB653e7A/E6nUx6Pp8p0p9Op0tLSXxIDAIAzSp2GzSXp0KFD+vrrr9WjRw9JUt++fRUbGxv47/T0dHXr1k1erzfwHK/XK7fbLZfLFZju9XoDz/s5drtNcXFN6xq3XoVLjpoKh7x2e0RY5KgN0zKbllcyL7NpeSUyN4RQ5K1zeW/cuFF/+MMfAo9HjBihqVOnKikpSXl5eerQoYOSkpI0f/58+Xw+lZeXq6ioSImJierSpYvWrFmjpKQk5ebmqmvXrtW+nt9v6cCBwzXK1ry5u/qZfoGa5qiNYGYORt7aiotrGhY5asO0zKbllczLbFpeicwNIZh5T9cNdS7v7du3q2XLloHHM2bMUHp6uhwOh5o1a6b09HS5XC4NGTJEqampsixL48ePV3R0tFJSUpSWlqaUlBQ5HA5lZGTUNQYAAGecOpf3nXfeWeVxhw4dlJOTc9J8AwcO1MCBA6tMi4mJ0VNPPVXXlwYA4IzGRVoAADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYJg635gEMI0rNkYx0bXb5Gt6q9YjvqPyHDpSl1gAUGuUN84YMdGRajNpVVCWvWPO9fIEZckAcDKGzQEAMAzlDQCAYShvAAAMQ3kDAGAYTlhDndX27G3O3AaA+kF5o86CdfY2Z24DwM9j2BwAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqnzjUluvvlmud0/3SWqZcuWGjlypCZNmiSbzab27dtr+vTpioiI0PLly5WTk6PIyEiNGjVKV1xxhcrKyjRx4kTt27dPTqdTc+fOVXx8fL2tFAAAjVmdytvn80mSsrKyAtNGjhyp++67T5dddpmmTZum1atX65JLLlFWVpZeffVV+Xw+paamqmfPnsrOzlZiYqLGjh2rVatWKTMzU1OmTKmfNQIAoJGr07D5tm3bdOTIEQ0fPlxDhw7V5s2bVVhYqEsvvVSS1Lt3b61bt05btmxR586dFRUVJbfbrYSEBG3btk35+fnq1atXYN68vLz6WyMAABq5Ou15N2nSRCNGjNCAAQO0Y8cO3XXXXbIsSzabTZLkdDpVWloqj8cTGFo/Nt3j8VSZfmze6tjtNsXFNa1L3HoXLjlqyrS8Epnrwm6PCHmG2jIts2l5JTI3hFDkrVN5t23bVq1bt5bNZlPbtm0VFxenwsLCwN+9Xq9iY2Plcrnk9XqrTHe73VWmH5u3On6/pQMHDtcoX/Pm7upn+gVqmqM2gpk5GHkl8zKbuF3URlxc05BnqC3TMpuWVyJzQwhm3tN9btVp2HzFihWaM2eOJOmHH36Qx+NRz549tX79eklSbm6uunXrpqSkJOXn58vn86m0tFRFRUVKTExUly5dtGbNmsC8Xbt2rUsMAADOSHXa87711lv14IMPKiUlRTabTY888ojOOussTZ06VfPmzVO7du3Ur18/2e12DRkyRKmpqbIsS+PHj1d0dLRSUlKUlpamlJQUORwOZWRk1Pd6AQDQaNWpvKOiok5ZuEuWLDlp2sCBAzVw4MAq02JiYvTUU0/V5aUBADjjcZEWAAAMQ3kDAGAYyhsAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADFOnK6wBaBiu2BjFRNf8n2lNb75yxHdUnkNH6hoLQIhR3kAYi4mOVJtJq+p9uTvmXC9PvS8VQENh2BwAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhqG8AQAwDOUNAIBhKG8AAAxDeQMAYBjKGwAAw1DeAAAYJjLUAQA0Lq7YGMVE1/yjpXlzd43mO+I7Ks+hI3WNBTQqlDeAehUTHak2k1bV+3J3zLlennpfKmCmOpV3RUWFJk+erD179qi8vFyjRo3SOeeco5EjR6pNmzaSpJSUFF133XVavny5cnJyFBkZqVGjRumKK65QWVmZJk6cqH379snpdGru3LmKj4+vz/UCAKDRqlN5v/7664qLi9Njjz2m/fv367/+6780evRoDRs2TMOHDw/MV1xcrKysLL366qvy+XxKTU1Vz549lZ2drcTERI0dO1arVq1SZmampkyZUm8rBQBAY1anE9auueYajRs3LvDYbrdr69at+uCDD3T77bdr8uTJ8ng82rJlizp37qyoqCi53W4lJCRo27Ztys/PV69evSRJvXv3Vl5eXv2sDQAAZ4A67Xk7nU5Jksfj0b333qv77rtP5eXlGjBggDp27KhnnnlGCxcu1IUXXii3213leR6PRx6PJzDd6XSqtLS0HlYFAIAzQ51PWPvuu+80evRopaam6sYbb9ShQ4cUGxsrSerbt6/S09PVrVs3eb3ewHO8Xq/cbrdcLldgutfrDTzv59jtNsXFNa1r3HoVLjlqyrS8Epkbgml5pdBnttsjQp6htsgcfKHIW6fy3rt3r4YPH65p06bp97//vSRpxIgRmjp1qpKSkpSXl6cOHTooKSlJ8+fPl8/nU3l5uYqKipSYmKguXbpozZo1SkpKUm5urrp27Vrta/r9lg4cOFyjfDX96Uld1TRHbQQzczDySuZlZruoiu2i9uLimoY8Q22ROfiCmfd0/57qVN7PPvusDh06pMzMTGVmZkqSJk2apEceeUQOh0PNmjVTenq6XC6XhgwZotTUVFmWpfHjxys6OlopKSlKS0tTSkqKHA6HMjIy6r5mAACcYepU3lOmTDnl2eE5OTknTRs4cKAGDhxYZVpMTIyeeuqpurw0AABnPC6PCgCAYbjCGoAzWrAu5ypxSVcED+UN4IwWrMu5SlzSFcHDsDkAAIahvAEAMAzlDQCAYShvAAAMQ3kDAGAYyhsAAMNQ3gAAGIbfeQOAYYJ1YRkuKmMOyhsADBOsC8twURlzMGwOAIBhKG8AAAxDeQMAYBiOeQMAgo6T7OoX5Q0ACDpOsqtfDJsDAGAY9rwBADhBsIb5pfoZ6qe8AQA4QbCG+aX6Gepn2BwAAMNQ3gAAGIbyBgDAMJQ3AACGobwBADAM5Q0AgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDCUNwAAhgnZjUkqKys1Y8YMffnll4qKitKsWbPUunXrUMUBAMAYIdvzfvfdd1VeXq6XX35Z999/v+bMmROqKAAAGCVk5Z2fn69evXpJki655BJt3bo1VFEAADCKzbIsKxQv/NBDD+nqq6/WH//4R0nS5ZdfrnfffVeRkdxiHACAnxOyPW+XyyWv1xt4XFlZSXEDAFADISvvLl26KDc3V5K0efNmJSYmhioKAABGCdmw+bGzzb/66itZlqVHHnlE5513XiiiAABglJCVNwAAqBsu0gIAgGEobwAADEN5AwBgGMobAADDUN61VFlZGeoIdca5iTimuLg41BFqrby8PNQRauXf//53qCP8IiZ+XpiYua4o7xraunWrdu/erYiICGMKfP369Vq2bJlefvllSZLNZgtxoup9+umn2rBhgz788MNQR6mRDRs26N133w11jFpZt26dpk+frpKSksCHXbh/6K1bt04vvPCC1qxZE5gWzpk/+eQT3XDDDXrvvfdCHaXGPv30U61bt04fffSRJDM+LwoKCrRhwwZ98MEHkn7KHM7bxTGFhYV69913tXPnTvl8vjotg/KuxrENYfXq1Zo8ebL27NljRIFv3LhRc+fOlcvl0jPPPKPFixeHOlK1Nm7cqBkzZqiwsFAvvfSS1q9fH+pI1SooKNAjjzyitWvXhjpKjXz00Ud66aWXNHHiRMXHx+vHH3+UFN4f1Pn5+Xr00Ud12WWXyev16uDBg5LCN/NHH32kZ555Rn379lWTJk1CHadG1q9fr5kzZ2rr1q169tlnq3xJClcff/yxZs6cqZ07d+rZZ5/VE088ISn8C/zDDz/UnDlztHbtWi1dulRPPfWUDh06VOvlcD3Sahz7gPjmm28UFRWltLQ0zZo1S23atFFlZaUiIsLr+49lWaqsrNSKFSs0dOhQ/elPf1KLFi0C30wtywq7D71jmV977TUNHTpUt9xyizwej3bu3KmysrLA9e/DUYsWLdSiRQstXrxYTZo0UVlZmf7whz+E5XZx+PBhZWRkKCUlRQcPHtSdd96pgwcPqnv37nrggQdCHfG08vPzNWrUKNntdr322mtatmyZOnXqpIkTJ4Y62kn+9a9/6fnnn9dDDz2kkpISLV26VN26dVNkZGTYbRPST9vF0aNH9corr2jIkCG65ZZbZLPZdPDgQX388cfq0aNHqCOe5FjmY59xN998sy6//HJdffXVcjqduvvuu8PuM+54ubm5+vOf/6w+ffro888/19tvv62FCxfq3nvvldPprPFywm9rCkOlpaVq37695s2bp2uuuUZTp07Vzp07w3IP3GazyW636/zzz1d0dLQkqaKiQiUlJYG/h5tjmS+44AJFRUWpoqJCq1at0vbt2zV9+vTAN+pw1KxZM40ePVr33HOPJkyYoPnz54c60inZbDY5nU49+OCDWrx4sR5//HHNmzdPzz33nD7//HMtXLgw1BFPq1WrVlq7dq1WrFihefPmaf78+dq0aZOefvrpUEc7iWVZmjFjhhITE/Xb3/5WcXFxcjgcioiICMu9QZvNJofDoS5dumjdunV67733tGTJEhUWFmry5Ml6/PHHQx3xJMcyX3TRRTpw4IAOHDig5s2ba8SIEXr//ff1+uuvhzriaVVWViomJkbff/+9JOnCCy/U9ddfr8jISG3evLlWy6K8a8DtduvWW29VTEyMBg8erKuuukpTpkxRUVFRWH6blqSrr75aV199tSTpxx9/VExMjCTp/vvvD9vjydddd51uvPFGORwOzZ07V2lpaVq2bJmOHDmio0ePhjreKcXGxmrz5s3asGGDWrZsqZiYGOXl5YXlB7VlWerevbvuuOMO9ezZU7GxsYqPj9eUKVPk9/tDHe+02rZtK4fDoe+++04HDx5Us2bNlJ6eLo/HE3bvc2Jiotq2bSvppy8dBw8e1N/+9jdJ4fnF+ZirrrpK1157rRYuXKibbrpJDz74oLKzs3Xo0KE6H5MNttatW+vr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rrnGeuCBB6yxY8daZWVllmVZVU7fD7dr4pI5+EzLa1lkbgim5bUsModScXGxtWTJEmv48OHW7t27Az9la6ifsTWq8t61a1dgA1i/fr01btw4a9++fVZFRYX16KOPWn/9618tj8djWdZPG8jo0aNDfk1cMpP3VMhM3lMhc3j57rvvrHXr1oXktRvNsLnf79crr7wih8Oh/fv3a+3atSovL1dRUZEiIyM1ZswYRUVF6Y033pDP59OMGTM0fPjwkF4Tl8zkJXNoMpuWl8wNy6rBtcoty9I555yjbt26Be6F3pAaxQlrH374ob788ksdPHhQv/vd71RcXKwePXro7bffliT16NFDnTt3ls/nU3R0tA4fPqy9e/cqISGBzI04s2l5yUxeMoc2s3TysXm73a4OHTooKioqcHLd8fcRHz9+vNLT03Xuuec2aE7j97zXr1+v5557TvHx8YqOjtbGjRv19ttvq6CgQFdeeaUqKyv11ltvaefOnYqOjpYkNW3aNKQbCJnJS2a2CzKHV+ZjjhX3ypUrNXXqVOXk5GjChAny+XyKiIgInGTn8Xj00EMP6Z577mnw4pYML++8vDxNnTpVDz/8sPr376+WLVvq6NGjOuecc/T000+rqKhIV1xxhbp3767WrVuHOq4kMpP31MhM3lMhc8PZvXt34HadGzZsUG5urpYuXarZs2erRYsWmjx5srxer6KiouTxeDRp0iQNHz68fm4yUgfGlrdlWdq9e7fi4+PVpEkTHT16VK+++qqaNGmidu3a6dtvv9WTTz6pgwcPqk+fPoHnkLlxZzYtL5nJS+bQH7k18di8sffzttls+tOf/qSYmBilp6dr9+7dGjlypG644QZJP12h59Zbb1WHDh2qPCeUyBx8puU99vpkDi7T8h57fTIH37Fj85Zl6Z133lFxcbFuuukmvf322/rkk08UGRmpzp07a8aMGYFj8/fee2/Ih/iN3fOWpCZNmqhv37668sor1bRpU3Xs2FGSNGXKFPl8vsAGEg7f7I4hc/CZllcic0MwLa9E5mAz+th8Yzjb3Ofz6a233lJubq727Nmj7t276/7775cU/EvU1RWZg8+0vBKZG4JpeSUyB0NeXp6mT5+uZ599Vu3atdNrr72mgoICHT58WBs3btSECRPUpk0bffvtt4Eh/nBi7LD58aKjo9WvXz8dOnRIsbGxYbWBnA6Zg8+0vBKZG4JpeSUy17fTHZvv2LGjzjnnHP3jH//Qk08+qRkzZlQ5Nh/q3MdrFHvexxw9ejRwIftwu33c6ZA5+EzLK5G5IZiWVyJzfSorK9M777yjN99886Rj8zNnzjzp2Hy4CY93sZ4c20Akhc0GUh0yB59peSUyNwTT8kpkrk8mHZs/lUa15w0AQG2E+7H502kUx7wBAKiLcD42/3PY8wYAnPHC9dj86VDeAAAYJry/WgAAgJNQ3gAAGIbyBgDAMJQ3cIZYuXKlVq9e/YuX880332jgwIEnTX/++ee1ZcuWX7x8ANXjp2LAGaJ///5BXf7dd98d1OUD+A/KG2gkju1Zezwe7d+/X6NHj9aCBQvUpk0bRUVFqW3btmrWrJkGDRqkWbNmacuWLaqoqNDYsWPVp08fZWRkaOPGjbIsS3fccYeuvfba075WSUmJRo4cqZKSEv3xj3/U6NGjNWnSJF133XXau3ev1qxZo7KyMu3atUt33XWX+vfvr6VLl+q1115TRESEunTporS0tAZ8d4DGhfIGGpHDhw9r8eLFKikp0YABA+T3+3XPPffo4osv1oIFCyRJq1ev1v79+7VixQoVFxdryZIlcjgc+uabb5STkyOfz6eBAweqZ8+eio2NPe3rPPbYY2ratKluv/12XXXVVVX+7vF49OKLL2rHjh0aOXKk+vfvr5UrV2rq1Km65JJLtGzZsiq/qwVQOxzzBhqR7t27KyIiQs2aNVNsbKxKSkrUtm3bKvNs375dl1xyiSSpefPmGj9+vL766isVFhZqyJAhuvPOO3X06FF9++23p32dCy+8UG63W3a7Xb/73e+0ffv2k/4uSeeee67Ky8slSY8++qhycnI0ePBgffvtt2F7zWjABJQ30IgUFhZKkvbu3SuPx6Nf//rXJ10pql27dvrss88kSaWlpRoxYoTatWunyy67TFlZWfqf//kfXXvttWrZsuVpX6eoqEher1dHjx7Vli1b1L59+yp/P9VlJZcvX66ZM2dqyZIl+uKLL/Tpp5/+0tUFzliMWQGNyN69e/XnP/9ZpaWlmj59umbMmHHSPFdddZXy8vKUkpIiv9+v0aNHq3fv3tqwYYNSU1N1+PBh9enTRy6X67Sv86tf/Urjx49XSUmJrrvuOp1//vnVZrvgggt066236qyzztJvfvMbderU6ZesKnBG4/KoQCOxcuVKff3115owYUKoowAIMva8AZzSyy+/rH/+858nTf/rX/+qzp07hyARgGPY8wYAwDCcsAYAgGEobwAADEN5AwBgGMobAADDUN4AABiG8gYAwDD/B/iE3iEfFhOpAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diamond_data.groupby('price_bins')['price'].count().plot.bar()\n",
"plt.xticks(rotation=45)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5.5. Decision Tree Discretization"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43\n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31\n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31\n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63\n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"diamond_data = sns.load_dataset('diamonds')\n",
"\n",
"diamond_data.head()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" carat | \n",
" cut | \n",
" color | \n",
" clarity | \n",
" depth | \n",
" table | \n",
" price | \n",
" x | \n",
" y | \n",
" z | \n",
" price_tree | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0.23 | \n",
" Ideal | \n",
" E | \n",
" SI2 | \n",
" 61.5 | \n",
" 55.0 | \n",
" 326 | \n",
" 3.95 | \n",
" 3.98 | \n",
" 2.43 | \n",
" 0.127435 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.21 | \n",
" Premium | \n",
" E | \n",
" SI1 | \n",
" 59.8 | \n",
" 61.0 | \n",
" 326 | \n",
" 3.89 | \n",
" 3.84 | \n",
" 2.31 | \n",
" 0.127435 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.23 | \n",
" Good | \n",
" E | \n",
" VS1 | \n",
" 56.9 | \n",
" 65.0 | \n",
" 327 | \n",
" 4.05 | \n",
" 4.07 | \n",
" 2.31 | \n",
" 0.127435 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.29 | \n",
" Premium | \n",
" I | \n",
" VS2 | \n",
" 62.4 | \n",
" 58.0 | \n",
" 334 | \n",
" 4.20 | \n",
" 4.23 | \n",
" 2.63 | \n",
" 0.127435 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.31 | \n",
" Good | \n",
" J | \n",
" SI2 | \n",
" 63.3 | \n",
" 58.0 | \n",
" 335 | \n",
" 4.34 | \n",
" 4.35 | \n",
" 2.75 | \n",
" 0.127435 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" carat cut color clarity depth table price x y z \\\n",
"0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 \n",
"1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 \n",
"2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 \n",
"3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 \n",
"4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 \n",
"\n",
" price_tree \n",
"0 0.127435 \n",
"1 0.127435 \n",
"2 0.127435 \n",
"3 0.127435 \n",
"4 0.127435 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tree_model = DecisionTreeClassifier(max_depth=3)\n",
"\n",
"tree_model.fit(diamond_data['price'].to_frame(), diamond_data['cut'])\n",
"\n",
"diamond_data['price_tree']= tree_model.predict_proba(diamond_data['price'].to_frame())[:,1]\n",
"\n",
"diamond_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.12743549, 0.10543414, 0.0964318 , 0.11666667, 0.15124195,\n",
" 0.08576481, 0.05252665, 0.08874839])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diamond_data['price_tree'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 1, 2, 3, 4, 5, 6, 7]),\n",
" [Text(0, 0, '0.05252665337609431'),\n",
" Text(1, 0, '0.08576480990274093'),\n",
" Text(2, 0, '0.08874839011825313'),\n",
" Text(3, 0, '0.09643179765130985'),\n",
" Text(4, 0, '0.1054341405788541'),\n",
" Text(5, 0, '0.11666666666666667'),\n",
" Text(6, 0, '0.12743549236440233'),\n",
" Text(7, 0, '0.15124195032198712')])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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mTNnmDx5Mi1atODUqVN89tlnVK9enfj4eBYsWICzszNt27alQoUKlm5qnsyePZuTJ08ya9YsJk2ahKOjIwaDgZ49ez41E97du3cpUqSIBVv6fCZPnszdu3eZOXMmgwcPxmQy4ejoyPjx47G3tyc0NJTr16/zww8/qCoAn5Sdnc2ECRNo2bIly5cvp0yZMpw6dYry5cszevRoli9fjqIovP3225QrV87SzX1ue/fu5ejRowwbNoyRI0dSvHhx0tPTzV0SubPh6fV6Vc6FsHbtWuLi4hg7diynT59myZIlTJs2DeCpydMs+dlT16Wnhen1eho2bGjuLzx69ChHjx6lbt26VKlShQkTJpCYmIijo6MqD1h3d3fzgCYfHx/c3NzYvn07hw8fpkWLFrzzzjsMGDBAVUGvKApXr17Fy8sLT09POnbsSL169bCxseHnn38GoHr16ubuCjVeVeR69913MRgM9O/fn/fee4/q1avz66+/MnfuXIKCgrC1tcXOzk5VQQ/QqVMnhg8fTseOHenYsSPvvfceY8aMISgoiG+//ZbAwEDu37+v2qBPTEzEw8OD4sWLExUVRd26dQkICADg008/JSIigu7du1u4lS+mQIECKIrCunXrqFevHhUrViQmJoaYmBi8vLzMgajG8yaAwWAwd2mWL1+epKQkjEYjNjY2T420t+RnT71ntldIURTOnj1LYmLin/oLf//9d/M7iAE8PDxUdcAqikJcXBwXL16kbt265nAA8PT0pEKFCly8eBFnZ2e+++47ypcvb+EWP58jR47w9ddfExcXh6urK61ataJIkSK0aNGC+vXrM2fOHGJiYrC2tlZl0JtMJlavXs3hw4epWLGieX70jh07UqlSJZo3b45Op8PR0VF1MzaePHmSa9euUa5cOfr164eXlxfvvfceOp2OGTNmkJWVhV6vB1Dd2BH4b/fErFmzuH79Or6+vkRGRhITE8OtW7cAaNiwoXm+DrV58txStWpVLl68yLZt22jatCk+Pj68/fbbODg4oCiKqo7NXLn1Xb16lXbt2tGsWTPg8ZM+ycnJ2NjYsHv3blauXGl+t4YlyZX9MyiKQp8+fShQoAApKSk0atSIzp07A49nVjt58iT3799X5eNZJpOJfv36UaJECa5fv0716tVZvnw5nTt3xsrKit69e2MwGLh586b5PeBqc/v2bQwG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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"diamond_data.groupby(['price_tree'])['price'].count().plot.bar()\n",
"plt.xticks(rotation=45)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5.6. Custom Discretization"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_bill | \n",
" tip | \n",
" sex | \n",
" smoker | \n",
" day | \n",
" time | \n",
" size | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 16.99 | \n",
" 1.01 | \n",
" Female | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 2 | \n",
"
\n",
" \n",
" | 1 | \n",
" 10.34 | \n",
" 1.66 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 3 | \n",
"
\n",
" \n",
" | 2 | \n",
" 21.01 | \n",
" 3.50 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 3 | \n",
"
\n",
" \n",
" | 3 | \n",
" 23.68 | \n",
" 3.31 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 2 | \n",
"
\n",
" \n",
" | 4 | \n",
" 24.59 | \n",
" 3.61 | \n",
" Female | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" total_bill tip sex smoker day time size\n",
"0 16.99 1.01 Female No Sun Dinner 2\n",
"1 10.34 1.66 Male No Sun Dinner 3\n",
"2 21.01 3.50 Male No Sun Dinner 3\n",
"3 23.68 3.31 Male No Sun Dinner 2\n",
"4 24.59 3.61 Female No Sun Dinner 4"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"tips_data = sns.load_dataset('tips')\n",
"\n",
"tips_data.head()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 244.000000\n",
"mean 2.998279\n",
"std 1.383638\n",
"min 1.000000\n",
"25% 2.000000\n",
"50% 2.900000\n",
"75% 3.562500\n",
"max 10.000000\n",
"Name: tip, dtype: float64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tips_data['tip'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_bill | \n",
" tip | \n",
" sex | \n",
" smoker | \n",
" day | \n",
" time | \n",
" size | \n",
" tip_bins | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 16.99 | \n",
" 1.01 | \n",
" Female | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 2 | \n",
" 0-3 | \n",
"
\n",
" \n",
" | 1 | \n",
" 10.34 | \n",
" 1.66 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 3 | \n",
" 0-3 | \n",
"
\n",
" \n",
" | 2 | \n",
" 21.01 | \n",
" 3.50 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 3 | \n",
" 3-7 | \n",
"
\n",
" \n",
" | 3 | \n",
" 23.68 | \n",
" 3.31 | \n",
" Male | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 2 | \n",
" 3-7 | \n",
"
\n",
" \n",
" | 4 | \n",
" 24.59 | \n",
" 3.61 | \n",
" Female | \n",
" No | \n",
" Sun | \n",
" Dinner | \n",
" 4 | \n",
" 3-7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" total_bill tip sex smoker day time size tip_bins\n",
"0 16.99 1.01 Female No Sun Dinner 2 0-3\n",
"1 10.34 1.66 Male No Sun Dinner 3 0-3\n",
"2 21.01 3.50 Male No Sun Dinner 3 3-7\n",
"3 23.68 3.31 Male No Sun Dinner 2 3-7\n",
"4 24.59 3.61 Female No Sun Dinner 4 3-7"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"buckets = [0, 3, 7, 10]\n",
"\n",
"\n",
"labels = ['0-3', '3-7', '7-10']\n",
"\n",
"\n",
"tips_data['tip_bins'] = pd.cut(tips_data['tip'], bins=buckets, labels=labels, include_lowest=True)\n",
"\n",
"tips_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 1, 2]), [Text(0, 0, '0-3'), Text(1, 0, '3-7'), Text(2, 0, '7-10')])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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ggzEmUAgoFdeeUU7duxQVVVVp762vr5e06ZN+9L1GzZsUE1NTbRGBBCBpFgPAKBzGhoa9Morr2jbtm1R2+aPf/zjqG0LQGQIMhBnysvLdfToUQ0dOlQlJSUaMGCAysvL5Xa71dDQoOnTp+uxxx77yq9vbGzU7Nmz1djYqLvvvltz585VcXGxHnzwQZ07d0579+7VpUuXdPLkST355JPKz8/Xpk2btHPnTrndbo0aNUqLFi36//g3Bq4PBBmIM7Nnz9aRI0eu+JSds2fPaufOnQqHw5o6daruv/9+3XDDDf/z6y9cuKD169crLS1Njz32mO67774rbvf5fHrppZd0/PhxzZ49W/n5+dqxY4eWLVum22+/XZs3b1Zra6uSknj4AKKJ3yEDCSA3N1fJycnq1q2bBg8erJMnT37lfYcOHarMzEx5PB5961vf0ocffvil2yWpd+/eunz5siRpzZo12rJlix5//HGdPn1avJ8QEH0EGYgzbrdb4XD4iutqa2sVCoV08eJFHT169Kofi3fs2DH5/X61traqpqbmS5+57XK5vvQ127Zt0y9+8QtVVlaqtrZW7777bnT+MgDacM4JiDM33HCDgsGgLl261HZda2urnnzySTU3N2vOnDlX/Szt7t27a/78+WpsbNSDDz6oQYMGtfs9b7nlFj3yyCPq0aOHbrzxRt12221R+bsA+BzvZQ3Euerqam3ZskW/+c1vYj0KgC7gCBlIQFu3btWrr776pesXLFig3NzcGEwEoD0cIQMAYABP6gIAwACCDACAAQQZAAADCDIAAAYQZAAADCDIAAAY8H9VMPAcTiVKpAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tips_data.groupby('tip_bins')['tip'].count().plot.bar()\n",
"plt.xticks(rotation=45)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 5.1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Question 1\n",
"\n",
"Which of the following discretization scheme is supervised?\n",
"\n",
"A. K Means Discretization \\\n",
"B. Decision Tree Discretization \\\n",
"C. Equal Width Discretization \\\n",
"D. Equal Frequency Discreatization\n",
"\n",
"Answer: B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Question 2\n",
"\n",
"Which of the following discretization scheme generate bins of equal sizes?\n",
"\n",
"A. K Means Discretization \\\n",
"B. Decision Tree Discretization \\\n",
"C. Equal Frequency Discreatization \\\n",
"D. None of the Above\n",
"\n",
"Answer: D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Question 3\n",
"\n",
"Which of the following discretization scheme generate bins containing equal number of samples ?\n",
"\n",
"A. K Means Discretization \\\n",
"B. Decision Tree Discretization \\\n",
"C. Equal Frequency Discreatization \\\n",
"D. Equal Width Distribution\n",
"\n",
"Answer: C"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 5.2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create 5 bins for the `total_bill` column of the tips dataset using equal frequency discretization. Plot a bar plot displaying the frequence of bills per category."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Bin_no_1', 'Bin_no_2', 'Bin_no_3', 'Bin_no_4', 'Bin_no_5', 'Bin_no_6', 'Bin_no_7', 'Bin_no_8', 'Bin_no_9', 'Bin_no_10']\n"
]
},
{
"data": {
"text/plain": [
"(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),\n",
" [Text(0, 0, 'Bin_no_1'),\n",
" Text(1, 0, 'Bin_no_2'),\n",
" Text(2, 0, 'Bin_no_3'),\n",
" Text(3, 0, 'Bin_no_4'),\n",
" Text(4, 0, 'Bin_no_5'),\n",
" Text(5, 0, 'Bin_no_6'),\n",
" Text(6, 0, 'Bin_no_7'),\n",
" Text(7, 0, 'Bin_no_8'),\n",
" Text(8, 0, 'Bin_no_9'),\n",
" Text(9, 0, 'Bin_no_10')])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"sns.set_style(\"darkgrid\")\n",
"\n",
"tips_data = sns.load_dataset('tips')\n",
"\n",
"tips_data.head()\n",
"\n",
"\n",
"discretised_bill, bins = pd.qcut(tips_data['total_bill'], 10, labels=None, retbins=True, precision=3, duplicates='raise')\n",
"\n",
"pd.concat([discretised_bill, tips_data['total_bill']], axis=1).head(10)\n",
"\n",
"bin_labels = ['Bin_no_' +str(i) for i in range(1,11)]\n",
"print(bin_labels)\n",
"\n",
"tips_data['bill_bins'] = pd.cut(x=tips_data['total_bill'], bins=bins, labels=bin_labels, include_lowest=True)\n",
"tips_data.head(10)\n",
"\n",
"tips_data.groupby('bill_bins')['total_bill'].count().plot.bar()\n",
"plt.xticks(rotation=45)"
]
},
{
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}