首先看数据源:
1、根据已给出的数据,将户型和建筑面积作为参考数据进行房价的预测,首先对户型和房价数据进行处理,再分析预测。
# 导入数据统计模块 import pandas # 导入回归函数 from sklearn.svm import LinearSVR # 读取csv数据文件 data = pandas.read_csv('F:\python入门\python编程锦囊\Code(实例源码及使用说明)\Code(实例源码及使用说明)\Code(实例源码及使用说明)\09\11\demo\data.csv') # 将索引列删除 del data['Unnamed: 0'] # 删除data数据中的所有空值 data.dropna(axis=0, how='any', inplace=True) # 将总价“万”去掉 data['总价'] = data['总价'].map(lambda z: z.replace('万', '')) # 将房子总价转换为浮点类型 data['总价'] = data['总价'].astype(float) # 将建筑面价“平米”去掉 data['建筑面积'] = data['建筑面积'].map(lambda p: p.replace('平米', '')) # 将建筑面积转换为浮点类型 data['建筑面积'] = data['建筑面积'].astype(float) # 拷贝数据 data_copy = data.copy() #显示‘户型’、‘建筑面积’的头部信息,前五行 print('显示‘户型’、‘建筑面积’的头部信息,前五行: ',data_copy[['户型', '建筑面积']].head()) #处理户型字段 data_copy[['室', '厅', '卫']] = data_copy['户型'].str.extract('(d+)室(d+)厅(d+)卫') # 将房子室转换为浮点类型 data_copy['室'] = data_copy['室'].astype(float) # 将房子厅转换为浮点类型 data_copy['厅'] = data_copy['厅'].astype(float) # 将房子卫转换为浮点类型 data_copy['卫'] = data_copy['卫'].astype(float) # 打印“室”、“厅”、“卫”数据 print('打印处理后的“室”、“厅”、“卫”数据: ',data_copy[['室','厅','卫']].head()) #将没有用的字段删除 del data_copy['小区名字'] del data_copy['户型'] del data_copy['朝向'] del data_copy['楼层'] del data_copy['装修'] del data_copy['区域'] del data_copy['单价'] # 删除data数据中的所有空值 data_copy.dropna(axis=0, how='any', inplace=True) # 获取“建筑面积”小于300平米的房子信息 new_data = data_copy[data_copy['建筑面积'] < 300].reset_index(drop=True) print('处理后的头部信息: ',new_data.head()) #下面开始训练回归模型进行未知房价的预测 #添加自定义预测数据 new_data.loc[2505] = [None, 88.0, 2.0, 1.0, 1.0] new_data.loc[2506] = [None, 136.0, 3.0, 2.0, 2.0] #训练集为现有数据 data_train=new_data.loc[0:2504] # 自变量参考列 x_list = ['建筑面积', '室', '厅', '卫'] # 获取平均值 data_mean = data_train.mean() # 获取标准偏差 data_std = data_train.std() # 数据标准化 data_train = (data_train - data_mean) / data_std # 特征数据 x_train = data_train[x_list].values # 目标数据,总价 y_train = data_train['总价'].values # 创建LinearSVR()对象 linearsvr = LinearSVR(C=0.1) # 训练模型 linearsvr.fit(x_train, y_train) # 标准化特征数据 x = ((new_data[x_list] - data_mean[x_list]) / data_std[x_list]).values # 添加预测房价的信息列 new_data[u'y_pred'] = linearsvr.predict(x) * data_std['总价'] + data_mean['总价'] print('真实值与预测值分别为: ', new_data[['总价', 'y_pred']])
结果:
显示‘户型’、‘建筑面积’的头部信息,前五行: 户型 建筑面积 0 2室2厅1卫 89.0 1 3室2厅1卫 143.0 2 1室1厅1卫 43.3 3 2室1厅1卫 57.0 4 3室2厅2卫 160.8 打印处理后的“室”、“厅”、“卫”数据: 室 厅 卫 0 2.0 2.0 1.0 1 3.0 2.0 1.0 2 1.0 1.0 1.0 3 2.0 1.0 1.0 4 3.0 2.0 2.0 处理后的头部信息: 总价 建筑面积 室 厅 卫 0 89.0 89.0 2.0 2.0 1.0 1 99.8 143.0 3.0 2.0 1.0 2 32.0 43.3 1.0 1.0 1.0 3 51.5 57.0 2.0 1.0 1.0 4 210.0 160.8 3.0 2.0 2.0 真实值与预测值分别为: 总价 y_pred 0 89.0 84.904815 1 99.8 143.389150 2 32.0 33.281956 3 51.5 51.525307 4 210.0 178.388806 ... ... ... 2502 75.0 105.874063 2503 100.0 105.604458 2504 48.8 56.945819 2505 NaN 82.479910 2506 NaN 153.625123 [2507 rows x 2 columns]
从打印结果中可看出,总价一列为真实数据,而右侧的y_pred为房价的预测数据,其中编号为2505和2506为我们模拟的未知数据,所以他们对应的总价列数值为空,而右侧的数据是根据已知的参考数据预测而来的。