一、实验目的与要求

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

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

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

(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()

(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()

(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]=1return 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 pltfrom 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)

(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))

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(["预估","实际"])

(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(["预估","实际"])

链接:https://pan.baidu.com/s/1ed7wUs1hwdqTKJrhaHmtyw?pwd=2222 
提取码:2222

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

  1. python大数据作业-客户价值分析-实训头歌

    一.实验目的与要求 1.掌握使用numpy和pandas库处理数据的基本方法. 2.掌握使用RFM分析模型对客户信息进行特征提取的基本方法. 3.掌握对特征数据进行标准化处理的基本方法. 4.掌握使用 ...

  2. 2022年大数据BI工程师项目实训介绍

    来自[仅悦数据]<大数据BI工程师项目实训>的介绍,精心整理,盗用必究- 本文阅读约需15分钟,感谢观看~ 最新播报:2022年BI大数据实训全面升级,我们必将更专业.更用心! 一.202 ...

  3. 大数据技术专业实习实训总结

    #自我介绍 我是一名大一学生,专业是:数据科学与大数据技术.目前学过的知识点有:C++,python,HDFS,MapReduce,Hadoop,Java等.虽然学过的知识点很多,但是没有对他有更深的 ...

  4. 大数据技术与应用实训心得_大数据心得体会

    大数据心得体会 [篇一:大数据时代心得体会] <大数据时代>心得体会 信息时代的到来,我们感受到的是技术变化日新月异,随之而来的 是生活方式的转变,我们这样评论着的信息时代已经变为曾经.如 ...

  5. 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛

    大数据技术与应用论坛 11月12日,信息与电子工程学院主办大数据技术与应用论坛,副校长冯军出席论坛并致辞.论坛邀请大数据领域的高校和企业的专家,为师生带来了精彩的报告.学院院长雷景生教授和学院党委副书 ...

  6. 大数据技术与应用实训心得_数据实习心得

    课程设计报告 题目:学生选课系统数据库的设计与实现 课 程 名 称: __ 数据库课程设计 学 院: __ 信息工程学院 ___________ 专 业 班 级: __  14 计算机专 (1) 班 ...

  7. 大数据技术与应用实训心得_GXCGQ16D传感器与检测技术应用实训考核设备

    (一)产品概述 依据国家人力资源与社会保障部<技工院校工学结合课程教学改革试点工作方案>设计,围绕典型工作任务(即传感器实训模块)确定课程目标,选择课程内容,制定专业教学计划,根据国家职业 ...

  8. python基于大数据的boss直聘数据招聘职位分析系统django

    本项目主要利用python技术爬取BOSS直聘网站上的岗位信息,进行对比分析UI设计师与产品经理两个职位的趋势.爬取字段:工作地点,薪资范围,学历要求,工作经验,公司性质等. 模拟登陆BOSS直聘网站 ...

  9. python如何进行双色球预测最准确_【原创】python基于大数据现实双色球预测

    前提准备:利用sql筛选出每个球出现概率最高的前5个数 原理:先爬出所有的历史数据,然后模拟摇奖机出球的机制并大量模拟计算,直到出现列表中的某一个数后即停 注意事项:由于计算过程数据量很大,需要加入内 ...

最新文章

  1. 头条Android面试题,史上最全的Android面试题集锦(五)
  2. jBPM专家力作——《深入浅出jBPM》
  3. English trip -- Review Unit1 Personal Information 个人信息
  4. Create Use Custom Controllers
  5. C#中将表示颜色的string转换成Color
  6. QT的QBitArray 类的使用
  7. DFS--01背包问题
  8. table表头多选框禁用 vue_Vue踩坑小记(四)
  9. 英国央行:稳定币讨论文件将讨论与央行数字货币概念相关可能出现的问题
  10. 年轻人,在公司混日子,伤害的是自己!
  11. 多维动态数组c语言,C语言多维动态数组的实现
  12. ScreenToGif录制录屏gif软件的推荐通用设置,优化使用体验
  13. GIT 密钥生成工具puttygen使用技巧
  14. XUI 一个简洁而优雅的Android原生UI框架,解放你的双手!
  15. iP138查询网,ip数据库
  16. CDOJ1323柱爷的下凡
  17. 有哪些适合练手的爬虫小项目?
  18. Linux下如何设置程序的开机自启动功能
  19. 如何利用批处理启动cmd并进入指定目录
  20. python对mp3格式文件标题专辑封面等信息修改

热门文章

  1. 【服务治理】服务熔断、服务降级、服务限流、流量削峰、错峰
  2. k8s安装网络插件镜像下载不了问题
  3. 信号与系统(Python) 学习笔记摘录 (3) LTI 系统 与 滤波器
  4. Codeforces Round #829 (Div. 2)
  5. 来看看一张马上欠费的手机卡都能干吗(爽的话就顶啊)
  6. 第三章 嵌入式Python概述(三)
  7. 法师 php审计书,《php代码审计》(核心配置一)
  8. 让SDK成为云剪辑的“翅膀”——专访美摄研发中心总监李磊
  9. Numpy之国际象棋棋盘(8行8列)
  10. Hfish开源蜜罐初探