jupyter数据处理应用于模型预测

一、引入数据

1.1 引入相关包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

1.2 读入数据

#读入数据
# 考虑到文件编码方式的不同
data_list = []
for i in range(1,8):
    try:
        data = pd.read_csv('D:\Jupyter/fangchan/lianjia{}.csv'.format(i),encoding = 'gbk') #文件名前要写路径  .表示当前文件夹,i最后取代{}  编码方式是gbk的读取
    except: 
        data = pd.read_csv('D:\Jupyter/fangchan/lianjia{}.csv'.format(i)) #如果文件编码方式不是gbk,为utf-8(默认),读取
    finally:
        #合并数据集  方法1
        data_list.append(data)   
data = pd.concat(data_list)   #concat: 行叠加

1.3 查看数据

#查看数据都包含哪些部分
data.head(3)

在这里插入图片描述

#查看每列的数据类型
data.info()

在这里插入图片描述

二、数据预处理

目标:找出2012–2016年远洋山水这个小区的价格走势,进行房价走势预测

1 将数据中的nan值去掉

data.isnull().sum()

在这里插入图片描述

data1 = data[['cjdanjia','cjxiaoqu','cjshijian']]
data1.columns
data1.columns

在这里插入图片描述

data1.dropna(inplace = True)
len(data1)

在这里插入图片描述

处理cjdanjia

2 将成交单价中元/平 去掉

data1.cjdanjia = data1.cjdanjia.map(lambda x: x.replace('元/平',''))
data1

在这里插入图片描述

3 将成交单价转换为float类型

#****等价于
data1.cjdanjia = data1.cjdanjia.map(lambda x: float(x))

4 变为万元

#****等价于
data1.cjdanjia = data1.cjdanjia.map(lambda x: x/10000)

5 小数点后保留为小数点后1位

data1.cjdanjia = data1.cjdanjia.map(lambda x: round(x,1))

6 查看单价cjdanjia的一些性质

#查看最大值
data1.cjdanjia.max()
#查看最小值
data1.cjdanjia.min()
data1=data1[data1.cjdanjia>2] #去掉异常值
#将数据变成时间序列
data1.cjshijian=data1.cjshijian.map(lambda x:x[5:])
pd.to_datetime(data1.cjshijian)  #pd.to_datetime  将数列变成时间序列

在这里插入图片描述

#获取远洋山水的成交记录
data = data1[data1.cjxiaoqu.str.contains('远洋山水')]
#将数据进行时间排序
data=data.sort_values( by = 'cjshijian')  #按时间排序
pd.to_datetime(data.cjshijian)

在这里插入图片描述

#将cjshijian设置为index
data = data.set_index('cjshijian')  
#取出2012年以后的数据
data = data['2012':]

预测问题

采用回归方法

目标是想找出2012–2016年远洋山水这个小区的价格走势,进行房价走势预测

#剔除异常值:价格>1才是有效数据
data =data[data.cjdanjia>1]
#处理数据:计算距离2012-01-01 的天数,并添加一列time
data = data.assign(time =(pd.to_datetime(data.index)-pd.to_datetime('20120101')).days)  #距离2012的时间为time
#找出时间和价格的走势的情况
#目标:若了解2012到2016年远洋山水小区的价格走势,进行房价趋势预测。关注cjdanjia\cjshijian
data1 = data[['time','cjdanjia']]
plt.scatter(data1.time,data.cjdanjia)  #自变量只有一个,一元回归     自变量多个:多元回归

在这里插入图片描述

from sklearn.linear_model import LinearRegression  #引进线性回归模型
X = data1.time
Y =data1.cjdanjia
model = LinearRegression()  #调用数据建模函数  建立模型 Y=AX+B
model.fit(pd.DataFrame(X),Y)  #用实验数据训练模型求模型参数 A,B

在这里插入图片描述

x = [[0],[1800]]
y =model.predict(pd.DataFrame(x))  #利用模型进行预测  一下红色直线
plt.scatter(data1.time,data.cjdanjia)
plt.plot(x,y,c='r')

在这里插入图片描述

#多项式回归  非线性  用多项式无限逼近
model2=LinearRegression()
model2.fit(pd.DataFrame({'x2':X*X,'x1':X}),Y)  #一元二次回归
x=np.linspace(0,1800)
y=model2.predict(pd.DataFrame({'x2':x*x,'x1':x}))
plt.scatter(data1.time,data.cjdanjia)
plt.plot(x,y,c='r')

在这里插入图片描述

from sklearn.preprocessing import PolynomialFeatures
q3=PolynomialFeatures(degree=3)
X3=q3.fit_transform(pd.DataFrame(X))
model3=LinearRegression()
model3.fit(X3,Y)
x=np.linspace(0,1800)
x_=q3.fit_transform(pd.DataFrame(x))
y=model3.predict(x_)
plt.scatter(data1.time,data.cjdanjia)
plt.plot(x,y,c='r')

在这里插入图片描述

模型评价

X_train,X_test = X[:'2016'],X['2016':]
Y_train,Y_test = Y[:'2016'],Y['2016':]
q3=PolynomialFeatures(degree=3)
X3=q3.fit_transform(pd.DataFrame(X_train))
model3=LinearRegression()
model3.fit(X3,Y_train)

在这里插入图片描述

X3_ =q3.fit_transform(pd.DataFrame(X_test))
Y_pre=model3.predict(X3_) 
np.sum((Y_pre-Y_test)**2)

在这里插入图片描述

q4=PolynomialFeatures(degree=4)
X4=q4.fit_transform(pd.DataFrame(X_train))
model4=LinearRegression()
model4.fit(X4,Y_train)
X4_ =q4.fit_transform(pd.DataFrame(X_test))
Y_pre=model4.predict(X4_) 
np.sum((Y_pre-Y_test)**2)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值