数据分析(三)
接下来我们再探究各个顺序变量(ordinal variable)和price之间的关系,用斯皮尔曼等级相关系数(Spearman’s rank-order correlation)来计算相关性
plt.figure(figsize=(12, 10))
plt.subplot(211)
sns.boxplot(y='bathrooms', x='price', data=kc_train, orient='h')
plt.subplot(212)
sns.boxplot(y='grade', x='price', data=kc_train, orient='h')
plt.show()
这里我们可以看出,bathrooms和garde等连续变量是具有等级的特性,我们就可以用斯皮尔曼相关系数来计算他们的与price的相关性。
from scipy.stats import spearmanr
r, p = spearmanr(kc_train['floors'], kc_train['price'])
print ('floors 和 price 斯皮尔曼相关系数为 %s,其中 p = %s' %(r,p))
r, p = spearmanr(kc_train['bedrooms'], kc_train['price'])
print ('bedrooms 和 price 斯皮尔曼相关系数为 %s,其中 p = %s' %(r,p))
r, p = spearmanr(kc_train['bathrooms'], kc_train['price'])
print ('bathrooms 和 price 斯皮尔曼相关系数为 %s,其中 p = %s' %(r,p))
r, p = spearmanr(kc_train['grade'], kc_train['price'])
print ('grade 和 price 斯皮尔曼相关系数为 %s,其中 p = %s' %(r,p))
a,b:是一维或二维数组,b是可选的。
axis:整型或者空值,如果axis = 0(默认值),则每列代表一个变量,并在行中进行观察。如果axis = 1,则转换关系:每行代表一个变量,而列包含观察值。
nan_policy : {‘propagate’, ‘raise’, ‘omit’}, 都是可选的,定义输入包含nan时的处理方式。'propagate’返回nan,'raise’抛出错误,‘omit’执行忽略nan值的计算。默认为’propagate’。
我们就可以得出以下几个结论:
连续变量中sqft_living、sqft_above、sqft_basement与price之间存在极强的相关关系
二元变量basement_present、renovated与price之间存在一定的相关关系,但是关联度较小
几个顺序变量(floors、bedrooms、bathrooms、grade)都与price之间存在相关关系。
这里讲个知识点——斯皮尔曼(spearman)相关系数和皮尔森(pearson)相关系数的区别。
1.连续数据,正态分布,线性关系,用pearson相关系数是最恰当,当然用spearman相关系数也可以,效率没有pearson相关系数高。
2.上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。
3.两个定序测量数据之间也用spearman相关系数,不能用pearson相关系数。
pearson相关通常是用来计算等距及等比数据或者说连续数据之间的相关的,这类数据的取值不限于整数,如前后两次考试成绩的相关就适合用pearson相关。
spearman相关专门用于计算等级数据之间的关系,这类数据的特点是数据有先后等级之分但连续两个等级之间的具体分数差异却未必都是相等的,比如第一名和第二名的分数差就未必等于第二名和第三名的分数差。两次考试的排名数据适用于spearman相关。
spearman相关只能计算等级数据,但pearson相关却既可以用来算等级相关,也可以算连续数据的相关,只不过一般默认用pearson相关计算连续数据的相关。
如果数据中没有重复值, 并且当两个变量完全单调相关时,斯皮尔曼相关系数则为+1或−1。
Pearson相关系数(Pearson CorrelationCoefficient)是用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系。