今回は投資信託の比較をするための
データ抽出についてです。
解説動画はこちら
投資信託の成績比較
今回は投資信託の銘柄選定のために
投資信託の比較をしていきたいと思います。
データをお借りする先はこちら
みんかぶ
データを取得する
リンク先から、比較したい銘柄を選択して
「選択したファンドを比較する」ボタンをクリックすると
銘柄比較画面に飛べるので、そこのURLをコピーしておきます。
このコードでそのページのデータが取得できます。
データ化する
そのままでは使いづらいので
読み込みできる形にします。
これでデータフレームになり見やすくなりました。
ここから、使うデータだけに絞り込み整形していきます。
ファンド名、リターン、シャープレシオのみ取得する
先ほどのまでのコードで
全体のデータが取得できていたら
必要なものののみ整形します。
今回はファンド名、リターン、シャープレシオの値を使用します。
リターン、シャープレシオの値は
1,3,5年ごとの値になっているので
正規表現でうまく抜き出してデータ化します。
ここでうまくファンド名と数値データのみになっていれば
可視化して比較することができます。
今回はリターンとシャープレシオを用いて比較していきます。
シャープレシオというのは
投資信託のリターン ÷ リスク(値動きのブレ)
の値で、リスクに対して
どれだけ効率的にリターンをあげているかの目安です。
シャープレシオが低い = リスクを取りすぎている
とも取れます。
一般的な目安としては
ということになっているようです。
早速比較してみましょう

今回はここまでです
それでは
解説動画はこちら
投資信託の成績比較
今回は投資信託の銘柄選定のために
投資信託の比較をしていきたいと思います。
データをお借りする先はこちら
みんかぶ
データを取得する
リンク先から、比較したい銘柄を選択して
「選択したファンドを比較する」ボタンをクリックすると
銘柄比較画面に飛べるので、そこのURLをコピーしておきます。
このコードでそのページのデータが取得できます。
import pandas as pd from bs4 import BeautifulSoup import requests import re url = "ここにペースト" res = requests.get(url)
データ化する
そのままでは使いづらいので
読み込みできる形にします。
soup = BeautifulSoup(res.text, "html.parser")
table = soup.find("table",class_=re.compile("w-full border-t border-slate-300"))
trs = table.find_all("tr")
data = []
for tr in trs:
tds = tr.find_all("td")
tmp = []
for td in tds:
tmp.append(td.text.replace("\n",""))
data.append(tmp)
df = pd.DataFrame(data)
df
これでデータフレームになり見やすくなりました。
ここから、使うデータだけに絞り込み整形していきます。
ファンド名、リターン、シャープレシオのみ取得する
先ほどのまでのコードで
全体のデータが取得できていたら
必要なものののみ整形します。
今回はファンド名、リターン、シャープレシオの値を使用します。
リターン、シャープレシオの値は
1,3,5年ごとの値になっているので
正規表現でうまく抜き出してデータ化します。
fand_name = data[0]
r1,r3,r5 = [],[],[]
for text in data[10]:
pat = re.compile(
r'(\d+)年([+-]?\d+(?:\.\d+)?%?|-)'
r'(?=\d年|$)'
)
pairs = re.findall(pat, text)
result = {int(y): float(v.replace("%","")) if v!="-" else 0 for y, v in pairs }
r1.append(result[1])
r3.append(result[3])
r5.append(result[5])
s1,s3,s5 = [],[],[]
for text in data[11]:
pat = re.compile(
r'(\d+)年([+-]?\d+(?:\.\d+)?|-)'
r'(?=\d年|$)'
)
pairs = re.findall(pat, text)
result = {int(y): float(v) if v!="-" else 0 for y, v in pairs }
s1.append(result[1])
s3.append(result[3])
s5.append(result[5])
df2 = pd.DataFrame()
df2["ファンド名"] = fand_name
df2["1年リターン"] = r1
df2["3年リターン"] = r3
df2["5年リターン"] = r5
df2["1年シャープレシオ"] = s1
df2["3年シャープレシオ"] = s3
df2["5年シャープレシオ"] = s5
df2
ここでうまくファンド名と数値データのみになっていれば
可視化して比較することができます。
リターンとシャープレシオで散布図にする
今回はリターンとシャープレシオを用いて比較していきます。
シャープレシオというのは
投資信託のリターン ÷ リスク(値動きのブレ)
の値で、リスクに対して
どれだけ効率的にリターンをあげているかの目安です。
シャープレシオが高い = より効率よく運用されている
ということになります。シャープレシオが低い = リスクを取りすぎている
とも取れます。
一般的な目安としては
ということになっているようです。
早速比較してみましょう
import plotly.express as px
fig = px.scatter(
df2,
x="5年リターン",
y="5年シャープレシオ",
color="ファンド名",
hover_name="ファンド名",
title="ファンド別:5年リターン × 5年シャープレシオ",
)
fig.update_layout(
xaxis_title="5年リターン (%)",
yaxis_title="5年シャープレシオ",
legend_title="ファンド名",
)
fig.show()

まとめ
銘柄が多すぎて選べない際は、リターンやシャープレシオ
手数料、信託報酬などで、色々比較するのが良いです。
同じリターンなら、シャープレシオが高いものの方が
より効率良く運用されているとみなせます。
なお短期のシャープは信用度が低いので
長い期間で見るようにしましょう。
長い期間で見るようにしましょう。
今回はここまでです
それでは





