Kuviot Pythonilla 2

Tässä artikkelissa perehdyn seaborn-kirjaston pylväskuvioihin. Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:

https://github.com/taanila/tilastoapu/blob/master/kuviot2.ipynb

Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.

Oletan, että lukijalla on asennettuna Anaconda ja sen mukana tuleva Jupyter notebook.

Matplolib ja Seaborn

Kuvioiden luomisen kulmakivi on matplotlib-kirjasto. Lue lisää artikkelista Kuviot Pythonilla 1. Seaborn on matplotlib-kirjaston päälle rakennettu kirjasto, joka tarjoaa helpon käyttöliittymän monien muuten vaikeasti laadittavien kaavioiden laatimiseen.

Seabornia käyttäessäni aloitan tuomalla tarvittavat kirjastot:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('ggplot')

Tyylinä voit toki käyttää ggplot sijasta sinulle mieleistä tyyliä.

Harjoittelun helpoittamiseksi seaborn-kirjasto sisältää joitain valmiita esimerkki datoja. Käytän aluksi dataa Titanic-laivan matkustajista, jonka voin avata komennolla:

titanic = sns.load_dataset('titanic')
titanic.head()

Countplot

Seabornin countplot tarjoaa helpon käyttöliittymän kategorisen muuttujan jakauman esittämiseen. Kuvaan esimerkkinä hyttiluokan (first class , second class, third class) jakauman:

ax=sns.countplot(x='class', data=titanic, color='C0')
ax.set_ylabel('lukumäärä')

sns1

Huomaa erityisesti seuraavat seikat:

  • countplot tekee pylväskuvion frekvensseistä suoraan datasta ilman että minun täytyy ensin laskea frekvenssit
  • countplot-komennon käyttöliittymä on yksinkertainen: x määrittää x-akselin muuttujan ja data määrittää käytettävän datan
  • jos tallennat axes-objektin muuttujan arvoksi, niin pääset käyttämään kuvion muotoilussa  matplotlibin toimintoja.

Seuraavaksi esitän hyttiluokkien jakauman erikseen miehille, naisille ja lapsille. Tähän käytän hue-määrettä:

sns.countplot(x='class', hue='who', data=titanic)

sns2

Vaakapylväikön saan seuraavasti:

sns.countplot(y='class', hue='who', data=titanic)

sns3

Factorplot

Seuraavaksi esitän hyttiluokkien jakauman omana kuvionaan haaksirikossa menehtyneille ja siitä selvinneille:

sns.factorplot(x='class', hue='who', data=titanic, col='survived', 
   kind='count')

sns4

col-määreellä määrään minkä muuttujan perusteella jako eri kuvioihin tehdään. factorplot osaa tehdä useita kaaviolajeja; tässä määrään tehtäväksi lukumääriä esittävän pylväskuvion (kind=’count’).

Barplot

barplot tekee pylväskaavion, joka esittää oletuksena keskiarvot ja keskiarvojen virhemarginaalit:

sns.barplot(x='class', y='survived', hue='sex', data=titanic)

sns5

Tässä käytin y-muuttujana survived-muuttujaa (0=menehtyi, 1=selvisi).

Katsotaan esimerkkejä myös toista aineistoa (tips) käyttäen. tips sisältää tietoja ravintola-asiakkaiden ravintolakäynneistä.

tips = sns.load_dataset("tips")
tips.head()

Kuvaan kuinka paljon naiset ja miehet ovat keskimäärin antaneet palvelurahaa eri päivinä:

sns.barplot(x='day', y='tip', hue='sex', data=tips)

sns6

Seuraavaksi kuvaan kuinka suuri tipin osuus keskimäärin oli laskun loppusummasta:

tips['tip%'] = tips['tip']/(tips['total_bill']-tips['tip'])
sns.barplot(x='day', y='tip%', data=tips)

sns7

Katsotaan lopuksi kolmannen esimerkkiaineiston avulla työntekijöiden tyytyväisyyttä eri asioihin. Avaan ensin aineiston ja erotan dataframeen df1 pelkästään tyytyväisyysmuuttujat:

df = pd.read_excel('http://taanila.fi/data1.xlsx', 
   sheet_name = 'Data')
df1=df[['johto', 'työtov', 'työymp', 'palkkat', 'työteht']]
df1.head()

Laadin kuvion määrittämättä erikseen x– tai y– tai hue-muuttujia. Tällöin seaborn kuvaa jokaisen datan muuttujan omana pylväinään (niin kutsuttu wide form dataframe).  Lisämääre orient=’h’ määrittää käytettäväksi vaakapylväitä (horizontal).

ax=sns.barplot(data=df1, orient='h', color='C0')
ax.set_xlim(1, 5)
ax.set_title('Tyytyväisyyskeskiarvoja')
ax.set_xlabel('1=erittäin tyytymätön - 5=erittäin tyytyväinen')

sns8

Halutessani voin kuvion nähtyäni järjestää pylväät pituusjärjestykseen:

ax=sns.barplot(data=df1, orient='h', color='C0', order=
   ['työtov','työteht','työymp','johto','palkkat'])
ax.set_xlim(1, 5)
ax.set_title('Tyytyväisyyskeskiarvoja')
ax.set_xlabel('1=erittäin tyytymätön - 5=erittäin tyytyväinen')
Mainokset

Yksi ajatus artikkelista “Kuviot Pythonilla 2”

Kommentit on suljettu.