{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b0a9c779-31d4-4589-9f8f-083b589d4d56",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fddba659-9cec-451e-a7fd-2052da65c77d",
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip3 install --proxy <PROXY> pydotplus graphviz seaborn\n",
    "!pip3 install pydotplus graphviz seaborn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b518aac5-850a-479e-a0b2-427194384aa3",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import os\n",
    "from urllib.parse import urlparse\n",
    "\n",
    "from prettytable import PrettyTable\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import statsmodels.api as sm\n",
    "import json, datetime\n",
    "from datetime import datetime, timedelta,date\n",
    "from __future__ import division\n",
    "from sklearn.cluster import KMeans\n",
    "#import mlflow\n",
    "#import mlflow.sklearn\n",
    "#from mlflow import log_metric, log_param, log_artifact\n",
    "#model\n",
    "from sklearn.model_selection import KFold, cross_val_score, train_test_split, RandomizedSearchCV\n",
    "#metrics\n",
    "from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_squared_log_error, classification_report,confusion_matrix\n",
    "#models\n",
    "from sklearn.ensemble import GradientBoostingRegressor\n",
    "from sklearn.ensemble import BaggingRegressor\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "\n",
    "from sklearn.linear_model import Lasso, ElasticNet, Ridge, SGDRegressor\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "from sklearn.svm import SVR, NuSVR, SVC\n",
    "from sklearn.multioutput import MultiOutputClassifier\n",
    "from sklearn.inspection import permutation_importance\n",
    "from mlflow.models.signature import infer_signature\n",
    "from sklearn import tree\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "\n",
    "import xgboost as xgb\n",
    "\n",
    "from pydotplus import graph_from_dot_data\n",
    "import graphviz\n",
    "from IPython.display import Image\n",
    "\n",
    "import itertools, os\n",
    "\n",
    "plt.style.use(\"fivethirtyeight\")\n",
    "pd.plotting.register_matplotlib_converters()\n",
    "\n",
    "import random\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "if os.path.exists(\"model_artifacts\"):\n",
    "    os.system(\"rm -rf model_artifacts\")\n",
    "os.mkdir(\"model_artifacts\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "132e7f98-4904-4fd7-a1d2-d91a0600540f",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Load & Explore Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2253b65d-6e82-4227-a1be-069a03223042",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# load input data into pandas dataframe\n",
    "candy_data = pd.read_csv(\"candy.csv\")\n",
    "candy_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7ae94200-7056-4c86-b55c-786b2778fe5e",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "print(candy_data.isnull().any())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c7cf24bd-e858-4900-81cb-232710d2f8d5",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "#validate no missing values\n",
    "candy_data.info()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bce2f4fe-bdba-4b6e-aa31-d262c73a7f1d",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "#validate unique values\n",
    "candy_data.apply(lambda x: len(x.unique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7dff5fda-04fb-4cc2-9af7-1883b5f52f16",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# view statistical info\n",
    "candy_data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5cdb1995-1fcd-452b-96f7-9269f9035ecb",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# use better names\n",
    "candy_data.rename(columns={\n",
    "    'competitorname': \"Candy Name\",\n",
    "    'chocolate': 'Chocolate',\n",
    "    'fruity': 'Fruity Flavor',\n",
    "    'caramel': 'Caramel',\n",
    "    'peanutyalmondy': 'Peanuts & Nuts',\n",
    "    'nougat': 'Nougat',\n",
    "    'crispedricewafer': 'Crispy',\n",
    "    'hard': 'Hard Candy',\n",
    "    'bar': 'Candy bar',\n",
    "    'pluribus': 'Multi-piece',\n",
    "    'sugarpercent': 'Sugar Percentage',\n",
    "    'pricepercent': 'Price Percentage',\n",
    "    'winpercent': 'Win Percentage'\n",
    "})\n",
    "\n",
    "candy_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3f7b88ee-bcf6-4f8f-9132-296f3432843c",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "print(candy_data.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a6c719d-e255-4769-bd4b-a1bbc912db9f",
   "metadata": {},
   "source": [
    "## Load & Explore Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "503c1f02-8e34-44c9-af2f-f585c931e8bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Seaborn plot\n",
    "fig, ax = plt.subplots(figsize=(20,10))\n",
    "sns.pointplot(data=candy_data, x='winpercent', y='chocolate', hue= 'month', ax=ax)\n",
    "ax.set(title='Count of bikes during weekdays and weekends')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7e7231c-ce62-4db5-80a8-b26d101c7197",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "categorical_data = candy_data[['chocolate','fruity','caramel','peanutyalmondy','nougat','crispedricewafer','hard','bar','pluribus']]\n",
    "continuous_data = candy_data[['sugarpercent','pricepercent','winpercent']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "26af47fd-0439-4965-ad41-3980db425be6",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "#check the distribution on the continuous feature\n",
    "\n",
    "sns.pairplot(data= continuous_data, diag_kind='kde')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8a9760e9-b061-4f29-bf92-32593414f945",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
