質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

472閲覧

線グラフのデータが上手く表示されない

mufufu

総合スコア37

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/20 08:10

5銘柄の比率を決めて、効率的ユーフォリアという名称でグラフを描こうとしたんですが、画像のように上手く表示されません

データフレームをみると、a1~a5には株価変化率、p1~p5には株式保有比率は入ってくるはずなのに、データがずれているようです。

その結果、v(効率的ユーフォリア)がずっと「1」と表示されているようです

どのように修正すればいいですか?

イメージ説明

イメージ説明

python

1import numpy as np 2import pandas_datareader.data as web 3import pandas as pd 4import matplotlib.pyplot as plt 5import scipy.stats as ss 6from matplotlib.animation import FuncAnimation 7import japanize_matplotlib 8import pandas_datareader.data as web #データのダウンロードライブラリ 9 10AAPL=web.DataReader("AAPL", "yahoo","2017/1/1")['Adj Close'] 11MSFT=web.DataReader("MSFT", "yahoo","2017/1/1")['Adj Close'] 12AMZN=web.DataReader("AMZN", "yahoo","2017/1/1")['Adj Close'] 13GOOG=web.DataReader("GOOG", "yahoo","2017/1/1")['Adj Close'] 14PSQ=web.DataReader("PSQ", "yahoo","2017/1/1")['Adj Close'] 15 16AAPL=AAPL/AAPL.iloc[0]#株価の指数化 17 18lnAAPL=np.log(AAPL) 19dlnAAPL=lnAAPL.diff().dropna() 20 21MSFT=MSFT/MSFT.iloc[0] 22MSFT 23lnMSFT=np.log(MSFT) 24dlnMSFT=lnMSFT.diff().dropna() 25 26AMZN=AMZN/AMZN.iloc[0] 27AMZN 28lnAMZN=np.log(AMZN) 29dlnAMZN=lnAMZN.diff().dropna() 30 31 32GOOG=GOOG/GOOG.iloc[0] 33GOOG 34lnGOOG=np.log(GOOG) 35dlnGOOG=lnGOOG.diff().dropna() 36 37 38PSQ=PSQ/PSQ.iloc[0] 39PSQ 40lnPSQ=np.log(PSQ) 41dlnPSQ=lnPSQ.diff().dropna() 42 43def portfolio_rebalance(tsd1,tsd2,tsd3,tsd4,tsd5): 44 port=pd.concat([tsd1,tsd2,tsd3,tsd4,tsd5],axis=1).dropna() 45 port.columns=('p1','p2','p3','p4','p5') 46 port['a1']=0 47 port['a2']=0 48 port['a3']=0 49 port['a4']=0 50 port['a5']=0 51 port['v']=1 52 53 n=len(port) 54 55 p1=port['p1'].iloc[0] 56 p2=port['p2'].iloc[0] 57 p3=port['p3'].iloc[0] 58 p4=port['p4'].iloc[0] 59 p5=port['p5'].iloc[0] 60 v=port['v'].iloc[0] 61 62 a1=float(v*0.126/p1) 63 a2=float(v*0.172/p2) 64 a3=float(v*0.068/p3) 65 a4=float(v*0.107/p4) 66 a5=float(v*0.527/p5) 67 68 port.iloc[0,3]=a1 69 port.iloc[0,4]=a2 70 port.iloc[0,5]=a3 71 port.iloc[0,6]=a4 72 port.iloc[0,7]=a5 73 74 for i in range(1,len(port)): 75 p1=port['p1'].iloc[i]#今日のAAPLの株価 76 p2=port['p2'].iloc[i]#今日のMSFTの株価 77 p3=port['p3'].iloc[i]#今日のAMZNの株価 78 p4=port['p4'].iloc[i]#今日のAMZNの株価 79 p5=port['p5'].iloc[i]#今日のAMZNの株価 80 81 p1_0=port['p1'].iloc[i-1]#前日のAAPLの株価 82 p2_0=port['p2'].iloc[i-1]#前日のMSFTの株価 83 p3_0=port['p3'].iloc[i-1]#前日のAMZNの株価 84 p4_0=port['p4'].iloc[i-1]#前日のAMZNの株価 85 p5_0=port['p5'].iloc[i-1]#前日のAMZNの株価 86 87 a1_0=port['a1'].iloc[i-1]#前日のAAPLの保有株数 88 a2_0=port['a2'].iloc[i-1]#前日のMSFTの保有枚数 89 a3_0=port['a3'].iloc[i-1]#前日のAMZNの保有枚数 90 a4_0=port['a4'].iloc[i-1]#前日のAMZNの保有枚数 91 a5_0=port['a5'].iloc[i-1]#前日のAMZNの保有枚数 92 93 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 94 95 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 96 97 v=a1_0*p1+a2_0*p2+a3_0*p3+a4_0*p4+a5_0*p5#今日のリバランスポートフォリオの価値 98 99 100 port.iloc[i,8]=v#リバランスポートフォリオの価値のアップデート 101 102 103 port.iloc[i,3]=a1#AAPLの株数のアップデート 104 port.iloc[i,4]=a2#MSFTの株数のアップデート 105 port.iloc[i,5]=a3#AMZNの株数のアップデート 106 port.iloc[i,6]=a4#AMZNの株数のアップデート 107 port.iloc[i,7]=a5#AMZNの株数のアップデート 108 109 port['v2']=port.p1/5+port.p2/5+port.p3/5+port.p4/5+port.p5/5 #リバランスの無いポートフォリオの価値 110 return port 111port=portfolio_rebalance(AAPL,MSFT,AMZN,GOOG,PSQ) 112 113plt.figure(figsize=(15, 15), dpi=50)#グラフの大きさ 114 115#下記の内容は対数変換されたデータをプロット 116# lnport.v.plot(label="効率的フロンティア",linewidth=1.0) 117# lnport.v2.plot(label="ウェイトを3等分",linewidth=1.0) 118# lnAAPL.plot(label='AAPL',style='-.',fontsize=30)#目盛りの文字の大きさを変更 119# lnMSFT.plot(label='MSFT',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 120# lnAMZN.plot(label='AMZN',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 121 122 123#下記は元のプロット 124port.v.plot(label="効率的フロンティア",linewidth=1.0) 125port.v2.plot(label="ウェイトを5等分",linewidth=1.0) 126AAPL.plot(label='AAPL',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 127MSFT.plot(label='MSFT',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 128AMZN.plot(label='AMZN',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 129GOOG.plot(label='GOOG',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 130PSQ.plot(label='PSQ',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 131 132plt.margins(x=0) 133plt.legend(loc="upper left",fontsize=30) 134plt.grid(True) 135plt.title("効率的ユーフォリア、SP500、NASDAQ100、パフォーマンス",fontsize=40) 136plt.show() 137 138

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

port.iloc で指定するインデックスは以下の様になるのではないかと思われます。

python

1 #port.iloc[i,8]=v#リバランスポートフォリオの価値のアップデート 2 port.iloc[i,10]=v#リバランスポートフォリオの価値のアップデート 3 4 #port.iloc[i,3]=a1#AAPLの株数のアップデート 5 #port.iloc[i,4]=a2#MSFTの株数のアップデート 6 #port.iloc[i,5]=a3#AMZNの株数のアップデート 7 #port.iloc[i,6]=a4#AMZNの株数のアップデート 8 #port.iloc[i,7]=a5#AMZNの株数のアップデート 9 port.iloc[i,5]=a1#AAPLの株数のアップデート 10 port.iloc[i,6]=a2#MSFTの株数のアップデート 11 port.iloc[i,7]=a3#AMZNの株数のアップデート 12 port.iloc[i,8]=a4#AMZNの株数のアップデート 13 port.iloc[i,9]=a5#AMZNの株数のアップデート

イメージ説明

投稿2022/02/20 09:07

melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mufufu

2022/02/20 09:30

2つずらせば、確かに値がほしいところに落ち着きました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問