python根據房屋信息預測未知房價


首先看數據源:

 

 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為我們模擬的未知數據,所以他們對應的總價列數值為空,而右側的數據是根據已知的參考數據預測而來的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM