xiao02fang

首先看数据源:

 

 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为我们模拟的未知数据,所以他们对应的总价列数值为空,而右侧的数据是根据已知的参考数据预测而来的。

分类:

技术点:

相关文章: