机器学习 房产价格预测

337 阅读2分钟

github地址 : github.com/yangjinghit…

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data1 = pd.read_csv('lianjia1.csv', encoding='gbk')
data2 = pd.read_csv('lianjia2.csv', encoding='gbk')
data3 = pd.read_csv('lianjia3.csv', encoding='utf-8')
data4 = pd.read_csv('lianjia4.csv', encoding='utf-8')
data5 = pd.read_csv('lianjia5.csv', encoding='utf-8')
data6 = pd.read_csv('lianjia6.csv', encoding='utf-8')
data7 = pd.read_csv('lianjia7.csv', encoding='utf-8')
data = pd.concat([data1, data2, data3, data4, data5,data6,data7])
len(data)
162227
data = data.dropna()
len(data)
144531
data.cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x: x/10000), 2)
data.cjshijian = pd.to_datetime(data.cjshijian.map(lambda x :x[5:]))
data = data[data.cjxiaoqu.str.contains('远洋山水')]
data = data.sort_values(by='cjshijian')
data.set_index('cjshijian', inplace=True)
data = data['2012':]
#data.set_index('cjshijian',inplace=True)['2012':]
data = data[data.cjdanjia > 1]
data.head(3)
cjtaoshu mendian cjzongjia zhiwei haoping cjdanjia cjxiaoqu xingming cjzhouqi biaoqian cjlouceng congyenianxian bankuai
cjshijian
2012-01-07 32 远洋山水中街店 180.0 店经理 99% 122 2.54 远洋山水 1室1厅 70平 卢德强 28 房东信赖;销售达人;带看活跃;海外顾问 西/中楼层/26层 5年以上 鲁谷
2012-01-07 32 远洋山水中街店 180.0 店经理 99% 122 2.54 远洋山水 1室1厅 70平 卢德强 28 房东信赖;销售达人;带看活跃;海外顾问 西/中楼层/26层 5年以上 鲁谷
2012-02-13 42 远洋山水中街店 235.0 店经理 95% 134 2.22 远洋山水 2室2厅 105平 乔璐璐 72 房东信赖;销售达人 南/中楼层/24层 5年以上 鲁谷
data = data.assign(time = (data.index - pd.to_datetime('2012-01-01')).days)
data = data[['time', 'cjdanjia']]
data.head(5)
time cjdanjia
cjshijian
2012-01-07 6 2.54
2012-01-07 6 2.54
2012-02-13 43 2.22
2012-02-15 45 2.06
2012-02-19 49 2.23
plt.scatter(data.time, data.cjdanjia)
<matplotlib.collections.PathCollection at 0x119fcb7f0>

X = data.time
Y = data.cjdanjia
from sklearn.linear_model import LinearRegression

model = LinearRegression() model.fit(pd.DataFrame(X), Y)

model = LinearRegression() 
model.fit(pd.DataFrame(X), Y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
x = [[0], [1800]]
y = model.predict(pd.DataFrame(x))
plt.figure(figsize = (10, 8))
plt.plot(x, y)
plt.scatter(data.time, data.cjdanjia)
<matplotlib.collections.PathCollection at 0x12068e400>

model2 = LinearRegression()
model2.fit(pd.DataFrame({'x2': X*X, 'x1':X}), Y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
x = np.linspace(0, 1800)
y = model2.predict(pd.DataFrame({'x2': x*x, 'x1':x}))
plt.figure(figsize=(10,8))
plt.plot(x,y,color='r')
plt.scatter(data.time, data.cjdanjia)
<matplotlib.collections.PathCollection at 0x10f357198>

from sklearn.preprocessing import PolynomialFeatures
q3 = PolynomialFeatures(degree=3)
X3 = q3.fit_transform(pd.DataFrame(X))
model3 = LinearRegression()
model3.fit(X3, Y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
x = np.linspace(0, 1800)
x_ = q3.fit_transform(pd.DataFrame(x))
y = model3.predict(x_)
plt.figure(figsize=(10,8))
plt.plot(x,y,color='r')
plt.scatter(data.time, data.cjdanjia)
<matplotlib.collections.PathCollection at 0x11002f860>