Q&A
pythonで下記のコードを書きました。
画像を2つはりました。1つはグラフで、もう1つはデータフレームの画像です。両者をみるとわかりますが、グラフの目盛りと、データフレームの値の水準が違います
データフレームにある水準の値をあらわすようにしたいのですが、どのように修正すればいいのでしょうか?
python
1コード 2import numpy as np 3import pandas_datareader.data as web 4import pandas as pd 5import matplotlib.pyplot as plt 6import scipy.stats as ss 7from matplotlib.animation import FuncAnimation 8import japanize_matplotlib 9import pandas_datareader.data as web #データのダウンロードライブラリ 10 11AAPL=web.DataReader("AAPL", "yahoo","2020/1/1")['Adj Close'] 12MSFT=web.DataReader("MSFT", "yahoo","2020/1/1")['Adj Close'] 13AMZN=web.DataReader("AMZN", "yahoo","2020/1/1")['Adj Close'] 14 15AAPL=AAPL/AAPL.iloc[0]#株価の指数化 16 17lnAAPL=np.log(AAPL) 18dlnAAPL=lnAAPL.diff().dropna() 19 20MSFT=MSFT/MSFT.iloc[0] 21MSFT 22lnMSFT=np.log(MSFT) 23dlnMSFT=lnMSFT.diff().dropna() 24 25AMZN=AMZN/AMZN.iloc[0] 26AMZN 27lnAMZN=np.log(AMZN) 28dlnAMZN=lnAMZN.diff().dropna() 29 30def portfolio_rebalance(tsd1,tsd2,tsd3): 31 port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna() 32 port.columns=('p1','p2','p3') 33 port['a1']=0 34 port['a2']=0 35 port['a3']=0 36 port['v']=1 37 38 n=len(port) 39 40 p1=port['p1'].iloc[0] 41 p2=port['p2'].iloc[0] 42 p3=port['p3'].iloc[0] 43 v=port['v'].iloc[0] 44 45 a1=float(v*0.418/p1) 46 a2=float(v*0.363/p2) 47 a3=float(v*0.219/p3) 48 49 port.iloc[0,3]=a1 50 port.iloc[0,4]=a2 51 port.iloc[0,5]=a3 52 53 for i in range(1,len(port)): 54 p1=port['p1'].iloc[i]#今日のAAPLの株価 55 p2=port['p2'].iloc[i]#今日のMSFTの株価 56 p3=port['p3'].iloc[i]#今日のAMZNの株価 57 58 p1_0=port['p1'].iloc[i-1]#前日のAAPLの株価 59 p2_0=port['p2'].iloc[i-1]#前日のMSFTの株価 60 p3_0=port['p3'].iloc[i-1]#前日のAMZNの株価 61 62 a1_0=port['a1'].iloc[i-1]#前日のAAPLの保有株数 63 a2_0=port['a2'].iloc[i-1]#前日のMSFTの保有枚数 64 a3_0=port['a3'].iloc[i-1]#前日のAMZNの保有枚数 65 66 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 67 68 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 69 70 v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値 71 72 port.iloc[i,6]=v#リバランスポートフォリオの価値のアップデート 73 74 75 port.iloc[i,3]=a1#AAPLの株数のアップデート 76 port.iloc[i,4]=a2#MSFTの株数のアップデート 77 port.iloc[i,5]=a3#AMZNの株数のアップデート 78 79 port['v2']=port.p1/3+port.p2/3+port.p3/3#リバランスの無いポートフォリオの価値 80 return port 81port=portfolio_rebalance(AAPL,MSFT,AMZN) 82 83plt.figure(figsize=(20, 20), dpi=50)#グラフの大きさ 84lnport=np.log(port) 85lnport.v.plot(label="効率的フロンティア",linewidth=1.0) 86lnport.v2.plot(label="ウェイトを3等分",linewidth=1.0) 87lnAAPL.plot(label='AAPL',style='-.',fontsize=30)#目盛りの文字の大きさを変更 88lnMSFT.plot(label='MSFT',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 89lnAMZN.plot(label='AMZN',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 90plt.legend(loc="upper left",fontsize=30) 91 92plt.title("3銘柄と効率的フロンティアのパフォーマンス",fontsize=40) 93plt.show()
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/02/19 13:23