In onze eerste tutorial Datavisualisatie met Bokeh leerde je hoe je visualisaties vanaf nul opbouwt met glyphs. Nu kun je dit concept uitbreiden en grafieken bouwen vanuit verschillende datastructuren, zoals arrays en dataframes. In deze tutorial leer je hoe je data plot met NumPy-arrays, dataframes in Pandas en ColumnDataSource met Bokeh. De ColumnDataSource is de kern van Bokeh en maakt het mogelijk om data te delen over meerdere grafieken en widgets.
Bokeh-grafieken van NumPy-arrays
Lijndiagrammen maken van NumPy-arrays
# Import packagesimport numpy as np
import random
from bokeh.io import output_file, show
from bokeh.plotting import figure
# Create an array
x_array = np.array([10,20,30,40,50,60])
y_array = np.array([50,60,70,80,90,100])# Create a line plot
plot = figure()
plot.line(x_array, y_array)# Output plot
show(plot)Mogelijk gemaakt door
Spreidingsdiagrammen maken van NumPy-arrays
# Import packagesimport numpy as np
import random
from bokeh.io import output_file, show
from bokeh.plotting import figure
# Create arrays
x_arr = np.array([10,11,12,13,14,15,16])
y_arr = np.array([17,18,19,20,21,22,23])# Create plot
plot = figure(title ="Scatter plot", x_axis_label ="Label name of x axis", y_axis_label ="Label name of y axis")
plot.circle(x_arr,y_arr, size =30, alpha =0.5)# show plot
show(plot)Mogelijk gemaakt door
Dit levert de volgende grafiek op:
Grafieken maken met Pandas-dataframes
Lijnen plotten met Pandas-dataframes
De data in dit voorbeeld is afkomstig van Kaggle. De dataset bevat alle aandelen die in de S&P 500-index zijn opgenomen voor vijf jaar tot en met december 2018. Het bestand bevat zeven kolommen:
Date - dag van de week, datum in formaat jj-mm-dd
Open - openingskoers van het aandeel
High - hoogste koers van de dag
Low - laagste koers van de dag
Close - slotkoers van de dag
Volume - verhandeld volume op de dag
Name - tickersymbool van het aandeel
We willen de trend van het aandeel van Google over de periode van vijf jaar zien. Eerst laden we de data met Pandas en bekijken daarna de eerste vijf rijen van het Pandas-dataframe.
# Import packagesimport pandas as pd
# Load data
df = pd.read_csv('all_stocks_5yr.csv')
df.head()Mogelijk gemaakt door
# Focus on Google's stock
df_goog = df[df['Name']=='GOOG']# Convert date column to a time series
df_goog['date']= pd.to_datetime(df_goog['date'])
plot = figure(title="Pandas Line Plot", x_axis_type ='datetime', x_axis_label ='date', y_axis_label='Prices')
plot.line(x = df_goog['date'], y = df_goog['high'])# Output plot
show(plot)Mogelijk gemaakt door
In de grafiek was het nodig om de datums om te zetten naar datetime om de datums langs de x-as weer te geven. Daarnaast is de line-functie (glyph in Bokeh) gebruikt om een tijdreeksplot te maken van Google’s hoogste koersen.
Een spreidingsdiagram maken vanuit een Pandas-dataframe
In deze sectie gebruiken we de open-source S&P 500-aandelengegevens die beschikbaar zijn op Kaggle. In dit voorbeeld willen we de correlatie zien tussen de aandelenkoersen van Google en die van Apple. Je kunt meer leren over correlatie hier.
# Import required packages# Import packagesimport pandas as pd
from bokeh.io import output_file, show
from bokeh.plotting import figure
# Load data
df = pd.read_csv('all_stocks_5yr.csv')# Select Google and Apple stock
df_goog = df[df['Name']=='GOOG']
df_apple = df[df['Name']=='AAPL']# Select only 'date' and 'high' columns for Google and Apple
df_goog = df_goog[['date','high']]
df_apple = df_apple[['date','high']]# Rename 'high' column to 'high_goog' and 'high_apple'
df_goog.rename(columns={'high':'high_goog'}, inplace=True)
df_apple.rename(columns={'high':'high_apple'}, inplace=True)
df_merged = pd.merge(df_goog, df_apple, how='inner', on='date')# See the first five rows
df_merged.head(5)Mogelijk gemaakt door
Door te mergen zorg je ervoor dat de dagkoersen op datum bij elkaar horen. Dit voorkomt het probleem dat je koersen van verschillende datums met elkaar correleert, wat tot onjuiste statistische conclusies zou leiden.
# Create scatter plot
plot = figure(title="Pandas Scatter Plot", x_axis_label ="Apple high prices", y_axis_label="Google high prices")
plot.circle(x = df_merged['high_apple'], y = df_merged['high_goog'],color ='red', size =10, alpha =0.8)# Output the plot
show(plot)Mogelijk gemaakt door
De cirkels geven het verband weer tussen de hoogste koersen van Apple en Google. Er is een algemene positieve correlatie tussen de aandelenkoersen van Google en Apple.
Bokeh-grafieken maken met ColumnDataSource
Het doel van ColumnDataSource is dat je verschillende grafieken kunt maken met dezelfde data. Kort gezegd kun je er een basis van data mee opbouwen die je in meerdere grafieken en analyses kunt hergebruiken. Dit bespaart je tijd, omdat je data in Jupyter Notebook niet telkens opnieuw hoeft te laden.
De ColumnDataSource lijkt op een Python-dictionary, waarbij de waarde van de data in een kolom een sleutelstringnaam heeft voor precies die kolom.
Lijndiagrammen maken met ColumnDataSource
# Import packagesfrom bokeh.io import output_file, show
from bokeh.plotting import figure, ColumnDataSource
# Create the ColumnDataSource object
df_goog['date']= pd.to_datetime(df_goog['date'])
data = ColumnDataSource(df_goog)# Create time series plot
plot = figure(x_axis_type='datetime',
title='GOOG high prices ts plot',
x_axis_label ="Date",
y_axis_label ="Prices in $")
plot.line(x='date', y ='high_goog', source = data, color ='green')
show(plot)Mogelijk gemaakt door
De grafiek laat zien hoe Google’s hoogste koersen zich over een periode van 5 jaar hebben ontwikkeld, met de lijn die elk koerspunt van het aandeel aangeeft.
Om deze grafiek te maken, hebben we het volledige Google-dataframe doorgegeven aan de functie ColumnDataSource en opgeslagen als een variabele met de naam data.
Vervolgens hebben we met het argument source deze data aan de plotfunctie doorgegeven. Hierdoor kun je bij het maken van de grafiek de kolomnamen rechtstreeks gebruiken in plaats van het dataframe steeds opnieuw aan te roepen.
Tot slot hebben we de line-functie gebruikt om de groene lijn te genereren die de datapunten weergeeft.
Spreidingsdiagrammen maken met ColumnDataSource
In deze code hebben we het volledige Google-dataframe doorgegeven aan de ColumnDataSource (zoals in het lijndiagramvoorbeeld). Het dataframe wordt in de ColumnDataSource opgeslagen als een variabele met de naam data. We maken eerst het lijndiagram door de kolomnamen direct aan te roepen. Tot slot hebben we de diamond-functie gebruikt om de rode ruiten te genereren die de afzonderlijke datapunten weergeven.
# Import packagesfrom bokeh.io import output_file, show
from bokeh.plotting import figure, ColumnDataSource
# Create the ColumnDataSource object
df_goog['date']= pd.to_datetime(df_goog['date'])
data = ColumnDataSource(df_goog)# Create time series plot
plot = figure(x_axis_type='datetime',
title='GOOG high prices ts plot',
x_axis_label ="Date",
y_axis_label ="Prices in $")
plot.line(x='date', y ='high_goog', source = data, color ='green')
plot.diamond(x='date', y ='high_goog', source = data, color ='red')
show(plot)Mogelijk gemaakt door
De grafiek toont de ontwikkeling van het aandeel van Google over een periode van 5 jaar, met de rode ruiten die elk koerspunt van het aandeel aangeven.
Conclusie
Deze tutorial introduceerde de meest voorkomende datastructuren die je waarschijnlijk in Python tegenkomt en hoe je ze kunt gebruiken om je data tot leven te brengen. Hoewel Bokeh niet je enige optie is voor visualisatie in Python, onderscheidt het zich van Matplotlib of Seaborn door het gebruiksgemak en de interactieve mogelijkheden. In onze volgende tutorial ga je praktisch aan de slag met layouts om effectieve en interactieve visualisaties te maken. Wil je dieper duiken in alle datavisualisatiemogelijkheden die Bokeh biedt, bekijk dan de cursus Interactive Data Visualization with Bokeh van DataCamp.
In onze eerste tutorial Datavisualisatie met Bokeh leerde je hoe je visualisaties vanaf nul opbouwt met glyphs. Nu kun je dit concept uitbreiden en grafieken bouwen vanuit verschillende datastructuren, zoals arrays en dataframes. In deze tutorial leer je hoe je data plot met NumPy-arrays, dataframes in Pandas en ColumnDataSource met Bokeh. De ColumnDataSource is de kern van Bokeh en maakt het mogelijk om data te delen over meerdere grafieken en widgets.
Bokeh-grafieken van NumPy-arrays
Lijndiagrammen maken van NumPy-arrays
Spreidingsdiagrammen maken van NumPy-arrays
Dit levert de volgende grafiek op:
Grafieken maken met Pandas-dataframes
Lijnen plotten met Pandas-dataframes
De data in dit voorbeeld is afkomstig van Kaggle. De dataset bevat alle aandelen die in de S&P 500-index zijn opgenomen voor vijf jaar tot en met december 2018. Het bestand bevat zeven kolommen:
We willen de trend van het aandeel van Google over de periode van vijf jaar zien. Eerst laden we de data met Pandas en bekijken daarna de eerste vijf rijen van het Pandas-dataframe.
In de grafiek was het nodig om de datums om te zetten naar datetime om de datums langs de x-as weer te geven. Daarnaast is de line-functie (glyph in Bokeh) gebruikt om een tijdreeksplot te maken van Google’s hoogste koersen.
Een spreidingsdiagram maken vanuit een Pandas-dataframe
In deze sectie gebruiken we de open-source S&P 500-aandelengegevens die beschikbaar zijn op Kaggle. In dit voorbeeld willen we de correlatie zien tussen de aandelenkoersen van Google en die van Apple. Je kunt meer leren over correlatie hier.
Door te mergen zorg je ervoor dat de dagkoersen op datum bij elkaar horen. Dit voorkomt het probleem dat je koersen van verschillende datums met elkaar correleert, wat tot onjuiste statistische conclusies zou leiden.
De cirkels geven het verband weer tussen de hoogste koersen van Apple en Google. Er is een algemene positieve correlatie tussen de aandelenkoersen van Google en Apple.
Bokeh-grafieken maken met ColumnDataSource
Het doel van ColumnDataSource is dat je verschillende grafieken kunt maken met dezelfde data. Kort gezegd kun je er een basis van data mee opbouwen die je in meerdere grafieken en analyses kunt hergebruiken. Dit bespaart je tijd, omdat je data in Jupyter Notebook niet telkens opnieuw hoeft te laden.
De ColumnDataSource lijkt op een Python-dictionary, waarbij de waarde van de data in een kolom een sleutelstringnaam heeft voor precies die kolom.
Lijndiagrammen maken met ColumnDataSource
De grafiek laat zien hoe Google’s hoogste koersen zich over een periode van 5 jaar hebben ontwikkeld, met de lijn die elk koerspunt van het aandeel aangeeft.
Om deze grafiek te maken, hebben we het volledige Google-dataframe doorgegeven aan de functie ColumnDataSource en opgeslagen als een variabele met de naam data.
Vervolgens hebben we met het argument source deze data aan de plotfunctie doorgegeven. Hierdoor kun je bij het maken van de grafiek de kolomnamen rechtstreeks gebruiken in plaats van het dataframe steeds opnieuw aan te roepen.
Tot slot hebben we de line-functie gebruikt om de groene lijn te genereren die de datapunten weergeeft.
Spreidingsdiagrammen maken met ColumnDataSource
In deze code hebben we het volledige Google-dataframe doorgegeven aan de ColumnDataSource (zoals in het lijndiagramvoorbeeld). Het dataframe wordt in de ColumnDataSource opgeslagen als een variabele met de naam data. We maken eerst het lijndiagram door de kolomnamen direct aan te roepen. Tot slot hebben we de diamond-functie gebruikt om de rode ruiten te genereren die de afzonderlijke datapunten weergeven.
De grafiek toont de ontwikkeling van het aandeel van Google over een periode van 5 jaar, met de rode ruiten die elk koerspunt van het aandeel aangeven.
Conclusie
Deze tutorial introduceerde de meest voorkomende datastructuren die je waarschijnlijk in Python tegenkomt en hoe je ze kunt gebruiken om je data tot leven te brengen. Hoewel Bokeh niet je enige optie is voor visualisatie in Python, onderscheidt het zich van Matplotlib of Seaborn door het gebruiksgemak en de interactieve mogelijkheden. In onze volgende tutorial ga je praktisch aan de slag met layouts om effectieve en interactieve visualisaties te maken. Wil je dieper duiken in alle datavisualisatiemogelijkheden die Bokeh biedt, bekijk dan de cursus Interactive Data Visualization with Bokeh van DataCamp.