八大直播作业-第四讲-Aringrhus

浏览: 1118
# coding: utf-8

# In[2]:


import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats
import statsmodels.api as sm
from statsmodels.formula.api import ols
from matplotlib import pyplot as plt
pd.set_option('display.max_columns', None)
import warnings
warnings.filterwarnings('ignore')
get_ipython().magic('matplotlib inline')


# In[3]:


sndHsPr = pd.read_csv(r'sndHsPr.csv')
sndHsPr.head()
sndHsPr = pd.read_csv(r'sndHsPr.csv')
sndHsPr.head()
# # 因变量分析:单位面积房价分析

# In[3]:


sndHsPr['price'].describe()

snipaste_20180611_142421.png

# In[4]:


sns.distplot(sndHsPr['price'], kde=True, fit=stats.norm)

snipaste_20180611_142457.png

# In[5]:


fig = sm.qqplot(sndHsPr['price'], fit=True, line='45')
fig.show()

snipaste_20180611_142550.png

# In[6]:


sndHsPr['price'].plot(kind='box')

snipaste_20180611_142629.png

# # 自变量分析

# ## 自变量自身分布分析

# In[7]:


sndHsPr['dist'].value_counts().plot(kind='pie')

snipaste_20180611_142657.png

# In[8]:


sndHsPr['roomnum'].value_counts().plot(kind='bar')

snipaste_20180611_142702.png

# In[9]:


sndHsPr['halls'].value_counts().plot(kind='bar')

snipaste_20180611_142709.png

# In[10]:


print(sndHsPr['AREA'].describe())
sns.distplot(sndHsPr['AREA'], kde=True, fit=stats.norm)

snipaste_20180611_142722.png

# In[11]:


sndHsPr['floor'].value_counts().plot(kind='bar')

snipaste_20180611_142729.png

# In[12]:


sndHsPr['subway'].value_counts().plot(kind='bar')

snipaste_20180611_142738.png

# In[13]:


sndHsPr['school'].value_counts().plot(kind='bar')

snipaste_20180611_142744.png

# ## 自变量对因变量影响分析

# In[14]:


def anova_analyze(x):
# print(sndHsPr.groupby(x)[['price']].describe().T)
print("="*50)
anova_res = sm.stats.anova_lm(ols('price ~ C(%s)'%x,data=sndHsPr).fit())
print(anova_res)
print("="*50)
if anova_res.loc['C(%s)'%x,'PR(>F)']<0.05:
print( '在0.05显著性水平下,%s对房屋单价的影响显著'%x)
else:
print( '在0.05显著性水平下,%s对房屋单价的影响不显著'%x)


# In[15]:


anova_analyze('dist')

snipaste_20180611_143032.png

# In[16]:


anova_analyze('roomnum')

snipaste_20180611_143039.png

# In[17]:


anova_analyze('halls')

snipaste_20180611_143046.png

# In[18]:


anova_analyze('floor')

snipaste_20180611_143051.png


# In[19]:


# print(sndHsPr['price'].groupby(sndHsPr['school']).describe().T)
val_0= sndHsPr[sndHsPr['school'] == 0]['price'].dropna()
val_1 = sndHsPr[sndHsPr['school'] == 1]['price'].dropna()
leveneTestRes = stats.levene(val_0, val_1, center='median')
print("="*50)
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes)
print("="*50)
print(stats.stats.ttest_ind(val_0, val_1, equal_var=True))
print( '在0.05显著性水平下,school对房屋单价的影响显著')

snipaste_20180611_143236.png


# In[20]:


# print(sndHsPr['price'].groupby(sndHsPr['subway']).describe().T)/
val_0= sndHsPr[sndHsPr['subway'] == 0]['price'].dropna()
val_1 = sndHsPr[sndHsPr['subway'] == 1]['price'].dropna()
leveneTestRes = stats.levene(val_0, val_1, center='median')
print("="*50)
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes)
print("="*50)
print(stats.stats.ttest_ind(val_0, val_1, equal_var=True))
print( '在0.05显著性水平下,subway对房屋单价的影响显著')

snipaste_20180611_143241.png


# In[21]:


sndHsPr.plot(x='AREA', y='price', kind='scatter')
sndHsPr.corr(method='pearson')['price']

snipaste_20180611_143246.png


# # 建立房价预测模型

# In[22]:


'''forward select'''
def forward_select(data, response):
remaining = set(data.columns)
remaining.remove(response)
selected = []
current_score, best_new_score = float('inf'), float('inf')
while remaining:
aic_with_candidates=[]
for candidate in remaining:
formula = "{} ~ {}".format(
response,' + '.join(selected + [candidate]))
aic = ols(formula=formula, data=data).fit().aic
aic_with_candidates.append((aic, candidate))
aic_with_candidates.sort(reverse=True)
best_new_score, best_candidate=aic_with_candidates.pop()
if current_score > best_new_score:
remaining.remove(best_candidate)
selected.append(best_candidate)
current_score = best_new_score
print ('aic is {},continuing!'.format(current_score))
else:
print ('forward selection over!')
break

formula = "{} ~ {} ".format(response,' + '.join(selected))
print('final formula is {}'.format(formula))
model = ols(formula=formula, data=data).fit()
return(model)
# ## 线性回归模型

# In[23]:


lm_m = ols('price ~ C(dist) + C(roomnum) + C(halls) + AREA + C(floor) + C(subway) + C(school)',
data=sndHsPr).fit()
lm_m.summary()

2018-06-11_1437242222222.png

# In[24]:


data_for_select = sndHsPr
lm_m = forward_select(data=data_for_select, response='price')
print(lm_m.rsquared)

snipaste_20180611_143808.png

# ## 对因变量取对数的线性模型

# In[25]:


sndHsPr['price_ln'] = np.log(sndHsPr['price'])
lm_m = ols('price_ln ~ C(dist) + C(roomnum) + C(halls) + AREA + C(floor) + C(subway) + C(school)',
data=sndHsPr).fit()
lm_m.summary()

2018-06-11_143614.png

# # 预测: 假设有一家三口,父母为了能让孩子在东城区上学,想买一套邻近地铁的两居室,面积是70平方米,中层楼层,那么房价大约是多少呢?

# In[26]:


lm_m.predict(pd.DataFrame([['dongcheng',2,0,70.0,'middle',1,1],],columns = ['dist', 'roomnum', 'halls', 'AREA', 'floor', 'subway', 'school']))


snipaste_20180611_143901.png

推荐 0
本文由 顺子的 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册