Ontdek de relatie tussen de prijs van olie en de waarde van Shell aandelen met Python

In deze tutorial analyseren we de relatie tussen de prijzen van Shell-aandelen, ruwe olie en gas. We onderzoeken of er een statistisch verband bestaat tussen deze drie variabelen en visualiseren hun prijstrends over tijd. Dit biedt inzichten die van waarde kunnen zijn voor beleidsmakers, investeerders en analisten.

In het kort over Shell PLC: Shell is een Brits bedrijf dat zijn geld verdient met het oppompen en verhandelen van zowel olie als gas. Je zou dus willen onderzoeken of wanneer de waarde van olie stijgt, ook de waarde van Shell toeneemt.

In dit artikel gebruiken we cijfers van Nasdaq.com als bron. Deze cijfers kun je downloaden als .csv via de bijbehorende linkjes:
1. Shell Plc – Class A (RYDAF)
2. Brent Crude (BZ:NMX)
3. Natural Gas (NG:NMX)

Stap 1: Data laden en schoonmaken

We beginnen met het inladen van de gegevens uit drie bestanden die prijsinformatie bevatten over Shell, ruwe olie en gas. De datasets bevatten allemaal de volgende kolommen: Datum, Closing Price, Volume, Open, High en Low. Hier zijn enkele punten en acties die we gaan ondernemen met betrekking tot de gegevens:

  1. Datumformaat: De data zijn geformatteerd in het Amerikaanse formaat (MM/DD/YYYY). Dit moeten we omzetten naar een universeel formaat (YYYY-MM-DD) voor consistentie.
  2. Schoonmaken: We zullen alleen de ‘Date’ en ‘Close/Last’ kolommen gebruiken voor de analyses. De prijs in het Shell-bestand heeft een dollarteken, wat we zullen verwijderen.
  3. Consistentie in kolomnamen: De naam van de sluitingsprijskolom (‘Close/Last’) is consistent, maar we zullen deze normaliseren door de dollartekens te verwijderen en de kolommen dezelfde naam te geven.

Let op: Pas het pad in de code aan naar de locatie waar je de bestanden hebt staan. Als de csv-bestanden in dezelfde map staan kun je enkel de naam van je bestand weergeven. Bijvoorbeeld: ‘olieprijzen.csv’.

import pandas as pd

# Laden van de gegevens
shell_data = pd.read_csv('HistoricalData_Shell.csv')
olie_data = pd.read_csv('HistoricalData_Olie.csv')
gas_data = pd.read_csv('HistoricalData_Gas.csv')

# Schoonmaken van de prijskolommen
def clean_price_column(dataframe, price_col):
    dataframe[price_col] = dataframe[price_col].replace('[\$,]', '', regex=True).astype(float)

clean_price_column(shell_data, 'Close/Last')
clean_price_column(olie_data, 'Close/Last')
clean_price_column(gas_data, 'Close/Last')

shell_data['Date'] = pd.to_datetime(shell_data['Date'])
olie_data['Date'] = pd.to_datetime(olie_data['Date'])
gas_data['Date'] = pd.to_datetime(gas_data['Date'])

Stap 2: Correlatie Analyse

Na het samenvoegen van de datasets op de datum, berekenen we de correlatiecoëfficiënten om de relaties tussen de drie prijzen te beoordelen. We gebruiken hiervoor de functie .corr() uit de Pandas bibliotheek. De totale code ziet er vervolgens zo uit:

import pandas as pd

# Laden van de gegevens
shell_data = pd.read_csv('HistoricalData_Shell.csv')
olie_data = pd.read_csv('HistoricalData_Olie.csv')
gas_data = pd.read_csv('HistoricalData_Gas.csv')

# Schoonmaken van de prijskolommen
def clean_price_column(dataframe, price_col):
    dataframe[price_col] = dataframe[price_col].replace('[\$,]', '', regex=True).astype(float)

clean_price_column(shell_data, 'Close/Last')
clean_price_column(olie_data, 'Close/Last')
clean_price_column(gas_data, 'Close/Last')

shell_data['Date'] = pd.to_datetime(shell_data['Date'])
olie_data['Date'] = pd.to_datetime(olie_data['Date'])
gas_data['Date'] = pd.to_datetime(gas_data['Date'])

# Samenvoegen van de datasets en berekenen van de correlatie
merged_data = pd.merge(shell_data[['Date', 'Close/Last']], olie_data[['Date', 'Close/Last']], on='Date', suffixes=('_Shell', '_Olie'))
merged_data = pd.merge(merged_data, gas_data[['Date', 'Close/Last']], on='Date')
merged_data.rename(columns={'Close/Last': 'Close/Last_Gas'}, inplace=True)

# Zorg ervoor dat alleen numerieke kolommen worden beschouwd voor correlatie
numeric_columns = merged_data[['Close/Last_Shell', 'Close/Last_Olie', 'Close/Last_Gas']]
correlation_matrix = numeric_columns.corr()

# Aanpassen van kolomnamen in de correlatiematrix voor duidelijkheid
correlation_matrix.columns = ['Shell', 'Olie', 'Gas']
correlation_matrix.index = ['Shell', 'Olie', 'Gas']

print("Correlatiecoëfficiënten:")
print(correlation_matrix)

De correlatiematrix geeft de volgende waarden aan:

  • Shell en Ruwe Olie: De correlatiecoëfficiënt is ongeveer 0.54, wat duidt op een matig positief verband. Dit suggereert dat de prijs van Shell-aandelen enigszins gerelateerd is aan de prijs van ruwe olie.
  • Shell en Gas: De correlatiecoëfficiënt is ongeveer 0.08, wat zeer laag is. Dit suggereert dat er weinig tot geen direct verband is tussen de prijs van Shell-aandelen en de prijs van gas.
  • Ruwe Olie en Gas: De correlatiecoëfficiënt is ongeveer 0.64, wat wijst op een sterk positief verband. Dit is te verwachten, aangezien beide energieprijzen vaak door vergelijkbare marktfactoren worden beïnvloed.

Wat is de correlatiecoëfficiënt?

De correlatiecoëfficiënt is een statistische maat die de mate en richting van een lineaire relatie tussen twee variabelen aangeeft. Deze coëfficiënt varieert tussen -1 en +1.

  • Een waarde van +1 wijst op een perfect positieve correlatie, wat betekent dat als de ene variabele stijgt, de andere ook stijgt.
  • Een waarde van -1 betekent een perfect negatieve correlatie, waarbij de ene variabele daalt als de andere stijgt.
  • Een waarde van 0 geeft aan dat er geen lineair verband is.

Stap 3: Visualisatie van de prijstrends

We visualiseren de prijstrends met een Matplotlib grafiek, waarbij we de stijl van de lijnen aanpassen voor een helderdere presentatie. Voeg deze code toe onder de eerdere code en je bent klaar.

# Grafische weergave van de prijstrends
plt.figure(figsize=(14, 7))
plt.plot(merged_data['Date'], merged_data['Close/Last_Shell'], label='Shell Aandelen', color='green', linewidth=1)
plt.plot(merged_data['Date'], merged_data['Close/Last_Olie'], label='Ruwe Olie', color='black', linewidth=1)
plt.plot(merged_data['Date'], merged_data['Close/Last_Gas'], label='Gas', color='grey', linewidth=1)

plt.title('Prijsvergelijking van Shell Aandelen, Ruwe Olie, en Gas')
plt.xlabel('Datum')
plt.ylabel('Prijs (in lokale valuta)')
plt.legend()
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()

De grafiek hierboven toont de prijstrends van Shell-aandelen, ruwe olie en gas over de tijd. Hieruit kunnen we enkele observaties maken:

  • Shell en Ruwe Olie: De prijsbewegingen van Shell-aandelen en ruwe olie lijken enige gelijkenis te vertonen, wat wordt ondersteund door de matige correlatiecoëfficiënt. Wanneer de prijs van ruwe olie stijgt of daalt, volgt de prijs van Shell-aandelen vaak een vergelijkbaar patroon, hoewel niet altijd in dezelfde mate.
  • Shell en Gas: De prijs van Shell-aandelen vertoont weinig gelijkenis met de prijs van gas, zoals ook wordt bevestigd door de lage correlatiecoëfficiënt. Dit suggereert dat de factoren die de gasprijzen beïnvloeden mogelijk minder invloed hebben op Shell-aandelen.
  • Ruwe Olie en Gas: Deze twee energieprijzen vertonen meer gelijktijdige fluctuaties, wat logisch is gezien hun hogere correlatiecoëfficiënt.

Deze resultaten kunnen beleidsmakers, investeerders en analisten helpen om beter te begrijpen hoe de prijsdynamiek van Shell-aandelen samenhangt met die van belangrijke grondstoffen zoals ruwe olie en gas. Het is belangrijk om te benadrukken dat correlatie geen causaliteit impliceert, en verdere analyse zou nodig zijn om dieper in de onderliggende oorzaken van deze prijsbewegingen te duiken