Mam ramkę danych z danymi kategorycznymi:
colour direction
1 red up
2 blue up
3 green down
4 red left
5 red right
6 yellow down
7 blue down
Chcę wygenerować wykresy, takie jak wykresy kołowe i histogramy na podstawie kategorii. Czy jest to możliwe bez tworzenia fikcyjnych zmiennych numerycznych? Coś jak
df.plot(kind='hist')
df["colour"].value_counts().plot(kind='bar')
jako powszechna alternatywadf['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Możesz znaleźć przydatne
mosaic
wykresy z modeli statystycznych. Co może również dać statystyczne wyróżnienie dla wariancji.from statsmodels.graphics.mosaicplot import mosaic plt.rcParams['font.size'] = 16.0 mosaic(df, ['direction', 'colour']);
Uważaj jednak na komórkę o rozmiarze 0 - spowodują problemy z etykietami.
Zobacz tę odpowiedź, aby uzyskać szczegółowe informacje
źródło
lubię to :
df.groupby('colour').size().plot(kind='bar')
źródło
Możesz również użyć
countplot
fromseaborn
. Ten pakiet jest oparty napandas
tworzeniu interfejsu drukowania wysokiego poziomu. Zapewnia dobrą stylizację i prawidłowe etykiety osi za darmo.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')
Obsługuje również malowanie pasków w odpowiednim kolorze za pomocą małej sztuczki
sns.countplot(df['colour'], palette={color: color for color in df['colour'].unique()})
źródło
Aby wykreślić wiele cech kategorialnych jako wykresy słupkowe na tym samym wykresie, sugerowałbym:
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()
źródło
Możesz po prostu użyć
value_counts
zsort
opcją ustawioną naFalse
. Pozwoli to zachować kolejność kategoriidf['colour'].value_counts(sort=False).plot.bar(rot=0)
źródło