Мне повезло, что я обнаружил эту ошибку при анализе данных:
Я делаю три столбчатых графика. Корреляция Пирсона, корреляция Спирмена, а затем график, показывающий разницу SP для каждой переменной.
Для создания визуализации я использовал следующие строки кода. Особо следует отметить, что я использую агумент data=cor.sort_values(by='SomeMeasureHere')
def plot_response_corr(df, features, response, corr_type):
cor = pd.DataFrame()
# Measure difference between Spearman's and Pearson's to analyze for non-linearity
if corr_type == 's-p':
cor['feature'] = features
cor['spearman'] = [df[f].corr(df[response], 'spearman') for f in features]
cor['pearson'] = [df[f].corr(df[response], 'pearson') for f in features]
cor['comparison'] = cor['spearman'] - cor['pearson']
fig, axes = plt.subplots(1,3, sharex=True, figsize=(12, 4), )
[ax.tick_params('x', labelrotation=45) for ax in axes]
sns.barplot(
data=cor,
x='feature', y='comparison', ax=axes[2]
).set_title('S-P Comparison')
sns.barplot(
data=cor,
x='feature', y='spearman', ax=axes[1]
).set_title('Spearman Association')
sns.barplot(
data=cor,
x='feature', y='pearson', ax=axes[0]
).set_title('Pearson Correlation')
plt.tight_layout()
plt.show()
return cor
Это приводит к следующему графику:
Однако, догадываясь, я решил проверить фрейм данных cor
, использованный для создания этих графиков, а не просто отбросить его. Я обнаружил, что переменная с наибольшей разницей SP - это LotArea , а не GrLivArea . По какой-то причине сюжет был перевернут.
feature spearman pearson comparison
0 LotArea 0.456461 0.263843 0.192617
1 GrLivArea 0.731310 0.708624 0.022685
2 GarageArea 0.649379 0.623431 0.025947
Чтобы исправить это, я просто удалил аргумент .sort_values(by='comparison')
, и он был исправлен. Значения / столбцы теперь связаны с правильными переменными, но график не упорядочен.
Я хотел бы знать:
- Почему это происходит?
- Почему это происходит только с графиком SP?
- Как я могу построить свои графики в порядке возрастания, чтобы имена переменных также были в правильном порядке?
Мне повезло, что я это заметил, но мне нужна помощь, чтобы исправить это. Спасибо.