├── LICENSE ├── README.md ├── Section 2 ├── 00_market_basket_analysis.ipynb ├── 01_prepare_data.ipynb ├── 02_apriori_algorithm.ipynb ├── 03_association_rules.ipynb ├── 04_visualize_results.ipynb ├── groceries.csv └── grocery_transactions.csv ├── Section 3 ├── 01_curse_of_dimensionality.ipynb ├── 02_pca_key_ideas.ipynb ├── 03_the_math_behind_pca.ipynb ├── 04_wholesale_data.ipynb └── wholesale_customers_data.csv └── Section 4 ├── 01_concepts.ipynb ├── 02_kmeans_implementation.ipynb ├── 03_kmeans_evaluation.ipynb ├── 04_wholesale_data.ipynb └── data └── wholesale_customers_data.csv /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Packt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | # Hands-On Unsupervised Learning with Python [Video] 5 | This is the code repository for [Hands-On Unsupervised Learning with Python [Video]](https://www.packtpub.com/application-development/hands-unsupervised-learning-python-video?utm_source=github&utm_medium=repository&utm_campaign=9781788992855), published by [Packt](https://www.packtpub.com/?utm_source=github). It contains all the supporting project files necessary to work through the video course from start to finish. 6 | ## About the Video Course 7 | Use Unsupervised Learning tools like Market Basket Analysis, Principal Component Analysis, and Clustering algorithms to discover and extract hidden yet valuable structure in your customer data. Start by building your own recommendation engine using association rules that result from market basket analysis. Extract informative signals from noisy data using principal component analysis. Capitalize on the ability of cluster algorithms to identify natural groupings of your data to optimize, for instance, the targeting of your marketing efforts. 8 | 9 | After watching this course and experimenting with the provided code, you will have required the requisite skills to apply key principles of Unsupervised Learning using Python. 10 | 11 |

What You Will Learn

12 |
13 |
23 | 24 | ## Instructions and Navigation 25 | ### Assumed Knowledge 26 | To fully benefit from the coverage included in this course, you will need:
27 | Prior Python programming experience is a requirement, and experience with data analysis and machine learning analysis will be helpful. 28 | ### Technical Requirements 29 | This course has the following software requirements:
30 | Minimum Hardware Requirements
For successful completion of this course, students will require the computer systems with at least the following:
Recommended Hardware Requirements
For an optimal experience with hands-on labs and other practical activities, we recommend the following configuration:
Software Requirements
31 | ## Related Products 32 | * [Hands-On Machine Learning with Python and Scikit-Learn [Video]](https://www.packtpub.com/big-data-and-business-intelligence/hands-machine-learning-python-and-scikit-learn-video?utm_source=github&utm_medium=repository&utm_campaign=9781788991056) 33 | 34 | * [Hands-on Machine Learning with TensorFlow [Video]](https://www.packtpub.com/big-data-and-business-intelligence/hands-machine-learning-tensorflow-video?utm_source=github&utm_medium=repository&utm_campaign=9781789136999) 35 | 36 | * [Hands-On Test Driven Development with Python [Video]](https://www.packtpub.com/application-development/hands-test-driven-development-python-video?utm_source=github&utm_medium=repository&utm_campaign=9781789138313) 37 | 38 | ### Download a free PDF 39 | 40 | If you have already purchased a print or Kindle version of this book, you can get a DRM-free PDF version at no cost.
Simply click on the link to claim your free PDF.
41 |

https://packt.link/free-ebook/9781789348279

-------------------------------------------------------------------------------- /Section 2/00_market_basket_analysis.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": { 7 | "hide_input": false, 8 | "scrolled": true, 9 | "slideshow": { 10 | "slide_type": "skip" 11 | } 12 | }, 13 | "outputs": [], 14 | "source": [ 15 | "from jupyterthemes import jtplot\n", 16 | "jtplot.style(theme='onedork', context='talk', fscale=1.4, spines=False, gridlines='--', ticks=True, grid=False, figsize=(6, 4.5))\n", 17 | "from os.path import join\n", 18 | "import pandas as pd\n", 19 | "import numpy as np\n", 20 | "import seaborn as sns\n", 21 | "current_palette = sns.color_palette()\n", 22 | "%matplotlib inline\n", 23 | "import matplotlib.pyplot as plt\n", 24 | "from matplotlib_venn import venn2\n", 25 | "from matplotlib import rcParams\n", 26 | "from matplotlib.ticker import FuncFormatter\n", 27 | "from scipy.stats import fisher_exact\n", 28 | "from ipywidgets import interact, IntSlider, FloatSlider" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": { 34 | "hide_input": true, 35 | "slideshow": { 36 | "slide_type": "slide" 37 | } 38 | }, 39 | "source": [ 40 | "### Simulation of Association Rule Metrics" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 4, 46 | "metadata": { 47 | "hide_input": true, 48 | "scrolled": false, 49 | "slideshow": { 50 | "slide_type": "fragment" 51 | } 52 | }, 53 | "outputs": [ 54 | { 55 | "data": { 56 | "application/vnd.jupyter.widget-view+json": { 57 | "model_id": "39028cfe907840698f088856e4edfd7b", 58 | "version_major": 2, 59 | "version_minor": 0 60 | }, 61 | "text/html": [ 62 | "

Failed to display Jupyter Widget of type interactive.

\n", 63 | "

\n", 64 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 65 | " that the widgets JavaScript is still loading. If this message persists, it\n", 66 | " likely means that the widgets JavaScript library is either not installed or\n", 67 | " not enabled. See the Jupyter\n", 68 | " Widgets Documentation for setup instructions.\n", 69 | "

\n", 70 | "

\n", 71 | " If you're reading this message in another frontend (for example, a static\n", 72 | " rendering on GitHub or NBViewer),\n", 73 | " it may mean that your frontend doesn't currently support widgets.\n", 74 | "

\n" 75 | ], 76 | "text/plain": [ 77 | "interactive(children=(IntSlider(value=100, description='antecedent', max=1000, min=5, step=5), IntSlider(value=100, description='consequent', max=1000, min=5, step=5), FloatSlider(value=0.5, description='joint_percent', max=1.0, min=0.01), IntSlider(value=500, description='total', max=1000, min=10, step=10), Output()), _dom_classes=('widget-interact',))" 78 | ] 79 | }, 80 | "metadata": {}, 81 | "output_type": "display_data" 82 | } 83 | ], 84 | "source": [ 85 | "total_widget = IntSlider(min=10, max=1000, step=10, value=500)\n", 86 | "antecedent_widget = IntSlider(min=5, max=1000, step=5, value=100)\n", 87 | "consequent_widget = IntSlider(min=5, max=1000, step=5, value=100)\n", 88 | "joint_widget = FloatSlider(min=.01, max=1.0, value=.5)\n", 89 | "\n", 90 | "def plot_metrics(antecedent, consequent, joint_percent, total):\n", 91 | " \"\"\"Interactive Venn Diagram of joint transactions and plot of support, confidence, and lift \n", 92 | " Slider Inputs:\n", 93 | " - total: total transactions for all itemsets\n", 94 | " - antecedent, consequent: all transactions involving either itemset\n", 95 | " - joint_percent: percentage of (smaller of) antecedent/consequent involving both itemsets\n", 96 | "\n", 97 | " Venn Diagram Calculations: \n", 98 | " - joint = joint_percent * min(antecedent, consequent)\n", 99 | " - antecedent, consequent: original values - joint transactions\n", 100 | "\n", 101 | " Metric Calculations:\n", 102 | " - Support Antecedent: antecedent/total\n", 103 | " - Support Consequent: Consequent/total\n", 104 | " - Support Joint Transactions: joint/total\n", 105 | " - Rule Confidence: Support Joint Transactions / total\n", 106 | " - Rule Lift: Support Joint Transactions / (Support Antecedent * Support Consequent)\n", 107 | " \"\"\"\n", 108 | "\n", 109 | " fig = plt.figure(figsize=(15, 8))\n", 110 | " ax1 = plt.subplot2grid((2, 2), (0, 0)) \n", 111 | " ax2 = plt.subplot2grid((2, 2), (0, 1))\n", 112 | " ax3 = plt.subplot2grid((2, 2), (1, 0))\n", 113 | " ax4 = plt.subplot2grid((2, 2), (1, 1))\n", 114 | " \n", 115 | " \n", 116 | " joint = int(joint_percent * min(antecedent, consequent))\n", 117 | " \n", 118 | " contingency_table = [[joint, consequent - joint], [antecedent - joint, max(total - antecedent - consequent + joint, 0)]]\n", 119 | " contingency_df = pd.DataFrame(contingency_table, columns=['Consequent', 'Not Consequent'], index=['Antecedent', 'Not Antecedent']).astype(int)\n", 120 | " sns.heatmap(contingency_df, ax=ax1, annot=True, cmap='Blues', square=True, vmin=0, vmax=total, fmt='.0f')\n", 121 | " ax1.set_title('Contingency Table')\n", 122 | " \n", 123 | " v = venn2(subsets=(antecedent - joint, consequent - joint, joint),\n", 124 | " set_labels=['Antecedent', 'Consequent'],\n", 125 | " set_colors=current_palette[:2],\n", 126 | " ax=ax2)\n", 127 | " ax2.set_title(\"{} Transactions\".format(total))\n", 128 | "\n", 129 | " support_antecedent = antecedent / total\n", 130 | " support_consequent = consequent / total\n", 131 | "\n", 132 | " support = pd.Series({'Antecedent': support_antecedent,\n", 133 | " 'Consequent': support_consequent})\n", 134 | " support.plot(kind='bar', ax=ax3,\n", 135 | " color=current_palette[:2], title='Support', ylim=(0, 1), rot=0)\n", 136 | " ax3.yaxis.set_major_formatter(\n", 137 | " FuncFormatter(lambda y, _: '{:.0%}'.format(y)))\n", 138 | "\n", 139 | " support_joint = joint / total\n", 140 | " confidence = support_joint / support_antecedent\n", 141 | " lift = support_joint / (support_antecedent * support_consequent)\n", 142 | "\n", 143 | " _, pvalue = fisher_exact(contingency_table, alternative='greater')\n", 144 | "\n", 145 | " metrics = pd.Series(\n", 146 | " {'Confidence': confidence, 'Lift': lift, 'p-Value': pvalue})\n", 147 | " metrics.plot(kind='bar', ax=ax4,\n", 148 | " color=current_palette[2:5], rot=0, ylim=(0, 2))\n", 149 | " ax3.yaxis.set_major_formatter(\n", 150 | " FuncFormatter(lambda y, _: '{:.0%}'.format(y)))\n", 151 | "\n", 152 | " for ax, series in {ax3: support, ax4: metrics}.items():\n", 153 | " rects = ax.patches\n", 154 | " labels = ['{:.0%}'.format(x) for x in series.tolist()]\n", 155 | " for rect, label in zip(rects, labels):\n", 156 | " height = min(rect.get_height() + .01, 2.05)\n", 157 | " ax.text(rect.get_x() + rect.get_width() / 2,\n", 158 | " height, label, ha='center', va='bottom')\n", 159 | "\n", 160 | " plt.suptitle('Assocation Rule Analysis {Antecedent => Consequent}')\n", 161 | " plt.tight_layout()\n", 162 | " plt.subplots_adjust(top=0.9)\n", 163 | " plt.show()\n", 164 | "\n", 165 | "interact(plot_metrics,\n", 166 | " antecedent=antecedent_widget,\n", 167 | " consequent=consequent_widget,\n", 168 | " joint_percent=joint_widget,\n", 169 | " total=total_widget);" 170 | ] 171 | } 172 | ], 173 | "metadata": { 174 | "celltoolbar": "Slideshow", 175 | "hide_input": true, 176 | "kernelspec": { 177 | "display_name": "Python 3", 178 | "language": "python", 179 | "name": "python3" 180 | }, 181 | "language_info": { 182 | "codemirror_mode": { 183 | "name": "ipython", 184 | "version": 3 185 | }, 186 | "file_extension": ".py", 187 | "mimetype": "text/x-python", 188 | "name": "python", 189 | "nbconvert_exporter": "python", 190 | "pygments_lexer": "ipython3", 191 | "version": "3.6.3" 192 | } 193 | }, 194 | "nbformat": 4, 195 | "nbformat_minor": 2 196 | } 197 | -------------------------------------------------------------------------------- /Section 2/02_apriori_algorithm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "skip" 8 | } 9 | }, 10 | "source": [ 11 | "### Imports" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "slideshow": { 19 | "slide_type": "skip" 20 | } 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "import pandas as pd\n", 25 | "import numpy as np\n", 26 | "from itertools import combinations\n", 27 | "from time import time\n", 28 | "from jupyterthemes import jtplot\n", 29 | "jtplot.style(theme='onedork', context='talk', fscale=1.8, spines=False, gridlines='--', ticks=True, grid=False, figsize=(12, 8))" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "slideshow": { 36 | "slide_type": "slide" 37 | } 38 | }, 39 | "source": [ 40 | "### Load the data & build the product-transaction matrix" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": { 47 | "hide_input": false, 48 | "slideshow": { 49 | "slide_type": "fragment" 50 | } 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "def get_transaction_data():\n", 55 | " \"\"\"Load groceries transaction data into DataFrame\"\"\"\n", 56 | " df = pd.read_csv('grocery_transactions.csv')\n", 57 | " df = df.stack().reset_index(-1, drop=True)\n", 58 | " df.index.names = ['tx_id']\n", 59 | " df = pd.get_dummies(df, prefix='', prefix_sep='')\n", 60 | " return df.groupby(level='tx_id').sum()" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": { 66 | "slideshow": { 67 | "slide_type": "slide" 68 | } 69 | }, 70 | "source": [ 71 | "### Create itemset candidates" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 11, 77 | "metadata": { 78 | "slideshow": { 79 | "slide_type": "fragment" 80 | } 81 | }, 82 | "outputs": [ 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "0 Instant food products\n", 88 | "1 UHT-milk\n", 89 | "2 abrasive cleaner\n", 90 | "3 artif. sweetener\n", 91 | "4 baby cosmetics\n", 92 | "dtype: object\n", 93 | "(9834, 169)\n" 94 | ] 95 | } 96 | ], 97 | "source": [ 98 | "data = get_transaction_data()\n", 99 | "\n", 100 | "item_id = pd.Series(dict(enumerate(data.columns)))\n", 101 | "print(item_id.head())\n", 102 | "transactions = data.values\n", 103 | "print(transactions.shape)\n", 104 | "\n", 105 | "min_support = 0.01\n", 106 | "item_length = 1\n", 107 | "candidates = list(zip(item_id.index))\n", 108 | "candidates_tested = 0\n", 109 | "itemsets = pd.DataFrame(columns=['support', 'length'])" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 4, 115 | "metadata": { 116 | "slideshow": { 117 | "slide_type": "fragment" 118 | } 119 | }, 120 | "outputs": [ 121 | { 122 | "data": { 123 | "text/plain": [ 124 | "[(0,), (1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,)]" 125 | ] 126 | }, 127 | "execution_count": 4, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "candidates[:10]" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": { 139 | "slideshow": { 140 | "slide_type": "slide" 141 | } 142 | }, 143 | "source": [ 144 | "### Candidate Generation" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 5, 150 | "metadata": { 151 | "slideshow": { 152 | "slide_type": "fragment" 153 | } 154 | }, 155 | "outputs": [ 156 | { 157 | "name": "stdout", 158 | "output_type": "stream", 159 | "text": [ 160 | "Length 1: 169 [(0,), (1,), (2,), (3,), (4,)]\n", 161 | "Length 2: 14,196 [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5)]\n", 162 | "Length 3: 790,244 [(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 1, 5), (0, 1, 6)]\n", 163 | "Length 4: 32,795,126 [(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, 2, 6), (0, 1, 2, 7)]\n" 164 | ] 165 | } 166 | ], 167 | "source": [ 168 | "for i in range(1, 5):\n", 169 | " remaining_items = np.unique([item for t in candidates for item in t])\n", 170 | " new_candidates = list(combinations(remaining_items, r=i))\n", 171 | " print('Length {}: {:>10,.0f}'.format(i, len(new_candidates)), \n", 172 | " new_candidates[:5])" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": { 178 | "slideshow": { 179 | "slide_type": "slide" 180 | } 181 | }, 182 | "source": [ 183 | "### The apriori pruning based on support" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 6, 189 | "metadata": { 190 | "slideshow": { 191 | "slide_type": "fragment" 192 | } 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "def prune_candidates(all_txn, candidates, candidate_size, min_support):\n", 197 | " \"\"\"Return DataFrame with itemsets of candidate_size with min_support\n", 198 | " all_txn: numpy array of transaction-product matrix\n", 199 | " candidates: list of tuples containing product id\n", 200 | " candidate_size: length of item set\n", 201 | " min_support: support threshold\n", 202 | " \"\"\"\n", 203 | " itemsets = {}\n", 204 | " for candidate in candidates:\n", 205 | " candidate_txn = all_txn[:, candidate].reshape(-1, candidate_size) \n", 206 | " relevant_txn = candidate_txn[(candidate_txn == 1).all(axis=1)]\n", 207 | " candidate_support = relevant_txn.shape[0] / all_txn.shape[0]\n", 208 | " if candidate_support >= min_support:\n", 209 | " itemsets[frozenset(candidate)] = candidate_support\n", 210 | " result = pd.Series(itemsets).to_frame('support')\n", 211 | " return result.assign(length=candidate_size) " 212 | ] 213 | }, 214 | { 215 | "cell_type": "markdown", 216 | "metadata": { 217 | "slideshow": { 218 | "slide_type": "slide" 219 | } 220 | }, 221 | "source": [ 222 | "### Running the apriori algorithm" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 7, 228 | "metadata": { 229 | "slideshow": { 230 | "slide_type": "fragment" 231 | } 232 | }, 233 | "outputs": [ 234 | { 235 | "name": "stdout", 236 | "output_type": "stream", 237 | "text": [ 238 | "Itemset Length 1\tCandidates: 169\tNew Items: 88\n", 239 | "Itemset Length 2\tCandidates: 3,828\tNew Items: 213\n", 240 | "Itemset Length 3\tCandidates: 16,215\tNew Items: 32\n", 241 | "Itemset Length 4\tCandidates: 3,060\tNew Items: 0\n", 242 | "\n", 243 | "Potential Itemsets: 748,288,838,313,422,294,120,286,634,350,736,906,063,837,462,003,712 \n", 244 | "Tested Itemsets: 23,272\n" 245 | ] 246 | } 247 | ], 248 | "source": [ 249 | "while candidates:\n", 250 | " new_items = prune_candidates(\n", 251 | " transactions, candidates, item_length, min_support)\n", 252 | " itemsets = itemsets.append(new_items)\n", 253 | " candidates_tested += len(candidates)\n", 254 | " print('Itemset Length {}\\tCandidates: {:>7,.0f}\\tNew Items: {:>7,.0f}'\n", 255 | " .format(item_length, len(candidates), len(new_items)))\n", 256 | " item_length += 1\n", 257 | " remaining_items = np.unique([item for t in new_items.index for item in t])\n", 258 | " candidates = list(combinations(remaining_items, r=item_length))\n", 259 | "print('\\nPotential Itemsets: {:,.0f} \\nTested Itemsets: {:,.0f}'.format(\n", 260 | " 2**len(item_id) - 1, candidates_tested))" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 8, 266 | "metadata": { 267 | "slideshow": { 268 | "slide_type": "slide" 269 | } 270 | }, 271 | "outputs": [ 272 | { 273 | "name": "stdout", 274 | "output_type": "stream", 275 | "text": [ 276 | "\n", 277 | "Index: 333 entries, (1) to (162, 166, 167)\n", 278 | "Data columns (total 2 columns):\n", 279 | "support 333 non-null float64\n", 280 | "length 333 non-null object\n", 281 | "dtypes: float64(1), object(1)\n", 282 | "memory usage: 7.8+ KB\n" 283 | ] 284 | }, 285 | { 286 | "data": { 287 | "text/html": [ 288 | "
\n", 289 | "\n", 302 | "\n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | "
supportlength
(166)0.2555421
(103)0.1935121
(123)0.1839541
(139)0.1743951
(167)0.1395161
\n", 338 | "
" 339 | ], 340 | "text/plain": [ 341 | " support length\n", 342 | "(166) 0.255542 1\n", 343 | "(103) 0.193512 1\n", 344 | "(123) 0.183954 1\n", 345 | "(139) 0.174395 1\n", 346 | "(167) 0.139516 1" 347 | ] 348 | }, 349 | "execution_count": 8, 350 | "metadata": {}, 351 | "output_type": "execute_result" 352 | } 353 | ], 354 | "source": [ 355 | "itemsets.info()\n", 356 | "itemsets.sort_values('support', ascending=False).head()" 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": 9, 362 | "metadata": { 363 | "slideshow": { 364 | "slide_type": "slide" 365 | } 366 | }, 367 | "outputs": [ 368 | { 369 | "data": { 370 | "text/plain": [ 371 | "1 88\n", 372 | "2 213\n", 373 | "3 32\n", 374 | "Name: length, dtype: int64" 375 | ] 376 | }, 377 | "execution_count": 9, 378 | "metadata": {}, 379 | "output_type": "execute_result" 380 | } 381 | ], 382 | "source": [ 383 | "itemsets.length.value_counts().sort_index()" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 10, 389 | "metadata": { 390 | "slideshow": { 391 | "slide_type": "fragment" 392 | } 393 | }, 394 | "outputs": [ 395 | { 396 | "data": { 397 | "text/plain": [ 398 | "count 333.000000\n", 399 | "mean 0.025071\n", 400 | "std 0.027325\n", 401 | "min 0.010067\n", 402 | "25% 0.011897\n", 403 | "50% 0.016270\n", 404 | "75% 0.026032\n", 405 | "max 0.255542\n", 406 | "Name: support, dtype: float64" 407 | ] 408 | }, 409 | "execution_count": 10, 410 | "metadata": {}, 411 | "output_type": "execute_result" 412 | } 413 | ], 414 | "source": [ 415 | "itemsets.support.describe()" 416 | ] 417 | } 418 | ], 419 | "metadata": { 420 | "celltoolbar": "Slideshow", 421 | "hide_input": false, 422 | "kernelspec": { 423 | "display_name": "Python 3", 424 | "language": "python", 425 | "name": "python3" 426 | }, 427 | "language_info": { 428 | "codemirror_mode": { 429 | "name": "ipython", 430 | "version": 3 431 | }, 432 | "file_extension": ".py", 433 | "mimetype": "text/x-python", 434 | "name": "python", 435 | "nbconvert_exporter": "python", 436 | "pygments_lexer": "ipython3", 437 | "version": "3.6.3" 438 | } 439 | }, 440 | "nbformat": 4, 441 | "nbformat_minor": 2 442 | } 443 | -------------------------------------------------------------------------------- /Section 2/03_association_rules.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "skip" 8 | } 9 | }, 10 | "source": [ 11 | "### Imports" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "slideshow": { 19 | "slide_type": "skip" 20 | } 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "import pandas as pd\n", 25 | "import numpy as np\n", 26 | "from itertools import combinations\n", 27 | "from time import time\n", 28 | "from scipy.stats import fisher_exact\n", 29 | "from jupyterthemes import jtplot\n", 30 | "jtplot.style(theme='onedork', context='talk', fscale=1.8, spines=False, gridlines='--', ticks=True, grid=False, figsize=(12, 8))\n", 31 | "import warnings\n", 32 | "warnings.filterwarnings('ignore')" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": { 38 | "slideshow": { 39 | "slide_type": "skip" 40 | } 41 | }, 42 | "source": [ 43 | "### Load the data & build the product-transaction matrix" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "hide_input": false, 51 | "slideshow": { 52 | "slide_type": "skip" 53 | } 54 | }, 55 | "outputs": [], 56 | "source": [ 57 | "def get_transaction_data():\n", 58 | " \"\"\"Load groceries transaction data into DataFrame\"\"\"\n", 59 | " df = pd.read_csv('grocery_transactions.csv')\n", 60 | " df = df.stack().reset_index(-1, drop=True)\n", 61 | " df.index.names = ['tx_id']\n", 62 | " return pd.get_dummies(df, prefix='', prefix_sep='').groupby(level='tx_id').sum()" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": { 69 | "run_control": { 70 | "marked": true 71 | }, 72 | "slideshow": { 73 | "slide_type": "fragment" 74 | } 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "data = get_transaction_data()\n", 79 | "\n", 80 | "item_id = pd.Series(dict(enumerate(data.columns)))\n", 81 | "transactions = data.values\n", 82 | "n_txn = transactions.shape[0]\n", 83 | "min_support = 0.01\n", 84 | "\n", 85 | "item_length = 1\n", 86 | "candidates = list(zip(item_id.index))\n", 87 | "itemsets = pd.DataFrame(columns=['support', 'length'])\n", 88 | "\n", 89 | "new_rules = []\n", 90 | "rule_data = ['itemset', 'antecedent', 'consequent',\n", 91 | " 'support_rule', 'support_antecedent', 'support_consequent',\n", 92 | " 'confidence', 'lift', 'pvalue']\n", 93 | "rules = pd.DataFrame(columns=rule_data)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 4, 99 | "metadata": { 100 | "slideshow": { 101 | "slide_type": "skip" 102 | } 103 | }, 104 | "outputs": [], 105 | "source": [ 106 | "def prune_candidates(all_txn, candidates, candidate_size, min_support):\n", 107 | " \"\"\"Return DataFrame with itemsets of candidate_size with min_support\n", 108 | " all_txn: numpy array of transaction-product matrix\n", 109 | " candidates: list of tuples containing product id\n", 110 | " candidate_size: length of item set\n", 111 | " min_support: support threshold\n", 112 | " \"\"\"\n", 113 | " itemsets = {}\n", 114 | " for candidate in candidates:\n", 115 | " candidate_txn = all_txn[:, candidate].reshape(-1, candidate_size)\n", 116 | " relevant_txn = candidate_txn[(candidate_txn == 1).all(axis=1)]\n", 117 | " support = relevant_txn.shape[0] / all_txn.shape[0]\n", 118 | " if support >= min_support:\n", 119 | " itemsets[frozenset(candidate)] = support\n", 120 | " return pd.Series(itemsets).to_frame('support').assign(length=candidate_size)" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 5, 126 | "metadata": { 127 | "slideshow": { 128 | "slide_type": "slide" 129 | } 130 | }, 131 | "outputs": [], 132 | "source": [ 133 | "def find_association_rules(itemsets, n_txn, n_items, min_confidence=0, min_lift=0, min_pvalue=0):\n", 134 | " \"\"\"Find rules {antecedent} => {consequent} with min_confidence, min_lift and min_pvalue\n", 135 | " itemsets: DataFrame containing all itemsets and their support\n", 136 | " min_confidence, min_lift, min_pvalue: confidence & lift & pvalue thresholds\n", 137 | " \"\"\"\n", 138 | " support = itemsets.loc[:, 'support'].to_dict()\n", 139 | " new_rules = []\n", 140 | " for itemset in itemsets.loc[itemsets.length == n_items].index:\n", 141 | " for n_antecedents in range(1, n_items):\n", 142 | " antecedents = [frozenset(a)\n", 143 | " for a in combinations(itemset, r=n_antecedents)]\n", 144 | " for antecedent in antecedents:\n", 145 | " consequent = itemset.difference(antecedent)\n", 146 | " sAC = support[itemset]\n", 147 | " sA, sC = support[antecedent], support[consequent]\n", 148 | " confidence = sAC / sA\n", 149 | " lift = sAC / (sA * sC)\n", 150 | " contingency_table = n_txn * np.array([[sAC, sA - sAC],\n", 151 | " [sC - sAC, 1 - sA - sC + sAC]])\n", 152 | " _, p_value = fisher_exact(contingency_table,\n", 153 | " alternative='greater')\n", 154 | "\n", 155 | " if (confidence >= min_confidence) and (lift >= min_lift) and (p_value >= min_pvalue):\n", 156 | " new_rule = [itemset, antecedent, consequent,\n", 157 | " support[itemset], support[antecedent], support[consequent],\n", 158 | " confidence, lift, p_value]\n", 159 | " new_rules.append(new_rule)\n", 160 | " return new_rules" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 6, 166 | "metadata": { 167 | "slideshow": { 168 | "slide_type": "slide" 169 | } 170 | }, 171 | "outputs": [ 172 | { 173 | "name": "stdout", 174 | "output_type": "stream", 175 | "text": [ 176 | "Itemset Length 1\tCandidates: 169\tNew Items: 88\tNew Rules: 0\n", 177 | "Itemset Length 2\tCandidates: 3,828\tNew Items: 213\tNew Rules: 426\n", 178 | "Itemset Length 3\tCandidates: 16,215\tNew Items: 32\tNew Rules: 192\n", 179 | "Itemset Length 4\tCandidates: 3,060\tNew Items: 0\tNew Rules: 0\n" 180 | ] 181 | } 182 | ], 183 | "source": [ 184 | "while candidates:\n", 185 | " new_items = prune_candidates(transactions, candidates, item_length, min_support)\n", 186 | " itemsets = itemsets.append(new_items)\n", 187 | "\n", 188 | " if item_length > 1:\n", 189 | " new_rules = find_association_rules(itemsets, n_txn, item_length)\n", 190 | " rules = pd.concat([rules, pd.DataFrame(new_rules, columns=rules.columns)], ignore_index=True)\n", 191 | " \n", 192 | " print('Itemset Length {}\\tCandidates: {:>7,.0f}\\tNew Items: {:>7,.0f}\\tNew Rules: {:>7,.0f}'.format(\n", 193 | " item_length, len(candidates), len(new_items), len(new_rules)))\n", 194 | " \n", 195 | " item_length += 1\n", 196 | " remaining_items = np.unique([item for t in new_items.index for item in t])\n", 197 | " candidates = list(combinations(remaining_items, r=item_length))\n", 198 | "\n", 199 | "rules = rules.apply(pd.to_numeric, errors='ignore')" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 7, 205 | "metadata": { 206 | "slideshow": { 207 | "slide_type": "slide" 208 | } 209 | }, 210 | "outputs": [ 211 | { 212 | "name": "stdout", 213 | "output_type": "stream", 214 | "text": [ 215 | "\n", 216 | "RangeIndex: 618 entries, 0 to 617\n", 217 | "Data columns (total 9 columns):\n", 218 | "itemset 618 non-null object\n", 219 | "antecedent 618 non-null object\n", 220 | "consequent 618 non-null object\n", 221 | "support_rule 618 non-null float64\n", 222 | "support_antecedent 618 non-null float64\n", 223 | "support_consequent 618 non-null float64\n", 224 | "confidence 618 non-null float64\n", 225 | "lift 618 non-null float64\n", 226 | "pvalue 618 non-null float64\n", 227 | "dtypes: float64(6), object(3)\n", 228 | "memory usage: 43.5+ KB\n" 229 | ] 230 | }, 231 | { 232 | "data": { 233 | "text/html": [ 234 | "
\n", 235 | "\n", 248 | "\n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | "
itemsetantecedentconsequentsupport_rulesupport_antecedentsupport_consequentconfidenceliftpvalue
0(9, 103)(9)(103)0.0197270.0524710.1935120.3759691.9428692.229585e-23
1(9, 103)(103)(9)0.0197270.1935120.0524710.1019441.9428692.229585e-23
2(9, 123)(9)(123)0.0136260.0524710.1839540.2596901.4117147.615064e-06
3(9, 123)(123)(9)0.0136260.1839540.0524710.0740741.4117147.655712e-06
4(9, 124)(9)(124)0.0173890.0524710.1090100.3313953.0400587.774255e-45
\n", 326 | "
" 327 | ], 328 | "text/plain": [ 329 | " itemset antecedent consequent support_rule support_antecedent \\\n", 330 | "0 (9, 103) (9) (103) 0.019727 0.052471 \n", 331 | "1 (9, 103) (103) (9) 0.019727 0.193512 \n", 332 | "2 (9, 123) (9) (123) 0.013626 0.052471 \n", 333 | "3 (9, 123) (123) (9) 0.013626 0.183954 \n", 334 | "4 (9, 124) (9) (124) 0.017389 0.052471 \n", 335 | "\n", 336 | " support_consequent confidence lift pvalue \n", 337 | "0 0.193512 0.375969 1.942869 2.229585e-23 \n", 338 | "1 0.052471 0.101944 1.942869 2.229585e-23 \n", 339 | "2 0.183954 0.259690 1.411714 7.615064e-06 \n", 340 | "3 0.052471 0.074074 1.411714 7.655712e-06 \n", 341 | "4 0.109010 0.331395 3.040058 7.774255e-45 " 342 | ] 343 | }, 344 | "execution_count": 7, 345 | "metadata": {}, 346 | "output_type": "execute_result" 347 | } 348 | ], 349 | "source": [ 350 | "rules.info()\n", 351 | "rules.head()" 352 | ] 353 | }, 354 | { 355 | "cell_type": "code", 356 | "execution_count": 8, 357 | "metadata": { 358 | "slideshow": { 359 | "slide_type": "slide" 360 | } 361 | }, 362 | "outputs": [], 363 | "source": [ 364 | "with pd.HDFStore('rules.h5') as store:\n", 365 | " store.put('rules', rules)" 366 | ] 367 | } 368 | ], 369 | "metadata": { 370 | "celltoolbar": "Slideshow", 371 | "hide_input": false, 372 | "kernelspec": { 373 | "display_name": "Python 3", 374 | "language": "python", 375 | "name": "python3" 376 | }, 377 | "language_info": { 378 | "codemirror_mode": { 379 | "name": "ipython", 380 | "version": 3 381 | }, 382 | "file_extension": ".py", 383 | "mimetype": "text/x-python", 384 | "name": "python", 385 | "nbconvert_exporter": "python", 386 | "pygments_lexer": "ipython3", 387 | "version": "3.6.3" 388 | } 389 | }, 390 | "nbformat": 4, 391 | "nbformat_minor": 2 392 | } 393 | -------------------------------------------------------------------------------- /Section 3/01_curse_of_dimensionality.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": { 7 | "ExecuteTime": { 8 | "end_time": "2018-01-07T00:02:27.245559Z", 9 | "start_time": "2018-01-07T00:02:27.152493Z" 10 | }, 11 | "slideshow": { 12 | "slide_type": "skip" 13 | } 14 | }, 15 | "outputs": [], 16 | "source": [ 17 | "import pandas as pd\n", 18 | "import numpy as np\n", 19 | "from numpy import clip, full, fill_diagonal\n", 20 | "from numpy.linalg import inv, norm, lstsq\n", 21 | "from numpy.random import uniform, multivariate_normal, rand, randn, seed\n", 22 | "from itertools import repeat\n", 23 | "import matplotlib.pyplot as plt\n", 24 | "from matplotlib.patches import Patch\n", 25 | "from mpl_toolkits.mplot3d import Axes3D\n", 26 | "from matplotlib import gridspec\n", 27 | "from matplotlib.colors import to_rgba\n", 28 | "import seaborn as sns\n", 29 | "from scipy.spatial.distance import pdist, squareform\n", 30 | "from jupyterthemes import jtplot\n", 31 | "from sklearn.decomposition import PCA\n", 32 | "from sklearn.preprocessing import StandardScaler\n", 33 | "from sklearn.datasets import make_swiss_roll\n", 34 | "jtplot.style(theme='onedork', context='talk', fscale=1.8, spines=False, \n", 35 | " gridlines='--', ticks=True, grid=False, figsize=(7, 5))\n", 36 | "%matplotlib notebook\n", 37 | "pd.options.display.float_format = '{:,.2f}'.format\n", 38 | "seed(42)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": { 44 | "slideshow": { 45 | "slide_type": "slide" 46 | } 47 | }, 48 | "source": [ 49 | "### Simulate pairwise distances of points in $\\mathbb{R}^n$ (while $n$ increases)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 4, 55 | "metadata": { 56 | "ExecuteTime": { 57 | "end_time": "2018-01-06T22:04:30.214799Z", 58 | "start_time": "2018-01-06T22:04:30.022585Z" 59 | }, 60 | "hide_input": true, 61 | "slideshow": { 62 | "slide_type": "skip" 63 | } 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "def get_distance_metrics(points):\n", 68 | " \"\"\"Calculate mean of pairwise distances and \n", 69 | " mean of min pairwise distances\"\"\"\n", 70 | " pairwise_dist = squareform(pdist(points))\n", 71 | " fill_diagonal(pairwise_dist, np.nanmax(pairwise_dist))\n", 72 | " avg_distance = np.mean(np.nanmean(pairwise_dist, axis=1))\n", 73 | " avg_min_distance = np.mean(np.nanmin(pairwise_dist, axis=1))\n", 74 | " return avg_distance, avg_min_distance\n", 75 | "\n", 76 | "\n", 77 | "def simulate_distances(m, n, mean, var, corr):\n", 78 | " \"\"\"Draw m random vectors of dimension n \n", 79 | " from uniform and multivariate normal distributions\n", 80 | " and return pairwise distances\"\"\"\n", 81 | " uni_dist = get_distance_metrics(uniform(size=(m, n)))\n", 82 | "\n", 83 | " cov = full(shape=(n, n), fill_value=var * corr)\n", 84 | " fill_diagonal(cov, var)\n", 85 | " normal_points = multivariate_normal(\n", 86 | " full(shape=(n,), fill_value=mean), cov, m)\n", 87 | " normal_points = clip(normal_points, a_min=0, a_max=1)\n", 88 | " norm_dist = get_distance_metrics(normal_points)\n", 89 | " return uni_dist, norm_dist" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 6, 95 | "metadata": { 96 | "ExecuteTime": { 97 | "end_time": "2018-01-06T22:07:09.967153Z", 98 | "start_time": "2018-01-06T22:04:33.731110Z" 99 | }, 100 | "slideshow": { 101 | "slide_type": "slide" 102 | } 103 | }, 104 | "outputs": [], 105 | "source": [ 106 | "# sampling params\n", 107 | "n_points = 1000\n", 108 | "min_dim, max_dim, step = 1, 2502, 100\n", 109 | "dimensions = range(min_dim, max_dim, step)\n", 110 | "\n", 111 | "# normal distribution params\n", 112 | "mean = 0.5 \n", 113 | "var = (mean/3)**2 # 99% of sample in [0, 1]\n", 114 | "corr = 0.25\n", 115 | "\n", 116 | "# run simulation\n", 117 | "avg_dist = []\n", 118 | "for dim in dimensions:\n", 119 | " uni_dist, norm_dist = simulate_distances(\n", 120 | " n_points, dim, mean, var, corr)\n", 121 | " avg_dist.append([*uni_dist, *norm_dist])\n", 122 | " \n", 123 | "col_names = ['Avg. Uniform', 'Min. Uniform',\n", 124 | " 'Avg. Normal', 'Min. Normal']\n", 125 | "distances = pd.DataFrame(data=avg_dist, \n", 126 | " columns=col_names, index=dimensions)" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 5, 132 | "metadata": { 133 | "ExecuteTime": { 134 | "end_time": "2018-01-06T21:51:09.292659Z", 135 | "start_time": "2018-01-06T21:51:09.261636Z" 136 | }, 137 | "slideshow": { 138 | "slide_type": "slide" 139 | } 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "def simulate_distances(m, n, mean, var, corr):\n", 144 | " \"\"\"Draw m random vectors of dimension n \n", 145 | " from uniform and normal distributions\n", 146 | " and return pairwise distance metrics\"\"\"\n", 147 | " uni_dist = get_distance_metrics(uniform(size=(m, n)))\n", 148 | " cov = full(shape=(n, n), fill_value=var * corr)\n", 149 | " fill_diagonal(cov, var)\n", 150 | " normal_points = multivariate_normal(\n", 151 | " full(shape=(n,), fill_value=mean), cov, m)\n", 152 | " normal_points = clip(normal_points, a_min=0, a_max=1)\n", 153 | " norm_dist = get_distance_metrics(normal_points)\n", 154 | " return uni_dist, norm_dist" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": null, 160 | "metadata": { 161 | "slideshow": { 162 | "slide_type": "slide" 163 | } 164 | }, 165 | "outputs": [], 166 | "source": [ 167 | "def get_distance_metrics(points):\n", 168 | " \"\"\"Calculate mean of pairwise distances and \n", 169 | " mean of min pairwise distances\"\"\"\n", 170 | " pairwise_dist = squareform(pdist(points))\n", 171 | " fill_diagonal(pairwise_dist, np.nanmean(pairwise_dist, axis=1))\n", 172 | " avg_distance = np.mean(np.nanmean(pairwise_dist, axis=1))\n", 173 | " fill_diagonal(pairwise_dist, np.nanmax(pairwise_dist, axis=1))\n", 174 | " avg_min_distance = np.mean(np.nanmin(pairwise_dist, axis=1))\n", 175 | " return avg_distance, avg_min_distance" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 3, 181 | "metadata": { 182 | "hide_input": true, 183 | "slideshow": { 184 | "slide_type": "skip" 185 | } 186 | }, 187 | "outputs": [], 188 | "source": [ 189 | "def get_distance_metrics(points):\n", 190 | " \"\"\"Calculate mean of pairwise distances and \n", 191 | " mean of min pairwise distances\"\"\"\n", 192 | " pairwise_dist = squareform(pdist(points))\n", 193 | " fill_diagonal(pairwise_dist, np.nanmax(pairwise_dist))\n", 194 | " avg_distance = np.mean(np.nanmean(pairwise_dist, axis=1))\n", 195 | " avg_min_distance = np.mean(np.nanmin(pairwise_dist, axis=1))\n", 196 | " return avg_distance, avg_min_distance\n", 197 | "\n", 198 | "def simulate_distances(m, n, mean, var, corr):\n", 199 | " \"\"\"Draw m random vectors of dimension n \n", 200 | " from uniform and multivariate normal distributions\n", 201 | " and return pairwise distance metrics\"\"\"\n", 202 | " uni_dist = get_distance_metrics(uniform(size=(m, n)))\n", 203 | " cov = full(shape=(n, n), fill_value=var * corr)\n", 204 | " fill_diagonal(cov, var)\n", 205 | " normal_points = multivariate_normal(\n", 206 | " full(shape=(n,), fill_value=mean), cov, m)\n", 207 | " normal_points = clip(normal_points, a_min=0, a_max=1)\n", 208 | " norm_dist = get_distance_metrics(normal_points)\n", 209 | " return uni_dist, norm_dist" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 6, 215 | "metadata": { 216 | "ExecuteTime": { 217 | "end_time": "2018-01-06T22:07:09.967153Z", 218 | "start_time": "2018-01-06T22:04:33.731110Z" 219 | }, 220 | "slideshow": { 221 | "slide_type": "skip" 222 | } 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "# sampling params\n", 227 | "n_points = 1000\n", 228 | "min_dim, max_dim, step = 1, 2502, 100\n", 229 | "dimensions = range(min_dim, max_dim, step)\n", 230 | "\n", 231 | "# normal distribution params\n", 232 | "mean = 0.5 \n", 233 | "var = (mean/3)**2 # 99% of sample in [0, 1]\n", 234 | "corr = 0.25\n", 235 | "\n", 236 | "# run simulation\n", 237 | "avg_dist = []\n", 238 | "for dim in dimensions:\n", 239 | " uni_dist, norm_dist = simulate_distances(\n", 240 | " n_points, dim, mean, var, corr)\n", 241 | " avg_dist.append([*uni_dist, *norm_dist])\n", 242 | " \n", 243 | "col_names = ['Avg. Uniform', 'Min. Uniform',\n", 244 | " 'Avg. Normal', 'Min. Normal']\n", 245 | "distances = pd.DataFrame(data=avg_dist, \n", 246 | " columns=col_names, index=dimensions)" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 4, 252 | "metadata": { 253 | "ExecuteTime": { 254 | "end_time": "2018-01-06T22:07:52.384435Z", 255 | "start_time": "2018-01-06T22:07:51.971141Z" 256 | }, 257 | "hide_input": true, 258 | "slideshow": { 259 | "slide_type": "slide" 260 | } 261 | }, 262 | "outputs": [ 263 | { 264 | "data": { 265 | "image/png": "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dDp15H025oSJkZnNpf2i38f33pnDldfcRFJSEp8v+5QD+/f5HU9ERERERKTTqCPvk+ZmNm+8LCiSkpK40LqM3Lx+1NfXMff1F9m75/DNBEYbJ3DK6SZQz7LPFrGiA7d7O1LNvY/r1risW+MmLIOIiIiIiEgiqSOfIO25H3lQFI4eA8Azf3mAIcNG8I3zZvLy808CXiff/MYFPPHIn6iuruLm237Imq++pKK8694iUEREREREJMjUkZc2rflqJWtDZ7h79uzNwYOHr+uvr6/nzw/8gfq6OrKysyEpierq6rjm0a3eRERERETkWKaOvMSkvq6Oiy6+gtHGOF598Zkmy0Yb4zjvwktYt9alrrbWp5QiIiIiIiJHv3bfR16OPXNff4GH7/s9F868jLS0tAbLVrtf8qc//pqUlFROmHCiTwlFRERERESOfurIS5vGjZ8cmswOamqqqa+vp66+HoD0jAyuue5WUlJSoL6emmpvuYiIiIiIiMSHhtZLm1a7X3DRxVdwzfX/THJyCvP+bjPaGBe53duXXyzjmutnU1dXy66d2/ny86V+RxYRERERETlqqSMvbaqpqeG1l55tcfnyzxax/LNFCUwkIiIiIiJy7NLQehEREREREZEuRGfkpVW61ZuIiIiIiEiwqCMfMMnJyXzzW5fTq1dvUlJT+fiD91m7elWT9S6Y+W0qKsqZ/97bPqQUERERERERv2hofcCMGz+ZiopynnniIV549nHOvfDiJutMOnEaffsN8CGdiIiIiIiI+E1n5APGXfU5X636IvJ7XV1dg+UDBw2lYNAQln22kLw+fRMdT0RERERERHymM/IBU1NdTXV1FenpGVx6+SwW/N/fI8uyu+dwxlkzeOet13xMKCIiIiIiIn7q0Bl523F/CFwP1AHrge9ZplEctfx44FPg66g/O8UyjYqOPO/RLqdHTy678rt89uknrPpieaTcGDuezKxsrrj6Rrp3zyE1LY2S3cV8sXyJj2lFREREREQkkdrdkbcddzpeJ/5kyzQO2I57F3AX8L2o1aYBz1imMbtjMY8d2dnduWrWTbz71uts3LCuwbIliz5myaKPAThh4hTy+vRVJ15EREREROQY05Ez8sXAbMs0DoR+Xwrc3GidacAY23GXAeXAf1im8WGsT2A7bh6Q17g8MzOLiory9qUOuFPPOJtumVmcduY3OO3M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R0dTVlbmf+3xerCFheH1eJocS2scoikiItKczjvZnYiIiEh9gskSX15eTnR0tP+1zWZrlka8iIjI5UANeREREWlWeYcO8OJz/wOcSS73ca0h9gf37yWrzxW4tmwkvXMXjuYfvhChioiIXJSaMkdeRERELpD0jEymTp8BQPsOHZn20GNMe+hxxtx2B7b6sssBcfHx/ODf/pN27TuEMtQaJtwxhaTkNuRs20xVVSX3P/w4t4wx+fjD+ufSi4iISF3qkRcREbnI1M4QP+LmsaxcvoQD+/Yw/vZ7yOrTj+3bNtdYJywsjLHjJ1N5ljnrzaGxWeKXLpzfYrGIiIhcytQjLyIicpGpnSF+/tuvcWDfHsLCw4lPSOT06ZN11rl59HjWrf2SUyeLQxmqiIiItAD1yIuIiFxkAjPEA3i9XpKS23Df/d+jvLyMwmNHa9S/8upBlJScZs+u7Qy94aZmjUUZ4kVEREJPPfIiIiKXgOKiE7zwf39m3drV3DxmQo1lVw0YTPceWUydPoPUTulMuGMK8QmJFyhSERERaSr1yIuIiFzkJt87neUfLuR44TEqysvxer01lr/+yvP+v6dOn8HShfM4faru8HsRERG5OKghLyIicpH78jMn42+/B4+7isrKShY53gGsDPGrViyluOjEBY5QREREmpMa8iIiIg1Iz8jEGHUbc2a9QMdO6YwZOxGP14u7qooF773F6dOn/HXDwsKYcMcUktu0xevxsHjBuxTUmrPeHAKzwR86sI/ZM5+tUycwQ3y1ObNeaPZYREREJLQ0R15EROQchgwbyTjzLiIirHvfo281+XDJB8yZ9QI5rs0MGW7UqN8zy05YWBivvfwsn676mBE3jb0QYYuIiMglTD3yIiIi51D9qDdz0hQA3nt3jn9+eVhYGFW1nsteWHCUsLAwsNmIjo7B43E3WyzBZIgHZYkXERG51KlHXkRE5BxyXJtqNMarG/EZmV255tqhfP3lpzXqV1SUk9ymLY/+4GeMMyfz9VefhTReERERufSpR15ERKSR7P2uYtiNNzP3jZmUlJyuseza629k987trFy+hMSkZKY+8CgvPv833FVVFyhaERERudSoIS8iItII/bIHMvCa63h91vOUlZbWWV5WWurvwS8rLSEsPJwwm43mG2AvIiIilzs15EVEpNVpbJb42ybeTZs2bQmPiODzT5az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wrrqBk4bNY51az9p+wceI91YTkRERETk+JXid4ATSfx11B84b3PhxbNir4VCIcwLL+HZOY/y9OMPMvXsGWRmZfkVVY7SmHETIydhoKammnA4TH3kBnJVlRXU1NRQU1tDOBym/PAhumdm+hlXRERERES6MI3IJ1Fr11GHw2H+8NAvCdfXk5WdDaEQ1dXVfkUNvLZmN4waM4Ezp04jHK5n755dvPXGKwm9M/t691Muu+I6brr1H0hJ6cbct2xGGmNIT89g5bJFrFi2kK/dNpu6ujr2l5bwycqlCcsiIiIiIiLHN3Xkk6y166jD9fWMNMZw8aVXsmmjS31dnU8pg6+1u8SnpqYy4/wv8djDv6K2pobLr/4qhacabFy/NmF5ampqeOXFP7X4+oqlC1mxdGHC3l9ERERERE4cmlrvg9f/+jyP/O5/uHTWNaSlpTV4bb27mt/++r/o1i2VsePP8Clh8G1Yt4Y3X3sZaDq7obaujjlPPEhtTQ0AKSkp1NbW+pJTRERERESks2lEPonGjJtIbo+efLzAaXIddXpGBtfecCvPPvMYdXV11FR7r0vLWpzdEA5z+PAhACZNPof09Ay2fLYhoVl0czkREREREUkWdeSTqK3rqFd/uoKbbp1NfX0de/fsYvUny/2OHHjN3SUegFCI82d+mbz83rz8whx/Q4qIiIiIiHQideSTqK3rqFcuW8TKZYuSmKjram12A8All11NXV0tLz33dEJvciciIiIiIpJs6shLl9Ta7IZdO4uYMPFMtm/bwo233AXAkoUL2LButc+pRUREREREOk4d+SSpn/TDdq2XsvRnCU5y9FJSUvjy5dfSq9dJdEtN5cMP3mtwB/j+AwZx4cWzIBTi8KGDvPqXZ6lL8M3l2prdcN9Pvp/Q9xcREREREfGLOvLSpjHjJlJRUc5rrzxHZmYWt919b4OO/KXWV/jLC3PYX1rC+ImT6dnzJEpLin1MLCIiIiIicvxSR17a5K79hHVrP419X19fH/s6L78PFeWHOXPqNPr27cemjesS3onXHeJFREREROREpufIS5tqqquprq4iPT2Dq669mff//lbstaysbAYOHsbyJR/x5zmPMmz4KQwbfoqPaUVERERERI5v6shLu+T26MmNX7+LTz9ZztpPV8aWV1QcZn/pPvYV76W+vp7PNq2n34BBPiYVERERERE5vqkjL23Kzs7hhpu/gTP3TT5ZsaTBa/v3l5KensFJefkADBk6nOK9u/2IKSIiIiIickLo0DXytuN+B7gVqAc2A3dYplEc9/ppwBLgs7h/dpZlGhUdeV9JrrOnnU/3zCzOmXEh58y4EPCeeZ+Wns7KZYt4w36By6/+KhBix/atfLZxnb+BRUREREREjmPH3JG3HXc6Xid+imUah2zHvQ+4D7gjbrWpwDOWaczuWEzx09y3bOa+Zbf4+rYtn/HUY79LYiIREREREZETV0dG5IuB2ZZpHIp8vxy4s9E6U4FRtuOuAMqBf7VMY35738B23Hwgv/HyzMwsKirKjy21HBXdIV5ERERERCRYQuFwuMM/xHbcHsAC4GHLNB6OW/5rYD3wGDAJeB0YZ5lGuy6ith33x8CPGi9fvOgj1m86Mlt/9+cbAeg3pDC2rKxkDwdK9zBguEG31DQAqivL2bN9Eyf1HUhOzyPnB3ZsXkt690z6DBgeW1a6p4jDB0oZXDgutqzi0AH27dpK7/7DyMzpEVu+feMnZPfII6/gyE3einduobqygoEjRsWWHUwbQmnWePod/ICM+jIAakMZ7OhxET0r19OrakNs3VBtBdPPm8n7CxbEltVUHOSCCy8mo3sWhELknZTHkiULeX/ua8f8O5WnFlCcPZk+hxeTVbsntnxbz1nkVG8jv+KT2LJhE1aTlXuItfOnxpblDdzFqnnFFAw+hfTuWQDU1dawc4tLj7wCeuYXHHWdqlJ6sjt3Onnlq8it+Ty2blHuTNLrvqBv+ZHr9AcZG8gftJtVc6fHlvXoXcKaj3ccc50OlZWwf++OBr9TS3XalTMNgP6HjpyfKhixjX4nb2PN+1Oorc4AIDP3IBuWb+n0ba+5Ou3NOpPzzvhdkzoNHrWRDQtPp+JgLtDxOrX099RcnUoyx3H+uQ82qdPw09ewZcVoDuw78u87Uqfo75Q75ppjrtOpU1ewfW0hpTv6x9btjH1E1ribmtSpulsvBh2cG1vWXJ1S06sYPWMRuz8byp7NQ2PrdsZ+L23MLU3qdCh9KEPLXosta6lO42d+QElRP4rcU2PLjrZOjbe95ur0RcaplHUfycAD75AargJartOoaQspP5jD1pVjYss6ui9vrk7N7ctbqlPhlOUAbFw0Mbaso8en5urU0r68uTo1ty8/mjo1t+01V6eW9uXN1WmQsYGP7UrfjrnN1algxDaWvl3Wqe2IrnbMPffk+5vUqfExt6N1Otpj7vTRDzSpU+N9eWe19/KNmcdcp0Qdc3uNuuyY20YnyjG3pbaRn8fcltpGOuZ2/jF3/ou5ndon7Ixj7od/SWmzTi8+/vMQR6nDHXnbcQcANrDUMo2721j3VeB5yzT+3M6f3eyI/P2/+NH6rjYiXz/ph+1aL2Xpz5h6znmMGTeRmppqnn78wWbXGzhoKDMu+BLPznmUY61hezJZk7/b5jqdOSIftEztrVvQMqlunZMHgpdJdTux66Z9UvsELZPq1j5By6R9UvsELZPq1jbtk9onmZkWvv/6UXfkO3qzu3F4o+yPWabxn828/gPgd5ZpHIx7v5r2/nzLNEqAksbLf/7jrtWJP1r7S0t4+fk5WFdd3+I6F116Oa++/Owxd+JFRERERESkazrmx8/ZjtsPeBfvuvcmnfiIC4lcN2877njgjMi/kVasdz+lvr6uxdcLR46ieO8eSkuKW1xHREREREREjk8dGZH/HpADfM923O9Flq2P/LfTMo1HgNuBx23HvRWoA26wTGN/RwILjBk3kSULF7S9ooiIiIiIiBx3jrkjb5nGPwP/3MY6W4ALjvU9pHn9+g+iaPtWv2OIiIiIiIiID455ar0kz6ixE5hwxhQAsrKyqa6u8jmRiIiIiIiI+KVDN7uTxCn7Yn/sjvVrP10ZW15efpgnHrnfr1giIiIiIiLiM3XkA+ay2V+0uU5nPlZBREREREREuhZNrRcRERERERHpQtSRFxEREREREelC1JEXERERERER6ULUkRcRERERERHpQtSRFxEREREREelC1JEXERERERER6ULUkRcRERERERHpQtSRFxEREREREelCUv0OkFChEF/68pX0LRhAXV0tb9ovsr+0JPbyhImTOX3SVHr06EVFZQWHDx1scZ36+no+/OA9Nm1w/fhNRERERERERIDjfER+5GmjSU1NY84TD+K8+yYXXDQr9lp2Ti6TppzLwg/nsWXzRurr6vjg7281u86cJx7iuWce57wLLqFbt25+/CoiIiIiIiIiwHHekR80ZDibN60DYGfR5/QfMCj22oCBgynavpUBg4ayacNa9peWUFtb2+w6dXV1VFVVsr+0hL4F/ZP+e4iIiIiIiIhEHdcd+YyMDCorK2Pf14frCaV4v3J6RneqKitj61RXV5HRPbPZdaKi64iIiIiIiIj45bjuyFdVVZGRkRH7PhQKEa6vB6C6qpL0jIzYOunpGVRWVjS7TlR0HRERERERERG/HNcd+aLPt3JyoQHAgEFDKN6zO/bazh3bGTxkODt3fE7hyNH07tOXtLS0ZtfplppKRkZ3evfpS/He3U3eR0RERERERCRZOnTXettxvwL8BKgD5gHftkyjNu71XOAZoBAoB75pmcbijrzn0Vi/bjXDTy7ka7d/EwjxxqvPM/ms6ewv3cfG9WtZumgBU86aQc9eJ1FZUY554ZebXefmW2cTCoWY995b1NXWtvm+IiIiIiIiIolyzB1523H7Ab8FJgG7gOeBW4HH4lb7T2CjZRpX2I47EXjRdtyR8Z39hAqHeev1vzRYVLKvOPb1yuWLWbm86XmF9qwjIiIiIiIi4oeOjMjPBBZYprEDwHbcJ4Hv0LAjPwuwACzTWG47bglwNvBBe97Adtx8IL/x8szMLCoqyjsQXURERERERKRrCoXD4WP6h7bj/ivQzzKNeyPfTwBesEzj1Lh1KiPrfBH5/q+Rdf7czvf4MfCjZl76iWUaPz6m4Ed+dj5wD/A7yzRKOvKzOkvQMgUtDyhTV8wDwcsUtDygTF0xDyhTV8wDytQV80DwMgUtDyhTV8wDytQV84D/mTpys7sUIP4sQAjvWvmjXac1vwNGNvPf7442bDPy8U4SNBnx91HQMgUtDyhTewQtDwQvU9DygDK1R9DygDK1R9DygDK1R9DyQPAyBS0PKFN7BC0PKFN7BC0P+JypI1PrtwPj477vD+xoZp0BQFkr67QocmYjEGdcRERERERERIKgIyPyc4HptuMOtR03Be9Gd683Wud14A6AyM3uBgBLOvCeIiIiIiIiIie0Y+7IW6axG5iN11lfBxwAHrId96e2494dWe0/gMG2464BngJutEyjqmORRURERERERE5cHXqOvGUarwCvNFr8H3GvlwHXduQ9REREREREROSIjkyt7+pKgJ8QrGvwg5YpaHlAmdojaHkgeJmClgeUqT2ClgeUqT2ClgeUqT2ClgeClyloeUCZ2iNoeUCZ2iNoecDnTMf8+DkRERERERERSb4TeUReREREREREpMtRR15ERERERESkC1FHXkRERERERKQLUUdeREREREREpAtRR15ERERERESkC1FHXkRERERERKQLUUde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\n", 266 | "text/plain": [ 267 | "" 268 | ] 269 | }, 270 | "metadata": {}, 271 | "output_type": "display_data" 272 | } 273 | ], 274 | "source": [ 275 | "title = 'Distance of {:,.0f} Data Points in a Unit Hypercube'.format(n_points)\n", 276 | "fig, axes = plt.subplots(2, 1)\n", 277 | "distances[[ 'Avg. Uniform', 'Avg. Normal']].plot.bar(figsize=(14, 8), title='Average ' + title, ax=axes[0])\n", 278 | "distances[[ 'Min. Uniform', 'Min. Normal']].plot.bar(figsize=(14, 8), title='Minimum ' + title, ax=axes[1])\n", 279 | "\n", 280 | "for ax in axes:\n", 281 | " ax.grid(axis='y', lw=1, ls='--')\n", 282 | " for p in ax.patches:\n", 283 | " ax.annotate('{:.1f}'.format(p.get_height()), (p.get_x() + .01, p.get_height() + .25))\n", 284 | "plt.tight_layout();" 285 | ] 286 | } 287 | ], 288 | "metadata": { 289 | "celltoolbar": "Slideshow", 290 | "hide_input": false, 291 | "kernelspec": { 292 | "display_name": "Python 3", 293 | "language": "python", 294 | "name": "python3" 295 | }, 296 | "language_info": { 297 | "codemirror_mode": { 298 | "name": "ipython", 299 | "version": 3 300 | }, 301 | "file_extension": ".py", 302 | "mimetype": "text/x-python", 303 | "name": "python", 304 | "nbconvert_exporter": "python", 305 | "pygments_lexer": "ipython3", 306 | "version": "3.6.3" 307 | } 308 | }, 309 | "nbformat": 4, 310 | "nbformat_minor": 1 311 | } 312 | -------------------------------------------------------------------------------- /Section 3/wholesale_customers_data.csv: -------------------------------------------------------------------------------- 1 | Channel,Region,Fresh,Milk,Grocery,Frozen,Detergents_Paper,Delicatessen 2 | 2,3,12669,9656,7561,214,2674,1338 3 | 2,3,7057,9810,9568,1762,3293,1776 4 | 2,3,6353,8808,7684,2405,3516,7844 5 | 1,3,13265,1196,4221,6404,507,1788 6 | 2,3,22615,5410,7198,3915,1777,5185 7 | 2,3,9413,8259,5126,666,1795,1451 8 | 2,3,12126,3199,6975,480,3140,545 9 | 2,3,7579,4956,9426,1669,3321,2566 10 | 1,3,5963,3648,6192,425,1716,750 11 | 2,3,6006,11093,18881,1159,7425,2098 12 | 2,3,3366,5403,12974,4400,5977,1744 13 | 2,3,13146,1124,4523,1420,549,497 14 | 2,3,31714,12319,11757,287,3881,2931 15 | 2,3,21217,6208,14982,3095,6707,602 16 | 2,3,24653,9465,12091,294,5058,2168 17 | 1,3,10253,1114,3821,397,964,412 18 | 2,3,1020,8816,12121,134,4508,1080 19 | 1,3,5876,6157,2933,839,370,4478 20 | 2,3,18601,6327,10099,2205,2767,3181 21 | 1,3,7780,2495,9464,669,2518,501 22 | 2,3,17546,4519,4602,1066,2259,2124 23 | 1,3,5567,871,2010,3383,375,569 24 | 1,3,31276,1917,4469,9408,2381,4334 25 | 2,3,26373,36423,22019,5154,4337,16523 26 | 2,3,22647,9776,13792,2915,4482,5778 27 | 2,3,16165,4230,7595,201,4003,57 28 | 1,3,9898,961,2861,3151,242,833 29 | 1,3,14276,803,3045,485,100,518 30 | 2,3,4113,20484,25957,1158,8604,5206 31 | 1,3,43088,2100,2609,1200,1107,823 32 | 1,3,18815,3610,11107,1148,2134,2963 33 | 1,3,2612,4339,3133,2088,820,985 34 | 1,3,21632,1318,2886,266,918,405 35 | 1,3,29729,4786,7326,6130,361,1083 36 | 1,3,1502,1979,2262,425,483,395 37 | 2,3,688,5491,11091,833,4239,436 38 | 1,3,29955,4362,5428,1729,862,4626 39 | 2,3,15168,10556,12477,1920,6506,714 40 | 2,3,4591,15729,16709,33,6956,433 41 | 1,3,56159,555,902,10002,212,2916 42 | 1,3,24025,4332,4757,9510,1145,5864 43 | 1,3,19176,3065,5956,2033,2575,2802 44 | 2,3,10850,7555,14961,188,6899,46 45 | 2,3,630,11095,23998,787,9529,72 46 | 2,3,9670,7027,10471,541,4618,65 47 | 2,3,5181,22044,21531,1740,7353,4985 48 | 2,3,3103,14069,21955,1668,6792,1452 49 | 2,3,44466,54259,55571,7782,24171,6465 50 | 2,3,11519,6152,10868,584,5121,1476 51 | 2,3,4967,21412,28921,1798,13583,1163 52 | 1,3,6269,1095,1980,3860,609,2162 53 | 1,3,3347,4051,6996,239,1538,301 54 | 2,3,40721,3916,5876,532,2587,1278 55 | 2,3,491,10473,11532,744,5611,224 56 | 1,3,27329,1449,1947,2436,204,1333 57 | 1,3,5264,3683,5005,1057,2024,1130 58 | 2,3,4098,29892,26866,2616,17740,1340 59 | 2,3,5417,9933,10487,38,7572,1282 60 | 1,3,13779,1970,1648,596,227,436 61 | 1,3,6137,5360,8040,129,3084,1603 62 | 2,3,8590,3045,7854,96,4095,225 63 | 2,3,35942,38369,59598,3254,26701,2017 64 | 2,3,7823,6245,6544,4154,4074,964 65 | 2,3,9396,11601,15775,2896,7677,1295 66 | 1,3,4760,1227,3250,3724,1247,1145 67 | 2,3,85,20959,45828,36,24231,1423 68 | 1,3,9,1534,7417,175,3468,27 69 | 2,3,19913,6759,13462,1256,5141,834 70 | 1,3,2446,7260,3993,5870,788,3095 71 | 1,3,8352,2820,1293,779,656,144 72 | 1,3,16705,2037,3202,10643,116,1365 73 | 1,3,18291,1266,21042,5373,4173,14472 74 | 1,3,4420,5139,2661,8872,1321,181 75 | 2,3,19899,5332,8713,8132,764,648 76 | 2,3,8190,6343,9794,1285,1901,1780 77 | 1,3,20398,1137,3,4407,3,975 78 | 1,3,717,3587,6532,7530,529,894 79 | 2,3,12205,12697,28540,869,12034,1009 80 | 1,3,10766,1175,2067,2096,301,167 81 | 1,3,1640,3259,3655,868,1202,1653 82 | 1,3,7005,829,3009,430,610,529 83 | 2,3,219,9540,14403,283,7818,156 84 | 2,3,10362,9232,11009,737,3537,2342 85 | 1,3,20874,1563,1783,2320,550,772 86 | 2,3,11867,3327,4814,1178,3837,120 87 | 2,3,16117,46197,92780,1026,40827,2944 88 | 2,3,22925,73498,32114,987,20070,903 89 | 1,3,43265,5025,8117,6312,1579,14351 90 | 1,3,7864,542,4042,9735,165,46 91 | 1,3,24904,3836,5330,3443,454,3178 92 | 1,3,11405,596,1638,3347,69,360 93 | 1,3,12754,2762,2530,8693,627,1117 94 | 2,3,9198,27472,32034,3232,18906,5130 95 | 1,3,11314,3090,2062,35009,71,2698 96 | 2,3,5626,12220,11323,206,5038,244 97 | 1,3,3,2920,6252,440,223,709 98 | 2,3,23,2616,8118,145,3874,217 99 | 1,3,403,254,610,774,54,63 100 | 1,3,503,112,778,895,56,132 101 | 1,3,9658,2182,1909,5639,215,323 102 | 2,3,11594,7779,12144,3252,8035,3029 103 | 2,3,1420,10810,16267,1593,6766,1838 104 | 2,3,2932,6459,7677,2561,4573,1386 105 | 1,3,56082,3504,8906,18028,1480,2498 106 | 1,3,14100,2132,3445,1336,1491,548 107 | 1,3,15587,1014,3970,910,139,1378 108 | 2,3,1454,6337,10704,133,6830,1831 109 | 2,3,8797,10646,14886,2471,8969,1438 110 | 2,3,1531,8397,6981,247,2505,1236 111 | 2,3,1406,16729,28986,673,836,3 112 | 1,3,11818,1648,1694,2276,169,1647 113 | 2,3,12579,11114,17569,805,6457,1519 114 | 1,3,19046,2770,2469,8853,483,2708 115 | 1,3,14438,2295,1733,3220,585,1561 116 | 1,3,18044,1080,2000,2555,118,1266 117 | 1,3,11134,793,2988,2715,276,610 118 | 1,3,11173,2521,3355,1517,310,222 119 | 1,3,6990,3880,5380,1647,319,1160 120 | 1,3,20049,1891,2362,5343,411,933 121 | 1,3,8258,2344,2147,3896,266,635 122 | 1,3,17160,1200,3412,2417,174,1136 123 | 1,3,4020,3234,1498,2395,264,255 124 | 1,3,12212,201,245,1991,25,860 125 | 2,3,11170,10769,8814,2194,1976,143 126 | 1,3,36050,1642,2961,4787,500,1621 127 | 1,3,76237,3473,7102,16538,778,918 128 | 1,3,19219,1840,1658,8195,349,483 129 | 2,3,21465,7243,10685,880,2386,2749 130 | 1,3,140,8847,3823,142,1062,3 131 | 1,3,42312,926,1510,1718,410,1819 132 | 1,3,7149,2428,699,6316,395,911 133 | 1,3,2101,589,314,346,70,310 134 | 1,3,14903,2032,2479,576,955,328 135 | 1,3,9434,1042,1235,436,256,396 136 | 1,3,7388,1882,2174,720,47,537 137 | 1,3,6300,1289,2591,1170,199,326 138 | 1,3,4625,8579,7030,4575,2447,1542 139 | 1,3,3087,8080,8282,661,721,36 140 | 1,3,13537,4257,5034,155,249,3271 141 | 1,3,5387,4979,3343,825,637,929 142 | 1,3,17623,4280,7305,2279,960,2616 143 | 1,3,30379,13252,5189,321,51,1450 144 | 1,3,37036,7152,8253,2995,20,3 145 | 1,3,10405,1596,1096,8425,399,318 146 | 1,3,18827,3677,1988,118,516,201 147 | 2,3,22039,8384,34792,42,12591,4430 148 | 1,3,7769,1936,2177,926,73,520 149 | 1,3,9203,3373,2707,1286,1082,526 150 | 1,3,5924,584,542,4052,283,434 151 | 1,3,31812,1433,1651,800,113,1440 152 | 1,3,16225,1825,1765,853,170,1067 153 | 1,3,1289,3328,2022,531,255,1774 154 | 1,3,18840,1371,3135,3001,352,184 155 | 1,3,3463,9250,2368,779,302,1627 156 | 1,3,622,55,137,75,7,8 157 | 2,3,1989,10690,19460,233,11577,2153 158 | 2,3,3830,5291,14855,317,6694,3182 159 | 1,3,17773,1366,2474,3378,811,418 160 | 2,3,2861,6570,9618,930,4004,1682 161 | 2,3,355,7704,14682,398,8077,303 162 | 2,3,1725,3651,12822,824,4424,2157 163 | 1,3,12434,540,283,1092,3,2233 164 | 1,3,15177,2024,3810,2665,232,610 165 | 2,3,5531,15726,26870,2367,13726,446 166 | 2,3,5224,7603,8584,2540,3674,238 167 | 2,3,15615,12653,19858,4425,7108,2379 168 | 2,3,4822,6721,9170,993,4973,3637 169 | 1,3,2926,3195,3268,405,1680,693 170 | 1,3,5809,735,803,1393,79,429 171 | 1,3,5414,717,2155,2399,69,750 172 | 2,3,260,8675,13430,1116,7015,323 173 | 2,3,200,25862,19816,651,8773,6250 174 | 1,3,955,5479,6536,333,2840,707 175 | 2,3,514,7677,19805,937,9836,716 176 | 1,3,286,1208,5241,2515,153,1442 177 | 2,3,2343,7845,11874,52,4196,1697 178 | 1,3,45640,6958,6536,7368,1532,230 179 | 1,3,12759,7330,4533,1752,20,2631 180 | 1,3,11002,7075,4945,1152,120,395 181 | 1,3,3157,4888,2500,4477,273,2165 182 | 1,3,12356,6036,8887,402,1382,2794 183 | 1,3,112151,29627,18148,16745,4948,8550 184 | 1,3,694,8533,10518,443,6907,156 185 | 1,3,36847,43950,20170,36534,239,47943 186 | 1,3,327,918,4710,74,334,11 187 | 1,3,8170,6448,1139,2181,58,247 188 | 1,3,3009,521,854,3470,949,727 189 | 1,3,2438,8002,9819,6269,3459,3 190 | 2,3,8040,7639,11687,2758,6839,404 191 | 2,3,834,11577,11522,275,4027,1856 192 | 1,3,16936,6250,1981,7332,118,64 193 | 1,3,13624,295,1381,890,43,84 194 | 1,3,5509,1461,2251,547,187,409 195 | 2,3,180,3485,20292,959,5618,666 196 | 1,3,7107,1012,2974,806,355,1142 197 | 1,3,17023,5139,5230,7888,330,1755 198 | 1,1,30624,7209,4897,18711,763,2876 199 | 2,1,2427,7097,10391,1127,4314,1468 200 | 1,1,11686,2154,6824,3527,592,697 201 | 1,1,9670,2280,2112,520,402,347 202 | 2,1,3067,13240,23127,3941,9959,731 203 | 2,1,4484,14399,24708,3549,14235,1681 204 | 1,1,25203,11487,9490,5065,284,6854 205 | 1,1,583,685,2216,469,954,18 206 | 1,1,1956,891,5226,1383,5,1328 207 | 2,1,1107,11711,23596,955,9265,710 208 | 1,1,6373,780,950,878,288,285 209 | 2,1,2541,4737,6089,2946,5316,120 210 | 1,1,1537,3748,5838,1859,3381,806 211 | 2,1,5550,12729,16767,864,12420,797 212 | 1,1,18567,1895,1393,1801,244,2100 213 | 2,1,12119,28326,39694,4736,19410,2870 214 | 1,1,7291,1012,2062,1291,240,1775 215 | 1,1,3317,6602,6861,1329,3961,1215 216 | 2,1,2362,6551,11364,913,5957,791 217 | 1,1,2806,10765,15538,1374,5828,2388 218 | 2,1,2532,16599,36486,179,13308,674 219 | 1,1,18044,1475,2046,2532,130,1158 220 | 2,1,18,7504,15205,1285,4797,6372 221 | 1,1,4155,367,1390,2306,86,130 222 | 1,1,14755,899,1382,1765,56,749 223 | 1,1,5396,7503,10646,91,4167,239 224 | 1,1,5041,1115,2856,7496,256,375 225 | 2,1,2790,2527,5265,5612,788,1360 226 | 1,1,7274,659,1499,784,70,659 227 | 1,1,12680,3243,4157,660,761,786 228 | 2,1,20782,5921,9212,1759,2568,1553 229 | 1,1,4042,2204,1563,2286,263,689 230 | 1,1,1869,577,572,950,4762,203 231 | 1,1,8656,2746,2501,6845,694,980 232 | 2,1,11072,5989,5615,8321,955,2137 233 | 1,1,2344,10678,3828,1439,1566,490 234 | 1,1,25962,1780,3838,638,284,834 235 | 1,1,964,4984,3316,937,409,7 236 | 1,1,15603,2703,3833,4260,325,2563 237 | 1,1,1838,6380,2824,1218,1216,295 238 | 1,1,8635,820,3047,2312,415,225 239 | 1,1,18692,3838,593,4634,28,1215 240 | 1,1,7363,475,585,1112,72,216 241 | 1,1,47493,2567,3779,5243,828,2253 242 | 1,1,22096,3575,7041,11422,343,2564 243 | 1,1,24929,1801,2475,2216,412,1047 244 | 1,1,18226,659,2914,3752,586,578 245 | 1,1,11210,3576,5119,561,1682,2398 246 | 1,1,6202,7775,10817,1183,3143,1970 247 | 2,1,3062,6154,13916,230,8933,2784 248 | 1,1,8885,2428,1777,1777,430,610 249 | 1,1,13569,346,489,2077,44,659 250 | 1,1,15671,5279,2406,559,562,572 251 | 1,1,8040,3795,2070,6340,918,291 252 | 1,1,3191,1993,1799,1730,234,710 253 | 2,1,6134,23133,33586,6746,18594,5121 254 | 1,1,6623,1860,4740,7683,205,1693 255 | 1,1,29526,7961,16966,432,363,1391 256 | 1,1,10379,17972,4748,4686,1547,3265 257 | 1,1,31614,489,1495,3242,111,615 258 | 1,1,11092,5008,5249,453,392,373 259 | 1,1,8475,1931,1883,5004,3593,987 260 | 1,1,56083,4563,2124,6422,730,3321 261 | 1,1,53205,4959,7336,3012,967,818 262 | 1,1,9193,4885,2157,327,780,548 263 | 1,1,7858,1110,1094,6818,49,287 264 | 1,1,23257,1372,1677,982,429,655 265 | 1,1,2153,1115,6684,4324,2894,411 266 | 2,1,1073,9679,15445,61,5980,1265 267 | 1,1,5909,23527,13699,10155,830,3636 268 | 2,1,572,9763,22182,2221,4882,2563 269 | 1,1,20893,1222,2576,3975,737,3628 270 | 2,1,11908,8053,19847,1069,6374,698 271 | 1,1,15218,258,1138,2516,333,204 272 | 1,1,4720,1032,975,5500,197,56 273 | 1,1,2083,5007,1563,1120,147,1550 274 | 1,1,514,8323,6869,529,93,1040 275 | 1,3,36817,3045,1493,4802,210,1824 276 | 1,3,894,1703,1841,744,759,1153 277 | 1,3,680,1610,223,862,96,379 278 | 1,3,27901,3749,6964,4479,603,2503 279 | 1,3,9061,829,683,16919,621,139 280 | 1,3,11693,2317,2543,5845,274,1409 281 | 2,3,17360,6200,9694,1293,3620,1721 282 | 1,3,3366,2884,2431,977,167,1104 283 | 2,3,12238,7108,6235,1093,2328,2079 284 | 1,3,49063,3965,4252,5970,1041,1404 285 | 1,3,25767,3613,2013,10303,314,1384 286 | 1,3,68951,4411,12609,8692,751,2406 287 | 1,3,40254,640,3600,1042,436,18 288 | 1,3,7149,2247,1242,1619,1226,128 289 | 1,3,15354,2102,2828,8366,386,1027 290 | 1,3,16260,594,1296,848,445,258 291 | 1,3,42786,286,471,1388,32,22 292 | 1,3,2708,2160,2642,502,965,1522 293 | 1,3,6022,3354,3261,2507,212,686 294 | 1,3,2838,3086,4329,3838,825,1060 295 | 2,2,3996,11103,12469,902,5952,741 296 | 1,2,21273,2013,6550,909,811,1854 297 | 2,2,7588,1897,5234,417,2208,254 298 | 1,2,19087,1304,3643,3045,710,898 299 | 2,2,8090,3199,6986,1455,3712,531 300 | 2,2,6758,4560,9965,934,4538,1037 301 | 1,2,444,879,2060,264,290,259 302 | 2,2,16448,6243,6360,824,2662,2005 303 | 2,2,5283,13316,20399,1809,8752,172 304 | 2,2,2886,5302,9785,364,6236,555 305 | 2,2,2599,3688,13829,492,10069,59 306 | 2,2,161,7460,24773,617,11783,2410 307 | 2,2,243,12939,8852,799,3909,211 308 | 2,2,6468,12867,21570,1840,7558,1543 309 | 1,2,17327,2374,2842,1149,351,925 310 | 1,2,6987,1020,3007,416,257,656 311 | 2,2,918,20655,13567,1465,6846,806 312 | 1,2,7034,1492,2405,12569,299,1117 313 | 1,2,29635,2335,8280,3046,371,117 314 | 2,2,2137,3737,19172,1274,17120,142 315 | 1,2,9784,925,2405,4447,183,297 316 | 1,2,10617,1795,7647,1483,857,1233 317 | 2,2,1479,14982,11924,662,3891,3508 318 | 1,2,7127,1375,2201,2679,83,1059 319 | 1,2,1182,3088,6114,978,821,1637 320 | 1,2,11800,2713,3558,2121,706,51 321 | 2,2,9759,25071,17645,1128,12408,1625 322 | 1,2,1774,3696,2280,514,275,834 323 | 1,2,9155,1897,5167,2714,228,1113 324 | 1,2,15881,713,3315,3703,1470,229 325 | 1,2,13360,944,11593,915,1679,573 326 | 1,2,25977,3587,2464,2369,140,1092 327 | 1,2,32717,16784,13626,60869,1272,5609 328 | 1,2,4414,1610,1431,3498,387,834 329 | 1,2,542,899,1664,414,88,522 330 | 1,2,16933,2209,3389,7849,210,1534 331 | 1,2,5113,1486,4583,5127,492,739 332 | 1,2,9790,1786,5109,3570,182,1043 333 | 2,2,11223,14881,26839,1234,9606,1102 334 | 1,2,22321,3216,1447,2208,178,2602 335 | 2,2,8565,4980,67298,131,38102,1215 336 | 2,2,16823,928,2743,11559,332,3486 337 | 2,2,27082,6817,10790,1365,4111,2139 338 | 1,2,13970,1511,1330,650,146,778 339 | 1,2,9351,1347,2611,8170,442,868 340 | 1,2,3,333,7021,15601,15,550 341 | 1,2,2617,1188,5332,9584,573,1942 342 | 2,3,381,4025,9670,388,7271,1371 343 | 2,3,2320,5763,11238,767,5162,2158 344 | 1,3,255,5758,5923,349,4595,1328 345 | 2,3,1689,6964,26316,1456,15469,37 346 | 1,3,3043,1172,1763,2234,217,379 347 | 1,3,1198,2602,8335,402,3843,303 348 | 2,3,2771,6939,15541,2693,6600,1115 349 | 2,3,27380,7184,12311,2809,4621,1022 350 | 1,3,3428,2380,2028,1341,1184,665 351 | 2,3,5981,14641,20521,2005,12218,445 352 | 1,3,3521,1099,1997,1796,173,995 353 | 2,3,1210,10044,22294,1741,12638,3137 354 | 1,3,608,1106,1533,830,90,195 355 | 2,3,117,6264,21203,228,8682,1111 356 | 1,3,14039,7393,2548,6386,1333,2341 357 | 1,3,190,727,2012,245,184,127 358 | 1,3,22686,134,218,3157,9,548 359 | 2,3,37,1275,22272,137,6747,110 360 | 1,3,759,18664,1660,6114,536,4100 361 | 1,3,796,5878,2109,340,232,776 362 | 1,3,19746,2872,2006,2601,468,503 363 | 1,3,4734,607,864,1206,159,405 364 | 1,3,2121,1601,2453,560,179,712 365 | 1,3,4627,997,4438,191,1335,314 366 | 1,3,2615,873,1524,1103,514,468 367 | 2,3,4692,6128,8025,1619,4515,3105 368 | 1,3,9561,2217,1664,1173,222,447 369 | 1,3,3477,894,534,1457,252,342 370 | 1,3,22335,1196,2406,2046,101,558 371 | 1,3,6211,337,683,1089,41,296 372 | 2,3,39679,3944,4955,1364,523,2235 373 | 1,3,20105,1887,1939,8164,716,790 374 | 1,3,3884,3801,1641,876,397,4829 375 | 2,3,15076,6257,7398,1504,1916,3113 376 | 1,3,6338,2256,1668,1492,311,686 377 | 1,3,5841,1450,1162,597,476,70 378 | 2,3,3136,8630,13586,5641,4666,1426 379 | 1,3,38793,3154,2648,1034,96,1242 380 | 1,3,3225,3294,1902,282,68,1114 381 | 2,3,4048,5164,10391,130,813,179 382 | 1,3,28257,944,2146,3881,600,270 383 | 1,3,17770,4591,1617,9927,246,532 384 | 1,3,34454,7435,8469,2540,1711,2893 385 | 1,3,1821,1364,3450,4006,397,361 386 | 1,3,10683,21858,15400,3635,282,5120 387 | 1,3,11635,922,1614,2583,192,1068 388 | 1,3,1206,3620,2857,1945,353,967 389 | 1,3,20918,1916,1573,1960,231,961 390 | 1,3,9785,848,1172,1677,200,406 391 | 1,3,9385,1530,1422,3019,227,684 392 | 1,3,3352,1181,1328,5502,311,1000 393 | 1,3,2647,2761,2313,907,95,1827 394 | 1,3,518,4180,3600,659,122,654 395 | 1,3,23632,6730,3842,8620,385,819 396 | 1,3,12377,865,3204,1398,149,452 397 | 1,3,9602,1316,1263,2921,841,290 398 | 2,3,4515,11991,9345,2644,3378,2213 399 | 1,3,11535,1666,1428,6838,64,743 400 | 1,3,11442,1032,582,5390,74,247 401 | 1,3,9612,577,935,1601,469,375 402 | 1,3,4446,906,1238,3576,153,1014 403 | 1,3,27167,2801,2128,13223,92,1902 404 | 1,3,26539,4753,5091,220,10,340 405 | 1,3,25606,11006,4604,127,632,288 406 | 1,3,18073,4613,3444,4324,914,715 407 | 1,3,6884,1046,1167,2069,593,378 408 | 1,3,25066,5010,5026,9806,1092,960 409 | 2,3,7362,12844,18683,2854,7883,553 410 | 2,3,8257,3880,6407,1646,2730,344 411 | 1,3,8708,3634,6100,2349,2123,5137 412 | 1,3,6633,2096,4563,1389,1860,1892 413 | 1,3,2126,3289,3281,1535,235,4365 414 | 1,3,97,3605,12400,98,2970,62 415 | 1,3,4983,4859,6633,17866,912,2435 416 | 1,3,5969,1990,3417,5679,1135,290 417 | 2,3,7842,6046,8552,1691,3540,1874 418 | 2,3,4389,10940,10908,848,6728,993 419 | 1,3,5065,5499,11055,364,3485,1063 420 | 2,3,660,8494,18622,133,6740,776 421 | 1,3,8861,3783,2223,633,1580,1521 422 | 1,3,4456,5266,13227,25,6818,1393 423 | 2,3,17063,4847,9053,1031,3415,1784 424 | 1,3,26400,1377,4172,830,948,1218 425 | 2,3,17565,3686,4657,1059,1803,668 426 | 2,3,16980,2884,12232,874,3213,249 427 | 1,3,11243,2408,2593,15348,108,1886 428 | 1,3,13134,9347,14316,3141,5079,1894 429 | 1,3,31012,16687,5429,15082,439,1163 430 | 1,3,3047,5970,4910,2198,850,317 431 | 1,3,8607,1750,3580,47,84,2501 432 | 1,3,3097,4230,16483,575,241,2080 433 | 1,3,8533,5506,5160,13486,1377,1498 434 | 1,3,21117,1162,4754,269,1328,395 435 | 1,3,1982,3218,1493,1541,356,1449 436 | 1,3,16731,3922,7994,688,2371,838 437 | 1,3,29703,12051,16027,13135,182,2204 438 | 1,3,39228,1431,764,4510,93,2346 439 | 2,3,14531,15488,30243,437,14841,1867 440 | 1,3,10290,1981,2232,1038,168,2125 441 | 1,3,2787,1698,2510,65,477,52 442 | -------------------------------------------------------------------------------- /Section 4/data/wholesale_customers_data.csv: -------------------------------------------------------------------------------- 1 | "Channel","Region","Fresh","Milk","Grocery","Frozen","Detergents_Paper","Delicatessen" 2 | 2,3,12669,9656,7561,214,2674,1338 3 | 2,3,7057,9810,9568,1762,3293,1776 4 | 2,3,6353,8808,7684,2405,3516,7844 5 | 1,3,13265,1196,4221,6404,507,1788 6 | 2,3,22615,5410,7198,3915,1777,5185 7 | 2,3,9413,8259,5126,666,1795,1451 8 | 2,3,12126,3199,6975,480,3140,545 9 | 2,3,7579,4956,9426,1669,3321,2566 10 | 1,3,5963,3648,6192,425,1716,750 11 | 2,3,6006,11093,18881,1159,7425,2098 12 | 2,3,3366,5403,12974,4400,5977,1744 13 | 2,3,13146,1124,4523,1420,549,497 14 | 2,3,31714,12319,11757,287,3881,2931 15 | 2,3,21217,6208,14982,3095,6707,602 16 | 2,3,24653,9465,12091,294,5058,2168 17 | 1,3,10253,1114,3821,397,964,412 18 | 2,3,1020,8816,12121,134,4508,1080 19 | 1,3,5876,6157,2933,839,370,4478 20 | 2,3,18601,6327,10099,2205,2767,3181 21 | 1,3,7780,2495,9464,669,2518,501 22 | 2,3,17546,4519,4602,1066,2259,2124 23 | 1,3,5567,871,2010,3383,375,569 24 | 1,3,31276,1917,4469,9408,2381,4334 25 | 2,3,26373,36423,22019,5154,4337,16523 26 | 2,3,22647,9776,13792,2915,4482,5778 27 | 2,3,16165,4230,7595,201,4003,57 28 | 1,3,9898,961,2861,3151,242,833 29 | 1,3,14276,803,3045,485,100,518 30 | 2,3,4113,20484,25957,1158,8604,5206 31 | 1,3,43088,2100,2609,1200,1107,823 32 | 1,3,18815,3610,11107,1148,2134,2963 33 | 1,3,2612,4339,3133,2088,820,985 34 | 1,3,21632,1318,2886,266,918,405 35 | 1,3,29729,4786,7326,6130,361,1083 36 | 1,3,1502,1979,2262,425,483,395 37 | 2,3,688,5491,11091,833,4239,436 38 | 1,3,29955,4362,5428,1729,862,4626 39 | 2,3,15168,10556,12477,1920,6506,714 40 | 2,3,4591,15729,16709,33,6956,433 41 | 1,3,56159,555,902,10002,212,2916 42 | 1,3,24025,4332,4757,9510,1145,5864 43 | 1,3,19176,3065,5956,2033,2575,2802 44 | 2,3,10850,7555,14961,188,6899,46 45 | 2,3,630,11095,23998,787,9529,72 46 | 2,3,9670,7027,10471,541,4618,65 47 | 2,3,5181,22044,21531,1740,7353,4985 48 | 2,3,3103,14069,21955,1668,6792,1452 49 | 2,3,44466,54259,55571,7782,24171,6465 50 | 2,3,11519,6152,10868,584,5121,1476 51 | 2,3,4967,21412,28921,1798,13583,1163 52 | 1,3,6269,1095,1980,3860,609,2162 53 | 1,3,3347,4051,6996,239,1538,301 54 | 2,3,40721,3916,5876,532,2587,1278 55 | 2,3,491,10473,11532,744,5611,224 56 | 1,3,27329,1449,1947,2436,204,1333 57 | 1,3,5264,3683,5005,1057,2024,1130 58 | 2,3,4098,29892,26866,2616,17740,1340 59 | 2,3,5417,9933,10487,38,7572,1282 60 | 1,3,13779,1970,1648,596,227,436 61 | 1,3,6137,5360,8040,129,3084,1603 62 | 2,3,8590,3045,7854,96,4095,225 63 | 2,3,35942,38369,59598,3254,26701,2017 64 | 2,3,7823,6245,6544,4154,4074,964 65 | 2,3,9396,11601,15775,2896,7677,1295 66 | 1,3,4760,1227,3250,3724,1247,1145 67 | 2,3,85,20959,45828,36,24231,1423 68 | 1,3,9,1534,7417,175,3468,27 69 | 2,3,19913,6759,13462,1256,5141,834 70 | 1,3,2446,7260,3993,5870,788,3095 71 | 1,3,8352,2820,1293,779,656,144 72 | 1,3,16705,2037,3202,10643,116,1365 73 | 1,3,18291,1266,21042,5373,4173,14472 74 | 1,3,4420,5139,2661,8872,1321,181 75 | 2,3,19899,5332,8713,8132,764,648 76 | 2,3,8190,6343,9794,1285,1901,1780 77 | 1,3,20398,1137,3,4407,3,975 78 | 1,3,717,3587,6532,7530,529,894 79 | 2,3,12205,12697,28540,869,12034,1009 80 | 1,3,10766,1175,2067,2096,301,167 81 | 1,3,1640,3259,3655,868,1202,1653 82 | 1,3,7005,829,3009,430,610,529 83 | 2,3,219,9540,14403,283,7818,156 84 | 2,3,10362,9232,11009,737,3537,2342 85 | 1,3,20874,1563,1783,2320,550,772 86 | 2,3,11867,3327,4814,1178,3837,120 87 | 2,3,16117,46197,92780,1026,40827,2944 88 | 2,3,22925,73498,32114,987,20070,903 89 | 1,3,43265,5025,8117,6312,1579,14351 90 | 1,3,7864,542,4042,9735,165,46 91 | 1,3,24904,3836,5330,3443,454,3178 92 | 1,3,11405,596,1638,3347,69,360 93 | 1,3,12754,2762,2530,8693,627,1117 94 | 2,3,9198,27472,32034,3232,18906,5130 95 | 1,3,11314,3090,2062,35009,71,2698 96 | 2,3,5626,12220,11323,206,5038,244 97 | 1,3,3,2920,6252,440,223,709 98 | 2,3,23,2616,8118,145,3874,217 99 | 1,3,403,254,610,774,54,63 100 | 1,3,503,112,778,895,56,132 101 | 1,3,9658,2182,1909,5639,215,323 102 | 2,3,11594,7779,12144,3252,8035,3029 103 | 2,3,1420,10810,16267,1593,6766,1838 104 | 2,3,2932,6459,7677,2561,4573,1386 105 | 1,3,56082,3504,8906,18028,1480,2498 106 | 1,3,14100,2132,3445,1336,1491,548 107 | 1,3,15587,1014,3970,910,139,1378 108 | 2,3,1454,6337,10704,133,6830,1831 109 | 2,3,8797,10646,14886,2471,8969,1438 110 | 2,3,1531,8397,6981,247,2505,1236 111 | 2,3,1406,16729,28986,673,836,3 112 | 1,3,11818,1648,1694,2276,169,1647 113 | 2,3,12579,11114,17569,805,6457,1519 114 | 1,3,19046,2770,2469,8853,483,2708 115 | 1,3,14438,2295,1733,3220,585,1561 116 | 1,3,18044,1080,2000,2555,118,1266 117 | 1,3,11134,793,2988,2715,276,610 118 | 1,3,11173,2521,3355,1517,310,222 119 | 1,3,6990,3880,5380,1647,319,1160 120 | 1,3,20049,1891,2362,5343,411,933 121 | 1,3,8258,2344,2147,3896,266,635 122 | 1,3,17160,1200,3412,2417,174,1136 123 | 1,3,4020,3234,1498,2395,264,255 124 | 1,3,12212,201,245,1991,25,860 125 | 2,3,11170,10769,8814,2194,1976,143 126 | 1,3,36050,1642,2961,4787,500,1621 127 | 1,3,76237,3473,7102,16538,778,918 128 | 1,3,19219,1840,1658,8195,349,483 129 | 2,3,21465,7243,10685,880,2386,2749 130 | 1,3,140,8847,3823,142,1062,3 131 | 1,3,42312,926,1510,1718,410,1819 132 | 1,3,7149,2428,699,6316,395,911 133 | 1,3,2101,589,314,346,70,310 134 | 1,3,14903,2032,2479,576,955,328 135 | 1,3,9434,1042,1235,436,256,396 136 | 1,3,7388,1882,2174,720,47,537 137 | 1,3,6300,1289,2591,1170,199,326 138 | 1,3,4625,8579,7030,4575,2447,1542 139 | 1,3,3087,8080,8282,661,721,36 140 | 1,3,13537,4257,5034,155,249,3271 141 | 1,3,5387,4979,3343,825,637,929 142 | 1,3,17623,4280,7305,2279,960,2616 143 | 1,3,30379,13252,5189,321,51,1450 144 | 1,3,37036,7152,8253,2995,20,3 145 | 1,3,10405,1596,1096,8425,399,318 146 | 1,3,18827,3677,1988,118,516,201 147 | 2,3,22039,8384,34792,42,12591,4430 148 | 1,3,7769,1936,2177,926,73,520 149 | 1,3,9203,3373,2707,1286,1082,526 150 | 1,3,5924,584,542,4052,283,434 151 | 1,3,31812,1433,1651,800,113,1440 152 | 1,3,16225,1825,1765,853,170,1067 153 | 1,3,1289,3328,2022,531,255,1774 154 | 1,3,18840,1371,3135,3001,352,184 155 | 1,3,3463,9250,2368,779,302,1627 156 | 1,3,622,55,137,75,7,8 157 | 2,3,1989,10690,19460,233,11577,2153 158 | 2,3,3830,5291,14855,317,6694,3182 159 | 1,3,17773,1366,2474,3378,811,418 160 | 2,3,2861,6570,9618,930,4004,1682 161 | 2,3,355,7704,14682,398,8077,303 162 | 2,3,1725,3651,12822,824,4424,2157 163 | 1,3,12434,540,283,1092,3,2233 164 | 1,3,15177,2024,3810,2665,232,610 165 | 2,3,5531,15726,26870,2367,13726,446 166 | 2,3,5224,7603,8584,2540,3674,238 167 | 2,3,15615,12653,19858,4425,7108,2379 168 | 2,3,4822,6721,9170,993,4973,3637 169 | 1,3,2926,3195,3268,405,1680,693 170 | 1,3,5809,735,803,1393,79,429 171 | 1,3,5414,717,2155,2399,69,750 172 | 2,3,260,8675,13430,1116,7015,323 173 | 2,3,200,25862,19816,651,8773,6250 174 | 1,3,955,5479,6536,333,2840,707 175 | 2,3,514,7677,19805,937,9836,716 176 | 1,3,286,1208,5241,2515,153,1442 177 | 2,3,2343,7845,11874,52,4196,1697 178 | 1,3,45640,6958,6536,7368,1532,230 179 | 1,3,12759,7330,4533,1752,20,2631 180 | 1,3,11002,7075,4945,1152,120,395 181 | 1,3,3157,4888,2500,4477,273,2165 182 | 1,3,12356,6036,8887,402,1382,2794 183 | 1,3,112151,29627,18148,16745,4948,8550 184 | 1,3,694,8533,10518,443,6907,156 185 | 1,3,36847,43950,20170,36534,239,47943 186 | 1,3,327,918,4710,74,334,11 187 | 1,3,8170,6448,1139,2181,58,247 188 | 1,3,3009,521,854,3470,949,727 189 | 1,3,2438,8002,9819,6269,3459,3 190 | 2,3,8040,7639,11687,2758,6839,404 191 | 2,3,834,11577,11522,275,4027,1856 192 | 1,3,16936,6250,1981,7332,118,64 193 | 1,3,13624,295,1381,890,43,84 194 | 1,3,5509,1461,2251,547,187,409 195 | 2,3,180,3485,20292,959,5618,666 196 | 1,3,7107,1012,2974,806,355,1142 197 | 1,3,17023,5139,5230,7888,330,1755 198 | 1,1,30624,7209,4897,18711,763,2876 199 | 2,1,2427,7097,10391,1127,4314,1468 200 | 1,1,11686,2154,6824,3527,592,697 201 | 1,1,9670,2280,2112,520,402,347 202 | 2,1,3067,13240,23127,3941,9959,731 203 | 2,1,4484,14399,24708,3549,14235,1681 204 | 1,1,25203,11487,9490,5065,284,6854 205 | 1,1,583,685,2216,469,954,18 206 | 1,1,1956,891,5226,1383,5,1328 207 | 2,1,1107,11711,23596,955,9265,710 208 | 1,1,6373,780,950,878,288,285 209 | 2,1,2541,4737,6089,2946,5316,120 210 | 1,1,1537,3748,5838,1859,3381,806 211 | 2,1,5550,12729,16767,864,12420,797 212 | 1,1,18567,1895,1393,1801,244,2100 213 | 2,1,12119,28326,39694,4736,19410,2870 214 | 1,1,7291,1012,2062,1291,240,1775 215 | 1,1,3317,6602,6861,1329,3961,1215 216 | 2,1,2362,6551,11364,913,5957,791 217 | 1,1,2806,10765,15538,1374,5828,2388 218 | 2,1,2532,16599,36486,179,13308,674 219 | 1,1,18044,1475,2046,2532,130,1158 220 | 2,1,18,7504,15205,1285,4797,6372 221 | 1,1,4155,367,1390,2306,86,130 222 | 1,1,14755,899,1382,1765,56,749 223 | 1,1,5396,7503,10646,91,4167,239 224 | 1,1,5041,1115,2856,7496,256,375 225 | 2,1,2790,2527,5265,5612,788,1360 226 | 1,1,7274,659,1499,784,70,659 227 | 1,1,12680,3243,4157,660,761,786 228 | 2,1,20782,5921,9212,1759,2568,1553 229 | 1,1,4042,2204,1563,2286,263,689 230 | 1,1,1869,577,572,950,4762,203 231 | 1,1,8656,2746,2501,6845,694,980 232 | 2,1,11072,5989,5615,8321,955,2137 233 | 1,1,2344,10678,3828,1439,1566,490 234 | 1,1,25962,1780,3838,638,284,834 235 | 1,1,964,4984,3316,937,409,7 236 | 1,1,15603,2703,3833,4260,325,2563 237 | 1,1,1838,6380,2824,1218,1216,295 238 | 1,1,8635,820,3047,2312,415,225 239 | 1,1,18692,3838,593,4634,28,1215 240 | 1,1,7363,475,585,1112,72,216 241 | 1,1,47493,2567,3779,5243,828,2253 242 | 1,1,22096,3575,7041,11422,343,2564 243 | 1,1,24929,1801,2475,2216,412,1047 244 | 1,1,18226,659,2914,3752,586,578 245 | 1,1,11210,3576,5119,561,1682,2398 246 | 1,1,6202,7775,10817,1183,3143,1970 247 | 2,1,3062,6154,13916,230,8933,2784 248 | 1,1,8885,2428,1777,1777,430,610 249 | 1,1,13569,346,489,2077,44,659 250 | 1,1,15671,5279,2406,559,562,572 251 | 1,1,8040,3795,2070,6340,918,291 252 | 1,1,3191,1993,1799,1730,234,710 253 | 2,1,6134,23133,33586,6746,18594,5121 254 | 1,1,6623,1860,4740,7683,205,1693 255 | 1,1,29526,7961,16966,432,363,1391 256 | 1,1,10379,17972,4748,4686,1547,3265 257 | 1,1,31614,489,1495,3242,111,615 258 | 1,1,11092,5008,5249,453,392,373 259 | 1,1,8475,1931,1883,5004,3593,987 260 | 1,1,56083,4563,2124,6422,730,3321 261 | 1,1,53205,4959,7336,3012,967,818 262 | 1,1,9193,4885,2157,327,780,548 263 | 1,1,7858,1110,1094,6818,49,287 264 | 1,1,23257,1372,1677,982,429,655 265 | 1,1,2153,1115,6684,4324,2894,411 266 | 2,1,1073,9679,15445,61,5980,1265 267 | 1,1,5909,23527,13699,10155,830,3636 268 | 2,1,572,9763,22182,2221,4882,2563 269 | 1,1,20893,1222,2576,3975,737,3628 270 | 2,1,11908,8053,19847,1069,6374,698 271 | 1,1,15218,258,1138,2516,333,204 272 | 1,1,4720,1032,975,5500,197,56 273 | 1,1,2083,5007,1563,1120,147,1550 274 | 1,1,514,8323,6869,529,93,1040 275 | 1,3,36817,3045,1493,4802,210,1824 276 | 1,3,894,1703,1841,744,759,1153 277 | 1,3,680,1610,223,862,96,379 278 | 1,3,27901,3749,6964,4479,603,2503 279 | 1,3,9061,829,683,16919,621,139 280 | 1,3,11693,2317,2543,5845,274,1409 281 | 2,3,17360,6200,9694,1293,3620,1721 282 | 1,3,3366,2884,2431,977,167,1104 283 | 2,3,12238,7108,6235,1093,2328,2079 284 | 1,3,49063,3965,4252,5970,1041,1404 285 | 1,3,25767,3613,2013,10303,314,1384 286 | 1,3,68951,4411,12609,8692,751,2406 287 | 1,3,40254,640,3600,1042,436,18 288 | 1,3,7149,2247,1242,1619,1226,128 289 | 1,3,15354,2102,2828,8366,386,1027 290 | 1,3,16260,594,1296,848,445,258 291 | 1,3,42786,286,471,1388,32,22 292 | 1,3,2708,2160,2642,502,965,1522 293 | 1,3,6022,3354,3261,2507,212,686 294 | 1,3,2838,3086,4329,3838,825,1060 295 | 2,2,3996,11103,12469,902,5952,741 296 | 1,2,21273,2013,6550,909,811,1854 297 | 2,2,7588,1897,5234,417,2208,254 298 | 1,2,19087,1304,3643,3045,710,898 299 | 2,2,8090,3199,6986,1455,3712,531 300 | 2,2,6758,4560,9965,934,4538,1037 301 | 1,2,444,879,2060,264,290,259 302 | 2,2,16448,6243,6360,824,2662,2005 303 | 2,2,5283,13316,20399,1809,8752,172 304 | 2,2,2886,5302,9785,364,6236,555 305 | 2,2,2599,3688,13829,492,10069,59 306 | 2,2,161,7460,24773,617,11783,2410 307 | 2,2,243,12939,8852,799,3909,211 308 | 2,2,6468,12867,21570,1840,7558,1543 309 | 1,2,17327,2374,2842,1149,351,925 310 | 1,2,6987,1020,3007,416,257,656 311 | 2,2,918,20655,13567,1465,6846,806 312 | 1,2,7034,1492,2405,12569,299,1117 313 | 1,2,29635,2335,8280,3046,371,117 314 | 2,2,2137,3737,19172,1274,17120,142 315 | 1,2,9784,925,2405,4447,183,297 316 | 1,2,10617,1795,7647,1483,857,1233 317 | 2,2,1479,14982,11924,662,3891,3508 318 | 1,2,7127,1375,2201,2679,83,1059 319 | 1,2,1182,3088,6114,978,821,1637 320 | 1,2,11800,2713,3558,2121,706,51 321 | 2,2,9759,25071,17645,1128,12408,1625 322 | 1,2,1774,3696,2280,514,275,834 323 | 1,2,9155,1897,5167,2714,228,1113 324 | 1,2,15881,713,3315,3703,1470,229 325 | 1,2,13360,944,11593,915,1679,573 326 | 1,2,25977,3587,2464,2369,140,1092 327 | 1,2,32717,16784,13626,60869,1272,5609 328 | 1,2,4414,1610,1431,3498,387,834 329 | 1,2,542,899,1664,414,88,522 330 | 1,2,16933,2209,3389,7849,210,1534 331 | 1,2,5113,1486,4583,5127,492,739 332 | 1,2,9790,1786,5109,3570,182,1043 333 | 2,2,11223,14881,26839,1234,9606,1102 334 | 1,2,22321,3216,1447,2208,178,2602 335 | 2,2,8565,4980,67298,131,38102,1215 336 | 2,2,16823,928,2743,11559,332,3486 337 | 2,2,27082,6817,10790,1365,4111,2139 338 | 1,2,13970,1511,1330,650,146,778 339 | 1,2,9351,1347,2611,8170,442,868 340 | 1,2,3,333,7021,15601,15,550 341 | 1,2,2617,1188,5332,9584,573,1942 342 | 2,3,381,4025,9670,388,7271,1371 343 | 2,3,2320,5763,11238,767,5162,2158 344 | 1,3,255,5758,5923,349,4595,1328 345 | 2,3,1689,6964,26316,1456,15469,37 346 | 1,3,3043,1172,1763,2234,217,379 347 | 1,3,1198,2602,8335,402,3843,303 348 | 2,3,2771,6939,15541,2693,6600,1115 349 | 2,3,27380,7184,12311,2809,4621,1022 350 | 1,3,3428,2380,2028,1341,1184,665 351 | 2,3,5981,14641,20521,2005,12218,445 352 | 1,3,3521,1099,1997,1796,173,995 353 | 2,3,1210,10044,22294,1741,12638,3137 354 | 1,3,608,1106,1533,830,90,195 355 | 2,3,117,6264,21203,228,8682,1111 356 | 1,3,14039,7393,2548,6386,1333,2341 357 | 1,3,190,727,2012,245,184,127 358 | 1,3,22686,134,218,3157,9,548 359 | 2,3,37,1275,22272,137,6747,110 360 | 1,3,759,18664,1660,6114,536,4100 361 | 1,3,796,5878,2109,340,232,776 362 | 1,3,19746,2872,2006,2601,468,503 363 | 1,3,4734,607,864,1206,159,405 364 | 1,3,2121,1601,2453,560,179,712 365 | 1,3,4627,997,4438,191,1335,314 366 | 1,3,2615,873,1524,1103,514,468 367 | 2,3,4692,6128,8025,1619,4515,3105 368 | 1,3,9561,2217,1664,1173,222,447 369 | 1,3,3477,894,534,1457,252,342 370 | 1,3,22335,1196,2406,2046,101,558 371 | 1,3,6211,337,683,1089,41,296 372 | 2,3,39679,3944,4955,1364,523,2235 373 | 1,3,20105,1887,1939,8164,716,790 374 | 1,3,3884,3801,1641,876,397,4829 375 | 2,3,15076,6257,7398,1504,1916,3113 376 | 1,3,6338,2256,1668,1492,311,686 377 | 1,3,5841,1450,1162,597,476,70 378 | 2,3,3136,8630,13586,5641,4666,1426 379 | 1,3,38793,3154,2648,1034,96,1242 380 | 1,3,3225,3294,1902,282,68,1114 381 | 2,3,4048,5164,10391,130,813,179 382 | 1,3,28257,944,2146,3881,600,270 383 | 1,3,17770,4591,1617,9927,246,532 384 | 1,3,34454,7435,8469,2540,1711,2893 385 | 1,3,1821,1364,3450,4006,397,361 386 | 1,3,10683,21858,15400,3635,282,5120 387 | 1,3,11635,922,1614,2583,192,1068 388 | 1,3,1206,3620,2857,1945,353,967 389 | 1,3,20918,1916,1573,1960,231,961 390 | 1,3,9785,848,1172,1677,200,406 391 | 1,3,9385,1530,1422,3019,227,684 392 | 1,3,3352,1181,1328,5502,311,1000 393 | 1,3,2647,2761,2313,907,95,1827 394 | 1,3,518,4180,3600,659,122,654 395 | 1,3,23632,6730,3842,8620,385,819 396 | 1,3,12377,865,3204,1398,149,452 397 | 1,3,9602,1316,1263,2921,841,290 398 | 2,3,4515,11991,9345,2644,3378,2213 399 | 1,3,11535,1666,1428,6838,64,743 400 | 1,3,11442,1032,582,5390,74,247 401 | 1,3,9612,577,935,1601,469,375 402 | 1,3,4446,906,1238,3576,153,1014 403 | 1,3,27167,2801,2128,13223,92,1902 404 | 1,3,26539,4753,5091,220,10,340 405 | 1,3,25606,11006,4604,127,632,288 406 | 1,3,18073,4613,3444,4324,914,715 407 | 1,3,6884,1046,1167,2069,593,378 408 | 1,3,25066,5010,5026,9806,1092,960 409 | 2,3,7362,12844,18683,2854,7883,553 410 | 2,3,8257,3880,6407,1646,2730,344 411 | 1,3,8708,3634,6100,2349,2123,5137 412 | 1,3,6633,2096,4563,1389,1860,1892 413 | 1,3,2126,3289,3281,1535,235,4365 414 | 1,3,97,3605,12400,98,2970,62 415 | 1,3,4983,4859,6633,17866,912,2435 416 | 1,3,5969,1990,3417,5679,1135,290 417 | 2,3,7842,6046,8552,1691,3540,1874 418 | 2,3,4389,10940,10908,848,6728,993 419 | 1,3,5065,5499,11055,364,3485,1063 420 | 2,3,660,8494,18622,133,6740,776 421 | 1,3,8861,3783,2223,633,1580,1521 422 | 1,3,4456,5266,13227,25,6818,1393 423 | 2,3,17063,4847,9053,1031,3415,1784 424 | 1,3,26400,1377,4172,830,948,1218 425 | 2,3,17565,3686,4657,1059,1803,668 426 | 2,3,16980,2884,12232,874,3213,249 427 | 1,3,11243,2408,2593,15348,108,1886 428 | 1,3,13134,9347,14316,3141,5079,1894 429 | 1,3,31012,16687,5429,15082,439,1163 430 | 1,3,3047,5970,4910,2198,850,317 431 | 1,3,8607,1750,3580,47,84,2501 432 | 1,3,3097,4230,16483,575,241,2080 433 | 1,3,8533,5506,5160,13486,1377,1498 434 | 1,3,21117,1162,4754,269,1328,395 435 | 1,3,1982,3218,1493,1541,356,1449 436 | 1,3,16731,3922,7994,688,2371,838 437 | 1,3,29703,12051,16027,13135,182,2204 438 | 1,3,39228,1431,764,4510,93,2346 439 | 2,3,14531,15488,30243,437,14841,1867 440 | 1,3,10290,1981,2232,1038,168,2125 441 | 1,3,2787,1698,2510,65,477,52 442 | --------------------------------------------------------------------------------