python数据挖掘实战项目——北京二手房房价分析个人文章

首先我们要对数据进行分析,可分为以下几个主要步骤:

这里我们重点要讲的是数据可视化分析,即对一些重要对特征逐个画图观察。

打开表格:

我们看到上述数据有11个特征变量,1个目标变量Price。11个特征分别为:DirectionDistrictElevatorFloorGardenIdLayoutRegionRenovationSizeYear

我们分别对Elevator,Floor,Layout,Region,Renovation,Size,Year这7个特征进行可视化分析。

代码:

#Elevator特征分析miss_value=len(df.loc[(df['Elevator'].isnull()),'Elevator'])print('Elevator缺失值个数为:'+str(miss_value))#移除表格中可能存在的错误的值df['Elevator']=df.loc[(df['Elevator']=='有电梯')|(df['Elevator']=='无电梯'),'Elevator']#以楼层大于6的有电梯,小于等于6层没有电梯为标准,填补缺失值df.loc[(df['Floor']>6)&(df['Elevator'].isnull()),'Elevator']=='有电梯'df.loc[(df['Floor']<=6)&(df['Elevator'].isnull()),'Elevator']=='无电梯'f,[ax1,ax2]=plt.subplots(1,2,figsize=(20,10))sns.countplot(df['Elevator'],ax=ax1)ax1.set_title('有无电梯数量对比')ax1.set_xlabel('是否有电梯')ax1.set_ylabel('数量')sns.barplot(x='Elevator',y='Price',data=df,ax=ax2)ax2.set_title('有无电梯价格对比')ax2.set_xlabel('是否有电梯')ax2.set_ylabel('价格')plt.show()执行结果:

分析目的:分析有无电梯两种二手房对数量和价格。

使用方法:采用seaborn完成可视化。

观察结果:我们发现Elevator特征是有大量缺失值。一般有大量缺失值时,需要根据实际情况考虑。常用的方法有平均值/中位数填补法,直接移除,或根据其他特征建模预测等。

这里我们用填补法。由于有无电梯不是数值,不存在平均值和中位数,这里根据楼层(Floor)断有无电梯,一般的楼层大于6的都有电梯,而小于等于6层的一般都没有电梯。

在填补缺失值后继续观察,有电梯的二手房数量更多,且房价较高。

#Floor特征分析f,ax1=plt.subplots(figsize=(20,5))sns.countplot(df['Floor'],ax=ax1)ax1.set_title('各楼层二手房数量',fontsize=15)ax1.set_xlabel('楼层')ax1.set_ylabel('数量')plt.show()执行结果:分析目的:分析不同的楼层二手房数量。

观察结果:其中6层的二手房数量最多,但是单独的楼层特征没有什么意义,因为每个小区住房的总楼层数都不一样,我们需要知道楼层的相对高度。

此外,楼层与文化也有很重要的联系,比如在中国文化有七上八下,七层可能受欢迎等。一般来说中间楼层比较受欢迎,价格也高,底层和顶层受欢迎度较低,价格也相对较低。

楼层是一个非常复杂的特征,对房价影响也比较大。

#Layout特征分析f,ax1=plt.subplots(figsize=(20,20))sns.countplot(y='Layout',data=df,ax=ax1)ax1.set_title('房屋户型',fontsize=15)ax1.set_xlabel('数量')ax1.set_ylabel('户型')plt.show()执行结果:

分析目的:分析不同户型的数量。

观察结果:这个特征分类下有很多不规则的命名,以上特征是不能作为机器学习模型的数据输入的,需要使用特征工程进行相应的处理。

df_house_count=df.groupby('Region')['Price'].count().sort_values(ascending=False).to_frame().reset_index()df_house_mean=df.groupby('Region')['PerPrice'].mean().sort_values(ascending=False).to_frame().reset_index()f,[ax1,ax2,ax3]=plt.subplots(3,1,figsize=(20,15))sns.barplot(x='Region',y='PerPrice',palette='Blues_d',data=df_house_mean,ax=ax1)ax1.set_title('北京各区二手房每平米单价对比',fontsize=15)ax1.set_xlabel('区域')ax1.set_ylabel('每平米单价')sns.barplot(x='Region',y='Price',palette="Greens_d",data=df_house_count,ax=ax2)ax2.set_title('北京各大区二手房数量对比',fontsize=15)ax2.set_xlabel('区域')ax2.set_ylabel('数量')sns.boxplot(x='Region',y='Price',data=df,ax=ax3)ax3.set_title('北京各大区二手房房屋总价',fontsize=15)ax3.set_xlabel('区域')ax3.set_ylabel('房屋总价')plt.show()执行结果:

分析目的:分析不同区域的房价和数量,并进行对比。

使用方法:用pandas的网络透视功能groupby分组排序。区域特征可视化采用seaborn完成。颜色使用调色板palette参数,颜色越浅数量越少,反之越多。

二手房房数量对比:从数量统计上来看,海淀区和朝阳区二手房数量最多,约接近3000套,因为二者属于大区。其次是丰台区,近几年正在改造建设,需求量大。

二手房房屋总价对比:通过箱型图看到,各大区域房屋总价中位数都都在1000万以下,且房屋总价离散值较高,西城最高达到了6000万,说明房屋价格特征并不是理想的正态分布。

#Renovation特征分析df['Renovation'].value_counts()f,[ax1,ax2,ax3]=plt.subplots(1,3,figsize=(20,5))sns.countplot(df['Renovation'],ax=ax1)sns.barplot(x='Renovation',y='Price',data=df,ax=ax2)sns.boxplot(x='Renovation',y='Price',data=df,ax=ax3)plt.show()执行结果:

分析目的:分析不同装修程度的二手房数量和房价。

观察结果:对于数量来说,精装修的二手房最多,简装其次;对于价格来说,毛坯房价格最高,其次是精装修的。

分析目的:分析不同大小的二手房和价格的关系。

使用方法:通过distplot和kdeplot绘制柱状图观察Size特征的分布情况,属于长尾类型的分布,这说明有很多面积很大且超出正常范围的二手房。

通过regplot绘制了Size和Price之间的散点图,发现Size特征基本与Price呈现线性关系,符合基本常识,面积越大,价格越高。

观察结果:有两组明显的异常点:面积不到10平米但价格超出10000万和面积超过了1000平米价格很低两种情况。

经过查看发现这两组异常值分别是别墅和商用房,因此出现异常,故将其移除再次观察Size分布和Price关系。

这里也说明我们在观察数据的时候,要紧密结合实际业务需求来分析,才能得出更准确的结果。

#Year特征分析grid=sns.FacetGrid(df,row='Elevator',col='Renovation',palette='seismic',size=4)grid.map(plt.scatter,'Year','Price')#grid.add_legend()执行结果:

分析目的:分析不同年代对房价变化的影响。

使用方法:在Renovation和Elevator的分类条件下,使用FacetGrid分析Year特征

特征工程的目的是让这些特征更友好的作为模型的输入,处理数据的好坏会严重的影响模型性能。

这里我们对已有的Layout特征,Year特征和Direction特征进行处理,创建新特征,删除无用特征,最后进行One-hot独热编码。

处理Layout特征

df['Layout'].value_counts()#移除X房间X卫的格式非民住df=df.loc[df['Layout'].str.extract('^\d(.*)\d.*')=='室']df.head()#用str.extract()方法,将"室"和"厅"都提取出来,单独作为两个新特征df['Layout_room_num']=df['Layout'].str.extract('(^\d).*',expand=False).astype('int64')df['Layout_hall_num']=df['Layout'].str.extract('^\d.*(\d).*',expand=False).astype('int64')处理Year特征

#将连续数值型特征Year离散化,做分箱处理#如何分箱还要看实际业务需求,这里为了方便,使用了pandas的qcut采用中位数进行分割,分割数为8等份df['Year']=pd.qcut(df['Year'],8).astype('object')df['Year'].value_counts()处理Direction特征

df['Direction'].value_counts()#写函数direct_func来整理上面较乱的Directiondefdirect_func(x):ifnotisinstance(x,str):raiseTypeErrorx=x.strip()x_len=len(x)x_list=pd.unique([yforyinx])ifx_len!=len(x_list):return'no'if(x_len==2)&(xnotind_list_two):m0=x[0]m1=x[1]returnm1+m0elif(x_len==3)&(xnotind_list_three):fornind_list_three:if(x_list[0]inn)&(x_list[1]inn)&(x_list[2]inn):returnnelif(x_len==4)&(xnotind_list_four):returnd_list_four[0]else:returnx#通过apply()方法将Direction数据格式转换d_list_one=['东','西','南','北']d_list_two=['东西','东南','东北','西南','西北','南北']d_list_three=['东西南','东西北','东南北','西南北']d_list_four=['东西南北']df['Direction']=df['Direction'].apply(direct_func)df=df.loc[(df['Direction']!='no')&(df['Direction']!='nan')]df['Direction'].value_counts()创建新特征

#根据对业务的理解,定义新特征,然后观察这些新特征对模型有什么影响#根据已有特征创建新特征df['Layout_total_num']=df['Layout_room_num']+df['Layout_hall_num']df['Size_room_ratio']=df['Size']/df['Layout_total_num']删除无用特征

df=df.drop(['Layout','PerPrice','Garden','District'],axis=1)df.head()One-hot独热编码是将定类的非数值型类型量化的一种方法,在pandas中使用get_dummies()方法实现。这里使用一个自定义的封装的函数实现了定类数据的自动量化处理。

colormap=plt.cm.RdBuplt.figure(figsize=(20,20))sns.heatmap(df.corr(),linewidth=0.1,vmax=1.0,square=True,cmap=colormap,linecolor='white',annot=True)

这里还需要注意特征太多有可能会导致heatmap图画失败。

本次建模主要方法为:使用Cart决策树的回归模型对二手房房价进行分析预测;使用交叉验证方法充分利用数据集进行训练,避免数据划分不均匀的影响;使用GridSearchCV方法优化模型参数;使用R2评分方法对模型预测评分。

数据划分

#特征变量和目标变量features=df.drop('Price',axis=1)prices=df['Price']#把分类特征都转成数值型后有{}行{}列print('北京二手房房价有数据{0}条,字段{1}个'.format(*df.shape))#将数据集划分为训练集与测试集features=np.array(features)prices=np.array(prices)#导入sklearn进行训练测试集划分fromsklearn.model_selectionimporttrain_test_splitfeatures_train,features_test,prices_train,prices_test=train_test_split(features,prices,test_size=0.2,random_state=0)建立模型

#建立模型fromsklearn.model_selectionimportKFoldfromsklearn.treeimportDecisionTreeRegressorfromsklearn.metricsimportmake_scorerfromsklearn.model_selectionimportGridSearchCV#通过交叉认证缓解数据集过拟合的现象#建立决策树回归模型#通过GridSearchCV找到最优深度参数(基于输入数据[X,y]利于网格搜索找到最优的决策树模型)deffit_model(X,y):cross_validator=KFold(10,shuffle=True)regressor=DecisionTreeRegressor()params={'max_depth':[1,2,3,4,5,6,7,8,9,10]}scoring_fnc=make_scorer(performance_metric)grid=GridSearchCV(estimator=regressor,param_grid=params,scoring=scoring_fnc,cv=cross_validator)#网格搜索grid=grid.fit(X,y)returngrid.best_estimator_评估验证

#计算R2分数fromsklearn.metricsimportr2_scoredefperformance_metric(y_true,y_predict):score=r2_score(y_true,y_predict)returnscore#调参优化模型#通过可视化模型学习曲线,观察是否出现过拟合问题#visuals为自定义函数importvisualsasvs#分析模型vs.ModelLearning(features_train,prices_train)vs.ModelComplexity(features_train,prices_train)optimal=fit_model(features_train,prices_train)#输出最优模型的参数'max_depth'print('最优模型的参数max_depth是:{}'.format(optimal.get_params()['max_depth']))predicted_value=optimal.predict(features_test)r2=performance_metric(prices_test,predicted_value)#每次交叉验证得到的数据集不同,因此每次运行的结果也不一定相同print('最优模型在测试数据上R^2分数{:.2f}'.format(r2))

可以看到,最理想模型的参数max_depth是10,此时达到了偏差与方差的最优平衡。模型在测试数据上的R2分数为:0.77,即二手房房价预测的准确率。

以上,完成了一个项目的简单分析。可以改进的方向有以下3个:

THE END
1.(持续更新)数据分析实战项目100+例王小王123的博客以数据分析实战项目为主,包含大数据分析案例、机器学习项目、数据分析项目、预处理、可视化、数据库等实际应用项目、其中项目来源于:毕设选题、课程设计、业务需求、专业辅导1V1项目、日常接单、专业书籍案例项目等,项目来源于生活。旨在大量的实战,快速上手并应用于工作开发,为工作提供大量经验! 关注https://blog.csdn.net/weixin_47723732/category_12180011.html
2.熬夜整理出20个免费又实用的数据源网站!再也不愁找不到数据练手可要做项目,首先得有数据,要上哪去找数据来练手? 大家也都知道,平时我做数据分析实战时都会把数据集发给大家练习,但毕竟我精力有限,不能一直给大家提供数据集,所以今天老李给大家整理了20个我平常做数据分析、数据挖掘练习的时候经常用到的数据集网站,对急需数据练手的朋友非常有用。 https://blog.itpub.net/21472864/viewspace-2840739/
3.优途UX教育怎么样?2023年课程介绍,深圳UX+UI设计培训机构我们课程结构的差异在于以用户体验、交互设计、UI界面设计为核心,深入讲解互联网大厂研发全流程,从用户体验设计、用户研究、场景分析、痛点分析、用户画像、数据分析、竞品分析、产品定位、业务流程图、产品信息架构、产品原型、DRD文档、UI规范、UI组件搭建、UI界面设计和开发对接、项目提案等多个真实项目环节进行教学,不https://www.yoojia.com/ask/17-11562387145828738598.html
4.2024年招投标数据分析与实战实训心得3篇.docx师资质要求2.3项目经理职责与权限2.4实战实训导师职责与要求3.1项目进度安排与节点3.2数据收集与整理流程3.3数据分析方法培训与实操3.4实战实训任务分配与执行4.1数据来源与处理规范4.2数据安全与保密措施4.3数据分析工具与软件使用4.4数据质量监控与评估5.1实战实训案例选择与准备5.2案例分析与讨论5.3案例解决方案设计5.4案例实施https://www.renrendoc.com/paper/370473976.html
5.Python数据分析优秀案例&项目经历总之,本次项目干货满满,除了通过绘图等常规手段之外,也用到了t检验等假设检验的方法来力求让结论更具说服力。 下面开始项目的正式介绍。 目录 前言 1.项目介绍 1.1 项目介绍 1.2 数据介绍 2. 数据整理 3. 学生成绩分析 3.1 学生整体成绩分布 3.2 不同学科成绩间的关联度以及不同学生人群擅长科目 https://cloud.tencent.com/developer/article/2124430
6.Python数据分析实战项目介绍南鹤Python 语言是数据分析领域最常用的编程语言,因此本文将向大家介绍一个Python数据分析实战项目,学完这个项目大家可以使用 Pandas 进行数据准备、清洗、整理、计算与可视化,以及掌握最主流的数据可视化框架Seaborn和Echarts,并利用Bokeh实现动态可视化图表与控制面板。如果对学习Python数据分析的相关内容感兴趣就接着看下去吧! https://www.cnblogs.com/nanhe/p/13508805.html
7.Java是否适合运维会java可以做运维吗ctaxnews的技术博客数据离线数据仓库,企业级在线教育项目实战(Hive数仓项目完整流程) 本课程会、建立集团数据仓库,统一集团数据中心,把分散的业务数据集中存储和处理 ;目从需求调研、设计、版本控制、研发、测试到落地上线,涵盖了项目的完整工序 ;掘分析海量用户行为数据,定制多维数据集合,形成数据集市,供各个场景主题使用。 https://blog.51cto.com/u_14850/6765228
8.寻找接地气的Python实战项目基于股票的金融数据量化分析而是说如果你学习了Python,同时你对数据分析感兴趣,或是对金融量化交易感兴趣,或是计划开发属于自己的量化交易系统,或是准备从事金融数据分析领域,那么恭喜你,你可以把量化交易作为Python实战项目来练手。 一方面可以提高自己的Python实战能力,因为这个项目是一个多技术综合的项目,包括爬虫、数据分析、可视化、WEB开发、https://www.imooc.com/article/290298
9.R语言数据分析项目精解:理论方法实战高清pdf完整版[43MB]电《R 语言数据分析项目精解:理论、方法、实战》以互联网电商企业为背景,抽象出工作中常见的数据分析问题,利用R 语言和统计学列出了详细的解决方案和过程。《R 语言数据分析项目精解:理论、方法、实战》共9 章,前两章分别为总论和R 语言入门知识,之后各章分别介绍了运营指标的建立、指标监控系统、假设检验及AB 测试https://www.jb51.net/books/697401.html
10.《Excel数据分析师突击—从入门到精通到项目实战》快班报名:【快班】Excel数据分析师突击—从入门到精通到项目实战(随报随学) 大数据时代的到来,机器学习算法的不断发展,各种高深的算法也成了数据分析员日常讨论的话题,然而,并不是每一个岗位的数据分析都需要用到各种高深的机器学习算法,很多职场中的数据分析往往只涉及基础的部分,无需用到各种复杂难懂的算法,只需要http://www.dataguru.cn/article-10127-1.html
11.成功大数据项目实战案例福特汽车用这些方法把所有的数据都界定好了以后,第二步是把项目交给了一个差不多200人的大数据分析专业团队,他们获取和搜索所需的外部数据,比方说第三方合同网站,区域经济数据、就业数据等等。 第三步是他们获得数据以后,就开始对数据进行建模分析、挖掘,为销售和决策部门提供精准可靠的角色选择和效果分析,也就是说https://cda.pinggu.org/view/20251.html
12.项目小组介绍1.项目小组简介: 本项目小组主要研究方向为药物重定位平台的构建、基于药物重定位平台与生物组学数据库的药物预测、基于GEO、TCGA、GTEx等多种组学数据库及整合机器学习方法的生物信息挖掘与分析、python、R语言编程基础学习及项目实战、高分SCI论文的学习及复现。本小组旨在通过文献学习、论文撰写和数据分析项目实战等方式http://www.sxmu.edu.cn/bdcd/info/1098/1302.htm
13.《R语言数据分析与可视化从入门到精通》(程乾)简介书评本篇介绍R语言数据管理、数据分析和数据可视化的三大威力,包括通过数据获取、导出、整合和清理等操作将零散的数据整合为可以分析处理的数据集的多种方法;并介绍一些常用基础统计和高级统计的实现方法,以及R语言的图形生成、图形修饰、外部绘图插件和图形展示等功能。 第3篇:实战篇(第12章)。本篇通过一个实战案例,综合http://product.dangdang.com/29136211.html
14.职业方向定位职业生涯规划书(通用10篇)再之后去了xx,在那里兼职了一个多月,参与了大众汽车销量数据短期预测的项目,一个小项目下来,数据分析的方法流程掌握了不少,也了解了企业是如何用一些时间序列模型去参与预测的,如何选取某个拟合曲线作为预测值。现在,我来到新的地方实习,也非常幸运的参加了一个央企的码头堆场优化系统设计,其实也算数据分析的一种吧https://www.yjbys.com/jiuyezhidao/zhiyeguihua/2957515.html