Python数据分析之房价预测

学习数据分析的第一次练手项目。从网上爬取关于房价的相关数据属性来分析房价,并且基于一些属性来预测房价,使用的是网格搜索算法。相关的数据文件和完整代码可以从文末获取。

GridSearchCV介绍:
  能够系统地遍历多种参数组合,通过交叉验证确定最佳效果参数;他能够自动调参,只要把参数输进去,就能给出最优化的结果和参数,适合于小数据集。
一、需要的相关库:
  (1)numpy (2)pandas (3)matplotlib (4)seaborn (5)scikit-learn
以上所有库都能通过 pip下载,在用之前要先去看看官方API,英文看不懂可以去菜鸟教程看看。
二、代码部分:
(一)提取所需属性保存到CSV中
  将房价数据文件中的price、bedrooms、sqft_living、grade这几列提取到另一个新的CSV中保存,方便后续的进行:

plt.style.use("fivethirtyeight")
sns.set_style({'font.sans_serif':['simhei','Arial']}) 	#转换字体

#提取所需数据保存到CSV中
def get_data():
	with open('house_price_data.csv','rt') as f1:
		f = open('./house_price.csv', 'wt', encoding='utf-8',newline='')
		df = pd.read_csv('./house_price_data.csv', usecols=['price', 'bedrooms', 'sqft_living', 'grade'])
		df.to_csv('./house_price.csv')
		f.close()
	f1.close()
(二)数据分析并实现可视化
  绘制属性之间的可视化图表,通过图表直观展示属性值对于房价的影响程度。在绘制之前先看数据完整程度,是否需要进行特征工程将缺失值、异常值数据处理好。(tip:这里没有进行特征工程,会影响后面的建模预测)
def data_analyse():
	df=pd.read_csv('./house_price.csv')
	#df.info()	#检查数据缺失值情况
	
	#房价与室内面积关系的可视化
	f,[ax1,ax2]=plt.subplots(1,2,figsize=(20,5))
	sns.distplot(df['sqft_living'],bins=20,ax=ax1,color='r')
	sns.kdeplot(df['sqft_living'],shade=True,ax=ax1)
	sns.regplot(x='sqft_living',y='price',data=df,ax=ax2)
	plt.show()
	
	#房价与卧室个数关系的可视化
	f,[ax1,ax2]=plt.subplots(1,2,figsize=(20,8))
	sns.barplot(x='bedrooms',y='price',data=df,ax=ax1)
	
	#房价与grade关系的可视化图
	sns.barplot(x='grade',y='price',data=df,ax=ax1)
	plt.show()
	
	#绘制多变量之间的对比关系图
	sns.pairplot(df,vars=('price','sqft_living','grade','bedrooms'))
	plt.show()
	

绘制出来的图表:

居室面积与房价的关系

图1 居室面积与房价的关系图

在这里插入图片描述

图2 卧室个数、等级与房价的关系图

在这里插入图片描述

图3 各属性关系散点图
三、数据划分
  划分数据为两部分,分别为训练数据和测试数据,可以自己控制训练数据多少,这里训练数据为70%,剩余30%用于测试。

data=pd.read_csv('./house_price.csv')
columns=['bedrooms','sqft_living','grade','price']
data=pd.DataFrame(data,columns=columns)			#重新摆放位置
prices=data['price']
features=data.drop('price',axis=1)
features=np.array(features)
prices=np.array(prices)
features_train,features_test,prices_train,prices_test=train_test_split(features,prices,test_size=0.3,random_state=0)

四、建立模型计算R2分数
  用网格搜索算法建立模型,通过交叉验证对参数空间进行求解,寻找最佳的参数。

#建立模型
def fit_model(X,y):
	cross_validator=KFold(n_splits=10,shuffle=True)
	regressor=DecisionTreeRegressor()
	params={'max_depth':range(1,11)}
	scoring_fnc=make_scorer(performance_metric)
	grid=GridSearchCV(estimator=regressor,param_grid=params,scoring=scoring_fnc,cv=cross_validator)
	grid=grid.fit(X,y)
	return grid.best_estimator_

#计算R2分数
def performance_metric(y_true,y_predict):
	score=r2_score(y_true,y_predict)
	return score

五、获取最优模型并预测房价
  获取到的score仅为0.61,准确度不是很高,可能原因是没有对缺失异常值进行处理,没有进行调参。

#获得最优模型
optimal_reg=fit_model(features_train,prices_train)
print("最理想模型的参数‘max_depth’是{}".format(optimal_reg.get_params()['max_depth']))
predicted_value=optimal_reg.predict(features_test)
r2=performance_metric(prices_test,predicted_value)
print("最优模型在测试数据上R^2分数{:,.2f}".format(r2))

#房价预测
client_data=[[3,1200,8],[4,720,8],[5,2310,7]]
predicted_price=optimal_reg.predict(client_data)
for i,price in enumerate(predicted_price):
	print("第{}位客户,根据您输入的信息预测到的房价为:¥{:,.2f}".format(i+1,price))
	

最后显示的结果为:
在这里插入图片描述
所需CSV数据及完整代码地址:https://github.com/songtown/data_Analysis

  • 19
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
包含文件:Python代码+设计报告 本文主要分析影响房价的因素,数据来源为链家网,机器学习模型的使用中,采用了三种线性模型,一种非线性模型,最后得出的结论是房子的大小,房子的位置,房子的建造年份以及房子的高度对房价影响较大。 目录 房价影响因素分析 1 一、问题描述 1 二、数据收集及处理 2 (1)数据源选择 2 安居客房价信息 2 搜房网房价信息 2 链家网房价信息 2 (2)数据收集 2 (3)数据处理 2 三、采用的模型及原因 3 (1)线性回归模型 3 (2)神经网络 3 (3)支持向量机 3 四、使用的python机器学习库 3 五、建模过程 4 (1)数据特征分析 4 (2)调参 4 (3)结果分析及模型对比 4 六、非线性模型建模 5 (1)非线性决策树 5 (2)结论 5 七、房价查询界面 5 八、改进措施 6 (1)收集更多数据 6 数据集在20000条以下时的训练学习曲线 7 数据集在40000条以下时的训练学习曲线 7 (2)寻找更多特征 8 附录 8 数据采集 9 数据训练 13 一、问题描述 现在房价居高不下,特别是上海等一线城市,房价更是高的离谱,那么在决定一个房子的价格中,哪些因素占了主要的地位,如何让想买房的人快速获取大概的房价信息。那么本文介绍的就是如何用机器学习去训练上海房价信息并生成模型然后进行分析的过程。 详细介绍参考博客:https://blog.csdn.net/sheziqiong/article/details/122286264

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值