Analyse der UPS- und FedEx-Aktienrendite mit Pandas_datareader in Python

Ich habe bereits gezeigt wie bspw. BIP-Daten von FRED mit pandas_datareader in Python abgerufen bzw. angefragt werden können. Ich habe auch die Aktienkurse für bspw. Procter & Gamble unter Verwendung von Yahoo Finance als Quelle analysiert und die Daten über pandas_datareader abgerufen.

In diesem Beitrag möchte ich die täglichen Aktienrenditen für UPS und FedEx analysieren. Ich werde die Daten mit pandas_datareader einsammeln. Ich werde die Daten weiter analysieren und die Ergebnisse mit matplotlib.pyplot visualisieren.

Wie immer besteht der erste Schritt aus dem Import von relevante Modulen:

# relevante module importieren
import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

Der nächste Schritt besteht darin die Aktienkursdaten von Yahoo Finance über pandas_datareader abzurufen:

# Datum und Uhrzeit für Start- und Enddatum definieren
start_date = datetime.datetime(2000, 1, 1)
end_date = datetime.datetime(2020, 9, 30)
# Importiere Bestandsdaten für einen bestimmten Zeitraum zwischen Start- und Enddatum von Yahoo Finance
ups = web.DataReader("UPS", "yahoo", start_date, end_date)
fedex = web.DataReader("FDX", "yahoo", start_date, end_date)

In diesem Beitrag benötigen wir einige Hilfsfunktionen. Ich definiere zuerst eine tägliche Aktienrendite-Plotfunktion:

def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2):
    # figur erzeugen
    plt.figure(figsize=(17.5,10))
    # linienplot zur darstellung täglicher rendite erstellen
    plt.plot(df1.index,returns1,color=color1,alpha=alpha1)
    plt.plot(df1.index,returns2,color=color2,alpha=alpha2) # df1.index absichtlich hier
    # titel hinzufügen
    plt.title(title, size=22)
    # x-achse beschriften
    plt.xlabel(xtitle, size=16)
    # y-achse beschriften
    plt.ylabel(ytitle, size=16)

Ich definiere auch eine Histogramm-Plotfunktion zum Plotten der Verteilung täglicher Aktienrenditen:

def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2):
    # Figur erzeugen
    plt.figure(figsize=(17.5,10))
    # linienplot der täglichen rendite erzeugen
    plt.hist(returns1,histtype="bar",color=color1,alpha=alpha1,label=name1,bins=100)
    plt.hist(returns2,histtype="bar",color=color2,alpha=alpha2,label=name2,bins=100) # df1.index placed here on purpose
    # titel hinzufügen
    plt.title(title, size=22)
    # x-achse beschriften
    plt.xlabel(xtitle, size=16)
    # y-achse beschriften
    plt.ylabel(ytitle, size=16)

Zusätzlich definiere ich eine Aktienkurs-Zeitreihe-Plotfunktion:

def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2):
    # Figur erzeugen
    plt.figure(figsize=(17.5,10))
    # linien-plot der Kursentwicklung erzeugen
    plt.plot(df1.index,df1["Close"],color=color1,alpha=0.5)
    plt.plot(df1.index,df2["Close"],color=color2,alpha=0.5) # df1.index placed here on purpose
    # Titel hinzufügen
    plt.title(title, size=22)
    # x-Achse beschriften
    plt.xlabel(xtitle, size=16)
    # y-Achse beschriften
    plt.ylabel(ytitle, size=16)

Schließlich definiere ich eine Funktion zur Berechnung der täglichen Aktienrendite:

def returns(df):
    prices = df["Close"]
    returns = [0 if i == 0 else 100*(prices[i]-prices[i-1])/(prices[i-1]) for i in range(0,len(prices))]
    return(returns)

Jetzt verwende ich die oben genannte Funktion zur Berechnung der täglichen Aktienrendite, um die täglichen Aktienrenditen von UPS und FedEx seit 2020 auf der Grundlage der täglichen Aktienschlusskurse zu berechnen:

return_ups = returns(ups)
return_fedex = returns(fedex)

Ich drucke die Länge beider Rückgabelisten aus und stelle dabei sicher, dass die Daten konsistent sind:

print(len(return_ups))
5220
print(len(return_fedex))
5220

Ich teste auch, dass die Länge der Datumsliste für Ups und Fedex-Datenrahmen der Länge der Liste der täglichen Aktienrenditen entspricht:

print(len(ups.index))
5220
print(len(fedex.index))
5220

Der Test ist erfolgreich. Die Daten scheinen konsistent zu sein. Jetzt verwende ich die bereits definierte Plotfunktion um die täglichen Aktienrenditen für UPS und FedEx seit 2000 zu visualisieren:

plottingReturns("UPS [black] vs. FedEx [orange] daily stock returns since 2000","Date","Daily stock return [%]",ups,fedex,"black","orange",return_ups,return_fedex,0.25,0.60)

Betrachten wir die Verteilung der täglichen Aktienrenditen für UPS und FedEx mithilfe der Histogramm-Plotfunktion von oben:

histogramReturns("Histogram of daily stock returns for UPS [black] and FedEx [orange]","Daily return [%]","Absolute frequency [-]","black","orange",return_ups,return_fedex,0.25,0.60,"UPS","FedEx")

Um diese Analyse abzuschließen lasset mich abschließend die Entwicklung des Schlusskurses der Aktie im Laufe der Zeit seit 2000 darstellen. Dazu verwende ich die oben im vorliegenden Beitrag definierte Preisdiagrammfunktion:

plottingPrices("Daily stock price development for UPS [black] and FedEx [orange]","Date","Daily stock closing price [USD]",ups,fedex,"black","orange")

FedEx war im Durchschnitt eine rentablere Investition, aber auch riskanter.

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Close

Meta