J'ai un bloc de données avec des données catégorielles:
colour direction
1 red up
2 blue up
3 green down
4 red left
5 red right
6 yellow down
7 blue down
Je souhaite générer des graphiques, comme des camemberts et des histogrammes basés sur les catégories. Est-ce possible sans créer de variables numériques factices? Quelque chose comme
df.plot(kind='hist')
df["colour"].value_counts().plot(kind='bar')
comme alternative courantedf['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Vous pouvez trouver des
mosaic
graphiques utiles à partir de statsmodels. Ce qui peut également donner une mise en évidence statistique des variances.from statsmodels.graphics.mosaicplot import mosaic plt.rcParams['font.size'] = 16.0 mosaic(df, ['direction', 'colour']);
Mais méfiez-vous des cellules de taille 0 - elles poseront des problèmes avec les étiquettes.
Voir cette réponse pour plus de détails
la source
comme ça :
df.groupby('colour').size().plot(kind='bar')
la source
Vous pouvez également utiliser
countplot
fromseaborn
. Ce package s'appuie surpandas
pour créer une interface de traçage de haut niveau. Il vous donne un bon style et des étiquettes d'axe correctes gratuitement.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')
Il prend également en charge la coloration des barres de la bonne couleur avec une petite astuce
sns.countplot(df['colour'], palette={color: color for color in df['colour'].unique()})
la source
Pour tracer plusieurs caractéristiques catégorielles sous forme de graphiques à barres sur le même tracé, je suggérerais:
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()
la source