Analyse af UPS- og FedEx-aktieafkast med pandas_datareader i Python

Jeg har allerede demonstreret, hvordan du kan hente f.eks. BNP-data fra FRED ved hjælp af pandas_datareader i Python. Jeg har også analyseret aktiekurser for Procter & Gamble ved hjælp af Yahoo Finance som kilde og trukket tilhørende data via pandas_datareader.

I dette indlæg vil jeg analysere daglige aktieafkast for UPS og FedEx. Jeg trækker dataene ved hjælp af pandas_datareader. Derefter vil jeg foretage yderligere analyser af disse data og visualisere resultaterne ved hjælp af matplotlib.pyplot.

Som altid er første trin at importere de relevante Python-moduler:

# import relevant modules
import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

Næste skridt er at trække aktiekursdataene fra Yahoo Finance via pandas_datareader:

# definer start- og slutdatoer
start_date = datetime.datetime(2000, 1, 1)
end_date = datetime.datetime(2020, 9, 30)
# importer aktiedata for en given periode mellem start- og slutdato fra Yahoo Finance
ups = web.DataReader("UPS", "yahoo", start_date, end_date)
fedex = web.DataReader("FDX", "yahoo", start_date, end_date)

Vi har brug for nogle hjælpefunktioner i dette indlæg. Jeg definerer først en daglig aktieafkastfunktion:

def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2):
    # opret figur
    plt.figure(figsize=(17.5,10))
    # opret linjediagrammer til daglige returneringer
    plt.plot(df1.index,returns1,color=color1,alpha=alpha1)
    plt.plot(df1.index,returns2,color=color2,alpha=alpha2) # df1.index placed here on purpose
    # tilføj titel til plot
    plt.title(title, size=22)
    # tilføj x-akselabel
    plt.xlabel(xtitle, size=16)
    # tilføj etiket på y-aksen
    plt.ylabel(ytitle, size=16)

Jeg definerer også en histogram-plotfunktion for at plotte fordelingen i daglige aktieafkast:

def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2):
    # opret figur
    plt.figure(figsize=(17.5,10))
    # oprette linjediagrammer til daglige afkast
    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
    # tilføj titel til diagram
    plt.title(title, size=22)
    # tilføj x-akselabel
    plt.xlabel(xtitle, size=16)
    # tilføj etiket på y-aksen
    plt.ylabel(ytitle, size=16)

Derudover definerer jeg en plotfunktion for aktiekurstidsserier:

def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2):
    # opret figur
    plt.figure(figsize=(17.5,10))
    # oprette linjediagrammer til daglige lukkepriser
    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
    # tilføj titel til plot
    plt.title(title, size=22)
    # tilføj x-akselabel
    plt.xlabel(xtitle, size=16)
    # tilføj etiket på y-aksen
    plt.ylabel(ytitle, size=16)

Endelig definerer jeg en daglig beregningsfunktion for aktieafkast:

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)

Nu anvender jeg ovennævnte daglige beregningsfunktion til at beregne UPSs og FedExs daglige aktieafkast siden 2020, baseret på daglige aktielukningspriser:

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

Jeg fortsætter med at udgive længden af ​​begge returlister for derved at sikre, at mine data er konsistente:

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

Jeg tester også, at længden af ​​datalisten for UPS og FedEx-datarammen er den samme som længden af ​​den daglige aktiereturliste:

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

Testen giver grønt lys. Dataene ser ud til at være konsistente. Nu bruger jeg plotfunktionen, som allerede er blevet defineret, for at visualisere daglige lagerafkast for UPS og FedEx i perioden siden 2000:

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)

Lad os se på fordelingen af ​​daglige aktieafkast for UPS og FedEx ved hjælp af histogram-funktionen:

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")

Endelig, for at færdiggøre denne analyse, lad os plotte aktieudviklingskursudvikling gennem tiden siden 2000. Til dette bruger jeg prisplanlægningsfunktionen defineret øverst i det aktuelle indlæg:

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

FedEx har i gennemsnit været en mere rentabel investering, men det har også været mere risikabelt at være investeret i FedEx.

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close

Meta