数据集及源码https://github.com/JCATHoney/python-data-analysis
一、问题描述
在对房价的影响因素进行模型研究之前,首先对各变量进行描述性分析,以初步判断房价的影响因素,进而建立房价预测模型
总体步骤如下:
(一) 因变量分析:单位面积房价分析
(二) 自变量分析:
2.1 自变量自身分布分析
2.2 自变量对因变量影响分析
(三)建立房价预测模型
3.1 线性回归模型
3.2 对因变量取对数的线性模型
3.3 考虑交互项的对数线性
(四)预测: 假设有一家三口,父母为了能让孩子在东城区上学,想买一套邻近地铁的两居室,面积是70平方米,中层楼层,那么房价大约是多少呢?
二、数据集
研究二手房价的影响因素,建立房价预测模型,数据存放在“sndHsPr.csv”中。
变量说明如下:
变量 | 含义 |
---|---|
dist | 所在区 |
roomnum | 室的数量 |
halls | 厅的数量 |
AREA | 房屋面积 |
floor | 楼层 |
subway | 是否临近地铁 |
school | 是否学区房 |
price | 平米单价 |
三、描述性统计
3.1数据预处理
- 主要关注金额,日期等字段的处理
- 把握整体样本量,后续合理采样
- 将城区变量转换为中文
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import statsmodels.api as sm
from numpy import corrcoef,array
#from IPython.display import HTML, display
from statsmodels.formula.api import ols
import os
os.chdir(r"C:\Users\Away\Desktop\笔记\数据分析")
# In[1]:
import pandas as pd
mdata = pd.read_csv(r'sndHsPr.csv')
mdata.head()
#%%
#1、描述性统计数据预处理阶段
describe=mdata.describe()#价格基本情况
# count 16210.000000
# mean 61151.810919
# std 22293.358147
# min 18348.000000
# 25% 42812.250000
# 50% 57473.000000
# 75% 76099.750000
# max 149871.000000
print(mdata.shape[0])#数据量:16210 这里为什么要统计数据量呢?因为做检验时数据量不能过大,一般不超过5000,否则p值会失效
#%%
## 1、描述性统计
#数据简单处理,重点关注价格日期等字段
#查看各个字段基本情况
data0 = mdata
describe=data0.describe(include="all").T
#print(data0.dtypes)
#价格转换为万元
data0.price = data0.price/10000
#type_dict = {'借':'out','贷':'income'}
#card_t3['type1'] = card_t3.t_type.map(type_dict)
#将区域名转换为中文
dist_dict = {
'chaoyang' : "朝阳",
'dongcheng' : "东城",
'fengtai' : "丰台",
'haidian' : "海淀",
'shijingshan' : "石景山",
'xicheng': "西城"
}
data0['dist']=data0.dist.map(dist_dict)
中文和负号的显示:
matplotlib.rcParams['axes.unicode_minus']=False#解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei']#指定默认字体 ,解决不能显示中文字体的问题#
3.2 变量描述性分析
- 因变量 price
#因变量图形(主要看看形态)
data0.price.plot(kind='hist',bins=20,color='lightblue')#右偏严重
plt.xlabel("单位面积房价(万元/平方米)")
plt.ylabel("频数")
print(data0.price.agg(['mean','median','std'])) #查看price的均值、中位数和标准差等更多信息
print(data0.price.quantile([0.25,0.5,0.75]))
pd.concat([(data0[data0.price==min(data0.price)]),(data0[data0.price