ツールは自分で作ろう
元々は「資産のシュミレーションをしよう」というタイトルの記事を書こうと思ったのですが、自分でプログラムを書いて計算してみよう、という話だけに終わってしまいそうだったので、もう一歩進んで、タイトルを変えました。
歳を取ると、研究やそれに付随する雑用以外にも色々やらないといけないことが出来てきます。その場合、多少は下調べした方が良いことが多いのですが、自分でツールを作って計算してみる事が出来る場合もあります。最近はChatGPTなどに問えば答えややり方を教えてくれるのかもしれませんが、前提となる知識だけで、自分で解析できることがあります。自分でやってみることの良い点は以下の様かと思います。
- 物事に対する理解が格段に深まり、専門家に相談する際にも話が弾む(話が進むかどうかは別)
- 関連する法律、税制や慣習等を知ることが出来る
- 重要なパラメタはどれか、を理解することが出来る。変えて試してみて、重要そうに見えるパラメタもそれほど重要で無いことを発見する場合がある
- 二つ以上のシュミレーションを組み合わせて総合的な計算が出来る。
- 特に、家計のシュミレーションは、自分で作れば、親の世代・子の世代・孫の世代を含めた収入と支出のシミュレーションを作ることが出来る。今の時代、皆さんの親と皆さんが同時に暮らす期間が数十年単位であることが普通なので、お互いを考慮せずにシュミレーションしてもあまり意味がない。
- 費用がかからない
- 頭の体操〜息抜きになる
- たまに、研究に役立つことがある
金融関係と住宅関係が多いのですが、これまでに、以下のような事で、ツールを作って自分で計算してみました。シュミレーションとは言いますが、確率変数を使ったものは少ないです。
- 貯蓄・投資〜老後の資産のシュミレーション
- 老人ホーム費用のシュミレーション
- ローンや借金のシュミレーション
- 不動産投資のシュミレーション
- 住宅の間取り図(壁の厚さ等も考慮してpyplotで作りました)
- 建物の壁や屋根のシュミレーション(断熱・壁内結露の計算。壁の内側から外側まで、素材と厚みを積層して、各深さでの湿度や温度を計算しました。アメダスで過去の気温や湿度の情報を得て計算しました)
- 木造住宅の断熱性能の計算(Q値(今は別の値が使われる様ですが)などを求めます。)
- トイレ・風呂等の個数のシュミレーション(ある人数が共同で暮らす場合、トイレやお風呂がいくつずつ必要か、待ち行列などを使って計算しました。大規模な建物では規則があることを知りました)
ここで終わっても良いのですが、以下、いくつかの例について少し書いてみました。
貯蓄・投資〜老後の資産のシュミレーション
まずは毎年同じ金額を投資に回して、利回りがr%、という計算をやってみてください。これを、収入のx%を投資に回す、とか、y歳で退職する、とか、退職後は退職前のz%の生活費で暮らす、とか、寿命(健康・元気で生活出来なくなる年齢)はw歳、という様に拡張すれば良いと思います。
- Life Shiftの本では、確か、この、x, y, z, wをパラメタとしていたと思います。というより、y, z, wを仮定して、xの最小値を求める、という計算を推奨していました。
- 生年によって違うのですが、yが70~80, zが50%, wが100以上みたいな仮定で計算した値が載っていた様に思います。
- 0から始めるのでなければ、現在の資産額も重要なパラメタですね。
- リスク資産の割合を気にする場合は、rで調整すれば良いかもしれません。インフレも、名目ー実質の差はどこでもあると思えば、考慮しなくても良いし、支出の方のインフレの方が進むと思えば、やはりrで調整することが可能です。
- 給与(年収)はもちろん重要な要素ですが、リニアにしか増えないし、研究職(団体職員(元公務員))の場合は、55歳から給与が増えなくなる(号俸のカーブが平らになる)ので、適当な一定額に仮定すれば良い様にも思います。
- 退職金のあるパーマネントの職についている方は、現在の年齢や職で事務方の対応も異なると思うのですが、依頼すれば退職金の額を試算してもらえます。ちなみに(最大5年間)役付きになっていると退職金が増えるので、皆さん交代で「長」のつく役職をやる様です。
- 年金に関しては定期便等で確認するか、老齢基礎年金・老齢厚生年金に関しては、公的年金シミュレータなどもあるので、参考にするのが良いかと思います。
- w歳以降、もし有料老人ホームに入居するとすれば、結構お金はかかります。そんなに長い期間ではないと思いますが。。。
老人ホーム費用のシュミレーション
初期費用と月額費用、寿命などがパラメタです。入居を決めるまでは、複数の有料老人ホーム・部屋・オプションの比較に使います。入居時の年齢で初期費用が違うのは一般的ですが、償却期間や家賃の異なるオプションも色々用意されている(カタログに書かれていないオプションも含む)ので、ホームの担当者さんと良く相談するのが良いと思います。これらのバリエーションをコードを書いて比較します。
入居後は、キャッシュフローを検討し、安心して長生き出来るか調べます。入居後のキャッシュフローがプラスになることは少ないと思いますので、心配であれば、なるべく詳しいシュミレーションをしたいですよね。また、金融資産があっても運用することは難しいので、高い利回り等を求めることは出来ません。高配当株がありがたいですね。ホームのカタログに書かれている以外に、歯科の定期診療・理美容・オムツ代(自分で購入して送った方が安いことが多い)など、月に何万円か余分にかかります。税金、介護保険料・医療保険料、利用料、医療機関に入院した場合の入院費等、定期・不定期に費用がかかりますので、入居前にシュミレーションするなら、予備費として適当額を計上した方が良さそうです。逆に補助としては、介護保険の利用料や医療費には限度額がありますし、利用料と医療費の合計にも限度額があります。夫婦の世帯あたりの限度額もあります。限度額を超えたら超えた分を補助してもらえます。非常に複雑です。。。
不動産投資のシュミレーション
不労所得って魅力的ですよね。興味があったらシュミレーションしてみることをお勧めします。不動産取引に関する格言の一つに、「業者さんが売れと言って来るものは売らない、買えと言ってくるものは買わない」というのがあります。ので、優良投資物件に巡り会える機会はほぼ無いと思いますが、シュミレーション自体は頭の体操なので、やってみても面白いかもしれません。
基本的には、ローンでお金を借りて、物件を買い(建て)賃料収入を得てローンを返す事をシュミレーションすれば良いだけです。例えば、年利1%で1億円借りて20年で返済すると、numpy-financialのpmt関数で簡単に計算出来ますが、毎月46万円返済しないといけませんよね。もし20年間毎月46万円ずつ銀行に支払う事ができたら、20年後には晴れてこの物件が自分のものになるわけです。最初の頃は、46万円のうち8万円程度が利息なので、毎月38万円分、自分のものになるわけですね。
さて、もし、この物件の賃料収入が毎月46万円あったら、年間550万円の収入があるわけですが、これを表面利回り5.5%と言います。ここから経費を差し引いて、ローンを返済し、税金を支払った残りが不労所得になるわけです。この場合、残念ながら、ローンの金額と賃料収入が同額なので、経費分が赤字となり、毎月持ち出しになりそうです。これを解決する良い方法があります。ローンを20年ではなく35年で組む事です。そうすれば、毎月の返済額は28万円になり、もしかしたら経費もカバーできて、収支トントンくらいにはなるかも知れません。現実的には更に厳しくて、賃料収入毎月46万円というのが、大体は全室12ヶ月満室という仮定です。空室があったり、入れ替わりがあったりすると、すぐ46万円が平均40万円位に下がってしまいます。自分で管理出来ないと、管理費を取られます。賃料も下落します。
例え毎月持ち出しでも20年、あるいは35年後には物件が自分の物になりますが、2043年、あるいは2058年の日本(正確には物件のある地域)の人口を考えると、土地の値段が上がっているとも思えないし、建物の劣化等(あるいは、それに至るまでの修繕費)を想像するだけで、利益を上げるのはなかなか難しい様な気がします。
土地は既に自分(達)の物だったとして、新築の建物の建築費の1%を毎月の満室時の家賃として想定出来るなら(=表面利回り12%という事です)検討しても良いかも、という感じですね。昨今、建築費の高騰のため、大手の建築業者が持ってくるのは、建物だけの表面利回りが5%程度だそうです。。。
間取り図
最後まで完成せずに終わったのですが、コーポラティブハウスの組合に参加して、外枠だけが決まっている状況で間取りを考えるのに使いました。CADの得意な皆さんなら当然CADで出来るのだとは思いますが。部屋、ドア、窓、壁、家具などをpythonのクラスとして定義して、間取り図風の図面を作りました。
偶然見つかったので、コーポラティブハウスの募集の際の建築士の書いた図面を上げておきます
建物の壁や屋根のシュミレーション
層と壁というクラスを定義して以下の様なプログラムを書きました。
出てくるのはこんな図です。実在水蒸気量が飽和水蒸気量より多いと結露します。夏と冬とそれぞれ計算します。
if __name__ == "__main__":
#アクリアマット10K100 = 層("アクリアマット", 厚み = 100.0/1000., 熱伝導抵抗 = 2.1, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール16 = 層("グラスウール", 厚み = 110.0/1000., 熱伝導率 = 0.045, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール10 = 層("グラスウール", 厚み = 110.0/1000., 熱伝導率 = 0.050, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール24 = 層("グラスウール", 厚み = 110.0/1000., 熱伝導率 = 0.038, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール24120 = 層("グラスウール", 厚み = 120.0/1000., 熱伝導率 = 0.038, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール36 = 層("グラスウール", 厚み = 30.0/1000., 熱伝導率 = 0.035, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール36120 = 層("グラスウール", 厚み = 120.0/1000., 熱伝導率 = 0.035, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール3225 = 層("グラスウール", 厚み = 25.0/1000., 熱伝導率 = 0.035, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#スタイロフォーム = 層("スタイロフォーム", 厚み = 130.0/1000., 熱伝導率 = 0.04, 透湿比抵抗 = 0.0 / (100.0/1000.0))
# 硬質ウレタンフォーム = 層("硬質ウレタンフォーム", 厚み = 30.0/1000., 熱伝導率 = 0.03, 透湿比抵抗SI = 1)
# アイシネン = 層("アイシネン", 厚み = 120.0/1000., 熱伝導率 = 0.035, 透湿比抵抗SI = 1.0 / 31.7)
# コンクリート = 層("コンクリート", 厚み = 200.0/1000., 熱伝導率 = 1.6, 透湿比抵抗SI = 0.336)
# GL工法 = 層("GL工法", 厚み = 25.0/1000., 熱伝導率 = 0.149)
# GL工法測定 0.128 kcal/mh°C
漆喰塗装 = 層("漆喰塗装", 厚み = 0.0, 熱伝導抵抗 = 0.0, 透湿抵抗Hg = 0.480)
#
# 壁の場合
#
室内側熱伝導抵抗 = 層("室内側熱伝導抵抗", 熱伝導抵抗 = 0.11)
通気側熱伝導抵抗 = 層("通気側熱伝導抵抗", 熱伝導抵抗 = 0.11)
#
# 梁の場合
#
# 室内側熱伝導抵抗 = 層("室内側熱伝導抵抗", 熱伝導抵抗 = 0.09)
# 通気側熱伝導抵抗 = 層("通気側熱伝導抵抗", 熱伝導抵抗 = 0.04)
空気層 = 層("空気層", 厚み = 0.02, 熱伝導抵抗 = 0.09, 透湿抵抗Hg = 0.042)
空気層1 = 層("空気層1", 厚み = 0.018, 熱伝導抵抗 = 0.09, 透湿抵抗Hg = 0.014)
# 空気層1= 層("通気側熱伝導抵抗", 厚み = 0.11, 熱伝導抵抗 = 0.09)
# 空気層2= 層("通気側熱伝導抵抗", 厚み = 0.1, 熱伝導抵抗 = 0.09)
#グラスウール16 = 層("グラスウール", 厚み = 110.0/1000., 熱伝導率 = 0.045, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#グラスウール161 = 層("グラスウール", 厚み = 110.0/1000., 熱伝導率 = 0.045, 透湿比抵抗 = 6.0 / (100.0/1000.0))
#通気層 = 層("通気層", 透湿抵抗 = 26.0)
# 合板 = 層("合板", 厚み = 12.0/1000., 熱伝導率 = 0.16, 透湿比抵抗SI = 0.91)
#合板18 = 層("合板18", 厚み = 18.0/1000., 熱伝導率 = 0.16, 透湿比抵抗 = 90.0 / (10.0/1000.0))
# 石膏ボード = 層("石膏ボード", 厚み = (22.0) / 1000., 熱伝導率 = 0.22, 透湿比抵抗SI = 0.0252)
# 石膏ボード = 層("石膏ボード", 厚み = (12.5) / 1000., 熱伝導率 = 0.22, 透湿比抵抗SI = 0.0252)
石膏ボード = 層("石膏ボード", 厚み = (12.5) / 1000., 熱伝導率 = 0.22, 透湿抵抗Hg = 0.7)
防湿フィルム = 層("防湿フィルム", 熱伝導抵抗 = 0.00, 透湿抵抗Hg = 170.0)
# 防湿シート = 層("防湿シートB種", 厚み = 0.003, 透湿抵抗SI = 0.144)
アクアフォームLite = 層("アクアフォームLite", 厚み = 0.085, 熱伝導率 = 0.038, 透湿抵抗Hg = 4.736)
アクアフォームNEO = 層("アクアフォームNEO", 厚み = 0.085, 熱伝導率 = 0.021, 透湿率SI = 1.88)
ノボパン = 層("ノボパン", 厚み = 0.009, 熱伝導率 = 0.133, 透湿抵抗Hg = 7.4)
透湿防水シート = 層("透湿防水シート", 熱伝導抵抗 = 0.0, 透湿抵抗Hg = 0.4)
# 壁紙 = 層("壁紙", 厚み = 0.005, 透湿抵抗 = 160.0)
# 壁紙 = 層("壁紙", 厚み = 0.001, 透湿抵抗SI = 0.0057363)
#ロンシール = 層("ロンシール", 厚み = 0.005, 透湿抵抗 = 500.0)
# ダイライト = 層("ダイライト", 厚み = 9.0/1000., 熱伝導率 = 0.16, 透湿比抵抗SI = 0.12)
壁 = []
壁.append(室内側熱伝導抵抗)
壁.append(漆喰塗装)
壁.append(石膏ボード)
# 壁.append(防湿フィルム)
壁.append(空気層)
壁.append(アクアフォームNEO)
壁.append(ノボパン)
壁.append(透湿防水シート)
壁.append(空気層1)
# 壁.append(グラスウール16)
#壁.append(防湿シート)
#壁.append(アクリアマット10K100)
#壁.append(グラスウール161)
#壁.append(空気層1)
# 壁.append(GL工法)
#壁.append(合板)
# 壁.append(硬質ウレタンフォーム)
# 壁.append(コンクリート)
#壁.append(空気層2)
#壁.append(合板18)
#壁.append(ロンシール)
# 壁.append(通気側熱伝導抵抗)
#壁.append(通気層)
t = sum(壁)
print ("t=", t)
set_wall(壁)
内側温度 = 25.0
内側湿度 = 40.0
# 内側温度 = 26.0
# 内側湿度 = 70.0
内側水蒸気圧 = 飽和水蒸気圧(内側温度) * 内側湿度 / 100.0
print("内側温度 %3.0f° 湿度 %4.0f % 水蒸気圧 %5.2f hPa" % (内側温度, 内側湿度, 内側水蒸気圧,))
外側温度 = 5.0
外側湿度 = 80.0
# 外側温度 = 40.0
# 外側湿度 = 80.0
外側水蒸気圧 = 飽和水蒸気圧(外側温度) * 外側湿度 / 100.0
print("外側温度 %3.0f° 湿度 %4.0f % 水蒸気圧 %5.2f hPa" % (外側温度, 外側湿度, 外側水蒸気圧,))
leng = len(壁) + 1
t_array = np.zeros((leng,), dtype = np.float64)
温度_array = np.zeros((leng,), dtype = np.float64)
厚み和_array = np.zeros((leng,), dtype = np.float64)
飽和水蒸気圧_array = np.zeros((leng,), dtype = np.float64)
実在水蒸気圧_array = np.zeros((leng,), dtype = np.float64)
飽和水蒸気量_array = np.zeros((leng,), dtype = np.float64)
実在水蒸気量_array = np.zeros((leng,), dtype = np.float64)
print ("層 厚み 熱伝導抵抗(㎡ K/W) 透湿抵抗(㎡ s kPa/ng)")
i = 0
for r in 壁:
r.print()
温度 = r.温度(内側温度, 外側温度)
水蒸気圧 = 飽和水蒸気圧(温度)
#print(r.名前(), 温度, 水蒸気圧, r.水蒸気圧(内側水蒸気圧, 外側水蒸気圧))
温度_array[i] = 温度
飽和水蒸気圧_array[i] = 水蒸気圧
飽和水蒸気量_array[i] = 水蒸気量(水蒸気圧, 温度)
実在水蒸気圧_array[i] = r.水蒸気圧(内側水蒸気圧, 外側水蒸気圧)
実在水蒸気量_array[i] = 水蒸気量(実在水蒸気圧_array[i], 温度)
厚み和_array[i] = r.厚み和()
i += 1
温度_array[i] = 外側温度
飽和水蒸気圧_array[i] = 飽和水蒸気圧(外側温度)
実在水蒸気圧_array[i] = 外側水蒸気圧
飽和水蒸気量_array[i] = 水蒸気量(飽和水蒸気圧_array[i], 外側温度)
実在水蒸気量_array[i] = 水蒸気量(外側水蒸気圧, 外側温度)
厚み和_array[i] = sum(壁)
fig = p.figure()
ax1 = fig.add_subplot(111)
ax1.plot(厚み和_array, 温度_array, 'b-', label = u'温度')
ax1.set_xlabel('thickness (m)')
ax1.set_xlim(0.0, sum(壁))
ax1.set_ylim(0.0, 30.0)
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('temperature', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')
ax1.legend(loc="lower left") #, prop=fp )
ax2 = ax1.twinx()
# ax2.plot(厚み和_array, 飽和水蒸気圧_array, 'r-', label=u"飽和水蒸気圧")
# ax2.plot(厚み和_array, 実在水蒸気圧_array, 'g-', label=u"実在水蒸気圧")
ax2.plot(厚み和_array, 飽和水蒸気量_array, 'r-', label=u"飽和水蒸気量")
ax2.plot(厚み和_array, 実在水蒸気量_array, 'g-', label=u"実在水蒸気量")
ax2.set_ylabel('water', color='r')
ax2.set_xlim(0.0, sum(壁))
ax2.set_ylim(0.0, 25.0)
for tl in ax2.get_yticklabels():
tl.set_color('r')
#p.legend()
p.legend(loc="upper right") #, prop=fp )
# p.show()



コメント
コメントを投稿