diff --git a/FLIGHT_FARE_PREDICTION/.gitignore b/FLIGHT_FARE_PREDICTION/.gitignore new file mode 100644 index 0000000..58461f2 --- /dev/null +++ b/FLIGHT_FARE_PREDICTION/.gitignore @@ -0,0 +1 @@ +.ipynb_checkpoints \ No newline at end of file diff --git a/FLIGHT_FARE_PREDICTION/README.md b/FLIGHT_FARE_PREDICTION/README.md new file mode 100644 index 0000000..8843de0 --- /dev/null +++ b/FLIGHT_FARE_PREDICTION/README.md @@ -0,0 +1 @@ +# Fligth-Fare-Prediction diff --git a/FLIGHT_FARE_PREDICTION/data/Data_Train.xlsx b/FLIGHT_FARE_PREDICTION/data/Data_Train.xlsx new file mode 100644 index 0000000..a997892 Binary files /dev/null and b/FLIGHT_FARE_PREDICTION/data/Data_Train.xlsx differ diff --git a/FLIGHT_FARE_PREDICTION/fligth_fare_prediction_.ipynb b/FLIGHT_FARE_PREDICTION/fligth_fare_prediction_.ipynb new file mode 100644 index 0000000..75238b2 --- /dev/null +++ b/FLIGHT_FARE_PREDICTION/fligth_fare_prediction_.ipynb @@ -0,0 +1,2242 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "krtRyhJ3TrC_" + }, + "source": [ + "## Importing Packages\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "id": "B6FuNK65fTHP" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0q_lkwWwT6m7" + }, + "source": [ + "## Importing Data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 347 + }, + "id": "eyl5eh33fd3e", + "outputId": "6fb4c9fb-3412-4d96-e552-4e8beb578c14" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsAdditional_InfoPrice
0IndiGo24/03/2019BangloreNew DelhiBLR → DEL22:2001:10 22 Mar2h 50mnon-stopNo info3897
1Air India1/05/2019KolkataBangloreCCU → IXR → BBI → BLR05:5013:157h 25m2 stopsNo info7662
2Jet Airways9/06/2019DelhiCochinDEL → LKO → BOM → COK09:2504:25 10 Jun19h2 stopsNo info13882
3IndiGo12/05/2019KolkataBangloreCCU → NAG → BLR18:0523:305h 25m1 stopNo info6218
4IndiGo01/03/2019BangloreNew DelhiBLR → NAG → DEL16:5021:354h 45m1 stopNo info13302
5SpiceJet24/06/2019KolkataBangloreCCU → BLR09:0011:252h 25mnon-stopNo info3873
6Jet Airways12/03/2019BangloreNew DelhiBLR → BOM → DEL18:5510:25 13 Mar15h 30m1 stopIn-flight meal not included11087
7Jet Airways01/03/2019BangloreNew DelhiBLR → BOM → DEL08:0005:05 02 Mar21h 5m1 stopNo info22270
8Jet Airways12/03/2019BangloreNew DelhiBLR → BOM → DEL08:5510:25 13 Mar25h 30m1 stopIn-flight meal not included11087
9Multiple carriers27/05/2019DelhiCochinDEL → BOM → COK11:2519:157h 50m1 stopNo info8625
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination \\\n", + "0 IndiGo 24/03/2019 Banglore New Delhi \n", + "1 Air India 1/05/2019 Kolkata Banglore \n", + "2 Jet Airways 9/06/2019 Delhi Cochin \n", + "3 IndiGo 12/05/2019 Kolkata Banglore \n", + "4 IndiGo 01/03/2019 Banglore New Delhi \n", + "5 SpiceJet 24/06/2019 Kolkata Banglore \n", + "6 Jet Airways 12/03/2019 Banglore New Delhi \n", + "7 Jet Airways 01/03/2019 Banglore New Delhi \n", + "8 Jet Airways 12/03/2019 Banglore New Delhi \n", + "9 Multiple carriers 27/05/2019 Delhi Cochin \n", + "\n", + " Route Dep_Time Arrival_Time Duration Total_Stops \\\n", + "0 BLR → DEL 22:20 01:10 22 Mar 2h 50m non-stop \n", + "1 CCU → IXR → BBI → BLR 05:50 13:15 7h 25m 2 stops \n", + "2 DEL → LKO → BOM → COK 09:25 04:25 10 Jun 19h 2 stops \n", + "3 CCU → NAG → BLR 18:05 23:30 5h 25m 1 stop \n", + "4 BLR → NAG → DEL 16:50 21:35 4h 45m 1 stop \n", + "5 CCU → BLR 09:00 11:25 2h 25m non-stop \n", + "6 BLR → BOM → DEL 18:55 10:25 13 Mar 15h 30m 1 stop \n", + "7 BLR → BOM → DEL 08:00 05:05 02 Mar 21h 5m 1 stop \n", + "8 BLR → BOM → DEL 08:55 10:25 13 Mar 25h 30m 1 stop \n", + "9 DEL → BOM → COK 11:25 19:15 7h 50m 1 stop \n", + "\n", + " Additional_Info Price \n", + "0 No info 3897 \n", + "1 No info 7662 \n", + "2 No info 13882 \n", + "3 No info 6218 \n", + "4 No info 13302 \n", + "5 No info 3873 \n", + "6 In-flight meal not included 11087 \n", + "7 No info 22270 \n", + "8 In-flight meal not included 11087 \n", + "9 No info 8625 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# df=pd.read_excel(\"/content/drive/My Drive/flight fare pediction/Data_Train.xlsx\")\n", + "df = pd.read_excel(\"data/data_train.xlsx\")\n", + "df.head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Dbu_s_0iULIH" + }, + "source": [ + "## Data Information" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 217 + }, + "id": "UN9-V71UAaX0", + "outputId": "ffeeb284-9385-4b0f-abbb-397a0d966680" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 10683 entries, 0 to 10682\n", + "Data columns (total 11 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Airline 10683 non-null object\n", + " 1 Date_of_Journey 10683 non-null object\n", + " 2 Source 10683 non-null object\n", + " 3 Destination 10683 non-null object\n", + " 4 Route 10682 non-null object\n", + " 5 Dep_Time 10683 non-null object\n", + " 6 Arrival_Time 10683 non-null object\n", + " 7 Duration 10683 non-null object\n", + " 8 Total_Stops 10682 non-null object\n", + " 9 Additional_Info 10683 non-null object\n", + " 10 Price 10683 non-null int64 \n", + "dtypes: int64(1), object(10)\n", + "memory usage: 918.2+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 33 + }, + "id": "RMgf9wNAHeOm", + "outputId": "1e47b8ee-cc40-4b06-f495-296e22899693" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(10683, 11)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T-kvkT91UUJZ" + }, + "source": [ + "## Filtering Null Values" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 217 + }, + "id": "einq44JyAv3j", + "outputId": "6db1d153-b33c-47e1-bb21-82d3e7f5bd81" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Airline 0\n", + "Date_of_Journey 0\n", + "Source 0\n", + "Destination 0\n", + "Route 1\n", + "Dep_Time 0\n", + "Arrival_Time 0\n", + "Duration 0\n", + "Total_Stops 1\n", + "Additional_Info 0\n", + "Price 0\n", + "dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "df.dropna(inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 217 + }, + "id": "L-QbgBawA3Ik", + "outputId": "9cda1dd2-f70d-4745-8832-104b629db910", + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Airline 0\n", + "Date_of_Journey 0\n", + "Source 0\n", + "Destination 0\n", + "Route 0\n", + "Dep_Time 0\n", + "Arrival_Time 0\n", + "Duration 0\n", + "Total_Stops 0\n", + "Additional_Info 0\n", + "Price 0\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Finding Unique Values and Eccoding\n", + "For better understanding of Machine" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['non-stop', '2 stops', '1 stop', '3 stops', '4 stops'],\n", + " dtype=object)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Total_Stops.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 stop 5625\n", + "non-stop 3491\n", + "2 stops 1520\n", + "3 stops 45\n", + "4 stops 1\n", + "Name: Total_Stops, dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Total_Stops.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Banglore', 'Kolkata', 'Delhi', 'Chennai', 'Mumbai'], dtype=object)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Source.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['New Delhi', 'Banglore', 'Cochin', 'Kolkata', 'Delhi', 'Hyderabad'],\n", + " dtype=object)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Destination.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['IndiGo', 'Air India', 'Jet Airways', 'SpiceJet',\n", + " 'Multiple carriers', 'GoAir', 'Vistara', 'Air Asia',\n", + " 'Vistara Premium economy', 'Jet Airways Business',\n", + " 'Multiple carriers Premium economy', 'Trujet'], dtype=object)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Airline.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['No info', 'In-flight meal not included',\n", + " 'No check-in baggage included', '1 Short layover', 'No Info',\n", + " '1 Long layover', 'Change airports', 'Business class',\n", + " 'Red-eye flight', '2 Long layover'], dtype=object)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Additional_Info.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "No info 8344\n", + "In-flight meal not included 1982\n", + "No check-in baggage included 320\n", + "1 Long layover 19\n", + "Change airports 7\n", + "Business class 4\n", + "No Info 3\n", + "2 Long layover 1\n", + "Red-eye flight 1\n", + "1 Short layover 1\n", + "Name: Additional_Info, dtype: int64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Additional_Info'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Additional Info is not a good distribution for training \n", + "So we will remove this" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "df.drop('Additional_Info',axis=1,inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsPrice
0IndiGo24/03/2019BangloreNew DelhiBLR → DEL22:2001:10 22 Mar2h 50mnon-stop3897
1Air India1/05/2019KolkataBangloreCCU → IXR → BBI → BLR05:5013:157h 25m2 stops7662
2Jet Airways9/06/2019DelhiCochinDEL → LKO → BOM → COK09:2504:25 10 Jun19h2 stops13882
3IndiGo12/05/2019KolkataBangloreCCU → NAG → BLR18:0523:305h 25m1 stop6218
4IndiGo01/03/2019BangloreNew DelhiBLR → NAG → DEL16:5021:354h 45m1 stop13302
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination Route \\\n", + "0 IndiGo 24/03/2019 Banglore New Delhi BLR → DEL \n", + "1 Air India 1/05/2019 Kolkata Banglore CCU → IXR → BBI → BLR \n", + "2 Jet Airways 9/06/2019 Delhi Cochin DEL → LKO → BOM → COK \n", + "3 IndiGo 12/05/2019 Kolkata Banglore CCU → NAG → BLR \n", + "4 IndiGo 01/03/2019 Banglore New Delhi BLR → NAG → DEL \n", + "\n", + " Dep_Time Arrival_Time Duration Total_Stops Price \n", + "0 22:20 01:10 22 Mar 2h 50m non-stop 3897 \n", + "1 05:50 13:15 7h 25m 2 stops 7662 \n", + "2 09:25 04:25 10 Jun 19h 2 stops 13882 \n", + "3 18:05 23:30 5h 25m 1 stop 6218 \n", + "4 16:50 21:35 4h 45m 1 stop 13302 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Label Encoding for unique Values" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import LabelEncoder" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "encoder = LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "encoder.fit(df.Airline)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "df['Airline'] = encoder.transform(df.Airline)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Air Asia', 'Air India', 'GoAir', 'IndiGo', 'Jet Airways',\n", + " 'Jet Airways Business', 'Multiple carriers',\n", + " 'Multiple carriers Premium economy', 'SpiceJet', 'Trujet',\n", + " 'Vistara', 'Vistara Premium economy'], dtype=object)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "encoder.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3, 1, 4, 8, 6, 2, 10, 0, 11, 5, 7, 9])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['Airline'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "df['Source'] = encoder.fit_transform(df['Source'])" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Banglore', 'Chennai', 'Delhi', 'Kolkata', 'Mumbai'], dtype=object)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "encoder.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "df['Destination'] = encoder.fit_transform(df['Destination'])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Banglore', 'Cochin', 'Delhi', 'Hyderabad', 'Kolkata', 'New Delhi'],\n", + " dtype=object)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "encoder.classes_" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Airline', 'Date_of_Journey', 'Source', 'Destination', 'Route',\n", + " 'Dep_Time', 'Arrival_Time', 'Duration', 'Total_Stops', 'Price'],\n", + " dtype='object')" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['non-stop', '2 stops', '1 stop', '3 stops', '4 stops'],\n", + " dtype=object)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.Total_Stops.unique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Converting Total Stops to number" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "df['Total_Stops'] = df.Total_Stops.apply(lambda x:'0 stop' if x=='non-stop' else x)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "df['Total_Stops'] = df.Total_Stops.apply(lambda x:int(x.split()[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsPrice
0324/03/201905BLR → DEL22:2001:10 22 Mar2h 50m03897
111/05/201930CCU → IXR → BBI → BLR05:5013:157h 25m27662
249/06/201921DEL → LKO → BOM → COK09:2504:25 10 Jun19h213882
3312/05/201930CCU → NAG → BLR18:0523:305h 25m16218
4301/03/201905BLR → NAG → DEL16:5021:354h 45m113302
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination Route \\\n", + "0 3 24/03/2019 0 5 BLR → DEL \n", + "1 1 1/05/2019 3 0 CCU → IXR → BBI → BLR \n", + "2 4 9/06/2019 2 1 DEL → LKO → BOM → COK \n", + "3 3 12/05/2019 3 0 CCU → NAG → BLR \n", + "4 3 01/03/2019 0 5 BLR → NAG → DEL \n", + "\n", + " Dep_Time Arrival_Time Duration Total_Stops Price \n", + "0 22:20 01:10 22 Mar 2h 50m 0 3897 \n", + "1 05:50 13:15 7h 25m 2 7662 \n", + "2 09:25 04:25 10 Jun 19h 2 13882 \n", + "3 18:05 23:30 5h 25m 1 6218 \n", + "4 16:50 21:35 4h 45m 1 13302 " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Working With Time" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "df['Date_of_Journey'] =pd.to_datetime(df['Date_of_Journey'])" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 10682 entries, 0 to 10682\n", + "Data columns (total 10 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Airline 10682 non-null int32 \n", + " 1 Date_of_Journey 10682 non-null datetime64[ns]\n", + " 2 Source 10682 non-null int32 \n", + " 3 Destination 10682 non-null int32 \n", + " 4 Route 10682 non-null object \n", + " 5 Dep_Time 10682 non-null object \n", + " 6 Arrival_Time 10682 non-null object \n", + " 7 Duration 10682 non-null object \n", + " 8 Total_Stops 10682 non-null int64 \n", + " 9 Price 10682 non-null int64 \n", + "dtypes: datetime64[ns](1), int32(3), int64(2), object(4)\n", + "memory usage: 792.8+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "dep_time to dep_time hour of the day" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "df['Dep_Time'] = df.Dep_Time.apply(lambda x:int(x.split(':')[0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "same for arriving time" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "df['Arrival_Time'] = df.Arrival_Time.apply(lambda x:int(x.split(':')[0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Adjustments with time" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "df['Arrival_Time'] = df[['Dep_Time','Arrival_Time']].apply(lambda x:x['Arrival_Time']+24 if x['Dep_Time']>x['Arrival_Time'] else x['Arrival_Time'],axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: - Arrival time is shown as Dep_time + Duration Time" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsPrice
032019-03-2405BLR → DEL22252h 50m03897
112019-01-0530CCU → IXR → BBI → BLR5137h 25m27662
242019-09-0621DEL → LKO → BOM → COK92819h213882
332019-12-0530CCU → NAG → BLR18235h 25m16218
432019-01-0305BLR → NAG → DEL16214h 45m113302
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination Route \\\n", + "0 3 2019-03-24 0 5 BLR → DEL \n", + "1 1 2019-01-05 3 0 CCU → IXR → BBI → BLR \n", + "2 4 2019-09-06 2 1 DEL → LKO → BOM → COK \n", + "3 3 2019-12-05 3 0 CCU → NAG → BLR \n", + "4 3 2019-01-03 0 5 BLR → NAG → DEL \n", + "\n", + " Dep_Time Arrival_Time Duration Total_Stops Price \n", + "0 22 25 2h 50m 0 3897 \n", + "1 5 13 7h 25m 2 7662 \n", + "2 9 28 19h 2 13882 \n", + "3 18 23 5h 25m 1 6218 \n", + "4 16 21 4h 45m 1 13302 " + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Month of journey" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "df['Month_of_Journey'] = df['Date_of_Journey'].map(lambda x:x.month)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Duration in minutes" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def duration_time(x):\n", + " x = x.split()\n", + " x = list(map(lambda t:int(t[:-1]),x))\n", + " if len(x) == 1:\n", + " return x[0]*60\n", + " else:\n", + " return x[0]*60 + x[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "df['Duration'] = df['Duration'].apply(duration_time)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsPriceMonth_of_Journey
032019-03-2405BLR → DEL2225170038973
112019-01-0530CCU → IXR → BBI → BLR513445276621
242019-09-0621DEL → LKO → BOM → COK92811402138829
332019-12-0530CCU → NAG → BLR18233251621812
432019-01-0305BLR → NAG → DEL16212851133021
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination Route \\\n", + "0 3 2019-03-24 0 5 BLR → DEL \n", + "1 1 2019-01-05 3 0 CCU → IXR → BBI → BLR \n", + "2 4 2019-09-06 2 1 DEL → LKO → BOM → COK \n", + "3 3 2019-12-05 3 0 CCU → NAG → BLR \n", + "4 3 2019-01-03 0 5 BLR → NAG → DEL \n", + "\n", + " Dep_Time Arrival_Time Duration Total_Stops Price Month_of_Journey \n", + "0 22 25 170 0 3897 3 \n", + "1 5 13 445 2 7662 1 \n", + "2 9 28 1140 2 13882 9 \n", + "3 18 23 325 1 6218 12 \n", + "4 16 21 285 1 13302 1 " + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Target data visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(df['Price'],kde=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see output data is not Distributed Uniformally\n", + "To make it uniform we will remove data of price > 40000" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineDate_of_JourneySourceDestinationRouteDep_TimeArrival_TimeDurationTotal_StopsPriceMonth_of_Journey
65752019-01-0305BLR → BOM → DEL5103001522291
147842019-03-1805BLR → BOM → DEL18243651548263
261842019-03-1805BLR → BOM → DEL22293751548263
292452019-01-0305BLR → BOM → DEL5113401795121
537252019-01-0305BLR → BOM → DEL5124001624271
543942019-01-0305BLR → BOM → DEL16233651548261
735152019-03-0321DEL → ATQ → BOM → COK20285002464903
971552019-06-0321DEL → ATQ → BOM → COK20285002522856
1036452019-01-0305BLR → MAA → DEL9142801572091
\n", + "
" + ], + "text/plain": [ + " Airline Date_of_Journey Source Destination Route \\\n", + "657 5 2019-01-03 0 5 BLR → BOM → DEL \n", + "1478 4 2019-03-18 0 5 BLR → BOM → DEL \n", + "2618 4 2019-03-18 0 5 BLR → BOM → DEL \n", + "2924 5 2019-01-03 0 5 BLR → BOM → DEL \n", + "5372 5 2019-01-03 0 5 BLR → BOM → DEL \n", + "5439 4 2019-01-03 0 5 BLR → BOM → DEL \n", + "7351 5 2019-03-03 2 1 DEL → ATQ → BOM → COK \n", + "9715 5 2019-06-03 2 1 DEL → ATQ → BOM → COK \n", + "10364 5 2019-01-03 0 5 BLR → MAA → DEL \n", + "\n", + " Dep_Time Arrival_Time Duration Total_Stops Price Month_of_Journey \n", + "657 5 10 300 1 52229 1 \n", + "1478 18 24 365 1 54826 3 \n", + "2618 22 29 375 1 54826 3 \n", + "2924 5 11 340 1 79512 1 \n", + "5372 5 12 400 1 62427 1 \n", + "5439 16 23 365 1 54826 1 \n", + "7351 20 28 500 2 46490 3 \n", + "9715 20 28 500 2 52285 6 \n", + "10364 9 14 280 1 57209 1 " + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['Price']>40000]" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "df.drop(df[df['Price']>40000].index,inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEGCAYAAACevtWaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAQsElEQVR4nO3df6zdd13H8eeLbWyMMVldt5S2sx0OtSMCs+nGMMQ4cD80diYsaQba6JKGOHQYCXSQCP7RpBolYhRMZZCqjFEGZo2JkzEgYtSVDjZYV2oLxa6srkXCD4EMNt7+cb5dztp77j1tz7nn3E+fj+TmfM/nfL7nvu+n9776Od/z/X5OqgpJUlueM+kCJEmjZ7hLUoMMd0lqkOEuSQ0y3CWpQWdOugCACy+8sFasWDHpMiRpQXnwwQe/UVWLZ3psKsJ9xYoV7Ny5c9JlSNKCkuS/Bz3mYRlJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWrQVFyhOu3ufODAjO03X3nJPFciScNx5i5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUF+zF6fQR+nJ0kLjTN3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoOGCvckf5BkV5JHknw4yTlJFiW5L8ne7vaCvv63J9mXZE+Sa8dXviRpJnNeoZpkKfD7wKqq+kGSbcA6YBVwf1VtTrIR2Ai8Lcmq7vHLgRcBn0zykqp6emw/heY06Orbm6+8ZJ4rkTQfhj0scybwvCRnAucCjwNrga3d41uBG7vttcBdVfVkVe0H9gFrRleyJGkuc4Z7VX0d+DPgAHAI+HZVfQK4uKoOdX0OARd1uywFHut7ioNd27Mk2ZBkZ5KdR44cObWfQpL0LHOGe3csfS2wkt5hlucnecNsu8zQVsc1VG2pqtVVtXrx4sXD1itJGsIwh2VeA+yvqiNV9SPg48DVwBNJlgB0t4e7/geB5X37L6N3GEeSNE+GCfcDwFVJzk0S4BpgN7AdWN/1WQ/c021vB9YlOTvJSuAyYMdoy5YkzWbOs2Wq6oEkdwOfB54CvgBsAc4DtiW5hd5/ADd1/Xd1Z9Q82vW/1TNlJGl+DfVhHVX1TuCdxzQ/SW8WP1P/TcCmUytNknSyvEJVkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGDXWeu0bDZXclzRdn7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CCvUB2DQVeiStJ8ceYuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDRoq3JO8MMndSb6cZHeSVyZZlOS+JHu72wv6+t+eZF+SPUmuHV/5kqSZDPsxe+8B7q2q1yV5LnAu8Hbg/qranGQjsBF4W5JVwDrgcuBFwCeTvKSqnh5D/U0Y9LF8N195yTxXIqkVc87ck5wPvBq4A6CqflhV3wLWAlu7bluBG7vttcBdVfVkVe0H9gFrRl24JGmwYWbulwJHgA8meRnwIHAbcHFVHQKoqkNJLur6LwX+s2//g13bsyTZAGwAuOSS+Z2h+gHWklo3zDH3M4ErgPdV1SuA79E7BDNIZmir4xqqtlTV6qpavXjx4qGKlSQNZ5hwPwgcrKoHuvt30wv7J5IsAehuD/f1X963/zLg8dGUK0kaxpyHZarqf5I8luRnqmoPcA3waPe1Htjc3d7T7bIduDPJu+m9oXoZsGMcxWv++eavtDAMe7bM7wEf6s6U+Srw2/Rm/duS3AIcAG4CqKpdSbbRC/+ngFs9U0aS5tdQ4V5VDwGrZ3jomgH9NwGbTqEuSdIp8ApVSWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaNOxFTNJIeaWrNF7O3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAa5toxGwrVipOnizF2SGmS4S1KDDHdJapDH3KeYx7ElnSxn7pLUIGfup2DQzFqSJs2ZuyQ1yHCXpAZ5WEZj5aEraTKcuUtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGDR3uSc5I8oUk/9TdX5TkviR7u9sL+vrenmRfkj1Jrh1H4ZKkwU7kPPfbgN3A+d39jcD9VbU5ycbu/tuSrALWAZcDLwI+meQlVfX0COvWAJ5XLgmGnLknWQb8KvD+vua1wNZueytwY1/7XVX1ZFXtB/YBa0ZTriRpGMMelvkL4K3Aj/vaLq6qQwDd7UVd+1Lgsb5+B7u2Z0myIcnOJDuPHDlywoVLkgabM9yT/BpwuKoeHPI5M0NbHddQtaWqVlfV6sWLFw/51JKkYQxzzP1VwK8nuQE4Bzg/yT8ATyRZUlWHkiwBDnf9DwLL+/ZfBjw+yqIlSbObc+ZeVbdX1bKqWkHvjdJPVdUbgO3A+q7beuCebns7sC7J2UlWApcBO0ZeuSRpoFNZFXIzsC3JLcAB4CaAqtqVZBvwKPAUcKtnykjS/DqhcK+qzwCf6bb/F7hmQL9NwKZTrE3zwM9pldrkFaqS1CDDXZIaZLhLUoMMd0lqkJ+hugC5foykuThzl6QGGe6S1CDDXZIaZLhLUoN8Q1Uz8k1baWFz5i5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDZoz3JMsT/LpJLuT7EpyW9e+KMl9SfZ2txf07XN7kn1J9iS5dpw/gCTpeMPM3J8C/rCqfg64Crg1ySpgI3B/VV0G3N/dp3tsHXA5cB3w3iRnjKN4SdLM5gz3qjpUVZ/vtr8L7AaWAmuBrV23rcCN3fZa4K6qerKq9gP7gDWjLlySNNgJHXNPsgJ4BfAAcHFVHYLefwDARV23pcBjfbsd7NqOfa4NSXYm2XnkyJETr1ySNNDQ4Z7kPOBjwJur6juzdZ2hrY5rqNpSVauravXixYuHLUOSNIShwj3JWfSC/UNV9fGu+YkkS7rHlwCHu/aDwPK+3ZcBj4+mXEnSMIY5WybAHcDuqnp330PbgfXd9nrgnr72dUnOTrISuAzYMbqSJUlzOXOIPq8CfhP4UpKHura3A5uBbUluAQ4ANwFU1a4k24BH6Z1pc2tVPT3yyiVJA80Z7lX1b8x8HB3gmgH7bAI2nUJdkqRT4BWqktQgw12SGmS4S1KDhnlDderd+cCBGdtvvvKSea5Ep8p/S2k0nLlLUoMMd0lqUBOHZQYZ9BJfklrnzF2SGmS4S1KDDHdJapDhLkkNMtwlqUFNny2jdnhxk3RiDHctaIa+NDMPy0hSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIVSHVpNk+HN0VI3U6cOYuSQ1y5q7Tzmyz+pk409dC5MxdkhpkuEtSgzwsI+k4fnzhwufMXZIa5MxdmsOJzmLH3V8axtjCPcl1wHuAM4D3V9XmcX0vaSE40bN05sOoavI/qOkzlnBPcgbw18BrgYPA55Jsr6pHx/H9pEkYd1gbmHNzjAYb18x9DbCvqr4KkOQuYC1guEunaJKvAKbx1ce4LdTDbOMK96XAY333DwJX9ndIsgHY0N19MskjY6plHC4EvjHpIoZkreNhrUN4/cntdsr1nuT3PZnvMXStY6rppwY9MK5wzwxt9aw7VVuALQBJdlbV6jHVMnILqV5rHQ9rHZ+FVO801zquUyEPAsv77i8DHh/T95IkHWNc4f454LIkK5M8F1gHbB/T95IkHWMsh2Wq6qkkbwL+hd6pkB+oql2z7LJlHHWM0UKq11rHw1rHZyHVO7W1pqrm7iVJWlBcfkCSGmS4S1KDJh7uSa5LsifJviQbJ1jH15J8KclDSXZ2bYuS3Jdkb3d7QV//27ua9yS5tq/9F7rn2ZfkL5PMdFroidb2gSSH+68FGGVtSc5O8pGu/YEkK0Zc67uSfL0b24eS3DAltS5P8ukku5PsSnJb1z51YztLrVM3tknOSbIjycNdrX/ctU/duM5R79SN7Qmpqol90Xuz9SvApcBzgYeBVROq5WvAhce0/SmwsdveCPxJt72qq/VsYGX3M5zRPbYDeCW9c/3/Gbh+BLW9GrgCeGQctQG/C/xNt70O+MiIa30X8JYZ+k661iXAFd32C4D/6mqaurGdpdapG9vuec/rts8CHgCumsZxnaPeqRvbE/ma9Mz9mWUKquqHwNFlCqbFWmBrt70VuLGv/a6qerKq9gP7gDVJlgDnV9V/VO9f8e/69jlpVfWvwDfHWFv/c90NXHN0xjGiWgeZdK2Hqurz3fZ3gd30rq6eurGdpdZBJllrVdX/dXfP6r6KKRzXOeodZKL1DmvS4T7TMgWz/cKOUwGfSPJgeksjAFxcVYeg98cFXNS1D6p7abd9bPs4jLK2Z/apqqeAbwM/OeJ635Tki+kdtjn6cnxqau1eJr+C3qxtqsf2mFphCsc2yRlJHgIOA/dV1VSP64B6YQrHdliTDvc5lymYR6+qqiuA64Fbk7x6lr6D6p6Gn+dkaht33e8DXgy8HDgE/Pkc33dea01yHvAx4M1V9Z3Zug743vNW7wy1TuXYVtXTVfVyelenr0ny0lm6T3xcB9Q7lWM7rEmH+9QsU1BVj3e3h4F/pHfI6InupRbd7eGu+6C6D3bbx7aPwyhre2afJGcCP8Hwh1bmVFVPdH88Pwb+lt7YTkWtSc6iF5YfqqqPd81TObYz1TrNY9vV9y3gM8B1TOm4Dqp32sd2LpMO96lYpiDJ85O84Og28CvAI10t67tu64F7uu3twLruHfCVwGXAju6l5neTXNUdT/utvn1GbZS19T/X64BPdccMR+LoH3TnN+iN7cRr7Z77DmB3Vb2776GpG9tBtU7j2CZZnOSF3fbzgNcAX2YKx3W2eqdxbE/Iyb4TO6ov4AZ67/x/BXjHhGq4lN673w8Du47WQe+Y2P3A3u52Ud8+7+hq3kPfGTHAanq/BF8B/oruKuBTrO/D9F4W/ojeDOCWUdYGnAN8lN4bQzuAS0dc698DXwK+SO+XfMmU1PqL9F4afxF4qPu6YRrHdpZap25sgZ8HvtDV9AjwR6P+exrx78GgeqdubE/ky+UHJKlBkz4sI0kaA8NdkhpkuEtSgwx3SWqQ4S5JDTLcddpJ8nR6q/w9kuSjSc4d0O/f57s2aVQMd52OflBVL6+qlwI/BN7Y/2CSMwCq6upJFCeNguGu091ngZ9O8kvprZd+J70LV0hydKVAkrw1vXW6H06yuWt7cZJ7u8XmPpvkZyfzI0jHG8sHZEsLQbfGx/XAvV3TGuCl1VvGtb/f9fSWbr2yqr6fZFH30BbgjVW1N8mVwHuBX56f6qXZGe46HT2vW94VejP3O4Cr6a0Psn+G/q8BPlhV3weoqm92qzNeDXy0b1nus8dbtjQ8w12nox9Ub3nXZ3QB/b0B/cPxy7M+B/jWsc8jTQuPuUtz+wTwO0fPqkmyqHprqe9PclPXliQvm2SRUj/DXZpDVd1Lb1XAnd3hnLd0D70euCXJ0dVEp+kjInWac1VISWqQM3dJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhr0/54if21ZVFQwAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(df['Price'],kde=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Better than Before" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inputs for Model" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AirlineSourceDestinationDep_TimeArrival_TimeDurationTotal_StopsPriceMonth_of_Journey
03052225170038973
1130513445276621
242192811402138829
333018233251621812
430516212851133021
\n", + "
" + ], + "text/plain": [ + " Airline Source Destination Dep_Time Arrival_Time Duration \\\n", + "0 3 0 5 22 25 170 \n", + "1 1 3 0 5 13 445 \n", + "2 4 2 1 9 28 1140 \n", + "3 3 3 0 18 23 325 \n", + "4 3 0 5 16 21 285 \n", + "\n", + " Total_Stops Price Month_of_Journey \n", + "0 0 3897 3 \n", + "1 2 7662 1 \n", + "2 2 13882 9 \n", + "3 1 6218 12 \n", + "4 1 13302 1 " + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df._get_numeric_data().head()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "X = df._get_numeric_data().drop('Price',axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "y = df['Price']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Splitting of Data in the ratio of 70% , 30% for testing" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model Building" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "model = LinearRegression()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(X_train,y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Model Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "predictions = model.predict(X_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Predictions Visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.scatterplot(y_test,predictions)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot((y_test-predictions),bins=50,kde=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " - Looking at the visualization we can tell that scatterplot fits around a Straight line .\n", + " - It means that Model is not evaluating randomly \n", + " - And It works Good" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Error Calculation" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MAE: 2417.9705040478357\n", + "MSE: 10202567.004940853\n", + "RMSE: 3194.145739464756\n" + ] + } + ], + "source": [ + "print('MAE:', metrics.mean_absolute_error(y_test, predictions))\n", + "print('MSE:', metrics.mean_squared_error(y_test, predictions))\n", + "print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Output:\n", + "- This model is predicting values of the fare with an error of 2400 rs.\n", + "- This Output also contains price above 35000 so it's not a bad prediction" + ] + } + ], + "metadata": { + "colab": { + "name": "fligth fare prediction .ipynb", + "provenance": [] + }, + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/FLIGHT_FARE_PREDICTION/results/Result.PNG b/FLIGHT_FARE_PREDICTION/results/Result.PNG new file mode 100644 index 0000000..31c6284 Binary files /dev/null and b/FLIGHT_FARE_PREDICTION/results/Result.PNG differ diff --git a/README.md b/README.md index b2af0e0..0bd5783 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,12 @@ Resources to learn Git: - https://en.wikipedia.org/wiki/Support_vector_machine - https://www.youtube.com/watch?v=Y17Y_8RK6pc +## References for Flight Fare Prediction: +- https://www.kaggle.com/nikhilmittal/flight-fare-prediction-mh +- https://scikit-learn.org/stable/modules/generated/sklearn.linear_model. + LinearRegression.html +- https://medium.com/code-to-express/flight-price-prediction-7c83616a13bb + ## References for Rock Paper Scissor: - https://www.geeksforgeeks.org/python-program-implement-rock-paper-scissor-game - https://www.afiniti.com/corporate/rock-paper-scissors