diff --git a/data/VOLTAGE-QUALITY-CLASSIFICATION-MODEL--main/Voltage Quality Classification Model.ipynb b/data/VOLTAGE-QUALITY-CLASSIFICATION-MODEL--main/Voltage Quality Classification Model.ipynb
new file mode 100644
index 0000000..72f5797
--- /dev/null
+++ b/data/VOLTAGE-QUALITY-CLASSIFICATION-MODEL--main/Voltage Quality Classification Model.ipynb
@@ -0,0 +1,1690 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "8d4bf69d",
+ "metadata": {},
+ "source": [
+ "# Voltage Quality Classification Model\n",
+ " The quality of power supplied to end-use equipments depends upon the quality of voltage supplied by utility. Voltage is said to have quality if it has rated value at rated frequency without any distortion from sine wave. The normal voltage quality issues are:\n",
+ "- Voltage Sag\n",
+ "- Voltage Swell\n",
+ "- Voltage Flicker\n",
+ "- Voltage Harmonics\n",
+ "- Voltage Interruption\n",
+ "\n",
+ "Classification of voltage quality is a must for activating corresponding controllers to mitigate the issues using compensating device. Training data is generated by using functions which simulate the above power quality issues."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8ba94acd",
+ "metadata": {},
+ "source": [
+ "# Installing the required packages"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "4f7c0ea6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: xgboost in /opt/anaconda3/lib/python3.8/site-packages (1.4.2)\r\n",
+ "Requirement already satisfied: scipy in /opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.6.2)\r\n",
+ "Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.20.1)\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install xgboost"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "18fc265e",
+ "metadata": {},
+ "source": [
+ "# Importing the required libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "c8212aea",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import seaborn as sn\n",
+ "import matplotlib.pyplot as plt\n",
+ "from matplotlib import rcParams\n",
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "from sklearn.svm import SVC\n",
+ "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n",
+ "from xgboost import XGBClassifier\n",
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "from sklearn.model_selection import GridSearchCV\n",
+ "\n",
+ "%matplotlib inline\n",
+ "\n",
+ "import warnings\n",
+ "warnings.filterwarnings(\"ignore\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0cf4bd32",
+ "metadata": {},
+ "source": [
+ "# Loading the data into the dataframe"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "be3e6804",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Sample | \n",
+ " Voltage | \n",
+ " Problem | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 56.46 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 111.20 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 162.57 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 209.00 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 249.09 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Voltage Problem\n",
+ "0 1 56.46 Normal\n",
+ "1 2 111.20 Normal\n",
+ "2 3 162.57 Normal\n",
+ "3 4 209.00 Normal\n",
+ "4 5 249.09 Normal"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data = pd.read_csv(\"Voltage Quality.csv\")\n",
+ "test = pd.read_csv(\"Voltage Quality Test.csv\")\n",
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "959d88dc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Sample | \n",
+ " Voltage | \n",
+ " Problem | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 56.46 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 111.20 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 162.57 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 209.00 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 249.09 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Voltage Problem\n",
+ "0 1 56.46 Normal\n",
+ "1 2 111.20 Normal\n",
+ "2 3 162.57 Normal\n",
+ "3 4 209.00 Normal\n",
+ "4 5 249.09 Normal"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "865fe385",
+ "metadata": {},
+ "source": [
+ "# Total number of rows and columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "34b1b141",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(3366, 3)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.shape # 3366 rows and 3 columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "c6fcc035",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(1020, 3)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "91147657",
+ "metadata": {},
+ "source": [
+ "# Checking the type of data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "a2612df2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 3366 entries, 0 to 3365\n",
+ "Data columns (total 3 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Sample 3366 non-null int64 \n",
+ " 1 Voltage 3366 non-null float64\n",
+ " 2 Problem 3366 non-null object \n",
+ "dtypes: float64(1), int64(1), object(1)\n",
+ "memory usage: 79.0+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "data.info()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "4bda0fc9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 1020 entries, 0 to 1019\n",
+ "Data columns (total 3 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Sample 1020 non-null int64 \n",
+ " 1 Voltage 1020 non-null float64\n",
+ " 2 Problem 1020 non-null object \n",
+ "dtypes: float64(1), int64(1), object(1)\n",
+ "memory usage: 24.0+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "test.info()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "593b3e7c",
+ "metadata": {},
+ "source": [
+ "# Checking for missing values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "a62ca453",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Sample 0\n",
+ "Voltage 0\n",
+ "Problem 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.isnull().sum() # No missing values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ddf6406b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Sample 0\n",
+ "Voltage 0\n",
+ "Problem 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "451f6cda",
+ "metadata": {},
+ "source": [
+ "# Checking for duplicates"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "48f717bc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "510"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.duplicated().sum() # 510 duplicates"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "f1aa7d57",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "136"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.duplicated().sum()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2f7bc812",
+ "metadata": {},
+ "source": [
+ "# Finding the unique values in problem column"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "66c66225",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['Normal', 'Sag', 'Swell', 'Flicker', 'Interruption', 'Harmonics'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.Problem.unique() # 6 unique values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "e0974cd2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['Normal', 'Sag', 'Swell', 'Flicker', 'Interruption', 'Harmonics'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.Problem.unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "99109e7f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Sample | \n",
+ " Voltage | \n",
+ " Problem | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 56.46 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 111.20 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 162.57 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 209.00 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 249.09 | \n",
+ " Normal | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Voltage Problem\n",
+ "0 1 56.46 Normal\n",
+ "1 2 111.20 Normal\n",
+ "2 3 162.57 Normal\n",
+ "3 4 209.00 Normal\n",
+ "4 5 249.09 Normal"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1410da43",
+ "metadata": {},
+ "source": [
+ "# Analysing statistical data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "d35d8713",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Sample | \n",
+ " Voltage | \n",
+ " Problem | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 3366.000000 | \n",
+ " 3366.000000 | \n",
+ " 3366 | \n",
+ "
\n",
+ " \n",
+ " unique | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " top | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Harmonics | \n",
+ "
\n",
+ " \n",
+ " freq | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 578 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 17.500000 | \n",
+ " 0.000226 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 9.812166 | \n",
+ " 229.620084 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 1.000000 | \n",
+ " -585.480000 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 9.000000 | \n",
+ " -208.957500 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 17.500000 | \n",
+ " 0.000000 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 26.000000 | \n",
+ " 209.255000 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 34.000000 | \n",
+ " 585.480000 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sample Voltage Problem\n",
+ "count 3366.000000 3366.000000 3366\n",
+ "unique NaN NaN 6\n",
+ "top NaN NaN Harmonics\n",
+ "freq NaN NaN 578\n",
+ "mean 17.500000 0.000226 NaN\n",
+ "std 9.812166 229.620084 NaN\n",
+ "min 1.000000 -585.480000 NaN\n",
+ "25% 9.000000 -208.957500 NaN\n",
+ "50% 17.500000 0.000000 NaN\n",
+ "75% 26.000000 209.255000 NaN\n",
+ "max 34.000000 585.480000 NaN"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.describe(include=\"all\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "553a108e",
+ "metadata": {},
+ "source": [
+ "# Finding outliers"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "51229178",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Function to find the outliers\n",
+ "def findoutliers(column):\n",
+ " outliers=[]\n",
+ " Q1=column.quantile(.25)\n",
+ " Q3=column.quantile(.75)\n",
+ " IQR=Q3-Q1\n",
+ " lower_limit=Q1-(1.5*IQR)\n",
+ " upper_limit=Q3+(1.5*IQR)\n",
+ " for out1 in column:\n",
+ " if out1>upper_limit or out1 "
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Voltage\n",
+ "fix, (ax1,ax2) =plt.subplots(1,2,figsize=(7,5))\n",
+ "sn.boxplot(data.Voltage, orient='v',ax=ax1)\n",
+ "ax1.set_ylabel=data.Voltage.name\n",
+ "ax1.set_title('Box plot of {}'.format(data.Voltage.name))\n",
+ "sn.distplot(data.Voltage,ax=ax2) \n",
+ "ax2.set_title('Distribution plot of {}'.format(data.Voltage.name))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "784eada8",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Harmonics 578\n",
+ "Swell 578\n",
+ "Sag 578\n",
+ "Normal 578\n",
+ "Flicker 544\n",
+ "Interruption 510\n",
+ "Name: Problem, dtype: int64"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Problem\n",
+ "data.Problem.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "012d7672",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "