Pandalar ve matplotlib ile kategorik verileri çizme


94

Kategorik verilere sahip bir veri çerçevem ​​var:

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

Kategorilere göre pasta grafikler ve histogramlar gibi bazı grafikler oluşturmak istiyorum. Sahte sayısal değişkenler oluşturmadan mümkün müdür? Gibi bir şey

df.plot(kind='hist')

Yanıtlar:


181

value_countsSeride kullanabilirsiniz :

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

görüntü açıklamasını buraya girin


1
Önerme df["colour"].value_counts().plot(kind='bar')ortak alternatif olarak
openwonk

2
X etiketlerinin sırasını belirtmek mümkün mü?
P. Camilleri

3
Evet, x etiketlerinin sırasını açıkça belirtebilirsiniz, örneğindf['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Alexander

Lütfen bana bu arsada nasıl ayarlamalar yapabileceğimi söyler misiniz? Yani her sınıf için rengi değiştirmek istersem veya ona bir efsane eklemek istersem.
Ibtihaj Tahir

24

Yararlı bulabilirsin mosaicİstatistik modellerinden arsa . Bu, varyanslar için istatistiksel vurgulama da verebilir.

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

görüntü açıklamasını buraya girin

Ancak 0 boyutlu hücreye dikkat edin - etiketlerle ilgili sorunlara neden olurlar.

Ayrıntılar için bu yanıta bakın


Teşekkürler. ValueError almaya devam ediyorum: NA üzerinde tam sayıya dönüştürülemiyor.
Ivan

1
Bu yüzden bu cevaba referans verdim . Bu sorunu çözmeye yardımcı olmalı.
Primer

19

bunun gibi :

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

11

Ayrıca kullanabilirsiniz countplotgelen seaborn. Bu paket, pandasyüksek seviyeli bir çizim arabirimi oluşturmak için geliştirilmiştir. Size ücretsiz olarak iyi şekillendirme ve doğru eksen etiketleri sağlar.

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')

görüntü açıklamasını buraya girin

Ayrıca küçük bir numara ile çubukları doğru renkte renklendirmeyi destekler.

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

görüntü açıklamasını buraya girin


10

Birden fazla kategorik özelliği aynı arsa üzerinde çubuk grafikler olarak çizmek için şunları öneririm:

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()

görüntü açıklamasını buraya girin


1
Bu harika bir Stroop etkisidir!
Ciprian Tomoiagă
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.