python基于大数据的房产估价-实训头歌

这篇具有很好参考价值的文章主要介绍了python基于大数据的房产估价-实训头歌。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的与要求

1、掌握使用numpy和pandas库处理数据的基本方法。
2、掌握使用Sklearn库对多元线性回归算法的实现及其评价方法。
3、掌握使用matplotlib结合pandas库对数据分析可视化处理的基本方法。

二、实验内容

1、利用python中pandas等库完成对数据的预处理,最后将处理好的文件进行保存。
2、利用pandas、matplotlib等库完成对预处理数据的可视化。
3、结合pandas、matplotlib库对聚类完成的结果进行可视化处理。

三、实验步骤

1.数据预处理

(1)导入所需要使用的包

import os
import re
import pandas as pd
import numpy as np

(2)读取文件

input_dir='/data/bigfiles/'
files=os.listdir(input_dir)
data_list=[]
for file in files:
    data_list.append(pd.read_excel(input_dir +file))

(3)查看数据的基本统计信息

data=pd.concat(data_list)
data

python基于大数据的房产估价-实训头歌

(4)删除csv文件中索引列,并重置

data= data.reset_index()
data=data.drop("index",axis=1)
data.head(10)

python基于大数据的房产估价-实训头歌

(5)处理空值

(data.isnull()).sum()
#检查重复值
(data.duplicated()).sum()
#抛弃重复值
data.drop_duplicates(inplace=True)

 (6)删除部分数据的中文字符,将数据类型转换为float型

#使用正则表达式查看单价列中含有的中文字符种类
data.总价.map(lambda x: re.sub('[^\u4E00-\u9FA5]','',x)).unique()
print(data.单价.map(lambda x: re.sub('[^\u4E00-\u9FA5]','',x)).unique())

data['单价']=data.单价.map(lambda x : round(float(re.findall(r'单价(.*?)元/平米',x)[0])/10000,2))

#删去字符串“万”,将类型转换float,保留两位小数
data['总价']=data.总价.map(lambda x : round(float(x.replace('万','')),2))
data
#拆分房屋信息所在列
a = data.房屋信息.map(lambda x : len(x.split('|')))
data= data[a == 7]
data.loc[:,'户型'] = data.房屋信息.map(lambda x : x.split('|')[0])
data.loc[:,'面积'] = data.房屋信息.map(lambda x : x.split('|')[1])
data.loc[:,'朝向'] = data.房屋信息.map(lambda x : x.split('|')[2])
data.loc[:,'类型'] = data.房屋信息.map(lambda x : x.split('|')[3])
data.loc[:,'楼层'] = data.房屋信息.map(lambda x : x.split('|')[4])
data.loc[:,'建成时间'] = data.房屋信息.map(lambda x : x.split('|')[5])
data.loc[:,'结构'] = data.房屋信息.map(lambda x : x.split('|')[6])
# data = data.drop('房屋信息',axis = 1)
data['面积']=data.面积.map(lambda x : round(float(x.replace('平米','')),2))
len(data[~data.建成时间.str.contains('年建')])
# data['建成时间']=data.建成时间.map(lambda x:float(x.replace('年建','')))
data.head()

python基于大数据的房产估价-实训头歌

 (7)对部分数据进行独热码编码

#对户型进行独热编码
data=data.join(pd.get_dummies(data.户型))
# data = data.drop('户型',axis = 1)

#对区域类型结构
print(data.区域.unique())
data=data.join(pd.get_dummies(data.区域))
data.head()

python基于大数据的房产估价-实训头歌

(8)对数据进行标准化处理 

# #说白了就是清晰数据
# #去掉字符串前后空格
data.head()
data.类型.unique()
data.结构.unique()
data['类型'] = data.类型.str.strip()
data['结构'] = data.结构.str.strip()
#丢弃无效数据
data=data[(data.类型 != '其他')&(data.结构!='暂无数据')]
#使用独热码编码
data =data.join(pd.get_dummies(data.类型))
data =data.join(pd.get_dummies(data.结构))
# data = data.drop('类型',axis = 1)

#处理朝向列种类
def my_get_dummies(ser):
    base_dirt=['东','南','西','北','东北','东南','西南','西北']
    base_data=np.zeros((len(ser),),dtype=np.int)
    df = pd.DataFrame({'东':base_data,'南':base_data,'西':base_data,'北':base_data,'东北':base_data,'东南':base_data,'西南':base_data,
                      '西北':base_data})
    for irec in ser.index:
        rec=ser[irec].strip().split(' ')
        for dirt in rec:
            #检查是否存在8个基本方位以外的记录
            if dirt not in base_dirt:
                print(dirt)
            else:
                df[dirt][irec]=1
    return df
data=data.join(my_get_dummies(data.朝向))
#删除原有列
data=data.drop('朝向',axis=1)
data.head()
#检测数据格式一致性
(~data.楼层.str.contains('楼层')).sum()
#舍弃数据
data = data[data.楼层.str.contains('楼层')]
#查看数据唯一值
data.楼层.unique()
#提取所在楼层

data['所在楼层']=data.楼层.map(lambda x:x.split('(')[0])
#对所在楼层进行独热编码
data=data.join(pd.get_dummies(data.所在楼层))
#使用正则表达式提取数据并转换为int类型
data['总楼层'] =data.楼层.map(lambda x: int(re.findall(r'\(共(.*?)\层',x)[0]))
#删除原有列
# data = data.drop('楼层',axis=1)
# data = data.drop('所在楼层',axis=1)
data.head(5)
# #删除发布时间列信息
# data=data.drop('发布时间',axis=1)
#去掉空格
data=data.rename(columns = lambda x:x.strip())

(9)存储预处理后的文件

#保存数据,如果服务器挂掉重新跑一边但不要跑这段代码
output_file_path = '/data/bigfiles/房产信息_预处理.xlsx'
data.to_excel(output_file_path,index=False)

2、数据分析

(1)读取预处理后的文件

#建议不要运行如过服务不挂的话可以运行
input_dir='/data/bigfiles/房产信息_预处(9)存储预处理后的文件理.xlsx'
data=pd.read_excel(input_dir)

(2)利用二八原则,划分训练集和测试集

#二分原则为80%为样例数据作为模型训练集20%为样本数据作为测试集检查估计能力
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split #划分测试集与训练集
from sklearn.linear_model import LinearRegression as LR #回归模块
##在ipy中显示图像
%matplotlib inline
#设置绘图显示中文字体
plt.rcParams['font.sans-serif']=['SimHei']
pd.set_option('display.max_columns', None)


print(data.columns)

#特征提取
total_price=data.总价
unit_price=data.单价
house_area=data.面积
house_type=data[['0室0厅', '0室1厅', '1室0厅', '1室1厅', '1室2厅', '2室0厅', '2室1厅',
       '2室2厅', '3室0厅', '3室1厅', '3室2厅', '3室3厅', '3室4厅', '4室0厅', '4室1厅', '4室2厅',
       '4室3厅', '4室4厅', '5室0厅', '5室1厅', '5室2厅', '5室3厅', '5室4厅', '6室1厅', '6室2厅',
       '6室3厅', '6室4厅', '6室5厅', '7室1厅', '7室2厅', '7室3厅', '7室4厅', '7室5厅', '8室2厅',
       '8室3厅', '9室2厅']]
region=data[['双流', '大邑' ,'天府新区' ,'天府新区南区', '彭州', '新津', '新都', '武侯' ,'温江', '简阳', '蒲江', '郫都' ,'都江堰',
 '金堂' ,'金牛', '锦江', '青白江' ,'青羊' ,'高新', '高新西', '龙泉驿']]
house_class= data[['塔楼','板塔结合','板楼']]
house_layer=data[['低楼层','中楼层','高楼层']]
house_dirt=data[['东','南','西','北','东北','东南','西南','西北']]
total_layer=data.总楼层
# 选择自变量与因变量
X = pd.concat([house_area,house_type,region,house_class,house_layer,house_dirt,total_layer],axis=1)
Y = unit_price
print(type(X))
X = X.fillna(0)
#划分测试集与训练集
Xtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=0.2,random_state=420)

python基于大数据的房产估价-实训头歌

(3)建立多元回归模型并训练

reg=LR().fit(Xtrain,Ytrain)#这里其实就是建立模型把训练的值放进去返回一个拟合对象
#预测
Yhat=reg.predict(Xtest)
#查看回归系数
print(list(zip(X.columns,reg.coef_)))
#查看截距
print(reg.intercept_)

 (4)检验模型效果

from sklearn.metrics import mean_squared_error #MSE
from sklearn.metrics import mean_absolute_error #MAE
from sklearn.metrics import r2_score #R2
mse= mean_squared_error(Ytest,Yhat)
mae= mean_absolute_error(Ytest,Yhat)
r2=r2_score(Ytest,Yhat)
#调整R2
n=Xtest.shape[0]
k=Xtest.shape[1]

(5)计算估计值

adj_r2=1-(1-r2)*((n-1)/(n-k-1))

(6)判断模型拟合的好坏程度

print('MSE:'+str(mse))
print('MAE:'+str(mae))
print('R2:'+str(r2))
print('调整后R2:'+str(adj_r2))

python基于大数据的房产估价-实训头歌

3、数据可视化

(1)将训练集真实值与模型预测值用折线图的形式表现出来

#绘制前50条记录
n=50
#绘制模型预测值
plt.plot(range(len(Yhat[:n])),Yhat[:n])
#绘制模型真实值
plt.plot(range(len(Ytrain[:n])),Ytrain[:n])
#图形设置
plt.xlabel('个例')
plt.ylabel('单价')
plt.title('线性回归预测结果')
plt.legend(["预估","实际"])

python基于大数据的房产估价-实训头歌

 (2)将测试集真实值与模型预测值用折线图的形式表现出来

#绘制前50条记录
n=50
#绘制模型预测值
plt.plot(range(len(Yhat[:n])),Yhat[:n])
#绘制模型真实值
plt.plot(range(len(Ytest[:n])),Ytest[:n])
#图形设置
plt.xlabel('个例')
plt.ylabel('单价')
plt.title('线性回归预测结果')
plt.legend(["预估","实际"])

python基于大数据的房产估价-实训头歌

链接:https://pan.baidu.com/s/1ed7wUs1hwdqTKJrhaHmtyw?pwd=2222 
提取码:2222文章来源地址https://www.toymoban.com/news/detail-415818.html

到了这里,关于python基于大数据的房产估价-实训头歌的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 头歌Python实训——matplotlib数据可视化

    任务描述 各省GDP的excel文件如图所示 编写一个程序,计算每年各省GDP信息的和,生成条状图显示 要求窗口大小10,10,图表标题为GDP条状图 相关知识 为了完成本关任务,你需要掌握: 1.数据汇总 2.matplotlib库的使用 3.如何建立条状图 4.设置图表参数 Dataframe数据汇总 dataframe对

    2024年02月03日
    浏览(61)
  • 头歌Python实训答案——Python的几种数据结构

    第1关:列表及操作 #coding = utf-8 #********* Begin *********# #第一步 请在列表fruits中找出不属于水果一类元素,赋值给变量 a fruit = [\\\"苹果\\\",\\\"梨子\\\",\\\"菠萝\\\",\\\"黄瓜\\\",\\\"香蕉\\\"] a =\\\"黄瓜\\\" #第二步 将变量 a 的值添加到列表vegetable 的末尾 vegetable = [\\\"土豆\\\",\\\"萝卜\\\",\\\"茄子\\\",\\\"白菜\\\"] vegetable.append(a) #第三

    2024年02月05日
    浏览(70)
  • 头歌Educoder实验:程序设计二(面向对象)_实训3_类外定义成员函数

    第1关:类外定义存取函数 任务描述 本关仍然有一个 Int 类,该类包含一个 int 类型的成员。为其编写存取函数。注意,存取函数要在类外实现。 相关知识 类的定义中,既可以书写成员函数的声明,也可以书写成员函数的定义(即实现)。如果在类中定义成员函数,则该成员

    2024年02月06日
    浏览(58)
  • 【头歌】 Python数据结构 Python案例 实验一python初探(1)

    任务描述 本关任务:编写一个程序,依次输入用户的学号,姓名和手机号码 再依次输出相关信息 为了完成本关任务,你需要掌握: 1.如何输入数据 2.如何输出 输入语句 变量 = input( 提示性文字 ) 语句功能:系统显示提示性文字,等待用户输入。 将用户输入的信息存储在指定

    2024年04月11日
    浏览(92)
  • BFU数据结构头歌实验:基于BF算法的病毒感染检测

    这道题当初我想着直接抄课本上的BF代码,结果发现书中的代码都是默认模式串和主串的下标从零开始,因此需要将书中的代码进行修改。如下图所示,需要将变量i,j的初值都设为0。然后将书中出现的i,j全部加1即可。然后这个函数中的第三个参数,pos的值我没有使用,这个

    2024年02月06日
    浏览(56)
  • 数据库原理 头歌实训 数据库常用对象

    任务描述 本关任务:创建计算机系的学生信息的视图 student_cs。 相关知识 行列子集视图是指视图的结果集来源于基本表,没有经过二次计算。 #####创建视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTIO

    2024年02月04日
    浏览(50)
  • 头歌实践教学平台答案(Python实训答案之循环结构)

    头歌实践教学平台答案(Python实训答案之循环结构),一共有6关, Python实训答案编程要求 本关的编程任务是补全line.py文件中的判断语句部分,具体要求如下: 填入当已处理零件数小于总零件数count partcount时的while循环判断语句; 在停电时填入break语句跳出循环。 本关涉及的代

    2024年04月13日
    浏览(77)
  • 头歌MySQL数据库实训答案 有目录

    头歌MySQL数据库答案 特别感谢黄副班、小青提供代码,有问题联系公众号【学思则安】留言更正 其他作业链接 数据库1-MySQL数据定义与操作实战 MySQL数据库 - 初识MySQL MySQL数据库 - 数据库和表的基本操作(一) MySQL数据库 - 数据库和表的基本操作(二) MySQL数据库 - 单表查询

    2024年04月28日
    浏览(92)
  • 头歌数据结构实训参考---十大经典排序算法

    可通过 目录 快速查阅对应排序算法

    2024年02月04日
    浏览(64)
  • 【第9关:基于邻接表的边的删除】【编程题实训-图】【头歌】【bjfu-280】

    给定一个无向图,在此无向图中删除一条边。 输入 多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包