按照https://stats.stackexchange.com/questions/288273/partial-correlation-in-panda-dataframe-python的回答
dict = {'x1': [1, 2, 3, 4, 5], 'x2': [2, 2, 3, 4, 2], 'x3': [10, 9, 5, 4, 9], 'y' : [5.077, 32.330, 65.140, 47.270, 80.570]}
df = pd.DataFrame(dict, columns=['x1', 'x2', 'x3', 'y'])
partial_corr_array = df.as_matrix()
np.round(partial_corr(partial_corr_array), decimals=2)
我想知道是否有一种获取视觉输出的方法,对我来说看起来像这样:
array([[ 1. , 0.52, 0.15, 0.91],
[ 0.52, 1. , 0.25, -0.25],
[ 0.15, 0.25, 1. , -0.06],
[ 0.91, -0.25, -0.06, 1. ]])
与df.corr().style.background_gradient()
相同吗?即。带和注释的热图。
请注意,这是部分相关,即。我们正在控制其他变量的影响。
答案 0 :(得分:0)
您的意思是否如下:
图1
import matplotlib.pyplot as plt
partial_corr_array = np.array([[ 1., 0.52, 0.15, 0.91], [ 0.52, 1., 0.25, -0.25], [ 0.15, 0.25, 1. , -0.06], [ 0.91, -0.25, -0.06, 1. ]])
plt.matshow(partial_corr_array)
plt.colorbar()
输出
图2 基于this链接。仅绘制矩阵的下半部分,因为它在对角线上对称。
import seaborn as sns
f, ax = plt.subplots(figsize=(6, 5))
partial_corr_array = np.array([[ 1., 0.52, 0.15, 0.91], [ 0.52, 1., 0.25, -0.25], [ 0.15, 0.25, 1. , -0.06], [ 0.91, -0.25, -0.06, 1. ]])
mask = np.zeros_like(partial_corr_array, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
cmap = sns.diverging_palette(30, 10, as_cmap=True)
sns.heatmap(partial_corr_array, mask=mask, cmap=cmap, vmax=1, center=0,
square=True, linewidths=1, cbar_kws={"shrink": 0.9}, annot=True)
输出
答案 1 :(得分:0)
seaborn.heatmap
正是提供了这一点,使用fmt
控制面值字符串格式,并使用annot
控制是否显示面值(默认为False):
此外,DataFrame.corr
提供了一种方便的方法来计算各种类型的相关矩阵,并返回带有列名和行名的数据帧。默认情况下,Seaborn将使用这些标签作为轴技巧标签。
In [28]: import seaborn as sns
In [39]: sns.heatmap(df.corr(), fmt='0.2f', annot=True)
Out[39]: <matplotlib.axes._subplots.AxesSubplot at 0xd961048>