使用线性回归、LGBM对二手车价格进行预测
目录
说明
本项目包含
1.数据处理
2.数据可视化
3.构建模型预测二手车价格
完整代码及数据见文末,可在线运行,也可下载
数据导入、查看和清洗
数据说明
column 列名
index 序号
Name 汽车的品牌和型号。
Location 该车正在销售或可购买的地点。
Year 车型的年份或版本。
Kilometers_Driven 前任车主驾驶该车的总公里数,单位为KM。
Fuel_Type 汽车使用的燃料类型(汽油/柴油/电动/CNG/LPG)。
Transmission 汽车使用的传动装置的类型。
Owner_Type 车主是否为第一手、第二手或其他。
Mileage 汽车公司提供的标准里程,单位是kmpl或km/kg。
Engine 发动机的排量,单位是cc。
Power 发动机的最大功率,单位是bhp。
Seats 汽车中的座位数。
New_Price 同一型号的新车的价格。
Price 二手车的价格,单位是印度卢比。( train.csv)
导入训练集
import pandas as pd
df_train = pd.read_csv('/home/mw/input/data6802/train-data.csv')
df_train.drop('Unnamed: 0',axis=1,inplace=True)
df_train.head()
导入测试集
df_test = pd.read_csv('/home/mw/input/data6802/test-data.csv')
df_test.drop('Unnamed: 0',axis=1,inplace=True)
df_test.head()
合并数据
先合并数据,方便清洗
df = df_train.append(df_test)
df.head()
查看数据整体情况
查看数据缺失请况,可以看出,新车价格大面积缺失,缺失了86%,其余特征缺失率都较低
df.info()
<class ‘pandas.core.frame.DataFrame’>
Int64Index: 7253 entries, 0 to 1233
Data columns (total 13 columns):
Engine 7207 non-null object
Fuel_Type 7253 non-null object
Kilometers_Driven 7253 non-null int64
Location 7253 non-null object
Mileage 7251 non-null object
Name 7253 non-null object
New_Price 1006 non-null object
Owner_Type 7253 non-null object
Power 7207 non-null object
Price 6019 non-null float64
Seats 7200 non-null float64
Transmission 7253 non-null object
Year 7253 non-null int64
dtypes: float64(2), int64(2), object(9)
memory usage: 793.3+ KB
all_data_na = (df.isnull().sum()/len(df))*100
all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)
missing_data = pd.DataFrame({
'缺失率' : all_data_na})
missing_data
缺失率
New_Price 86.129877
Price 17.013650
Seats 0.730732
Power 0.634220
Engine 0.634220
Mileage 0.027575
发现有一个重复数据,我们后面需要剔除掉
df.duplicated().sum()
处理数据
#去除重复值
df.drop_duplicates(inplace=True)
#删去缺失价格列和Name列
df.drop("New_Price", axis=1, inplace=True)
df.drop("Name", axis=1, inplace=True)
df.head()
检查并处理缺失变量
Seats、Power、Engine、Mileage
含义为:
Mileage 汽车公司提供的标准里程,单位是kmpl或km/kg。
Engine 发动机的排量,单位是cc。
Power 发动机的最大功率,单位是bhp。
Seats 汽车中的座位数。
不着急做填充,先挨个检查变量,然后进行处理
首先是车座
df['Seats'].value_counts()
5.0 6046
7.0 796
8.0 170
4.0 119
6.0 38
2.0 18
10.0 8
9.0 3
0.0 1
Name: Seats, dtype: int64
车座不可能为0,我们将其删除
df.drop(df[df['Seats']==0]