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