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