# -*- coding: utf-8 -*-
'''
研究二手房价的影响因素,建立房价预测模型,数据存放在“sndHsPr.csv”中。
分析思路:
在对房价的影响因素进行模型研究之前,首先对各变量进行描述性分析,
以初步判断房价的影响因素,进而建立房价预测模型
变量说明如下:
dist-所在区
roomnum-室的数量
halls-厅的数量
AREA-房屋面积
floor-楼层
subway-是否临近地铁
school-是否学区房
price-平米单价
步骤如下:
(一) 因变量分析:单位面积房价分析
(二) 自变量分析:
2.1 自变量自身分布分析
2.2 自变量对因变量影响分析
(三)建立房价预测模型
3.1 线性回归模型
3.2 对因变量取对数的线性模型
3.3 考虑交互项的对数线性
(四)预测: 假设有一家三口,父母为了能让孩子在东城区上学,
想买一套邻近地铁的两居室,面积是70平方米,中层楼层,那么房价大约是多少呢?
'''
import pandas as pd
import os
from scipy import stats
import statsmodels.api as sm
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
import seaborn as sns
# 解决matplotlib中文显示以及负号(-)显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 数据导入和数据清洗
os.chdir(r'F:\python_data_analysis\data_file')
data = pd.read_csv('sndHsPr.csv')
print('数据预览: \n{}'.format(data.head()))
dist_columns = {'chaoyang': '朝阳区',
'haidian': '海淀区',
'fengtai': '丰台区',
'xicheng': '西城区',
'dongcheng': '东城区',
'shijingshan': '石景山区'}
data['dist'] = data['dist'].map(dist_columns)
data['price'] = data['price']/10000
print(data.head())
# 描述性统计分析
# 频数统计
for i in range(7):
if i != 3:
print(data.columns.values[i], ':')
print(data[data.columns.values[i]].agg(['value_counts']).T)
print('===================================================')
# 两个连续性变量AREA和price的描述性统计
print('AREA :')
print(pd.DataFrame(data.AREA.agg(['mean', 'min', 'max', 'median', 'std'])).T)
print('===================================================')
print('连续型因变量price的描述性统计分析 :')
print(data[['price']].describe().T)
# 地区占比情况 饼图
data['dist'].value_counts().plot(kind='pie', autopct='%6.3f%%')
plt.show()
# 房价的分布 直方图
plt.hist(data['price'], bins=20)
plt.show()
# 各地区平均房价的差异 柱状图
data.groupby('dist')['price'].mean().sort_values(ascending=True).plot(x='price', y='dist', kind='barh')
plt.xlabel('平均房价')
plt.ylabel('地区', rotation=0)
plt.show()
# 各地区房价的分布 盒须图
dist_price_df = data[['dist', 'price']]
dist_price_df['dist'] = dist_price_df['dist'].astype('category')
dist_price_df['dist'].cat.set_categories(['石景山区', '丰台区', '朝阳区', '海淀区', '东城区', '西城区'], inp