Что происходит с неправильным порядком этого графика при использовании `.sort_values ​​()`? - PullRequest
0 голосов
/ 06 мая 2020

Мне повезло, что я обнаружил эту ошибку при анализе данных:

Я делаю три столбчатых графика. Корреляция Пирсона, корреляция Спирмена, а затем график, показывающий разницу 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 

Это приводит к следующему графику:

Incorrect Plot

Однако, догадываясь, я решил проверить фрейм данных 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'), и он был исправлен. Значения / столбцы теперь связаны с правильными переменными, но график не упорядочен.

Corrected Plot

Я хотел бы знать:

  1. Почему это происходит?
  2. Почему это происходит только с графиком SP?
  3. Как я могу построить свои графики в порядке возрастания, чтобы имена переменных также были в правильном порядке?

Мне повезло, что я это заметил, но мне нужна помощь, чтобы исправить это. Спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Проблема заключается не в сортировке фрейма данных, а в параметре x-ticks, в частности в параметре sharex=True, поскольку вы строите график на подзаголовках, все они будут иметь один и тот же порядок. pearson и spearman порядок был одинаковым, поэтому затронул только comparison.

Это должно исправить следующее:

fig, axes = plt.subplots(1,3,figsize=(12, 4), )
...