数据分析(二)
上一篇中连续变量影响房价的分布图中,我们可以注意到sqft_basement、yr_renovated都有存在很多为0的数据。
为了更好的分析数据,我们可以考虑构建新的二值特征分别用来表示是否有地下室、是否曾翻新过。
kc_train['basement_present'] = kc_train['sqft_basement'].apply(lambda x: 1 if x > 0 else 0)
kc_train['renovated'] = kc_train['yr_renovated'].apply(lambda x: 1 if x > 0 else 0)
这里用到lambda关键字,指的是创建了一个匿名函数。
lambda x: 1 if x>0 else 0 等价于 lambda x; z if condition y
如果满足条件就取“z”的值,不满足就取"y"的值。
这里是将sqft_basement、yr_renovated的非零值转为1,sqft_basement、yr_renovated的零值仍为0。
接下来我们就使用点二列相关系数计算两个变量之间的关系。
from scipy.stats import pointbiserialr
# 绘制箱形图
plt.figure(figsize=(12, 4))
sns.boxplot(y='basement_present', x='price', data=kc_train, orient='h')
plt.figure(figsize=(12, 4))
sns.boxplot(y='renovated', x='price', data=kc_train, orient='h')
plt.show()
# 计算点二列相关系数
r, p = pointbiserialr(kc_train['renovated'], kc_train['price'])
print ('renovated 与 price 的点二列相关系数中 r = %s,p = %s' %(r, p))
r, p = pointbiserialr(kc_train['basement_present'], kc_train['price'])
print ('basement_present 与 price 的点二列相关系数中 r = %s,p = %s' %(r, p)
boxplot中的参数orient是用于控制图像是水平(‘v’)还是垂直(‘h’)显示。
调用python中的 pointbiserialr()函数计算sqft_basement、yr_renovated点二列的相关系数
输出结果如下。
可以得出结论:
1.没有翻新过的箱形图比较窄,这表明这组房价非常接近。
2.蓝色箱型图和橙色箱型图的位置没有太大的区别,这表明有无翻新对于房价高低没有太大的影响,一般而言翻新后房价可能会高一点。
3.renovated、basement_present和price变量之间的相关性都较小。