{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import library\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from apyori import apriori\n",
    "from mlxtend.frequent_patterns import apriori,association_rules"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ChildBks</th>\n",
       "      <th>YouthBks</th>\n",
       "      <th>CookBks</th>\n",
       "      <th>DoItYBks</th>\n",
       "      <th>RefBks</th>\n",
       "      <th>ArtBks</th>\n",
       "      <th>GeogBks</th>\n",
       "      <th>ItalCook</th>\n",
       "      <th>ItalAtlas</th>\n",
       "      <th>ItalArt</th>\n",
       "      <th>Florence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1995</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1996</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1997</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1998</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1999</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2000 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      ChildBks  YouthBks  CookBks  DoItYBks  RefBks  ArtBks  GeogBks  \\\n",
       "0            0         1        0         1       0       0        1   \n",
       "1            1         0        0         0       0       0        0   \n",
       "2            0         0        0         0       0       0        0   \n",
       "3            1         1        1         0       1       0        1   \n",
       "4            0         0        1         0       0       0        1   \n",
       "...        ...       ...      ...       ...     ...     ...      ...   \n",
       "1995         0         0        1         0       0       1        1   \n",
       "1996         0         0        0         0       0       0        0   \n",
       "1997         0         0        0         0       0       0        0   \n",
       "1998         0         0        1         0       0       0        0   \n",
       "1999         0         0        0         0       0       0        0   \n",
       "\n",
       "      ItalCook  ItalAtlas  ItalArt  Florence  \n",
       "0            0          0        0         0  \n",
       "1            0          0        0         0  \n",
       "2            0          0        0         0  \n",
       "3            0          0        0         0  \n",
       "4            0          0        0         0  \n",
       "...        ...        ...      ...       ...  \n",
       "1995         1          0        1         1  \n",
       "1996         0          0        0         0  \n",
       "1997         0          0        0         0  \n",
       "1998         0          0        0         0  \n",
       "1999         0          0        0         0  \n",
       "\n",
       "[2000 rows x 11 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#read csv file\n",
    "book = pd.read_csv(\"~/Downloads/Data Science/data set/book.csv\")\n",
    "book"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Building the model \n",
    "frq_items = apriori(book, min_support = 0.05, use_colnames = True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              antecedents consequents  antecedent support  consequent support  \\\n",
      "34             (ItalCook)   (CookBks)              0.1135               0.431   \n",
      "108  (ItalCook, ChildBks)   (CookBks)              0.0850               0.431   \n",
      "180  (ItalCook, YouthBks)   (CookBks)              0.0590               0.431   \n",
      "235  (ItalCook, DoItYBks)   (CookBks)              0.0585               0.431   \n",
      "259    (ItalCook, ArtBks)   (CookBks)              0.0565               0.431   \n",
      "\n",
      "     support  confidence      lift  leverage  conviction  \n",
      "34    0.1135         1.0  2.320186  0.064582         inf  \n",
      "108   0.0850         1.0  2.320186  0.048365         inf  \n",
      "180   0.0590         1.0  2.320186  0.033571         inf  \n",
      "235   0.0585         1.0  2.320186  0.033287         inf  \n",
      "259   0.0565         1.0  2.320186  0.032148         inf  \n"
     ]
    }
   ],
   "source": [
    "# Collecting the inferred rules in a dataframe \n",
    "rules = association_rules(frq_items, metric =\"lift\", min_threshold = 1) \n",
    "rules = rules.sort_values(['confidence', 'lift'], ascending =[False, False]) \n",
    "print(rules.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>antecedents</th>\n",
       "      <th>consequents</th>\n",
       "      <th>antecedent support</th>\n",
       "      <th>consequent support</th>\n",
       "      <th>support</th>\n",
       "      <th>confidence</th>\n",
       "      <th>lift</th>\n",
       "      <th>leverage</th>\n",
       "      <th>conviction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>(ItalCook)</td>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>0.1135</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.1135</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.320186</td>\n",
       "      <td>0.064582</td>\n",
       "      <td>inf</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>(ItalCook, ChildBks)</td>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>0.0850</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0850</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.320186</td>\n",
       "      <td>0.048365</td>\n",
       "      <td>inf</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>(ItalCook, YouthBks)</td>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>0.0590</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0590</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.320186</td>\n",
       "      <td>0.033571</td>\n",
       "      <td>inf</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>235</th>\n",
       "      <td>(ItalCook, DoItYBks)</td>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>0.0585</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0585</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.320186</td>\n",
       "      <td>0.033287</td>\n",
       "      <td>inf</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259</th>\n",
       "      <td>(ItalCook, ArtBks)</td>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>0.0565</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0565</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.320186</td>\n",
       "      <td>0.032148</td>\n",
       "      <td>inf</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>557</th>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>(YouthBks, ArtBks, DoItYBks)</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0600</td>\n",
       "      <td>0.0525</td>\n",
       "      <td>0.121810</td>\n",
       "      <td>2.030162</td>\n",
       "      <td>0.026640</td>\n",
       "      <td>1.070383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>403</th>\n",
       "      <td>(ChildBks)</td>\n",
       "      <td>(YouthBks, RefBks, GeogBks)</td>\n",
       "      <td>0.4230</td>\n",
       "      <td>0.0570</td>\n",
       "      <td>0.0515</td>\n",
       "      <td>0.121749</td>\n",
       "      <td>2.135955</td>\n",
       "      <td>0.027389</td>\n",
       "      <td>1.073725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>375</th>\n",
       "      <td>(ChildBks)</td>\n",
       "      <td>(YouthBks, ArtBks, DoItYBks)</td>\n",
       "      <td>0.4230</td>\n",
       "      <td>0.0600</td>\n",
       "      <td>0.0510</td>\n",
       "      <td>0.120567</td>\n",
       "      <td>2.009456</td>\n",
       "      <td>0.025620</td>\n",
       "      <td>1.068871</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>629</th>\n",
       "      <td>(ChildBks)</td>\n",
       "      <td>(DoItYBks, YouthBks, CookBks, GeogBks)</td>\n",
       "      <td>0.4230</td>\n",
       "      <td>0.0600</td>\n",
       "      <td>0.0510</td>\n",
       "      <td>0.120567</td>\n",
       "      <td>2.009456</td>\n",
       "      <td>0.025620</td>\n",
       "      <td>1.068871</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>631</th>\n",
       "      <td>(CookBks)</td>\n",
       "      <td>(DoItYBks, YouthBks, ChildBks, GeogBks)</td>\n",
       "      <td>0.4310</td>\n",
       "      <td>0.0565</td>\n",
       "      <td>0.0510</td>\n",
       "      <td>0.118329</td>\n",
       "      <td>2.094327</td>\n",
       "      <td>0.026648</td>\n",
       "      <td>1.070128</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>662 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              antecedents                              consequents  \\\n",
       "34             (ItalCook)                                (CookBks)   \n",
       "108  (ItalCook, ChildBks)                                (CookBks)   \n",
       "180  (ItalCook, YouthBks)                                (CookBks)   \n",
       "235  (ItalCook, DoItYBks)                                (CookBks)   \n",
       "259    (ItalCook, ArtBks)                                (CookBks)   \n",
       "..                    ...                                      ...   \n",
       "557             (CookBks)             (YouthBks, ArtBks, DoItYBks)   \n",
       "403            (ChildBks)              (YouthBks, RefBks, GeogBks)   \n",
       "375            (ChildBks)             (YouthBks, ArtBks, DoItYBks)   \n",
       "629            (ChildBks)   (DoItYBks, YouthBks, CookBks, GeogBks)   \n",
       "631             (CookBks)  (DoItYBks, YouthBks, ChildBks, GeogBks)   \n",
       "\n",
       "     antecedent support  consequent support  support  confidence      lift  \\\n",
       "34               0.1135              0.4310   0.1135    1.000000  2.320186   \n",
       "108              0.0850              0.4310   0.0850    1.000000  2.320186   \n",
       "180              0.0590              0.4310   0.0590    1.000000  2.320186   \n",
       "235              0.0585              0.4310   0.0585    1.000000  2.320186   \n",
       "259              0.0565              0.4310   0.0565    1.000000  2.320186   \n",
       "..                  ...                 ...      ...         ...       ...   \n",
       "557              0.4310              0.0600   0.0525    0.121810  2.030162   \n",
       "403              0.4230              0.0570   0.0515    0.121749  2.135955   \n",
       "375              0.4230              0.0600   0.0510    0.120567  2.009456   \n",
       "629              0.4230              0.0600   0.0510    0.120567  2.009456   \n",
       "631              0.4310              0.0565   0.0510    0.118329  2.094327   \n",
       "\n",
       "     leverage  conviction  \n",
       "34   0.064582         inf  \n",
       "108  0.048365         inf  \n",
       "180  0.033571         inf  \n",
       "235  0.033287         inf  \n",
       "259  0.032148         inf  \n",
       "..        ...         ...  \n",
       "557  0.026640    1.070383  \n",
       "403  0.027389    1.073725  \n",
       "375  0.025620    1.068871  \n",
       "629  0.025620    1.068871  \n",
       "631  0.026648    1.070128  \n",
       "\n",
       "[662 rows x 9 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rules"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
