python histogram

Een Python histogram is een staafgrafiek waarin wordt weergeven hoe vaak iets voorkomt binnen een groep. Voor een data scientist is dit een handig hulpmiddel bij het verkennen van datasets, om de samenstelling en verdeling van data duidelijk visueel te maken.

In dit blog leer je alles over een histogram in de volgende stappen:

  • Wat is een histogram in Python?
  • Data voor een histogram
  • Plotten met Matplotlib
  • Een histogram met een Pandas dataframe
  • De mogelijkheden van Seaborn
  • Wat gebruik je wanneer?

Wat is een histogram?

We leggen uit wat een histogram is aan de hand van een voorbeeld. Stel we hebben data van de lichaamslengte van een groep vrouwen. De ene vrouw zal korter of langer zijn de de ander. De verdeling van de verschillende lengtes is inzichtelijk te maken met een histogram. Hierbij kies je een bepaald aantal groepen, ook wel bins genoemd. Dit kan je voor lichaamslengtes bijvoorbeeld doen in stappen van 10cm, waarbij 150 tot 160cm een van de bins zou kunnen zijn. Vervolgens wijs je elke lengte uit de dataset aan één van de bins toe. Hiermee weet je per bin hoeveel lengtes erin voorkomen. Wanneer je dit plot is het resultaat een histogram.

python histogram plotten in pandas matplotlib of seaborn

Hierin kun je bijvoorbeeld makkelijk zien dat een vrouw uit de referentiegroep gemiddeld ongeveer 160cm lang is, dat er ongeveer evenveel vrouwen groter als kleiner zijn dan 160cm, en dat er weinig vrouwen kleiner zijn dan 140cm.

Leren hoe je data visualiseert met Python? Schrijf je in voor onze Python training.


Data voor een histogram

Om een histogram te kunnen maken is een dataset nodig. We kunnen vanuit package Numpy eenvoudig een grote dataset samenstellen van willekeurige getallen volgens een bepaalde verdeling. We kiezen hier een normaalverdeling. Met methode random.normal() krijgen we door het opgeven van het gemiddelde, de standaarddeviatie en het aantal getallen een array met willekeurige getallen.

In [3]:
%matplotlib inline
import numpy as np
lengtes_vrouw = np.random.normal(160, 8, 2000)
lengtes_vrouw
Out[3]:
array([149.1361365 , 153.5191661 , 158.48622091, ..., 167.92174767,
       146.71500198, 164.17416548])

Plotten met Matplotlib

Matplotlib is een Python package waarmee je mooie grafieken en andere visualisaties van data kunt maken. Met ingebouwde methoden ben je snel in staat een gewenst grafiektype te tonen.

Voor een histogram kunnen we binnen module pyplot gebruik maken van de methode hist(). Hier kun je diverse argumenten meegeven zoals de data en het aantal bins.

Met hist() kunnen we een histogram maken van de eerder gemaakte dataset. Door bins=10 op te geven verdelen we de data in 10 groepen.

In [4]:
import numpy as np
import matplotlib.pyplot as plt

lengtes_vrouw = np.random.normal(160, 8, 2000)

plt.hist(x=lengtes_vrouw, bins=10)
plt.show()

Met enkele toevoegingen kunnen we de leesbaarheid van het histogram verder verbeteren.

In [5]:
import numpy as np
import matplotlib.pyplot as plt

lengtes_vrouw = np.random.normal(160, 8, 2000)

plt.hist(x=lengtes_vrouw, bins=10, alpha=0.7, rwidth=0.85)
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Lengte [cm]')
plt.ylabel('Frequency')
plt.title('Histogram: lengteverdeling van vrouwen')
plt.show()

Je kunt ook eenvoudig een tweede dataset toevoegen. In ons voorbeeld is het bijvoorbeeld interessant om de verdeling in lengte van vrouwen met die van mannen te vergelijken. Hierbij moeten we ervoor zorgen dat de bins op gelijke wijze opgebouwd zijn. Dit kunnen we doen door vooraf bins te definieren door bijvoorbeeld gebruik te maken van linspace(). Hiermee maak je een specifieke array aan met een gedefinieerde verdeling.

In [6]:
%matplotlib inline
import matplotlib.pyplot as plt

import numpy as np

lengtes_vrouw = np.random.normal(160, 8, 2000)
lengtes_man = np.random.normal(175, 15, 2000)
bins = np.linspace(120, 220, 20)

plt.hist(x=lengtes_vrouw, bins=bins, alpha=0.6, rwidth=0.85, label='Vrouw')
plt.hist(x=lengtes_man, bins=bins, alpha=0.6, rwidth=0.85, label='Man')

plt.grid(axis='y', alpha=0.75)
plt.xlabel('Lengte [cm]')
plt.ylabel('Frequency')
plt.title('Histogram: lengteverdeling')
plt.legend()

plt.show()

Doordat we hier beide series deels transparant maken met parameter alpha, is ondanks de overlap goed te zien hoe beide datasets verdeeld zijn.

Een histogram met een Pandas dataframe

Package Pandas biedt veel hulpmiddelen om makkelijk met datasets in tabelvorm om te gaan. Als data scientist zul je hier veel gebruik van maken. Wat handig is, is dat Pandas direct gebruik maakt van hulpmiddelen uit Matplotlib. Hiermee kun je eenvoudig een plot maken van data uit een Pandas dataframe, zo ook een histogram. Dit doe je met plot.hist(). In onderstaand voorbeeld zie je hoe je dit kan doen.

In [7]:
%matplotlib inline
import numpy as np
import pandas as pd

lengtes_vrouw = np.random.normal(160, 8, 2000)
lengtes_man = np.random.normal(175, 15, 2000)
df = pd.DataFrame({'Vrouw': lengtes_vrouw, 'Man': lengtes_man})

ax = df.plot.hist(bins=20, alpha=0.6, rwidth=0.85, title='Histogram: lengteverdeling')
ax.grid(axis='y', alpha=0.75)

De mogelijkheden van Seaborn

Seaborn is een package wat gebruik maakt van Matplotlib, waarmee je specifieke datavisualisaties kunt maken. Een voorbeeld hiervan is een distplot, wat een combinatie is tussen een een Matplotlib histogram en een KDE plot. KDE staat voor Kernel Density Estimate, en is een manier om middels smoothing een kansdichtheidsfunctie van een dataset op te stellen. In onderstaand voorbeeld passen we dit toe.

In [8]:
import seaborn as sns

lengtes_vrouw = np.random.normal(160, 8, 2000)
lengtes_man = np.random.normal(175, 15, 2000)

bins = np.linspace(120, 220, 20)
sns.set_style('darkgrid')
ax = sns.distplot(lengtes_vrouw, bins=bins, label='Vrouw')
ax = sns.distplot(lengtes_man, bins=bins, label='Man')
ax.set_title('Histogram: lengteverdeling')
ax.legend()
Out[8]:
<matplotlib.legend.Legend at 0x11539afd0>

We zien naast de staafgrafieken nu ook lijngrafieken, dit zijn de KDE plots. Dit kan een extra verduidelijking geven van de verdelingen in de datasets. Tevens is te zien dat de grafieken die we met Seaborn maken er direct al aantrekkelijker uitzien.

Leren hoe je data visualiseert als data scientist? Schrijf je in voor één van onze trainingen.


Wat gebruik je wanneer?

Een histogram biedt duidelijk inzicht in de verdeling van een dataset. Data kan vanuit verschillende bronnen of in verschillende datatypes voorkomen. Er zijn in Python meerdere manieren om histogrammen te maken.

  • Wanneer je met (Numpy) arrays werkt, kun je met Matplotlib eenvoudig een histogram maken
  • Pandas maakt gebruik van Matplotlib, hiermee kun je van een Pandas dataframe direct een histogram maken
  • Seaborn biedt meer geavanceerde mogelijkheden voor bijvoorbeeld gecombineerde inzichten, en heeft standaard een verbeterd design

Wil jij leren hoe je verschillende visualisaties maakt met Python? Krijg in twee dagen vertrouwen in het analyseren en visualiseren van data met Python. Schrijf je in voor onze Python training voor data science en ontwikkel je onder begeleiding van ervaren trainers succesvol verder als data scientist.

by: