{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ec8610ae",
   "metadata": {},
   "source": [
    "# Capstone Session 11\n",
    "\n",
    "This notebook is generated from the copied `Capstone_Session_11.pdf` directions and the staged `GrammarandProductReviews.xlsx` dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3af22845",
   "metadata": {},
   "source": [
    "## Objective\n",
    "\n",
    "Build the required CNN-LSTM hybrid model to classify product reviews as positive or negative using the staged workbook data."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "152b2c4b",
   "metadata": {},
   "source": [
    "## Source Note\n",
    "\n",
    "The copied PDF names `GrammarandProductReviews.csv`, but the staged source file is `GrammarandProductReviews.xlsx`. This notebook loads the workbook and exports a converted CSV artifact for the website evidence flow before training the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dcd9b2f8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:29.749783Z",
     "iopub.status.busy": "2026-05-12T09:44:29.749783Z",
     "iopub.status.idle": "2026-05-12T09:44:33.707990Z",
     "shell.execute_reply": "2026-05-12T09:44:33.707990Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Runtime: Notebook runtime\n",
      "Capstone artifact path: Incremental Capstones/Deep Learning Specialization/Capstone Session 11\n",
      "Workbook source: https://media.githubusercontent.com/media/FrancisBurnet/francisburnet/main/Incremental%20Capstones/Deep%20Learning%20Specialization/Capstone%20Session%2011/GrammarandProductReviews.xlsx\n",
      "Output mode: permanent capstone outputs\n",
      "Output target: Incremental Capstones/Deep Learning Specialization/Capstone Session 11/outputs\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "import json\n",
    "import os\n",
    "import sys\n",
    "from urllib.parse import quote\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import tensorflow as tf\n",
    "from IPython.display import display\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'\n",
    "tf.keras.utils.set_random_seed(42)\n",
    "\n",
    "IS_COLAB = 'google.colab' in sys.modules\n",
    "GITHUB_REPO_OWNER = 'FrancisBurnet'\n",
    "GITHUB_REPO_NAME = 'francisburnet'\n",
    "GITHUB_REPO_BRANCH = 'main'\n",
    "CAPSTONE_ROOT = Path('Incremental Capstones/Deep Learning Specialization/Capstone Session 11')\n",
    "WORKBOOK_FILENAME = 'GrammarandProductReviews.xlsx'\n",
    "\n",
    "\n",
    "def build_github_url(relative_path: Path, media: bool = False) -> str:\n",
    "    encoded_path = quote(relative_path.as_posix(), safe='/')\n",
    "    if media:\n",
    "        return (\n",
    "            f\"https://media.githubusercontent.com/media/{GITHUB_REPO_OWNER}/{GITHUB_REPO_NAME}/\"\n",
    "            f\"{GITHUB_REPO_BRANCH}/{encoded_path}\"\n",
    "        )\n",
    "    return (\n",
    "        f\"https://raw.githubusercontent.com/{GITHUB_REPO_OWNER}/{GITHUB_REPO_NAME}/\"\n",
    "        f\"{GITHUB_REPO_BRANCH}/{encoded_path}\"\n",
    "    )\n",
    "\n",
    "\n",
    "def resolve_capstone_dir() -> Path | None:\n",
    "    current = Path.cwd().resolve()\n",
    "    capstone_parts = CAPSTONE_ROOT.parts\n",
    "    for candidate in [current, *current.parents]:\n",
    "        if len(candidate.parts) >= len(capstone_parts) and candidate.parts[-len(capstone_parts):] == capstone_parts:\n",
    "            return candidate\n",
    "        nested_candidate = candidate / CAPSTONE_ROOT\n",
    "        if nested_candidate.exists():\n",
    "            return nested_candidate\n",
    "    return None\n",
    "\n",
    "\n",
    "CAPSTONE_DIR = resolve_capstone_dir()\n",
    "WORKBOOK_URL = build_github_url(CAPSTONE_ROOT / WORKBOOK_FILENAME)\n",
    "\n",
    "if CAPSTONE_DIR is not None:\n",
    "    OUTPUT_ROOT = CAPSTONE_DIR\n",
    "    OUTPUT_MODE = 'permanent capstone outputs'\n",
    "    OUTPUT_DISPLAY = (CAPSTONE_ROOT / 'outputs').as_posix()\n",
    "else:\n",
    "    runtime_root = Path('/content/capstone-session-11-runtime') if IS_COLAB else Path.cwd().resolve() / 'capstone-session-11-runtime'\n",
    "    OUTPUT_ROOT = runtime_root\n",
    "    OUTPUT_MODE = 'runtime scratch outputs; export final artifacts back into the capstone outputs folder'\n",
    "    OUTPUT_DISPLAY = 'capstone-session-11-runtime/outputs'\n",
    "\n",
    "OUTPUTS_DIR = (OUTPUT_ROOT / 'outputs').resolve()\n",
    "PLOTS_DIR = OUTPUTS_DIR / 'plots'\n",
    "OUTPUTS_DIR.mkdir(parents=True, exist_ok=True)\n",
    "PLOTS_DIR.mkdir(parents=True, exist_ok=True)\n",
    "sns.set_theme(style='whitegrid')\n",
    "\n",
    "print('Runtime:', 'Google Colab' if IS_COLAB else 'Notebook runtime')\n",
    "print('Capstone artifact path:', CAPSTONE_ROOT.as_posix())\n",
    "print('Workbook source:', WORKBOOK_URL)\n",
    "print('Output mode:', OUTPUT_MODE)\n",
    "print('Output target:', OUTPUT_DISPLAY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1348d98a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:33.710938Z",
     "iopub.status.busy": "2026-05-12T09:44:33.710938Z",
     "iopub.status.idle": "2026-05-12T09:44:36.687704Z",
     "shell.execute_reply": "2026-05-12T09:44:36.686697Z"
    }
   },
   "outputs": [
    {
     "ename": "HTTPError",
     "evalue": "HTTP Error 404: Not Found",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mHTTPError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m df = pd.read_excel(WORKBOOK_URL)\n\u001b[32m      2\u001b[39m converted_csv_path = OUTPUTS_DIR / \u001b[33m'GrammarandProductReviews_converted.csv'\u001b[39m\n\u001b[32m      3\u001b[39m df.to_csv(converted_csv_path, index=\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[32m      4\u001b[39m df[\u001b[33m'reviews.text'\u001b[39m] = df[\u001b[33m'reviews.text'\u001b[39m].fillna(\u001b[33m''\u001b[39m).astype(str)\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\excel\\_base.py:481\u001b[39m, in \u001b[36mread_excel\u001b[39m\u001b[34m(io, sheet_name, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, parse_dates, date_format, thousands, decimal, comment, skipfooter, storage_options, dtype_backend, engine_kwargs)\u001b[39m\n\u001b[32m    479\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(io, ExcelFile):\n\u001b[32m    480\u001b[39m     should_close = \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m481\u001b[39m     io = \u001b[30;43mExcelFile\u001b[39;49m\u001b[30;43m(\u001b[39;49m\n\u001b[32m    482\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mio\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    483\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    484\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mengine\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mengine\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    485\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mengine_kwargs\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mengine_kwargs\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    486\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m    487\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m engine \u001b[38;5;129;01mand\u001b[39;00m engine != io.engine:\n\u001b[32m    488\u001b[39m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m    489\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mEngine should not be specified when passing \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m    490\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33man ExcelFile - ExcelFile already has the engine set\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m    491\u001b[39m     )\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\excel\\_base.py:1604\u001b[39m, in \u001b[36mExcelFile.__init__\u001b[39m\u001b[34m(self, path_or_buffer, engine, storage_options, engine_kwargs)\u001b[39m\n\u001b[32m   1601\u001b[39m         ext = \u001b[33m\"\u001b[39m\u001b[33mxls\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m   1603\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m ext \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1604\u001b[39m     ext = \u001b[30;43minspect_excel_format\u001b[39;49m\u001b[30;43m(\u001b[39;49m\n\u001b[32m   1605\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mcontent_or_path\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mpath_or_buffer\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\n\u001b[32m   1606\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m   1607\u001b[39m     \u001b[38;5;28;01mif\u001b[39;00m ext \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m   1608\u001b[39m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m   1609\u001b[39m             \u001b[33m\"\u001b[39m\u001b[33mExcel file format cannot be determined, you must specify \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m   1610\u001b[39m             \u001b[33m\"\u001b[39m\u001b[33man engine manually.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m   1611\u001b[39m         )\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\excel\\_base.py:1452\u001b[39m, in \u001b[36minspect_excel_format\u001b[39m\u001b[34m(content_or_path, storage_options)\u001b[39m\n\u001b[32m   1417\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34minspect_excel_format\u001b[39m(\n\u001b[32m   1418\u001b[39m     content_or_path: FilePath | ReadBuffer[\u001b[38;5;28mbytes\u001b[39m],\n\u001b[32m   1419\u001b[39m     storage_options: StorageOptions | \u001b[38;5;28;01mNone\u001b[39;00m = \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m   1420\u001b[39m ) -> \u001b[38;5;28mstr\u001b[39m | \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m   1421\u001b[39m \u001b[38;5;250m    \u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m   1422\u001b[39m \u001b[33;03m    Inspect the path or content of an excel file and get its format.\u001b[39;00m\n\u001b[32m   1423\u001b[39m \n\u001b[32m   (...)\u001b[39m\u001b[32m   1450\u001b[39m \u001b[33;03m        If resulting stream does not have an XLS signature and is not a valid zipfile.\u001b[39;00m\n\u001b[32m   1451\u001b[39m \u001b[33;03m    \"\"\"\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1452\u001b[39m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[30;43mget_handle\u001b[39;49m\u001b[30;43m(\u001b[39;49m\n\u001b[32m   1453\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43mcontent_or_path\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43mrb\u001b[39;49m\u001b[30;43m\"\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mis_text\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43;01mFalse\u001b[39;49;00m\n\u001b[32m   1454\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43m)\u001b[39;49m \u001b[38;5;28;01mas\u001b[39;00m handle:\n\u001b[32m   1455\u001b[39m         stream = handle.handle\n\u001b[32m   1456\u001b[39m         stream.seek(\u001b[32m0\u001b[39m)\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\common.py:776\u001b[39m, in \u001b[36mget_handle\u001b[39m\u001b[34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[39m\n\u001b[32m    773\u001b[39m     codecs.lookup_error(errors)\n\u001b[32m    775\u001b[39m \u001b[38;5;66;03m# open URLs\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m776\u001b[39m ioargs = \u001b[30;43m_get_filepath_or_buffer\u001b[39;49m\u001b[30;43m(\u001b[39;49m\n\u001b[32m    777\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43mpath_or_buf\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    778\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43mencoding\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mencoding\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    779\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43mcompression\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mcompression\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    780\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mmode\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    781\u001b[39m \u001b[30;43m    \u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m=\u001b[39;49m\u001b[30;43mstorage_options\u001b[39;49m\u001b[30;43m,\u001b[39;49m\n\u001b[32m    782\u001b[39m \u001b[30;43m\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m    784\u001b[39m handle = ioargs.filepath_or_buffer\n\u001b[32m    785\u001b[39m handles: \u001b[38;5;28mlist\u001b[39m[BaseBuffer]\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\common.py:405\u001b[39m, in \u001b[36m_get_filepath_or_buffer\u001b[39m\u001b[34m(filepath_or_buffer, encoding, compression, mode, storage_options)\u001b[39m\n\u001b[32m    403\u001b[39m \u001b[38;5;66;03m# assuming storage_options is to be interpreted as headers\u001b[39;00m\n\u001b[32m    404\u001b[39m req_info = urllib.request.Request(filepath_or_buffer, headers=storage_options)\n\u001b[32m--> \u001b[39m\u001b[32m405\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[30;43murlopen\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mreq_info\u001b[39;49m\u001b[30;43m)\u001b[39;49m \u001b[38;5;28;01mas\u001b[39;00m req:\n\u001b[32m    406\u001b[39m     content_encoding = req.headers.get(\u001b[33m\"\u001b[39m\u001b[33mContent-Encoding\u001b[39m\u001b[33m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[32m    407\u001b[39m     \u001b[38;5;28;01mif\u001b[39;00m content_encoding == \u001b[33m\"\u001b[39m\u001b[33mgzip\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m    408\u001b[39m         \u001b[38;5;66;03m# Override compression based on Content-Encoding header\u001b[39;00m\n",
      "\u001b[36mFile \u001b[39m\u001b[32mx:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\pandas\\io\\common.py:282\u001b[39m, in \u001b[36murlopen\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m    276\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m    277\u001b[39m \u001b[33;03mLazy-import wrapper for stdlib urlopen, as that imports a big chunk of\u001b[39;00m\n\u001b[32m    278\u001b[39m \u001b[33;03mthe stdlib.\u001b[39;00m\n\u001b[32m    279\u001b[39m \u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m    280\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01murllib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mrequest\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m282\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[30;43murllib\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mrequest\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43murlopen\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43m*\u001b[39;49m\u001b[30;43margs\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43m*\u001b[39;49m\u001b[30;43m*\u001b[39;49m\u001b[30;43mkwargs\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:215\u001b[39m, in \u001b[36murlopen\u001b[39m\u001b[34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[39m\n\u001b[32m    213\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m    214\u001b[39m     opener = _opener\n\u001b[32m--> \u001b[39m\u001b[32m215\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[30;43mopener\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mopen\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43murl\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mdata\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mtimeout\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:521\u001b[39m, in \u001b[36mOpenerDirector.open\u001b[39m\u001b[34m(self, fullurl, data, timeout)\u001b[39m\n\u001b[32m    519\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m processor \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m.process_response.get(protocol, []):\n\u001b[32m    520\u001b[39m     meth = \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[32m--> \u001b[39m\u001b[32m521\u001b[39m     response = \u001b[30;43mmeth\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43mreq\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mresponse\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m    523\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:630\u001b[39m, in \u001b[36mHTTPErrorProcessor.http_response\u001b[39m\u001b[34m(self, request, response)\u001b[39m\n\u001b[32m    627\u001b[39m \u001b[38;5;66;03m# According to RFC 2616, \"2xx\" code indicates that the client's\u001b[39;00m\n\u001b[32m    628\u001b[39m \u001b[38;5;66;03m# request was successfully received, understood, and accepted.\u001b[39;00m\n\u001b[32m    629\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[32m200\u001b[39m <= code < \u001b[32m300\u001b[39m):\n\u001b[32m--> \u001b[39m\u001b[32m630\u001b[39m     response = \u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43mparent\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43merror\u001b[39;49m\u001b[30;43m(\u001b[39;49m\n\u001b[32m    631\u001b[39m \u001b[30;43m        \u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43mhttp\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mrequest\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mresponse\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mcode\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mmsg\u001b[39;49m\u001b[30;43m,\u001b[39;49m\u001b[30;43m \u001b[39;49m\u001b[30;43mhdrs\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m    633\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:559\u001b[39m, in \u001b[36mOpenerDirector.error\u001b[39m\u001b[34m(self, proto, *args)\u001b[39m\n\u001b[32m    557\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m http_err:\n\u001b[32m    558\u001b[39m     args = (\u001b[38;5;28mdict\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mdefault\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mhttp_error_default\u001b[39m\u001b[33m'\u001b[39m) + orig_args\n\u001b[32m--> \u001b[39m\u001b[32m559\u001b[39m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[30;43mself\u001b[39;49m\u001b[30;43m.\u001b[39;49m\u001b[30;43m_call_chain\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43m*\u001b[39;49m\u001b[30;43margs\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:492\u001b[39m, in \u001b[36mOpenerDirector._call_chain\u001b[39m\u001b[34m(self, chain, kind, meth_name, *args)\u001b[39m\n\u001b[32m    490\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m handler \u001b[38;5;129;01min\u001b[39;00m handlers:\n\u001b[32m    491\u001b[39m     func = \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[32m--> \u001b[39m\u001b[32m492\u001b[39m     result = \u001b[30;43mfunc\u001b[39;49m\u001b[30;43m(\u001b[39;49m\u001b[30;43m*\u001b[39;49m\u001b[30;43margs\u001b[39;49m\u001b[30;43m)\u001b[39;49m\n\u001b[32m    493\u001b[39m     \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m    494\u001b[39m         \u001b[38;5;28;01mreturn\u001b[39;00m result\n",
      "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py:639\u001b[39m, in \u001b[36mHTTPDefaultErrorHandler.http_error_default\u001b[39m\u001b[34m(self, req, fp, code, msg, hdrs)\u001b[39m\n\u001b[32m    638\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mhttp_error_default\u001b[39m(\u001b[38;5;28mself\u001b[39m, req, fp, code, msg, hdrs):\n\u001b[32m--> \u001b[39m\u001b[32m639\u001b[39m     \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(req.full_url, code, msg, hdrs, fp)\n",
      "\u001b[31mHTTPError\u001b[39m: HTTP Error 404: Not Found"
     ]
    }
   ],
   "source": [
    "df = pd.read_excel(WORKBOOK_URL)\n",
    "converted_csv_path = OUTPUTS_DIR / 'GrammarandProductReviews_converted.csv'\n",
    "df.to_csv(converted_csv_path, index=False)\n",
    "df['reviews.text'] = df['reviews.text'].fillna('').astype(str)\n",
    "df['target'] = (df['reviews.rating'] > 3).astype(int)\n",
    "display(df[['reviews.rating', 'reviews.text', 'target']].head())\n",
    "print('Workbook source used:', WORKBOOK_URL)\n",
    "print('Shape:', df.shape)\n",
    "print('Target distribution:', df['target'].value_counts().to_dict())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e244dd96",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:36.690216Z",
     "iopub.status.busy": "2026-05-12T09:44:36.690216Z",
     "iopub.status.idle": "2026-05-12T09:44:37.025642Z",
     "shell.execute_reply": "2026-05-12T09:44:37.025128Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Padded train shape: (8000, 150)\n",
      "Padded test shape: (2001, 150)\n"
     ]
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    df['reviews.text'],\n",
    "    df['target'],\n",
    "    test_size=0.2,\n",
    "    random_state=42,\n",
    "    stratify=df['target'],\n",
    ")\n",
    "MAX_NB_WORDS = 20000\n",
    "MAX_SEQUENCE_LENGTH = 150\n",
    "tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=MAX_NB_WORDS)\n",
    "tokenizer.fit_on_texts(X_train)\n",
    "X_train_seq = tokenizer.texts_to_sequences(X_train)\n",
    "X_test_seq = tokenizer.texts_to_sequences(X_test)\n",
    "X_train_pad = tf.keras.preprocessing.sequence.pad_sequences(X_train_seq, maxlen=MAX_SEQUENCE_LENGTH)\n",
    "X_test_pad = tf.keras.preprocessing.sequence.pad_sequences(X_test_seq, maxlen=MAX_SEQUENCE_LENGTH)\n",
    "y_train_onehot = tf.keras.utils.to_categorical(y_train, num_classes=2)\n",
    "y_test_onehot = tf.keras.utils.to_categorical(y_test, num_classes=2)\n",
    "print('Padded train shape:', X_train_pad.shape)\n",
    "print('Padded test shape:', X_test_pad.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "270f4cf1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:37.027644Z",
     "iopub.status.busy": "2026-05-12T09:44:37.027644Z",
     "iopub.status.idle": "2026-05-12T09:44:47.849261Z",
     "shell.execute_reply": "2026-05-12T09:44:47.848255Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:TensorFlow GPU support is not available on native Windows for TensorFlow >= 2.11. Even if CUDA/cuDNN are installed, GPU will not be used. Please use WSL2 or the TensorFlow-DirectML plugin.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "X:\\SIMPLILEARN\\.venv\\Lib\\site-packages\\keras\\src\\layers\\core\\embedding.py:103: UserWarning: Argument `input_length` is deprecated. Just remove it.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "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>accuracy</th>\n",
       "      <th>loss</th>\n",
       "      <th>val_accuracy</th>\n",
       "      <th>val_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.913125</td>\n",
       "      <td>0.309694</td>\n",
       "      <td>0.923750</td>\n",
       "      <td>0.259024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.913125</td>\n",
       "      <td>0.277587</td>\n",
       "      <td>0.923750</td>\n",
       "      <td>0.237573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.928125</td>\n",
       "      <td>0.210896</td>\n",
       "      <td>0.925625</td>\n",
       "      <td>0.226740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.946406</td>\n",
       "      <td>0.154717</td>\n",
       "      <td>0.927500</td>\n",
       "      <td>0.251219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.964375</td>\n",
       "      <td>0.107533</td>\n",
       "      <td>0.922500</td>\n",
       "      <td>0.295029</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   accuracy      loss  val_accuracy  val_loss\n",
       "0  0.913125  0.309694      0.923750  0.259024\n",
       "1  0.913125  0.277587      0.923750  0.237573\n",
       "2  0.928125  0.210896      0.925625  0.226740\n",
       "3  0.946406  0.154717      0.927500  0.251219\n",
       "4  0.964375  0.107533      0.922500  0.295029"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = tf.keras.Sequential([\n",
    "    tf.keras.layers.Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32'),\n",
    "    tf.keras.layers.Embedding(input_dim=MAX_NB_WORDS, output_dim=50, input_length=MAX_SEQUENCE_LENGTH),\n",
    "    tf.keras.layers.Conv1D(64, 5, activation='relu'),\n",
    "    tf.keras.layers.MaxPooling1D(pool_size=5),\n",
    "    tf.keras.layers.Dropout(0.2),\n",
    "    tf.keras.layers.Conv1D(64, 5, activation='relu'),\n",
    "    tf.keras.layers.MaxPooling1D(pool_size=5),\n",
    "    tf.keras.layers.Dropout(0.2),\n",
    "    tf.keras.layers.LSTM(64),\n",
    "    tf.keras.layers.Dense(2, activation='softmax'),\n",
    "])\n",
    "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
    "history = model.fit(\n",
    "    X_train_pad,\n",
    "    y_train_onehot,\n",
    "    epochs=5,\n",
    "    batch_size=64,\n",
    "    validation_split=0.2,\n",
    "    verbose=0,\n",
    ")\n",
    "pd.DataFrame(history.history).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bf273534",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:47.851259Z",
     "iopub.status.busy": "2026-05-12T09:44:47.851259Z",
     "iopub.status.idle": "2026-05-12T09:44:49.164126Z",
     "shell.execute_reply": "2026-05-12T09:44:49.163241Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test loss: 0.2893\n",
      "Test accuracy: 0.92\n",
      "Sklearn accuracy: 0.92\n"
     ]
    }
   ],
   "source": [
    "test_probabilities = model.predict(X_test_pad, verbose=0)\n",
    "test_predictions = np.argmax(test_probabilities, axis=1)\n",
    "test_loss, test_accuracy = model.evaluate(X_test_pad, y_test_onehot, verbose=0)\n",
    "print('Test loss:', round(float(test_loss), 4))\n",
    "print('Test accuracy:', round(float(test_accuracy), 4))\n",
    "print('Sklearn accuracy:', round(float(accuracy_score(y_test, test_predictions)), 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "567f39d1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:49.167246Z",
     "iopub.status.busy": "2026-05-12T09:44:49.167246Z",
     "iopub.status.idle": "2026-05-12T09:44:49.718507Z",
     "shell.execute_reply": "2026-05-12T09:44:49.716383Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKAAAAGACAYAAACazRotAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyyVJREFUeJzs3QdcldUbB/AfXPYGAUFBUFHcAwX3SE0bZv2trMxK03ZalraznaWWaWbTVWba0KaWmTnKgYoDZSgqU4bK3uPy/zwHLwGiAgIX7v19P58T3Hvf+973vC/J4Xmf8xyT0tLSUhARERERERERETUQ04baMREREREREREREQNQRERERERERETU4JgBRUREREREREREDYoBKCIiIiIiIiIialAMQBERERERERERUYNiAIqIiIiIiIiIiBoUA1BERERERERERNSgGIAiIiIiIiIiIqIGxQAUERERERERERE1KAagiIzA008/DX9/fyxfvlzfh9JkjBgxAs8991y973f9+vXqXF+unTx5Eo3tnnvuUY2IiIj4u3fv3r1qTCJfG2LMcblx0IQJExr9RzA+Pl59tozTiEh/zPT42UTUCLKysrBlyxZ07NgR69atw5QpU2BiYsJz38CWLFkCNze3al/z8vLi+SciIiKD1aVLF7zyyivVvmZra9vox0NETQMDUEQG7tdff1VfX3zxRdx3333Ys2cPBgwYoO/DMnidO3dmoImIiIiMkp2dHXr16qXvwyCiJoZT8IgM3A8//KACTv3794ePjw/Wrl170TY//vgj/ve//6Fnz54YPnw43nvvPRQWFpa/fujQIdx///0ICAhQ+3nqqaeQnJxcacqZpDZfboqbbCNZQePHj0ePHj3U92Lfvn2YOnUqAgMD0a1bN/W+Dz/8EFqttvy92dnZeOONNzBkyBA1mLn11luxbds29dq7776r9ieZXhUtXboUffr0QV5e3iXPTVFREd5880312X379sWzzz6L1NRU9ZrsX475n3/+qfSe/fv3q+cPHDiAqyX9lP7+/fffuO6669T5l7T0qunwKSkpeP755zFs2DDV19tuuw1//fVXpW3ken3wwQcYOXKk2mbs2LHYsGFDpW1KS0vx+eefq2ss29xxxx04cuTIVfeDiIiI6u7ff//FxIkT1bilX79+qnRCYmJi+esyJlq4cKEaM+jGSjJWk3FM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u7s79u/fn2U8ZVhYGAIDAx9682Sd/ICTsdFGBw4cUPcNGzaE3sorSc2aNGmSZVpHSTQoCY4fldBNq7Ret+bSQ92GhIRg2rRp6Nu3r5pCNaeupZnrVz7nUkajffv2qWla5bzQU1nnzZuncj9Jt2KjmJgYJCQkaKJupeuzTJMsV6YyTzEr9ZdTskitn7vmllfL565cVd+wYYO6cme8GacGliuVeqtbW8G2FNtStnreavn/Y1tsSwm2p/TZnrKltpQm21MWn2dPY+bOnWto3LixYevWrWq6xoEDBxratWtnSE1NNaSlpRmuXr1qSEpKMk19/tJLLxmef/55NaXj3r17Da1atTK8++67Bj2WNzY21tCoUSPD8OHDDWfOnDEcO3bMMGDAADU9a3JyskFLxo8fn2XaYD3WrTnl1XrdRkZGGurUqaOOX8qV+Xbr1i01HbD8bZwWWMokZRs0aJD63G/ZskWdBwsXLjTorazHjx9X20+aNEk998CBA4YePXqoz7d8zrVApsaV/5fk2GVKXZlaNzAw0HDp0iVdnrvmlFfr5252macN1mPd2gq2pWyjLWVr7Sm2pfTTlhJsT+m7PWXLbSlrb08xAJWNVNAnn3xieOaZZwz169c3DBkyxBAdHa0ek/vMlSmuX79uGDFihNq2SZMmhsmTJ2vqg2pueU+cOGF47bXXDA0bNjQEBASosstJq/VGhB7r1tzyarluP/vsM1WenG5S9n379qm/5d4oKipKlbdu3bqGZs2aGebPn29IT0836LGsf/31l+Ff//qX+ixL43DChAmGxMREg1ZIYE3Ov6ZNmxrq1aunAuXSQNDruWtuebV87maXuWx6rFtbwbaUbbSlbK09xbaUftpSgu0pfbenbLktZe3tKTv5x/L9rIiIiIiIiIiIyFYxBxQREREREREREVkUA1BERERERERERGRRDEAREREREREREZFFMQBFREREREREREQWxQAUERERERERERFZFANQRERERERERERkUQxAERERERERERGRRTEARUREREREREREFsUAFBERERERERERWRQDUEREREREREREZFEMQBERERERERERkUUxAEVERERERERERLCk/wV9/YEjTliYqwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1200x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n",
    "axes[0].plot(history.history['accuracy'], label='train')\n",
    "axes[0].plot(history.history['val_accuracy'], label='validation')\n",
    "axes[0].set_title('Accuracy by Epoch')\n",
    "axes[0].legend()\n",
    "axes[1].plot(history.history['loss'], label='train')\n",
    "axes[1].plot(history.history['val_loss'], label='validation')\n",
    "axes[1].set_title('Loss by Epoch')\n",
    "axes[1].legend()\n",
    "fig.tight_layout()\n",
    "fig.savefig(PLOTS_DIR / 'training_history.png', dpi=150)\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f5a34817",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-05-12T09:44:49.722725Z",
     "iopub.status.busy": "2026-05-12T09:44:49.721629Z",
     "iopub.status.idle": "2026-05-12T09:44:49.737289Z",
     "shell.execute_reply": "2026-05-12T09:44:49.737289Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'dataset_shape': [10001, 26],\n",
       " 'converted_csv_path': 'GrammarandProductReviews_converted.csv',\n",
       " 'target_distribution': {1: 9154, 0: 847},\n",
       " 'test_loss': 0.2893032133579254,\n",
       " 'test_accuracy': 0.9200399518013,\n",
       " 'max_nb_words': 20000,\n",
       " 'max_sequence_length': 150}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_df = pd.DataFrame(history.history)\n",
    "history_df.to_csv(OUTPUTS_DIR / 'session_11_training_history.csv', index=False)\n",
    "prediction_samples = pd.DataFrame({\n",
    "    'review_text': X_test.reset_index(drop=True).head(100),\n",
    "    'actual': y_test.reset_index(drop=True).head(100),\n",
    "    'predicted': pd.Series(test_predictions).head(100),\n",
    "})\n",
    "prediction_samples.to_csv(OUTPUTS_DIR / 'session_11_prediction_samples.csv', index=False)\n",
    "summary = {\n",
    "    'dataset_shape': list(df.shape),\n",
    "    'converted_csv_path': converted_csv_path.name,\n",
    "    'target_distribution': df['target'].value_counts().to_dict(),\n",
    "    'test_loss': float(test_loss),\n",
    "    'test_accuracy': float(test_accuracy),\n",
    "    'max_nb_words': MAX_NB_WORDS,\n",
    "    'max_sequence_length': MAX_SEQUENCE_LENGTH,\n",
    "}\n",
    "with open(OUTPUTS_DIR / 'session_11_summary.json', 'w', encoding='utf-8') as handle:\n",
    "    json.dump(summary, handle, indent=2)\n",
    "summary"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv (3.12.10)",
   "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.12.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
