用python-sklearn做广州房价预测——以此为例说明如何使用python做简单的数据分析
0 数据
广州市二手房价数据
大概有500条广州市二手房价数据
python数据导入
import numpy as np
import pandas as p
#画图包导入
import matplotlib.pyplot as plt
plt.style.use(style="ggplot")
import missingno as msno
import seaborn as snplt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei',style="whitegrid",palette="binary") # 解决Seaborn中文显示问题#读取数据
train_names = ["总价(万元)","均价(元/平方米)","房间数","大厅数","所在楼层","总楼层","朝向","房屋结构","装修","面积(平方米)","建成时间","楼龄","所在区域"]
train = pd.read_csv("data_guangzhou.csv",names=train_names,encoding='gb2312')
#train = train.drop(0)
#train = train.dropna()#直接读取的数据是文本类型,改为数字类型
train['总价(万元)'] = pd.to_numeric(train['总价(万元)'])
train['均价(元/平方米)'] = pd.to_numeric(train['均价(元/平方米)'])
train['面积(平方米)'] = pd.to_numeric(train['面积(平方米)'])
train['房间数'] = pd.to_numeric(train['房间数'])
train['大厅数'] = pd.to_numeric(train['大厅数'])
train['总楼层'] = pd.to_numeric(train['总楼层'])
train['楼龄'] = pd.to_numeric(train['楼龄'])
1 数据分析
房价分布
plt.figure(figsize = (10,5))
print("skew: ",train["总价(万元)"].skew())
sns.distplot(train["总价(万元)"],color="b")
plt.savefig('总价(万元).png', dpi=200,bbox_inches = 'tight')#指定分辨率
plt.show()
#经过log变换之后的价格分布
target = np.log(train["总价(万元)"])
target=target.rename("总价(万元)的对数")
plt.figure(figsize = (10,5))
sns.distplot(target,color="b")#利用seaborn库绘制
plt.savefig('总价(万元)-log.png', dpi=200,bbox_inches = 'tight')#指定分辨率在这里插入代码片
不同因素对房价的影响
g = sns.barplot(x="所在区域",y="总价(万元)",data=train,color="b",order = ["天河","荔湾","越秀","黄埔","海珠","白云","番禺","南沙","增城","花都","从化"])
plt.savefig('所在区域-总价.png', dpi=200,bbox_inches = 'tight')#指定分辨率
plt.show()
plt.figure()
fig1 = sns.jointplot(x="面积(平方米)",y="总价(万元)",data=train,color="b")
plt.savefig('面积-总价.png', dpi=200,bbox_inches = 'tight')#指定分辨率
plt.figure()
fig1 = sns.barplot(x="房屋结构",y="总价(万元)",data=train,color="b")
plt.savefig('房屋结构-总价(万元).png', dpi=200,bbox_inches = 'tight')#指定分辨率
sns.barplot(x="装修",y="均价(元/平方米)",data=train,color="b")
plt.savefig('装修-总价.png', dpi=200,bbox_inches = 'tight')#指定分辨率
2 数据变换
有一些因素无法直接作为输入变量输入到数学模型中,需要进行编码。如装修情况、房屋结构等。
使用独热编码对这些因素进行处理。编码前,楼层为“中”、“低”、“高”的文字描述,编码后:
朝向-东西南北:
东南朝向:东1南1西0北0
独热编码的代码:
floor = pd.get_dummies(train["所在楼层"])
structure = pd.get_dummies(train["房屋结构"])
fitment = pd.get_dummies(train["装修"])
location = pd.get_dummies(train["所在区域"]toward = pd.DataFrame(np.zeros((446,4)),columns=["东","西","南","北"])
i = 0
for index,row in train.iterrows():# print(row["朝向"]) if "东" in row["朝向"]:toward.loc[i,"东"] = 1if "西" in row["朝向"]:toward.loc[i,"西"] = 1if "南" in row["朝向"]:toward.loc[i,"南"] = 1if "北" in row["朝向"]:toward.loc[i,"北"] = 1i = i + 1test = pd.concat([train["总价(万元)"],train["房间数"],train["大厅数"], floor,train["总楼层"],toward,structure,fitment,train["面积(平方米)"],train["楼龄"],location],axis=1)
3 相关性分析
plt.figure()
corrMat = test[test.columns].corr()
mask = np.array(corrMat)
mask[np.tril_indices_from(mask)] = False
plt.subplots(figsize=(20,10))
plt.xticks(rotation=60)#设置刻度标签角度
fig1 = sns.heatmap(corrMat, mask=mask,vmax=.8, square=True,annot=True)
plt.savefig('相关性矩阵.png', dpi=200,bbox_inches = 'tight')#指定分辨率print(corrMat["总价(万元)"].sort_values(ascending=False))
各因素和房价的皮尔逊相关系数:
fig1 = corrMat["总价(万元)"][1:31].plot(kind="barh",color='b',fontsize=12,figsize=(10,8))
plt.savefig('相关性.png', dpi=200,bbox_inches = 'tight')#指定分辨率
4 房价预测模型
from sklearn import preprocessing
from sklearn import linear_model, svm, gaussian_process
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
#from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPRegressor
import warnings
warnings.filterwarnings('ignore')cols = test.columns[1:31]
x = test.loc[:,cols].values
y = test['总价(万元)'].values
x_scaled = preprocessing.MinMaxScaler().fit_transform(x)
y_scaled = preprocessing.MinMaxScaler().fit_transform(y.reshape(-1,1))
X_train,X_test, y_train, y_test = train_test_split(x_scaled, y_scaled, test_size=0.02, random_state=42)clfs = {'支持向量机':svm.SVR(), '随机森林':RandomForestRegressor(),'贝叶斯岭回归':linear_model.BayesianRidge(),}
for clf in clfs:try:clfs[clf].fit(X_train, y_train)y_pred = clfs[clf].predict(X_test)print(clf + " cost:" + str(np.sum(abs((y_pred-y_test.reshape(len(y_pred)))/y_test.reshape(len(y_pred))))/len(y_pred)))except Exception as e:print(clf + " Error:")print(str(e))
模型训练结束之后,看在训练集上的结果
i = 1
for clf in clfs:y_pred = clfs[clf].predict(X_test)plt.subplot(3,1,i)plt.subplots_adjust(hspace=0.8,wspace=0.5)plt.plot(y_test.reshape(len(y_pred)),color = "r",linestyle='-',marker = '+',markersize = 2,linewidth=0.5)plt.plot(clfs[clf].predict(X_test),color='b',linestyle='-',marker = 'o',markersize = 2,linewidth=0.5)i = i + 1plt.title(clf + " cost:" + (str(np.sum(abs((y_pred-y_test.reshape(len(y_pred)))/y_test.reshape(len(y_pred))))/len(y_pred)))[0:4])
fig1.set_xticklabels(fig1.get_xticklabels(), rotation=60)
plt.savefig('结果-1.png', dpi=200,bbox_inches = 'tight')#指定分辨率
随机森林模型误差最小。
5 总结
最重要的不是最后训练模型,而是在训练模型之前做的数据分析工作。对不同因素进行分析,特征处理,做相关性分析等。
请给我点一个赞~
用python-sklearn做广州房价预测——以此为例说明如何使用python做简单的数据分析相关推荐
- 广州的房价是我遥不可及的梦,今天就用Python来做一个房价预测小工具
今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含EDA.特征 ...
- 广州的房价是我遥不可及的梦,今天就用Python来做一个房价预测小工具。
哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...
- 用Python做一个房价预测小工具!
哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...
- 用Python做一个房价预测小工具
哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...
- 波士顿房价预测python决策树_波士顿房价预测 - 最简单入门机器学习 - Jupyter
机器学习入门项目分享 - 波士顿房价预测 该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键.基本的步骤,能够对机器学习基本流程有一个最清晰 ...
- Python+sklearn使用线性回归算法预测儿童身高
问题描述:一个人的身高除了随年龄变大而增长之外,在一定程度上还受到遗传和饮食以及其他因素的影响,本文代码中假定受年龄.性别.父母身高.祖父母身高和外祖父母身高共同影响,并假定大致符合线性关系. imp ...
- python使用线性回归实现房价预测
一.单变量房价预测 采用一元线性回归实现单变量房价预测.通过房屋面积与房价建立线性关系,通过梯度下降进行训练,拟合权重和偏置参数,使用训练到的参数进行房价预测. 1.房屋面积与房价数据 32.5023 ...
- python sklearn 回归案例:车流量预测
文件下载地址: 链接:https://pan.baidu.com/s/1e68J9gubRGc9WkRDPh97tQ 提取码:uxwj """回归案例 车流量预测根据已有 ...
- 波士顿房价预测python代码_Python之机器学习-波斯顿房价预测
AI 人工智能 Python之机器学习-波斯顿房价预测 波士顿房价预测 导入模块 import pandas as pd import numpy as np import matplotlib.py ...
最新文章
- java url map_java url转map ,map转string
- UA MATH567 高维统计专题3 含L1-norm的凸优化6 Stochastic Gradient Descent简介
- tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)
- C++非递归合并排序的通用实现算法(附完整源码)
- C++ 系列:extern
- Exchange2007 申请安装证书
- 这一次,终于弄懂了协变和逆变
- js 中断函数执行_js如何中断递归函数
- python中字典dict的方法fromkeys
- pg_stat wait timeout
- Adobe Flash Player30.0.0.113离线安装包
- Modbus 与 RS485 的区别与联系
- python登录代码_python自动登录126等邮箱的代码
- 【小滴课堂】独孤求败-小滴云架构大课十八式
- java如何创建长连接_Java如何实现长连接
- JeecgBoot 3.4.3-GA 版本发布,开源免费的企业级低代码平台
- UMG笔记——关于UMG 的一些基础知识和动画的实现
- 联想笔记本电脑无线网卡无法开启
- 阿里云分析型数据库MySQL版(AnalyticDB)测试初体验
- stm32Cubemx实用篇(三):DAC电压输出和ADC电压检测以及内部温度传感器测温
热门文章
- 大力出奇迹,GPU 加速 TiDB | TiDB Hackathon 2020 优秀项目分享
- 响应式布局设置--@media only screen and (转载)
- 抗TNF治疗改变JIA患者PBMC基因表达谱,可预测疗效
- 数组随机取数(大乐透机选投注)
- 百度音乐api+c语言,百度音乐接口api - osc_d87glhzv的个人空间 - OSCHINA - 中文开源技术交流社区...
- Java Swing实用小工具开发
- html页面打印成a4的尺寸,我如何将我的html div调整为A4打印页面中的整页?
- 程序设计与算法(三)期末考试之013:编程填空:三生三世
- cf12月9日服务器维护时间,CF手游12月9日版本周年庆版本更新公告 周年庆新版本即将上线...
- c语言书面作业,巢湖学院2011级网络工程1,2班C语言书面作业(江家宝)版