
Een histogram is een representatie van de distributie van numerieke data. Een histogram lijkt qua vorm op een staafgrafiek en hierin wordt de frequentie weergegeven van data; oftewel hoe vaak bepaalde waardes voorkomen binnen een groep. De histogram is een must-have in de gereedschapskist van elke data scientist. Voordat een data scientist aan de slag gaat met data is het belangrijk dat hij een gevoel en een overzichtelijk beeld verkrijgt van deze data. Om deze reden is de histogram een belangrijk hulpmiddel bij deze eerste stap. Zo kan de onderliggende structuur van data inzichtelijk worden gemaakt.
De volgende stappen zullen worden behandeld:
- Wat is een Python histogram?
- Data
- Visualiseren met Matplotlib
- Van Pandas naar Python histogram
- De toegevoegde waarde van Seaborn
- Wat gebruik je wanneer?
Wat is een Python histogram?
Stel je wilt onderzoek doen naar de lengte van vrouwen in jouw stad. Je gaat rond op straat en vraagt aan elke vrouw die je tegenkomt hoe lang zij is. Je vraagt dit aan totaal 100 vrouwen en je noteert van elke vrouw haar lengte. Zodra je thuis komt maak je hier de volgende tabel van:
Vrouw # | Lengte (cm) |
---|---|
1 | 160 |
2 | 158 |
3 | 143 |
4 | 164 |
5 | 161 |
... | ... |
100 | 157 |
In principe is deze tabel een bepaalde weergave van de data. Het is alleen niet heel erg overzichtelijk; als mens is het moeilijk om hier verbanden in te zien of bepaalde conclusies uit te trekken. Je weet dat elke vrouw niet even lang is, de ene vrouw is korter of langer dan de andere, maar meer weet je niet. In dit geval heb je ‘slechts’ te maken met 100 vrouwen, kun je nagaan hoe onmogelijk deze opgave is voor grotere datasets.
Om de verdeling van de verschillende lengtes toch inzichtelijk te maken kun je kiezen voor een histogram. Hierbij kies je een bepaalde stapgrootte of ‘bin’. In dit geval hebben we te maken met lichaamslengtes, dus zou een bin van 10cm goed kunnen werken. Dit betekent dat de hele dataset wordt opgedeeld in die bins. Is de minimum waarde in je data 140 cm en de maximum waarde 170cm, dan krijg je de bins 140-150, 150-160, 160-170. Vervolgens bepaal je voor elke lengte in de dataset in welke bin deze waarde valt: een lengte van 161 cm valt dus in de bin 160-170. Nu kun je simpelweg per bin kijken hoeveel waardes hieraan zijn toegewezen. Als je dit plot is het resultaat een histogram:
Aan de hand van deze histogram kun je gemakkelijk zien dat de gemiddelde lengte van de ondervraagde vrouwen 160cm is. Ook valt goed te zien dat de data redelijk normaal is verdeeld. Dit is belangrijk om te zien omdat veel statistische en analytische methodes data met een normaalverdeling vereisen. Verder kun je snel zien dat de groep vrouwen die groter is dan het gemiddelde (160cm) ongeveer even groot is als de groep vrouwen die kleiner is dan het gemiddelde.
Data
Om een histogram te kunnen maken heb natuurlijk data nodig. Belangrijk om te weten is dat histogrammen alleen gebruikt kunnen worden voor numerieke data. Je kunt hiervoor een bestaande dataset gebruiken, maar in dit geval gaan we zelf data genereren. Met package Numpy kun je simpel een dataset van willekeurige waardes genereren volgens een bepaalde verdeling. In dit geval kiezen we voor de normaalverdeling. De normaalverdeling werkt aan de hand van een gemiddelde en standaarddeviatie. Door de methode random.normal() aan te roepen met waardes voor het gemiddelde, de standaarddeviatie en de grootte van de dataset wordt een array van willekeurige getallen gegenereerd.
%matplotlib inline
import numpy as np
lengtes_vrouw = np.random.normal(160, 8, 2000)
lengtes_vrouw
array([163.20924849, 162.287104 , 162.93728343, ..., 152.84203601, 153.39262712, 170.8790232 ])
Visualiseren met Matplotlib
Matplotlib is een veelgebruikte Python package en wordt gebruikt om grafieken en andere weergaven van data te kunnen maken. Deze package heeft een breed scala aan gebruiksvriendelijke ingebouwde methoden om snel en simpel een gewenste visualisatie te kunnen creëren.
Binnen de module pyplot is zo ook de methode hist() aanwezig. Deze kun je aanroepen en bovendien diverse argumenten meegeven, zoals de data en het aantal bins. Wij gaan nu deze functie hist() gebruiken om een histogram te maken van de eerder gemaakte dataset. Door bins=10 op te geven verdelen we de data in 10 groepen.
import matplotlib.pyplot as plt
plt.hist(x=lengtes_vrouw, bins=10)
plt.show()
Om de leesbaarheid van de grafiek te verbeteren kunnen we de assen namen geven en de grafiek een titel geven.
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()
Een histogram kan ook gebruikt worden om de verdeling van twee datasets met elkaar te vergelijken. 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 definiëren door bijvoorbeeld gebruik te maken van linspace(). Zo maak je een vooraf ingestelde verdeling, die je vervolgens aan beide plots meegeeft als argument.
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()
Om het overzicht te behouden over beide datasets is ervoor gekozen om de parameter alpha wat te verlagen. Dit maakt de plots namelijk wat doorzichtiger en zo kunnen beide verdelingen worden bekeken.
Van Pandas naar Python Histogram
Package Pandas is een van de meest gebruikte packages voor data science met python. Deze package wordt ook wel gezien als de “Excel on steroids” en biedt veel mogelijkheden om eenvoudig met datasets om te gaan. Verder gaan we hier niet dieper in op Pandas, behalve dat het rechtstreeks vanuit een Pandas dataframe heel simpel is om een histogram (of andere soort grafiek) te plotten. Pandas maakt namelijk achter de schermen gebruik van Matplotlib, zonder dat jij dit hoeft te doen. Jij hoeft enkel de methode plot.hist() aan te roepen.
import pandas as pd
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 toegevoegde waarde van Seaborn
Seaborn is nog een Python package en is een aanvulling op Matplotlib. Hiermee kun je, in tegenstelling tot de standaard visualisaties in Matplotib, geavanceerde visualisaties van data maken. Om een voorbeeld te geven van zo’n geavanceerde visualisatie nemen wij de kdeplot. Dit een visualisatie van een Kernel Density Estimation (KDE). KDE is simpel gezegd een manier om een kansdichtheidsfunctie van een dataset op te stellen. Je kunt het zien als een histogram waarbij de scherpe hoeken van de staven zijn vervangen door een vloeiende en doorlopende lijn. In het volgende voorbeeld laten we zien hoe je combinatie van een histogram van Matplotlib en een kdeplot van Seaborn kun creëren.
import seaborn as sns
sns.set_style('darkgrid')
fig, ax = plt.subplots()
ax.hist(lengtes_vrouw, bins=bins, alpha=0.6, label="Vrouw")
ax.hist(lengtes_man, bins=bins, alpha=0.6, label="Man")
ax2 = ax.twinx()
sns.kdeplot(lengtes_vrouw, ax=ax2)
sns.kdeplot(lengtes_man, ax=ax2)
ax2.grid(False)
ax2.axis(False)
ax.set_title('Histogram: lengteverdeling')
ax.legend()
plt.show()
Je ziet nu naast de oranje en blauwe staven van de histograms ook de oranje en blauwe lijnen van de KDE plots. Zo kan er nog meer inzicht in de dataset worden gecreëerd. Bovendien valt het je misschien al op dat de grafieken die met Seaborn worden gegenereerd er professioneler en fraaier uitzien.
Wat gebruik je wanneer?
Een histogram biedt een helder inzicht in de distributie van numerieke data. Python biedt verschillende mogelijkheden om histogrammen te maken:
- (Numpy) arrays zijn door middel van Matplotlib eenvoudig om te zetten naar een histogram.
- Pandas maakt zelf gebruik van Matplotlib. Zo is mogelijk om automatisch een Pandas dataframe om te zetten naar een histogram.
- Seaborn biedt wat meer geavanceerde tools voor data science en ziet er qua ontwerp aantrekkelijker uit.
Wil je nog veel meer leren over Python en Data Science? Schrijf je dan in voor onze Python training voor data science, onze machine learning cursus, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
Download één van onze opleidingsbrochures voor meer informatie

Peter is een ervaren data scientist en python trainer. Na zijn studie aan de Technische Universiteit Delft heeft hij zich altijd bezig gehouden met data en diverse programmeertalen. Peter heeft veel data analyses uitgevoerd en processen geautomatiseerd met Python in productieomgevingen.