Трудности с импортом данных в Seaborn Boxplot - PullRequest
0 голосов
/ 14 апреля 2020

РЕДАКТИРОВАТЬ: решение было предоставлено пользователем #kgoettler ниже. Проблема возникает из-за Seaborn Boxplot, требующего, чтобы данные были организованы по переменной по оси X и значениям по оси Y. Приведенный ниже скрипт реорганизует данные в форму, совместимую с Seaborn Boxplot.

ОРИГИНАЛЬНЫЙ ВОПРОС: Моя цель - сгенерировать диаграмму Box, используя данные из файла CSV. Я хотел бы использовать библиотеку визуализации Python Seaborn. Данные организованы с помощью общего индекса (объекта) и заголовков для каждого столбца.

Image of raw data

У меня проблемы с импортом этих данных в блокпост с использованием формата

seaborn.boxplot(x="variable", y="value")

Использование Pandas собственного блочного графика это не проблема, поскольку я просто указываю, какие столбцы использовать на основе заголовков, используя следующий формат

boxplot = data.boxplot(column=['header1', 'header2', 'header3'])

Image of panda boxplot using raw data

Я бы также предпочел не указывать каждый отдельный столбец по заголовку, а скорее выбирать все столбцы в файле автоматически.

Все отзывы и комментарии приветствуются!

1 Ответ

1 голос
/ 14 апреля 2020

Что-то вроде этого должно работать:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set(style='whitegrid')

csv_file = '/path/to/file.csv'
df = pd.read_csv(csv_file)
df = (df
        .set_index(['Object'])          # Set 'Object' column to index
        .rename_axis("Metric", axis=1)  # Rename the column axis "Metric"
        .stack()                        # Stack the columns into the index
        .rename('Score')                # Rename the remaining column 'Score'
        .reset_index()                  # Reset the index
    )

Это должно дать вам DataFrame, который выглядит следующим образом:

   Object                       Metric     Score
0     MT1  B1A1 Average Splaying Score  0.426824
1     MT1  B1A2 Average Splaying Score  0.431351
2     MT1  B1A3 Average Splaying Score  1.941473
3     MT2  B1A1 Average Splaying Score -0.021672
4     MT2  B1A2 Average Splaying Score  3.357387

Затем для построения все, что вам нужно сделать, это:

fig, ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(x='Metric', y='Score', data=df, ax=ax)
ax.set_xlabel('')

Пример графика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...