首页 > 技术文章 > python根据房屋信息预测未知房价

xiao02fang 2020-06-10 23:04 原文

首先看数据源:

 

 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('显示‘户型’、‘建筑面积’的头部信息,前五行:\n',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('打印处理后的“室”、“厅”、“卫”数据:\n',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('处理后的头部信息:\n',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('真实值与预测值分别为:\n', 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为我们模拟的未知数据,所以他们对应的总价列数值为空,而右侧的数据是根据已知的参考数据预测而来的。

推荐阅读