Визуализация NaN-значений в свойствах класса через Pandas GroupBy - PullRequest
0 голосов
/ 28 декабря 2018

Причиной такого рода и помощи сообществу я решил первую проблему, с которой я столкнулся в моей работе, которую вы можете увидеть здесь: Основная проблема - необходим для понимания предстоящего

После того, как я использовал этоЯ хотел визуализировать распределение классов и нан-значений в функциях.Поэтому я строю это в виде гистограммы.с несколькими классами это очень удобно.

проблема в том, что у меня есть около 120 различных классов и всего 50000 объектов данных - графики не читаются с таким количеством данных.

для этого я хотел разделить визуализацию.

для каждого класса должен быть подплот, показывающий сумму значений наноструктур каждого объекта.

Данные:

CLASS FEATURE1 FEATURE2 FEATURE3
  X      1        1        2
  B      0        0        0
  C      2        3        1

Фактический участок:

Normal Plot

Ожидаемые участки:

enter image description here enter image description here enter image description here

Ни один из моих подходов не работал до сих пор.

  1. Я пытался решить ее с помощью df.groupBy('Class').plot(kind="barh", subplots=True) - полностью уничтожил макет и построил график для объекта, а не для класса.
  2. Я попробовал этот подход , но если язаписать свой groupBy-df в переменную 'grouped', я могу распечатать его в идеальном формате со всей информацией, но не могу получить к нему доступ, как это сделано в решении.я всегда получаю сообщение об ошибке: «строковые индексы должны быть целыми числами»

мой подход:

grouped = df.groupby('Class') 
for name, group in grouped: 
    group.plot.bar()

РЕДАКТИРОВАТЬ - Дополнительная информация

Данные, которые я использую, полностьюкатегорический - без числовых значений - я хочу отобразить количество нан-значений в различных функциях классов (меток) моего набора данных.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Группировка - это путь, просто установите метки

for name, grp in df3.groupby('CLASS'):
    ax = grp.plot.bar()
    ax.set_xticks([])
    ax.set_xlabel(name)
0 голосов
/ 28 декабря 2018

С помощью решения, предоставленного @meW, я смог достичь результата, близкого к моей цели.

Мне пришлось сделать два шага, чтобы фактически использовать его решение.

  1. Приведите GroupBy-Object к DataFrame-Object через df = pd.DataFrame(df.groupBy('Class').count().rsub(df.groupby('Class').size(), axis =0)
  2. . С помощью группового запроса столбец класса был преобразован в индекс, поэтому мне пришлось преобразовать его обратно через grouped['class'] = grouped.index
0 голосов
/ 28 декабря 2018

Решение с использованием seaborn

import seaborn as sns
ndf = pd.melt(df, id_vars="CLASS", var_name="feature", value_name="val")
sns.catplot("feature", "val", col="CLASS", data=ndf, kind="bar", col_wrap=1)
plt.show()

plt

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