{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Exploratory_data_Analysis_2.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gCmEPdNniJqV",
"colab_type": "text"
},
"source": [
"# Exploring the data using python."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SloBpm7ViVLK",
"colab_type": "text"
},
"source": [
"## In this tutorial, we will use the exploratory data analysis approach to summarize and analyze the main characteristics of a cars data set."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TXgCY_shiQS6",
"colab_type": "text"
},
"source": [
"![alt text](https://www.statistika.co/images/services/Exploratory%20Data%20Analysis%20-%20EDA%201000x468.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JvYC7hU6iX5z",
"colab_type": "text"
},
"source": [
"## Let us understand how to explore the data using python and later build a machine learning model on that data in the next tutorial."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "50MDC448xr45",
"colab_type": "text"
},
"source": [
"## 1) Choosing a Data Set\n",
"\n",
"I chose a data-set titled “Cars” data from Kaggle the author of this data set is Lilit Janughazyan [1]. From my childhood, I was interested in and fascinated about cars. I still remember I used to maintain a book wherein I used to stick all the pictures of different cars along with its specifications. I was more up to date about the latest cars and their specifications. I was more like a specs sheet remembering almost all information about cars explaining people about different cars available in the market. And it was my dream when I was young that I wanted to predict the prices of cars given its specifications. With the help of this interest, I wanted to choose a data set based on Cars in this assignment. I wanted to fulfill my dream of creating a model that would be fed with the specifications of the cars such as Horsepower, Cylinders or Engine Size, and then the model should predict the price of the car based on these specifications. The data set can be found here: [Cars dataset](https://www.kaggle.com/ljanjughazyan/cars1)\n",
"\n",
"The main reason for me choosing the data set over others was that there were almost 110 data sets about cars under the most voted category in Kaggle (the most voted meaning the best and famous collection of data sets that are available on Kaggle) almost all these data sets had one or the other features missing. For example, the data set “Automobile Data set” [2] had most features of a car but did not have a price feature in it, which is the most important feature according to my interest. Hence I took a lot of time short-listing many data sets and then I concluded the “Cars” data set because this data set had almost every important feature of a car such as Horsepower, MSRP, Invoice, Cylinders, Engine Size and many more because of these good features this was the main reason I chose this data set over the other data sets available in Kaggle.\n",
"\n",
"\n",
"This data set was straightaway stored in a CSV (Comma Separated Value) format on Kaggle. I did not have to perform any operations to get the data into a format. Since the data was already in a CSV format it needed very little work to import the data set all I had to do is just download, read the CSV data and store it in a pandas data frame, for this I had to import pandas library. \n",
"\n",
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Mt4xqcgxxzhC",
"colab_type": "text"
},
"source": [
"## 2) Obtaining the data\n",
"\n",
"To get or load the dataset into the notebook, all I did was one trivial step. In Google Colab at the left-hand side of the notebook, you will find a “> “(greater than symbol). On clicking that you will find a tab with three options, out of which you have to select Files. Then you can easily upload your dataset with the help of the Upload option. No need to mount to the google drive or use any specific libraries just upload the data set and your job is done. This is how I got the dataset into my notebook.\n",
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9TNCVjPEx4r8",
"colab_type": "text"
},
"source": [
"## 3) Scrubbing and Formatting\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "liisRwyOx8UP",
"colab_type": "text"
},
"source": [
"**Formatting the data into a data frame**\n",
"\n",
"Since the data set was already in a CSV format. All I had to do is just format the data into a pandas data frame. This was done by using a pandas data frame method called (read_csv) by importing pandas library. The read_csv data frame method was used by passing the filename as an argument. And then by executing this, it converted the CSV file into a neatly organized pandas data frame format.\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Go7GwlNfI-92",
"colab_type": "code",
"colab": {}
},
"source": [
"# Importing the required libraries\n",
"import pandas as pd \n",
"import numpy as np\n",
"import seaborn as sns #visualisation\n",
"import matplotlib.pyplot as plt #visualisation\n",
"%matplotlib inline \n",
"sns.set(color_codes=True)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "7qfGWlMOJH2g",
"colab_type": "code",
"outputId": "d036db7b-fe19-4be3-fb0f-e41e772e843f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 219
}
},
"source": [
"# Loading the CSV file into a pandas dataframe.\n",
"df = pd.read_csv(\"CARS.csv\")\n",
"df.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Make
\n",
"
Model
\n",
"
Type
\n",
"
Origin
\n",
"
DriveTrain
\n",
"
MSRP
\n",
"
Invoice
\n",
"
EngineSize
\n",
"
Cylinders
\n",
"
Horsepower
\n",
"
MPG_City
\n",
"
MPG_Highway
\n",
"
Weight
\n",
"
Wheelbase
\n",
"
Length
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Acura
\n",
"
MDX
\n",
"
SUV
\n",
"
Asia
\n",
"
All
\n",
"
$36,945
\n",
"
$33,337
\n",
"
3.5
\n",
"
6.0
\n",
"
265
\n",
"
17
\n",
"
23
\n",
"
4451
\n",
"
106
\n",
"
189
\n",
"
\n",
"
\n",
"
1
\n",
"
Acura
\n",
"
RSX Type S 2dr
\n",
"
Sedan
\n",
"
Asia
\n",
"
Front
\n",
"
$23,820
\n",
"
$21,761
\n",
"
2.0
\n",
"
4.0
\n",
"
200
\n",
"
24
\n",
"
31
\n",
"
2778
\n",
"
101
\n",
"
172
\n",
"
\n",
"
\n",
"
2
\n",
"
Acura
\n",
"
TSX 4dr
\n",
"
Sedan
\n",
"
Asia
\n",
"
Front
\n",
"
$26,990
\n",
"
$24,647
\n",
"
2.4
\n",
"
4.0
\n",
"
200
\n",
"
22
\n",
"
29
\n",
"
3230
\n",
"
105
\n",
"
183
\n",
"
\n",
"
\n",
"
3
\n",
"
Acura
\n",
"
TL 4dr
\n",
"
Sedan
\n",
"
Asia
\n",
"
Front
\n",
"
$33,195
\n",
"
$30,299
\n",
"
3.2
\n",
"
6.0
\n",
"
270
\n",
"
20
\n",
"
28
\n",
"
3575
\n",
"
108
\n",
"
186
\n",
"
\n",
"
\n",
"
4
\n",
"
Acura
\n",
"
3.5 RL 4dr
\n",
"
Sedan
\n",
"
Asia
\n",
"
Front
\n",
"
$43,755
\n",
"
$39,014
\n",
"
3.5
\n",
"
6.0
\n",
"
225
\n",
"
18
\n",
"
24
\n",
"
3880
\n",
"
115
\n",
"
197
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Make Model Type Origin ... MPG_Highway Weight Wheelbase Length\n",
"0 Acura MDX SUV Asia ... 23 4451 106 189\n",
"1 Acura RSX Type S 2dr Sedan Asia ... 31 2778 101 172\n",
"2 Acura TSX 4dr Sedan Asia ... 29 3230 105 183\n",
"3 Acura TL 4dr Sedan Asia ... 28 3575 108 186\n",
"4 Acura 3.5 RL 4dr Sedan Asia ... 24 3880 115 197\n",
"\n",
"[5 rows x 15 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lMKhC3g4Qkc6",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_mdx5cImyBW0",
"colab_type": "text"
},
"source": [
"**Determining instances and the number of features.**\n",
"\n",
"This data set has 428 instances and 15 features also called as rows and columns. The instances here represent different car brands such as BMW, Mercedes, Audi, and 35 more, features represent Make, Model, Type, Origin, Drive Train, MSRP, Invoice, Engine Size, Cylinders, Horsepower, MPG-City, MPG-Highway, Weight, Wheelbase, and Length of the car.\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "W5l_KJy_yFVu",
"colab_type": "text"
},
"source": [
"**Removing irrelevant features.**\n",
"\n",
"I will remove some features such as Drive Train, Model, Invoice, Type, and Origin from this dataset. Because these features do not contribute to the prediction of price. As of now, I will remove the Drive Train, the Drive Train will not support for predicting the price of the car because most of the cars in this data set were front-wheel drive (52.8%) and the rest were rear wheel and all wheel drive. \n",
"\n",
"Similarly, the model, type and origin are irrelevant and are not needed in this context, it’s the brand which is important not the model of the car, and when it comes to type of the car most of the cars were of type Sedan and I kept the weight and length features of the cars in which case I can easily determine whether if it’s an SUV, Sedan or a truck. I will also be removing the Invoice feature of the car because I have the MSRP as the price I don't need the invoice because having any one type of price of the car makes more sense and it prevents in leading in ambiguous results (because both MSRP and Invoice are very closely related and you cannot predict the MSRP given the invoice). Lastly, the origin of cars has nothing to do with the prediction rate so I had to remove it and most of the cars were originated from Europe.\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "s_QtFxfrJL8L",
"colab_type": "code",
"outputId": "ca650cd9-c9b7-4a9c-c3ad-94fd9ccdaa4d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 202
}
},
"source": [
"# Removing irrelevant features\n",
"df = df.drop(['Model','DriveTrain','Invoice', 'Origin', 'Type'], axis=1)\n",
"df.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Make
\n",
"
MSRP
\n",
"
EngineSize
\n",
"
Cylinders
\n",
"
Horsepower
\n",
"
MPG_City
\n",
"
MPG_Highway
\n",
"
Weight
\n",
"
Wheelbase
\n",
"
Length
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Acura
\n",
"
$36,945
\n",
"
3.5
\n",
"
6.0
\n",
"
265
\n",
"
17
\n",
"
23
\n",
"
4451
\n",
"
106
\n",
"
189
\n",
"
\n",
"
\n",
"
1
\n",
"
Acura
\n",
"
$23,820
\n",
"
2.0
\n",
"
4.0
\n",
"
200
\n",
"
24
\n",
"
31
\n",
"
2778
\n",
"
101
\n",
"
172
\n",
"
\n",
"
\n",
"
2
\n",
"
Acura
\n",
"
$26,990
\n",
"
2.4
\n",
"
4.0
\n",
"
200
\n",
"
22
\n",
"
29
\n",
"
3230
\n",
"
105
\n",
"
183
\n",
"
\n",
"
\n",
"
3
\n",
"
Acura
\n",
"
$33,195
\n",
"
3.2
\n",
"
6.0
\n",
"
270
\n",
"
20
\n",
"
28
\n",
"
3575
\n",
"
108
\n",
"
186
\n",
"
\n",
"
\n",
"
4
\n",
"
Acura
\n",
"
$43,755
\n",
"
3.5
\n",
"
6.0
\n",
"
225
\n",
"
18
\n",
"
24
\n",
"
3880
\n",
"
115
\n",
"
197
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Make MSRP EngineSize ... Weight Wheelbase Length\n",
"0 Acura $36,945 3.5 ... 4451 106 189\n",
"1 Acura $23,820 2.0 ... 2778 101 172\n",
"2 Acura $26,990 2.4 ... 3230 105 183\n",
"3 Acura $33,195 3.2 ... 3575 108 186\n",
"4 Acura $43,755 3.5 ... 3880 115 197\n",
"\n",
"[5 rows x 10 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 3
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FaGwmCfyQz9O",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xQ_-zvL2yLqK",
"colab_type": "text"
},
"source": [
"## 4) Exploratory Data Analysis"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "18dSqoEGyMkG",
"colab_type": "text"
},
"source": [
"**Identifying the type of data using info()**\n",
"\n",
"To identify the data types, I use the info method. The info method prints a summary of the data in the data frame along with its data types. Here, there are 428 entries (0-427 rows). The data frame after removing irrelevant columns comprises 10 columns. Here the Make, MSRP are of an object type whereas Engine size and Cylinders are of float type and Horsepower, MPG_City, MPG_Highway, Weight, Wheelbase and Length are of integer type. Hence there are 2 object types, 2 float types and 6 integer types of data present in the data frame. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "eCcllQlBJOTB",
"colab_type": "code",
"outputId": "bd5aa005-397c-4392-902b-2f8a7f978b1c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 277
}
},
"source": [
"# To identify the type of data\n",
"df.info()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 428 entries, 0 to 427\n",
"Data columns (total 10 columns):\n",
"Make 428 non-null object\n",
"MSRP 428 non-null object\n",
"EngineSize 428 non-null float64\n",
"Cylinders 426 non-null float64\n",
"Horsepower 428 non-null int64\n",
"MPG_City 428 non-null int64\n",
"MPG_Highway 428 non-null int64\n",
"Weight 428 non-null int64\n",
"Wheelbase 428 non-null int64\n",
"Length 428 non-null int64\n",
"dtypes: float64(2), int64(6), object(2)\n",
"memory usage: 33.5+ KB\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oZOMXN_5Q76_",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3QYs6qRzyTyK",
"colab_type": "text"
},
"source": [
"**Finding the dimensions of the data frame**\n",
"\n",
"To get the number of rows and columns of the data frame, I used the shape method. The shape method gets the number of rows and the number of columns of the data frame. Here, there are 428 rows and 10 columns. Hence the shape method returns (428, 10). And to find the dimensions of the data frame I used ndim (dimension) method. This method prints the dimensions of the data frame. Here, the whole data frame is of 2 dimensional (rows and columns).\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "NK5lDFrlJQZ2",
"colab_type": "code",
"outputId": "191c87cc-c25e-40f0-ee25-d471b8b8dc3b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"# Getting the number of instances and features\n",
"df.shape"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(428, 10)"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "sWA_xeKfLpkl",
"colab_type": "code",
"outputId": "2dc3bedc-e11e-4b68-c207-97c19a726499",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"# Getting the dimensions of the data frame\n",
"df.ndim"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"2"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7DttZwsVNXY5",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EqHaM8ASyXn0",
"colab_type": "text"
},
"source": [
"**Finding the duplicate data.**\n",
"\n",
"This is a handy thing to perform on a data set because often there might be duplicate or redundant data in the data sets, to remove this I used the MSRP as a reference such that there cannot be more than two same MSRP prices of the car, it shows that few data are redundant because prices of the cars can never match very accurately. So before removing the duplicates, there were 428 rows and after removing there are 410 meaning that there were 18 duplicate data."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZTsS4rHyJjrx",
"colab_type": "code",
"outputId": "e9912311-6a82-414f-b845-8f01689015a6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 208
}
},
"source": [
"df = df.drop_duplicates(subset='MSRP', keep='first')\n",
"df.count()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Make 410\n",
"MSRP 410\n",
"EngineSize 410\n",
"Cylinders 408\n",
"Horsepower 410\n",
"MPG_City 410\n",
"MPG_Highway 410\n",
"Weight 410\n",
"Wheelbase 410\n",
"Length 410\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "sTIhMBTURIWg",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LGENLOYbydpl",
"colab_type": "text"
},
"source": [
"**Finding the missing or null values.**\n",
"\n",
"Many times there might be a lot of missing values in the dataset. There are several approaches to deal with this scenario either we can drop those values or fill those values with the mean of that column. Here, 2 entries were having N/A in the Cylinders feature. This can be found by using the is_null( ) method which returns the null or missing values in the data frame. So rather than deleting those two entries, I filled those values with the mean of the cylinders columns and their value came as 6.0 each. I was able to find this while I was peeking at the first and last few rows of the data set. I think rather than deleting this is a good approach because every entry of data is vital. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "S9aII503Lncg",
"colab_type": "code",
"outputId": "3a687464-6212-41e0-c991-a6357a59ff78",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 202
}
},
"source": [
"# To peek at first five rows\n",
"df.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
"
],
"text/plain": [
" Make MSRP EngineSize ... Weight Wheelbase Length\n",
"423 Volvo $40,565 2.4 ... 3450 105 186\n",
"424 Volvo $42,565 2.3 ... 3450 105 186\n",
"425 Volvo $45,210 2.9 ... 3653 110 190\n",
"426 Volvo $26,135 1.9 ... 2822 101 180\n",
"427 Volvo $35,145 2.5 ... 3823 109 186\n",
"\n",
"[5 rows x 10 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4imDMry4xkt7",
"colab_type": "text"
},
"source": [
"While using both head and tail method I found out that there were two values stored a NaN (Not a number) in the Cylinders features. So I printed them by using the slicing technique of mentioning their index."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ILDnZYH9Jmbk",
"colab_type": "code",
"outputId": "f8eb13c6-d25f-48c7-96cd-6bb87604f7ed",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 208
}
},
"source": [
"# Finding the null values\n",
"print(df.isnull().sum())"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Make 0\n",
"MSRP 0\n",
"EngineSize 0\n",
"Cylinders 2\n",
"Horsepower 0\n",
"MPG_City 0\n",
"MPG_Highway 0\n",
"Weight 0\n",
"Wheelbase 0\n",
"Length 0\n",
"dtype: int64\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "qv8hBVOvL7QR",
"colab_type": "code",
"outputId": "f66d0609-e4de-48e2-9221-cb0f572e2994",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 110
}
},
"source": [
"# Printing the null value rows\n",
"df[240:242]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Make
\n",
"
MSRP
\n",
"
EngineSize
\n",
"
Cylinders
\n",
"
Horsepower
\n",
"
MPG_City
\n",
"
MPG_Highway
\n",
"
Weight
\n",
"
Wheelbase
\n",
"
Length
\n",
"
\n",
" \n",
" \n",
"
\n",
"
247
\n",
"
Mazda
\n",
"
$25,700
\n",
"
1.3
\n",
"
NaN
\n",
"
197
\n",
"
18
\n",
"
25
\n",
"
3053
\n",
"
106
\n",
"
174
\n",
"
\n",
"
\n",
"
248
\n",
"
Mazda
\n",
"
$27,200
\n",
"
1.3
\n",
"
NaN
\n",
"
238
\n",
"
18
\n",
"
24
\n",
"
3029
\n",
"
106
\n",
"
174
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Make MSRP EngineSize ... Weight Wheelbase Length\n",
"247 Mazda $25,700 1.3 ... 3053 106 174\n",
"248 Mazda $27,200 1.3 ... 3029 106 174\n",
"\n",
"[2 rows x 10 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "n6IdL0FIMImO",
"colab_type": "code",
"outputId": "28cf95e6-3933-4c27-826d-d26fda5711ae",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 104
}
},
"source": [
"# Filling the rows with the mean of the column\n",
"val = df['Cylinders'].mean()\n",
"df['Cylinders'][247] = round(val)\n",
"\n",
"val = df['Cylinders'].mean()\n",
"df['Cylinders'][248]= round(val)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" \"\"\"\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "14YTFXLwRsNu",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EDhwqdvCyiJc",
"colab_type": "text"
},
"source": [
"**Converting the object values to integer type.**\n",
"\n",
"While having a look at the data, the MSRP was stored as an object type. This is a serious problem because it is impossible to plot those values on a graph because it is a primary requirement that during plotting a graph all the values must be of type integer data. The author has stored, the MSRP in a different format ($36, 000) so I had to remove the formatting and then convert them to an integer.\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AePvAc0mL8oU",
"colab_type": "code",
"colab": {}
},
"source": [
"# Removing the formatting\n",
"df['MSRP'] = [x.replace('$', '') for x in df['MSRP']] \n",
"df['MSRP'] = [x.replace(',', '') for x in df['MSRP']] "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "9AoMNHNnMaC6",
"colab_type": "code",
"colab": {}
},
"source": [
"df['MSRP']=pd.to_numeric(df['MSRP'],errors='coerce')"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "tWXoT-PYVn3E",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CL1iNFB3GmQq",
"colab_type": "text"
},
"source": [
"**Detecting Outliers**\n",
"\n",
"An outlier is a point or set of points different from other points. Sometimes they can be very high or very low. It’s often a good idea to detect and remove the outliers. Because outliers are one of the primary reasons for resulting in a less accurate model. Hence it’s a good idea to remove them. I will perform the IQR score technique to detect and remove the outliers. Often outliers can be seen with visualizations using a box plot. Shown below is the box plot of MSRP. In the plot, you can find some points are outside the box they are none other than outliers. I referred the above outlier technique from towards data science article which can be found in the references section [3]."
]
},
{
"cell_type": "code",
"metadata": {
"id": "i9t9l0VUVpDa",
"colab_type": "code",
"outputId": "d23f9169-406f-4926-bafb-a6e4d9afa64d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
}
},
"source": [
"sns.boxplot(x=df['MSRP'])"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"execution_count": 15
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nmjRpknJycjRv3jydOXNGkjR8+HDl5OQoLy9PeXl5Ki0t9Z63fft2TZ48WRMnTtSzzz6rc+fOXfVa\na7KysjR58mRvnpKSEknSDz/8oNzcXE2aNEkFBQWqrq72ntMZay05fvy4N19eXp6ysrJ09913tzh/\npOZcvny5srKyNHz4cB08eND7+S+//KKZM2dq0qRJmjlzpo4ePRq1taZmbOkelaJznzZ3LiN9jVu7\n/k3N2dI9Go1jaOn6Rvqctev33sWYs2fPuq+++sp7/Oqrr7qXXnrJOefcsGHDXF1d3WXPqaurc2PG\njHG//PKLc865hQsXurfffvuq1tri/vvvd6WlpWE/CwQCbsKECW7Pnj3OOeeKiorciy++2GlrV2rp\n0qVu8eLFzc4fyTn37NnjKisrL5sjPz/fbdiwwTnn3IYNG1x+fn7U1pqasaV71Lno3KfNnctIXuO2\nXP/m5gwVeo9G+hica/76Rvqctff3PuaifqlPP/3UPf7448655n9Ztm7d6goLC73HP/30k5s6depV\nrbVFUzfbjz/+6B588EHvcXV1tRs5cmSnrV2J8+fPu3vuucft27ev2fmjMWfoHKdPn3ajRo1yfr/f\nOeec3+93o0aNctXV1RFfa27GS4Xeo85F9z5ta9SjfZ82N9el92ikj6Epwesb6XPW3t+ndn9LYyQ0\nNjZqzZo1ysrK8n6Wn5+vQCCg8ePHa/78+erevbuqqqrUv39/b5v+/furqqpKktq91lYLFiyQc06j\nRo3Sc889d9lr9u7dW42NjaqpqemUtdTU1DbPun37dvXt21cjRoxodv6//OUvUZ2zqqpKffv2lc/n\nkyT5fD7ddNNNqqqqknMuomu9e/dudd6m7lEptu7TSF3jjrj+Td2jkTyGS+cMvb6RPmftPZ8x95l6\nqCVLlig5OVmPPfaYJGnHjh1at26dVq9erbKyMhUVFUV1vtWrV2vjxo1au3atnHN65ZVXojpPa9au\nXauHHnrIexxv88eiS+9RKbbu03i7xpfeo1J0j6Gp6xvrYjbqy5cvV3l5ud58800lJl4cs1+/fpKk\n6667To888oj27t3r/byystJ7bmVlpbdte9faIrht9+7dNWvWLO3du/ey1zxz5owSExOVmpraKWtt\ndeLECe3Zs0c5OTktzh/8ebTm7Nevn06cOKFAICBJCgQCOnnypPr16xfxtdY0dY+GntdYuE8jeY2v\n9vo3dY9G+hhCXXp9I33O2ns+YzLqb7zxhvbt26eioiJ1795dklRbW6uGhgZJkt/v12effab09HRJ\nUkZGhn7++Wfvby18/PHHmjJlylWttaa+vl6//fabJMk5p61btyo9PV233XabGhoa9O2333qvOXny\nZEnqlLW2Wr9+vTIzM9WrV68W54/2nH369FF6ero2b94sSdq8ebPS09PVu3fviK+1pKl7VIqt+zTS\n1/hqr/+l92g0jiGoqesb6XPW7vPZ6qfuEXbw4EE3bNgwl52d7XJzc11ubq6bM2eO27t3r5s2bZrL\nyclxU6ZMcQsXLgz7w6jPP//cZWdnuwkTJrj58+e733///arXWlJRUeHy8vLctGnT3NSpU938+fPd\niRMnnHPOfffdd27atGlu4sSJ7oknnnCnTp3yntcZa22RnZ3tdu7c2ab5IzXnkiVLXEZGhktPT3dj\nxozx/vCvrKzMPfzwwy47O9s9/PDD7vDhw95zIr3W1IzN3aPOuajdp03NGY1r3Nr1b+6aO3f5Pepc\ndO7Tlq5vpM9Ze37v+ZePAMCQmPz4BQDQPkQdAAwh6gBgCFEHAEOIOgAYQtQBwJCY/u4XdE1ZWVk6\nefKkiouLw/5PQNOnT9eBAwe0bds2JSUladmyZfrmm2/k9/vVr18/FRQUaMaMGTp+/LgeeOABJScn\nS5J69eqlRx99VIWFhWH7OH36tHw+n6699lqNHz9eL7/8snr27Bnx4wU6Eu/UEZMGDBigLVu2eI9L\nS0vDvkP8+eef180336wvvvhCX3/9tV577TX16dMn7DX27Nmj77//XitWrNDKlSu1e/fusPV33nlH\n33//vdavX699+/Zp1apVnXtQQAQQdcSkvLw8bdiwwXu8YcMGTZ8+3Xu8b98+zZgxQ8nJyUpKStKt\nt96qzMzMJl/r9ttv19ChQ3XgwIEm1/v27auMjAwdOnSoYw8CiAKijpg0cuRI1dXV6fDhwwoEAtqy\nZYtyc3O99TvvvFOLFy/Wli1bwr70qCk//PCDDh06pLS0tCbXq6qqVFxc7H2nCBDP+EwdMSv4bv2u\nu+7SkCFD1LdvX29txYoVeu+997Ry5UodOXJEw4YN05IlS3THHXd429x77736448/dP78eRUUFGjC\nhAlhrz937lz5fD5df/31yszM1NNPPx2xYwM6C1FHzMrLy9Njjz3m/RuWoVJSUrRgwQItWLBAZ86c\n0Wuvvaa5c+equLjY2+arr75SQkKCPvzwQ23atEkXLlwI+0bFoqIijRkzJmLHA0QCH78gZg0YMEC3\n3HKLdu7cqezs7Ga36927twoKCnTy5EnV1NSErfl8Pj355JO65ppr9NFHH3X2yEDUEXXEtGXLlumD\nDz7w/npi0Ouvv66DBw/K7/errq5Oa9asUVpaWth3cYcqLCzU+++/r/Pnz0dibCBq+PgFMW3QoEFN\n/ryhoUHz5s3TqVOndM011+jOO+9s8a8k3nfffUpJSdEnn3yi/Pz8zhoXiDq+Tx0ADOHjFwAwhKgD\ngCFEHQAMIeoAYAhRBwBDiDoAGELUAcAQog4AhhB1ADDk/wCCAu1SUBKCXwAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xnwk7E7HX68v",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uTO74i0vynyX",
"colab_type": "text"
},
"source": [
"**Performing a 5 number summary (min, lower quartile, median, upper\n",
"quartile, max)**\n",
"\n",
"Next step is to perform a 5-number summary for the numeric data. As discussed earlier the numeric data, in this case, are MSRP, Engine Size, Horsepower, Cylinders, Horsepower, MPG_City, MPG_Highway, Weight, Wheelbase, and Length. The five-number summary includes minimum, lower quartile, median, upper quartile, and the maximum values all these values can be obtained by using the describe method.\n",
"\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PpY10jNJMDYp",
"colab_type": "code",
"outputId": "518adad4-46e2-4d2b-dd63-79c1cf272fcb",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 294
}
},
"source": [
"df.describe()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
MSRP
\n",
"
EngineSize
\n",
"
Cylinders
\n",
"
Horsepower
\n",
"
MPG_City
\n",
"
MPG_Highway
\n",
"
Weight
\n",
"
Wheelbase
\n",
"
Length
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
324.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
29791.682099
\n",
"
3.102160
\n",
"
5.694444
\n",
"
209.777778
\n",
"
19.614198
\n",
"
26.583333
\n",
"
3541.876543
\n",
"
107.746914
\n",
"
186.259259
\n",
"
\n",
"
\n",
"
std
\n",
"
11024.164921
\n",
"
0.889513
\n",
"
1.308167
\n",
"
54.125642
\n",
"
2.914029
\n",
"
3.835128
\n",
"
564.457566
\n",
"
5.831814
\n",
"
11.569446
\n",
"
\n",
"
\n",
"
min
\n",
"
10280.000000
\n",
"
1.300000
\n",
"
4.000000
\n",
"
104.000000
\n",
"
13.000000
\n",
"
17.000000
\n",
"
2403.000000
\n",
"
95.000000
\n",
"
158.000000
\n",
"
\n",
"
\n",
"
25%
\n",
"
21436.250000
\n",
"
2.400000
\n",
"
4.000000
\n",
"
170.000000
\n",
"
18.000000
\n",
"
25.000000
\n",
"
3194.750000
\n",
"
104.000000
\n",
"
178.000000
\n",
"
\n",
"
\n",
"
50%
\n",
"
27635.000000
\n",
"
3.000000
\n",
"
6.000000
\n",
"
208.000000
\n",
"
19.000000
\n",
"
26.000000
\n",
"
3470.000000
\n",
"
107.000000
\n",
"
187.000000
\n",
"
\n",
"
\n",
"
75%
\n",
"
36907.500000
\n",
"
3.500000
\n",
"
6.000000
\n",
"
240.000000
\n",
"
21.000000
\n",
"
29.000000
\n",
"
3837.000000
\n",
"
112.000000
\n",
"
193.000000
\n",
"
\n",
"
\n",
"
max
\n",
"
65000.000000
\n",
"
5.700000
\n",
"
8.000000
\n",
"
350.000000
\n",
"
27.000000
\n",
"
36.000000
\n",
"
5270.000000
\n",
"
124.000000
\n",
"
215.000000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" MSRP EngineSize ... Wheelbase Length\n",
"count 324.000000 324.000000 ... 324.000000 324.000000\n",
"mean 29791.682099 3.102160 ... 107.746914 186.259259\n",
"std 11024.164921 0.889513 ... 5.831814 11.569446\n",
"min 10280.000000 1.300000 ... 95.000000 158.000000\n",
"25% 21436.250000 2.400000 ... 104.000000 178.000000\n",
"50% 27635.000000 3.000000 ... 107.000000 187.000000\n",
"75% 36907.500000 3.500000 ... 112.000000 193.000000\n",
"max 65000.000000 5.700000 ... 124.000000 215.000000\n",
"\n",
"[8 rows x 9 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OZ3Ym8dTanwE",
"colab_type": "text"
},
"source": [
"\n",
"\n",
"---\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YE6-1fMhyrvF",
"colab_type": "text"
},
"source": [
"**Plotting different features against one another.**\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7ZaDhbDaabBq",
"colab_type": "text"
},
"source": [
"**Histogram**\n",
"\n",
"Histogram refers to the frequency of occurrence of variables in an interval. Here, there are mainly 10 different car manufacturing companies, but it is often important to know who has the maximum number of cars. I'm just plotting histograms to find the total number of car manufacturers and this plot does not support my predictions or doesn't have relations with the price feature. Plotting a histogram is one of a trivial solution which lets us know the total number of different car manufacturers. From the histogram below it can be seen that Ford has almost several cars (20) followed by Chevrolet (19) and many more."
]
},
{
"cell_type": "code",
"metadata": {
"id": "4nvipLhkRHGa",
"colab_type": "code",
"outputId": "2062eb95-5c48-417d-9c14-af6d7d5d9820",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 431
}
},
"source": [
"# Plotting a Histogram\n",
"df.Make.value_counts().nlargest(40).plot(kind='bar', figsize=(10,5))\n",
"plt.title(\"Number of cars by make\")\n",
"plt.ylabel('Number of cars')\n",
"plt.xlabel('Make');"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"