Подтвердить что ты не робот

Построение категориальных данных с помощью pandas и matplotlib

У меня есть кадр данных с категориальными данными:

     colour  direction
1    red     up
2    blue    up
3    green   down
4    red     left
5    red     right
6    yellow  down
7    blue    down

Я хочу сгенерировать некоторые графики, например круговые диаграммы и гистограммы, основанные на категориях. Возможно ли это без создания фиктивных числовых переменных? Что-то вроде

df.plot(kind='hist')
4b9b3361

Ответ 1

Вы можете просто использовать value_counts в серии:

df['colour'].value_counts().plot(kind='bar')

введите описание изображения здесь

Ответ 2

вот так:

df.groupby('colour').size().plot(kind='bar')

Ответ 3

Вы можете найти полезную mosaic из statsmodels. Что также может дать статистическую подсветку для отклонений.

from statsmodels.graphics.mosaicplot import mosaic
plt.rcParams['font.size'] = 16.0
mosaic(df, ['direction', 'colour']);

enter image description here

Но остерегайтесь ячеек размером 0 - они вызовут проблемы с метками.

Смотрите этот ответ для деталей

Ответ 4

Вы также можете использовать countplot из seaborn. Этот пакет основан на pandas для создания высокоуровневого графического интерфейса. Это дает вам хорошее оформление и правильные метки оси бесплатно.

import pandas as pd
import seaborn as sns
sns.set()

df = pd.DataFrame({'colour': ['red', 'blue', 'green', 'red', 'red', 'yellow', 'blue'],
                   'direction': ['up', 'up', 'down', 'left', 'right', 'down', 'down']})
sns.countplot(df['colour'], color='gray')

enter image description here

Он также поддерживает окраску баров в нужный цвет с небольшим фокусом

sns.countplot(df['colour'],
              palette={color: color for color in df['colour'].unique()})

enter image description here

Ответ 5

Чтобы отобразить несколько категориальных элементов в виде гистограмм на одном графике, я бы предложил:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(
    {
        "colour": ["red", "blue", "green", "red", "red", "yellow", "blue"],
        "direction": ["up", "up", "down", "left", "right", "down", "down"],
    }
)

categorical_features = ["colour", "direction"]
fig, ax = plt.subplots(1, len(categorical_features))
for i, categorical_feature in enumerate(df[categorical_features]):
    df[categorical_feature].value_counts().plot("bar", ax=ax[i]).set_title(categorical_feature)
fig.show()

enter image description here