2.5. Data filteren en plotten#

In dit laatste stukje kijken we hoe alles samen komt. Hiervoor gebruiken we een eenvoudig excel-bestand met gegevens. Deze kan je hier downloaden: (Download)

import pandas as pd

data = pd.read_excel('data/simple_xls.xls')
data.head()
Tijd Afstand
0 0.0 0.003347
1 0.1 0.553599
2 0.2 1.223830
3 0.3 1.890477
4 0.4 2.452919

2.5.1. Netjes plotten#

Hiervoor zagen we dat we snel de gegevens kunnen plotten door data.plot() te gebruiken. Het wordt dan echter wat moeilijker om meerdere lijnen in één figuur te plotten en het uiterlijk van onze figuur aan te passen. Daarom raden wij aan om voor het maken van nette figuren matplotlib los te importeren en daarmee een figuur en assenstelsel aan te maken, zoals we hiervoor gedaan hebben.

Wanneer we dat doen zijn er twee manieren om de gegevens uit het DataFrame in het assenstelsel te plotten. In beide gevallen moeten we duidelijk aangeven in welk assenstelsel de figuur getoond moet worden. Deze twee manieren laten wij hieronder zien:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 2)

# Plot de data in het linker assenstelsel
data.plot('Tijd', 'Afstand', ax=ax[0], color='orange', linestyle='--')
ax[0].set_ylabel('Afstand')
ax[0].set_title('Geplot met data.plot()')

# Plot de data in het rechter assenstelsel
ax[1].plot(data['Tijd'], data['Afstand'], color='green', linestyle=':')
ax[1].set_xlabel('Tijd')
ax[1].set_ylabel('Afstand')
ax[1].set_title('Geplot met ax[1].plot()')

# Zet in beide assenstelsels nog een tweede plot, om ze makkelijker te herkennen.
ax[0].plot(data['Tijd'], np.sin(data['Tijd']))
ax[1].plot(data['Tijd'], np.cos(data['Tijd']))

plt.show()
_images/05_d_data_verwerken_plotten_5_0.png

We zien dat data.plot ons altijd een legenda en label voor de x-as geeft. Wanneer we ax.plot gebruiken moeten we alles zelf opgeven. In beide gevallen kunnen we alles naar wens aanpassen en kunnen we met de bekende methoden andere lijnen in deze figuur erbij plotten.

2.5.2. Alles komt samen#

Om dit stuk van de reader af te sluiten kijken we hoe we met dit bestand verder kunnen rekenen. Hier komen veel van de onderdelen die we hiervoor behandeld hebben bij elkaar: we downloaden een bestand van het internet en slaan dit op in een DataFrame. Vervolgens kunnen we de data filteren en zelf met een functie proberen te bepalen wat het verband tussen de tijd en de afstand is.

We gebruiken hiervoor hetzelfde bestand: (Download)

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = pd.read_excel('data/simple_xls.xls')  # lees het bestand in

# De volgende lijst bevat een schatting van wat de eigenlijke data zou moeten 
# zijn. De parameters 1.5 en 3.0 kloppen nog niet helemaal
y_schatting = 1.5 * (1 - np.exp(- data['Tijd']) * np.cos(3.0 * data['Tijd']))

fig, ax = plt.subplots(1, 1, figsize=(8, 6))       # maak een figuur en
                                                   # assenstelsel aan

data.plot('Tijd', 'Afstand', label='Data', ax=ax)  # plot de gegevens uit het 
                                                   # DataFrame in het aangemaakte
                                                   # assenstelsel

ax.plot(data['Tijd'], y_schatting, label='Schatting')  # plot de schatting

ax.legend();  # zorg dat de legenda getoond wordt
ax.grid();    # voeg een grid toe aan de assen
plt.show()    # laat de figuur zien
_images/05_d_data_verwerken_plotten_7_0.png

Deze code is nog niet volledig. In de opgaven bij deze sectie vul je deze verder aan.