Advertisement
Guest User

Untitled

a guest
Mar 17th, 2024
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.20 KB | None | 0 0
  1. import numpy as np
  2. import plotly.graph_objects as go
  3. import plotly.io as pio
  4.  
  5.  
  6. def 楽天のポイント計算(積立額, カードのグレード, 保有残高):
  7.     年率 = 0
  8.     # 楽天カードの計算式
  9.     return (
  10.         積立額 * カードのグレード["倍率"] - カードのグレード["年会費"] + 年率 * 保有残高
  11.     )
  12.  
  13.  
  14. def マネックスのポイント計算(積立額, 保有残高):
  15.     # マネックス証券の計算式
  16.     倍率_first = 1.1 / 100
  17.     倍率_second = 0.6 / 100
  18.     倍率_third = 0.2 / 100
  19.     第1段階金額 = 50000
  20.     第2段階金額 = 70000
  21.     第3段階金額 = 100000
  22.     年率 = 0.03 / 12
  23.     #  ポイントの計算式
  24.     if 積立額 <1段階金額:
  25.         合計ポイント = 積立額 * 倍率_first
  26.     elif1段階金額 <= 積立額 <2段階金額:
  27.         合計ポイント =1段階金額 * 倍率_first + (積立額 - 第1段階金額) * 倍率_second
  28.     elif2段階金額 <= 積立額 <=3段階金額:
  29.         合計ポイント = (
  30.             第1段階金額 * 倍率_first
  31.             + (2段階金額 - 第1段階金額) * 倍率_second
  32.             + (積立額 - 第2段階金額) * 倍率_third
  33.         )
  34.  
  35.     return 合計ポイント + 年率 * 保有残高
  36.  
  37.  
  38. def auのポイント計算(積立額, 保有残高):
  39.     ポイント付与率 = 1 / 100
  40.     年会費 = 0 / 12
  41.     年率 = 0.005 / 12
  42.     return 積立額 * ポイント付与率 - 年会費 + 年率 * 保有残高
  43.  
  44.  
  45. def paypayのポイント計算(積立額, 保有残高):
  46.     ポイント付与率 = 0.7 / 100
  47.     年会費 = 0 / 12
  48.     合計ポイント = 積立額 * ポイント付与率 - 年会費
  49.     if 合計ポイント >= 350:
  50.         合計ポイント = 350 - 年会費
  51.     return 合計ポイント
  52.  
  53.  
  54. def paypayのポイント計算残高使用(積立額, 保有残高):
  55.     # 先にクレカを5万まで行こない残りを残高として計算する場合
  56.     クレカ最大額 = 50000
  57.     # 残高最大額 = 50000
  58.     クレカポイント付与率 = 0.7 / 100
  59.     残高ポイント付与率 = 0.5 / 100
  60.     if 積立額 <= クレカ最大額:
  61.         年会費 = 0 / 12
  62.         合計ポイント = 積立額 * クレカポイント付与率 - 年会費
  63.     else:
  64.         合計ポイント = (
  65.             クレカ最大額 * クレカポイント付与率
  66.             + (積立額 - クレカ最大額) * 残高ポイント付与率
  67.         )
  68.     return 合計ポイント
  69.  
  70.  
  71. if __name__ == "__main__":
  72.     # 積立額
  73.     x = np.linspace(0, 100000, 100)
  74.     y = np.linspace(0, 1000000, 100)
  75.     X, Y = np.meshgrid(x, y)
  76.  
  77.     rakuten_normal_grade = {"年会費": 0, "倍率": 0.5 / 100}
  78.     rakuten_gold_grade = {"年会費": 2200 / 12, "倍率": 0.75 / 100}
  79.     rakuten_premium_grade = {"年会費": 11000 / 12, "倍率": 1 / 100}
  80.  
  81.     # 計算遅いのでベクトル化
  82.     マネックスのポイント計算_vec = np.vectorize(マネックスのポイント計算)
  83.     楽天のポイント計算_vec = np.vectorize(楽天のポイント計算)
  84.     auのポイント計算_vec = np.vectorize(auのポイント計算)
  85.     paypayのポイント計算_vec = np.vectorize(paypayのポイント計算)
  86.     paypayのポイント計算残高使用_vec = np.vectorize(paypayのポイント計算残高使用)
  87.  
  88.     #  グラフ作成
  89.     plot = [
  90.         go.Surface(
  91.             x=X,
  92.             y=Y,
  93.             z=マネックスのポイント計算_vec(X, Y),
  94.             name="マネックス",
  95.         ),
  96.         go.Surface(
  97.             x=X,
  98.             y=Y,
  99.             z=楽天のポイント計算_vec(X, rakuten_normal_grade, Y),
  100.             # mode="lines",
  101.             name="楽天カード",
  102.         ),
  103.         go.Surface(
  104.             x=X,
  105.             y=Y,
  106.             z=楽天のポイント計算_vec(X, rakuten_gold_grade, Y),
  107.             # mode="lines",
  108.             name="楽天ゴールド",
  109.         ),
  110.         go.Surface(
  111.             x=X,
  112.             y=Y,
  113.             z=楽天のポイント計算_vec(X, rakuten_premium_grade, Y),
  114.             # mode="lines",
  115.             name="楽天プレミアム",
  116.         ),
  117.         go.Surface(
  118.             x=X,
  119.             y=Y,
  120.             z=auのポイント計算_vec(X, Y),
  121.             # mode="lines",
  122.             name="au",
  123.         ),
  124.         go.Surface(
  125.             x=X,
  126.             y=Y,
  127.             z=paypayのポイント計算_vec(X, Y),
  128.             # mode="lines",
  129.             name="paypayクレカのみ",
  130.         ),
  131.         go.Surface(
  132.             x=X,
  133.             y=Y,
  134.             z=paypayのポイント計算残高使用_vec(X, Y),
  135.             # mode="lines",
  136.             name="paypayクレカ->残高の順に積立",
  137.         ),
  138.     ]
  139.     fig = go.Figure(data=plot)
  140.     fig.update_layout(
  141.         scene=dict(
  142.             xaxis_title="月当たり積立額(円)",
  143.             yaxis_title="保有残高(円)",
  144.             zaxis_title="貰えるポイント(円冠算",
  145.         )
  146.     )
  147.     # fig.show()
  148.     prefix = "3D_plot"  # 保存ファイル名の接頭辞
  149.     save_name = f"{prefix}_default_scatter"
  150.     pio.write_html(fig, f"{save_name}.html")
  151.     # pio.write_image(fig, f"{save_name}.png")
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement