使用Python中的Pandas DataReader分析UPS和FedEx的股票收益

我已经展示了如何检索例如来自FRED的GDP数据,使用Python中的pandas_datareader。我还使用Yahoo Finance作为来源并通过pandas_datareader提取了数据,分析了宝洁公司的股价。 在这篇文章中,我想分析UPS和FedEx的每日库存收益。我将使用pandas_datareader提取数据。我将对数据进行进一步分析,并使用matplotlib.pyplot将结果可视化。 与往常一样,第一步是导入相关模块:

#导入相关模块
import pandas as pd
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

下一步是通过pandas_datareader从Yahoo Finance中提取股价数据:

#定义开始和结束日期的日期时间
start_date = datetime.datetime(2000, 1, 1)
end_date = datetime.datetime(2020, 9, 30)
#从开始日期到结束日期之间的给定时间段导入库存数据,形式为Yahoo Finance
ups = web.DataReader("UPS", "yahoo", start_date, end_date)
fedex = web.DataReader("FDX", "yahoo", start_date, end_date)

在这篇文章中,我们将需要一些辅助功能。我首先定义一个每日库存收益绘图功能:

def plottingReturns(title,xtitle,ytitle,df1,df2,color1,color2,returns1,returns2,alpha1,alpha2):
    #创建图
    plt.figure(figsize=(17.5,10))
    #创建每日收益线图
    plt.plot(df1.index,returns1,color=color1,alpha=alpha1)
    plt.plot(df1.index,returns2,color=color2,alpha=alpha2)
    #添加剧情标题
    plt.title(title, size=22)
    #添加x轴标签
    plt.xlabel(xtitle, size=16)
    #添加y轴标签
    plt.ylabel(ytitle, size=16)

我还定义了一个直方图绘图函数,用于绘制每日股票收益的分布图:

def histogramReturns(title,xtitle,ytitle,color1,color2,returns1,returns2,alpha1,alpha2,name1,name2):
    #创建图
    plt.figure(figsize=(17.5,10))
    #创建每日收益线图
    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
    #添加剧情标题
    plt.title(title, size=22)
    #添加x轴标签
    plt.xlabel(xtitle, size=16)
    #添加y轴标签
    plt.ylabel(ytitle, size=16)

另外,我定义了股票时间序列图函数:

def plottingPrices(title,xtitle,ytitle,df1,df2,color1,color2):
    #创建图
    plt.figure(figsize=(17.5,10))
    #创建每日收盘价的线图
    plt.plot(df1.index,df1["Close"],color=color1,alpha=0.5)
    plt.plot(df1.index,df2["Close"],color=color2,alpha=0.5)
    #添加剧情标题
    plt.title(title, size=22)
    #添加x轴标签
    plt.xlabel(xtitle, size=16)
    #添加y轴标签
    plt.ylabel(ytitle, size=16)

最后,我定义了每日库存收益计算功能:

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)

现在,我使用上述每日股票收益计算功能,根据每日股票收盘价计算自2020年以来的UPS和FedEx每日股票收益:

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

我继续打印两个返回列表的长度,从而确保数据一致:

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

测试成功。数据似乎是一致的。现在,我使用已经定义的绘图功能来可视化自2000年以来UPS和FedEx的每日库存收益:

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)

让我们使用上方的直方图绘图功能来查看UPS和FedEx的每日股票收益的分布:

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

最后,为了完成此分析,让我们绘制自2000年以来整个时间的股票收盘价走势。为此,我使用手头文章顶部定义的价格绘制函数:

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

联邦快递平均而言是一项更有利可图的投资,但风险也更大。

Leave a Reply

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

其他操作