In [1]:
# 1. Import libraries
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
In [2]:
# 2. Dataset
data = {
    'Brand': ['Toyota', 'Honda', 'BMW', 'Toyota', 'Honda', np.nan, 'Tata', 'Hyundai', 'Tata', 'Maruti Suzuki', 'Maruti Suzuki', np.nan, 'Hyundai', 'Toyota', 'Maruti Suzuki', 'Honda', 'Maruti Suzuki', 'Tata', 'BMW', 'Maruti Suzuki'],
    'Model': ['Corolla', 'Civic', 'X5', 'Yaris', np.nan, 'City', 'Magic Iris', 'Creta', 'Nexon', 'Eeco', 'Celerio', 'Vitara Brezza', 'i20', 'Fortuner', 'Alto', 'i10', 'Ignis', 'Punch', 'M5', 'Baleno'],
    'Year': [2015, 2018, 2020, 2017, 2019, 2016, 2014, 2018, 2021, 2015, 2017, 2020, 2019, 2017, 2013, 2010, 2018, 2019, 2018, 2019],
    'Mileage': [50000, 30000, np.nan, 40000, 35000, 45000, 30000, 45000, np.nan, 40000, 45000, 40000, 35000, 50000, 40000, 35000, 45000, 45000, 55000, 45000],
    'Price': [700000, 850000, 3500000, 600000, 900000, 650000, 350000, 800000, 850000, 600000, 600000, 900000, 650000, 1500000, 500000, 550000, 700000, 750000, 3000000, 650000]
}
df = pd.DataFrame(data)
print("Original DataFrame with Missing Values:\n", df)
Original DataFrame with Missing Values:
             Brand          Model  Year  Mileage    Price
0          Toyota        Corolla  2015  50000.0   700000
1           Honda          Civic  2018  30000.0   850000
2             BMW             X5  2020      NaN  3500000
3          Toyota          Yaris  2017  40000.0   600000
4           Honda            NaN  2019  35000.0   900000
5             NaN           City  2016  45000.0   650000
6            Tata     Magic Iris  2014  30000.0   350000
7         Hyundai          Creta  2018  45000.0   800000
8            Tata          Nexon  2021      NaN   850000
9   Maruti Suzuki           Eeco  2015  40000.0   600000
10  Maruti Suzuki        Celerio  2017  45000.0   600000
11            NaN  Vitara Brezza  2020  40000.0   900000
12        Hyundai            i20  2019  35000.0   650000
13         Toyota       Fortuner  2017  50000.0  1500000
14  Maruti Suzuki           Alto  2013  40000.0   500000
15          Honda            i10  2010  35000.0   550000
16  Maruti Suzuki          Ignis  2018  45000.0   700000
17           Tata          Punch  2019  45000.0   750000
18            BMW             M5  2018  55000.0  3000000
19  Maruti Suzuki         Baleno  2019  45000.0   650000
In [3]:
#3. Handle missing values
# For categorical columns, fill with the most frequent value
cat_imputer = SimpleImputer(strategy='most_frequent')
df[['Brand', 'Model']] = cat_imputer.fit_transform(df[['Brand', 'Model']])
In [4]:
print("after filling most frequent values:\n", df)
after filling most frequent values:
             Brand          Model  Year  Mileage    Price
0          Toyota        Corolla  2015  50000.0   700000
1           Honda          Civic  2018  30000.0   850000
2             BMW             X5  2020      NaN  3500000
3          Toyota          Yaris  2017  40000.0   600000
4           Honda           Alto  2019  35000.0   900000
5   Maruti Suzuki           City  2016  45000.0   650000
6            Tata     Magic Iris  2014  30000.0   350000
7         Hyundai          Creta  2018  45000.0   800000
8            Tata          Nexon  2021      NaN   850000
9   Maruti Suzuki           Eeco  2015  40000.0   600000
10  Maruti Suzuki        Celerio  2017  45000.0   600000
11  Maruti Suzuki  Vitara Brezza  2020  40000.0   900000
12        Hyundai            i20  2019  35000.0   650000
13         Toyota       Fortuner  2017  50000.0  1500000
14  Maruti Suzuki           Alto  2013  40000.0   500000
15          Honda            i10  2010  35000.0   550000
16  Maruti Suzuki          Ignis  2018  45000.0   700000
17           Tata          Punch  2019  45000.0   750000
18            BMW             M5  2018  55000.0  3000000
19  Maruti Suzuki         Baleno  2019  45000.0   650000
In [5]:
# For numerical columns, fill with mean
num_imputer = SimpleImputer(strategy='mean')
df[['Mileage']] = num_imputer.fit_transform(df[['Mileage']])

print("\nDataFrame after Handling Missing Values:\n", df)
DataFrame after Handling Missing Values:
             Brand          Model  Year       Mileage    Price
0          Toyota        Corolla  2015  50000.000000   700000
1           Honda          Civic  2018  30000.000000   850000
2             BMW             X5  2020  41666.666667  3500000
3          Toyota          Yaris  2017  40000.000000   600000
4           Honda           Alto  2019  35000.000000   900000
5   Maruti Suzuki           City  2016  45000.000000   650000
6            Tata     Magic Iris  2014  30000.000000   350000
7         Hyundai          Creta  2018  45000.000000   800000
8            Tata          Nexon  2021  41666.666667   850000
9   Maruti Suzuki           Eeco  2015  40000.000000   600000
10  Maruti Suzuki        Celerio  2017  45000.000000   600000
11  Maruti Suzuki  Vitara Brezza  2020  40000.000000   900000
12        Hyundai            i20  2019  35000.000000   650000
13         Toyota       Fortuner  2017  50000.000000  1500000
14  Maruti Suzuki           Alto  2013  40000.000000   500000
15          Honda            i10  2010  35000.000000   550000
16  Maruti Suzuki          Ignis  2018  45000.000000   700000
17           Tata          Punch  2019  45000.000000   750000
18            BMW             M5  2018  55000.000000  3000000
19  Maruti Suzuki         Baleno  2019  45000.000000   650000
In [6]:
# 4. Encode categorical variables using Label Encoding
label_enc = LabelEncoder()
df['Brand'] = label_enc.fit_transform(df['Brand'])
df['Model'] = label_enc.fit_transform(df['Model'])

print("\nDataFrame after Label Encoding:\n", df)
DataFrame after Label Encoding:
     Brand  Model  Year       Mileage    Price
0       5      5  2015  50000.000000   700000
1       1      4  2018  30000.000000   850000
2       0     15  2020  41666.666667  3500000
3       5     16  2017  40000.000000   600000
4       1      0  2019  35000.000000   900000
5       3      3  2016  45000.000000   650000
6       4     11  2014  30000.000000   350000
7       2      6  2018  45000.000000   800000
8       4     12  2021  41666.666667   850000
9       3      7  2015  40000.000000   600000
10      3      2  2017  45000.000000   600000
11      3     14  2020  40000.000000   900000
12      2     18  2019  35000.000000   650000
13      5      8  2017  50000.000000  1500000
14      3      0  2013  40000.000000   500000
15      1     17  2010  35000.000000   550000
16      3      9  2018  45000.000000   700000
17      4     13  2019  45000.000000   750000
18      0     10  2018  55000.000000  3000000
19      3      1  2019  45000.000000   650000
In [7]:
# 5. Split into features (X) and target (y)
X = df.drop('Price', axis = 1)
y = df['Price']
In [8]:
df
Out[8]:
Brand Model Year Mileage Price
0 5 5 2015 50000.000000 700000
1 1 4 2018 30000.000000 850000
2 0 15 2020 41666.666667 3500000
3 5 16 2017 40000.000000 600000
4 1 0 2019 35000.000000 900000
5 3 3 2016 45000.000000 650000
6 4 11 2014 30000.000000 350000
7 2 6 2018 45000.000000 800000
8 4 12 2021 41666.666667 850000
9 3 7 2015 40000.000000 600000
10 3 2 2017 45000.000000 600000
11 3 14 2020 40000.000000 900000
12 2 18 2019 35000.000000 650000
13 5 8 2017 50000.000000 1500000
14 3 0 2013 40000.000000 500000
15 1 17 2010 35000.000000 550000
16 3 9 2018 45000.000000 700000
17 4 13 2019 45000.000000 750000
18 0 10 2018 55000.000000 3000000
19 3 1 2019 45000.000000 650000
In [9]:
X
Out[9]:
Brand Model Year Mileage
0 5 5 2015 50000.000000
1 1 4 2018 30000.000000
2 0 15 2020 41666.666667
3 5 16 2017 40000.000000
4 1 0 2019 35000.000000
5 3 3 2016 45000.000000
6 4 11 2014 30000.000000
7 2 6 2018 45000.000000
8 4 12 2021 41666.666667
9 3 7 2015 40000.000000
10 3 2 2017 45000.000000
11 3 14 2020 40000.000000
12 2 18 2019 35000.000000
13 5 8 2017 50000.000000
14 3 0 2013 40000.000000
15 1 17 2010 35000.000000
16 3 9 2018 45000.000000
17 4 13 2019 45000.000000
18 0 10 2018 55000.000000
19 3 1 2019 45000.000000
In [10]:
y
Out[10]:
0      700000
1      850000
2     3500000
3      600000
4      900000
5      650000
6      350000
7      800000
8      850000
9      600000
10     600000
11     900000
12     650000
13    1500000
14     500000
15     550000
16     700000
17     750000
18    3000000
19     650000
Name: Price, dtype: int64
In [11]:
# 6. Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)
In [12]:
# 7. Choose a simple regression algorithm
model = LinearRegression()
In [13]:
# 8. Train the model
model.fit(X_train, y_train)
Out[13]:
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Parameters
fit_intercept  True
copy_X  True
tol  1e-06
n_jobs  None
positive  False
In [14]:
X_train
Out[14]:
Brand Model Year Mileage
8 4 12 2021 41666.666667
5 3 3 2016 45000.000000
11 3 14 2020 40000.000000
3 5 16 2017 40000.000000
18 0 10 2018 55000.000000
16 3 9 2018 45000.000000
13 5 8 2017 50000.000000
2 0 15 2020 41666.666667
9 3 7 2015 40000.000000
19 3 1 2019 45000.000000
4 1 0 2019 35000.000000
12 2 18 2019 35000.000000
7 2 6 2018 45000.000000
10 3 2 2017 45000.000000
14 3 0 2013 40000.000000
6 4 11 2014 30000.000000
In [15]:
X_test
Out[15]:
Brand Model Year Mileage
0 5 5 2015 50000.0
17 4 13 2019 45000.0
15 1 17 2010 35000.0
1 1 4 2018 30000.0
In [16]:
y_train
Out[16]:
8      850000
5      650000
11     900000
3      600000
18    3000000
16     700000
13    1500000
2     3500000
9      600000
19     650000
4      900000
12     650000
7      800000
10     600000
14     500000
6      350000
Name: Price, dtype: int64
In [17]:
y_test
Out[17]:
0     700000
17    750000
15    550000
1     850000
Name: Price, dtype: int64
In [18]:
#9. Predict on test data
y_pred = model.predict(X_test)
In [19]:
#10. Evaluate the model
mse = mean_squared_error(y_test, y_pred)
print("\nMean Squared Error:", mse)
print("Predicted Prices:", y_pred)
Mean Squared Error: 548010972257.59863
Predicted Prices: [ 603798.10342287 1049748.02478854 1970651.00702796  576703.60047896]