Closed50

Python on Google Colab でライフプランを作成してみる

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

このスクラップについて

このスクラップでは Google Colaboratory でライフプラン(寿命までの 1 年ごとの収支状況)を作成して表やグラフ形式で出力するまでの過程を記録する。

https://colab.research.google.com/

Google Colab もほぼ使ったことが無いので使い方を学んでいきたい。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

テキスト追加


ページ左上の「テキスト」ボタンを押すとテキストを追加できる。

テキストは Markdown で書くことができる。

編集するにはペンアイコンをクリックする。

その他にもリンクをコピーしたりコメントを追加したりできる。

あれ、スクラップ必要なくないか?笑

スクラップの方が画像とかリンクとかがキレイに表示できるからまあ良いか。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

はじめてのデータフレーム


Command + Enter で表示された!

すごい!次は複数列にしてみよう。


data を 2 次元にしたら複数列になった。

素晴らしい!1 次元目が行になって、2 次元目が列になるようだ。次は列名をつけてみよう。


列名がついた。

順調だ、次は列名を日本語にしてみよう。


日本語の列名も問題無かった。

最後にインデックスを試してみよう、今の 0 スタートでも問題ないがせっかくなので。


2023 スタートになった。

最終的なコードは下記の通り。

import pandas as pd

pd.DataFrame(data=dict(1=[10, 20, 30],2=[40, 50, 60]), index=range(2023, 2026))

https://colab.research.google.com/drive/1PD6cjApK_CPVHGWiXqOrf3kp17GI3hhN#scrollTo=2x9daPXyG2Z9&line=5&uniqifier=1

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

グラフ作成

続いて折れ線グラフで出力する方法について調べてみよう。

表の右側に表示されているグラフアイコンを押してみる。


分布のグラフが表示された。

推移を出すには df.plot() みたいにすれば良いのかな?

今更だけど Ctrl / Command + M B でコードが追加できるので便利だ。


ひとまずやりたいことはできた。

ただラベル名が日本語だと表示されないのは微妙だな。

https://colab.research.google.com/github/aquapathos/Semi3B/blob/master/HowToUseJapaneseOnColab.ipynb

https://www.teamxeppet.com/matplotlib_in_japanize-colabo/


下記の 2 行の実行で日本語も表示された。

!pip install japanize-matplotlib
import japanize_matplotlib
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

列指定


下記のように表示する列を指定できる。

df.plot(y=["列1"])

ちなみに x="列1" のようにして横軸も指定できるようだ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

10/22 (日) はここまで

50 分ほど経過したようだ。

Colab の操作ばかりで全然ライフプランを作成していない。

もうちょっとグラフを調整したい、特に横軸の小数点をなんとかしたいな。

実際にお金の計算をするのはいつになることやら。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

順調に進みすぎて怖い

ネットに Python の情報が豊富なのが一番の理由なのだけどここまでハマるポイントがあまりない。

どこかでどんでん返しが来そうだ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

Google Colab でのコード補完

Ctrl + Space でできる。

引数のヘルプも () を入力してしばらく待っていると表示されるようだ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

そろそろ本題に入れそうだ

まずは下記から手をつけていこう。

  • 何歳まで生きるか
  • 生きてるのか死んでいるか
  • 年収
  • 社会保険料
  • 所得税
  • 住民税
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

何歳まで生きるか?


国連の世界人口推計のデータポータル

https://population.un.org/dataportal/data/indicators/61/locations/392/start/1987/end/2087/table/pivotbylocation

僕は 1987 年生まれで 2020 年では 33 歳だった。

2080 年で 93 歳の時の日本男性の平均余命予想は 89.21 歳。

2075 年で 88 歳の時の日本男性の平均余命予想は 88.28 歳。

ということで 88 歳まで生きることにしよう。

あと人生 52 年もあると思うと色々とできそうで楽しみ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

コードにしてみる。


西暦年、年齢、生きているかの表が表示された。

寿命 = 88
現在の年齢 = 36
現在の西暦年 = 2023

def 年齢(西暦年):
  return 現在の年齢 + (西暦年 - 現在の西暦年)

def 生きているか(西暦年):
  return 年齢(西暦年) <= 寿命

西暦年列 = range(現在の西暦年, 現在の西暦年 - 現在の年齢 + 寿命 + 10)
年齢列 = [年齢(year) for year in 西暦年列]
生きているか列 = [生きているか(year) for year in 西暦年列]

df = pd.DataFrame(data=dict(年齢=年齢列, 生きているか=生きているか列), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

10/23 (月) はここまで

お昼休みもあったが 60 分ほど経過したので累計時間は 110 分。

次は年収について考えてみよう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

年収


月収は仮に 50 万円としてみた。

def 月収(西暦年):
  return 500000

def 年収(西暦年):
  if 年齢(西暦年) <= 75:
    return 月収(500000) * 12
  else:
    return 0

西暦年列 = range(現在の西暦年, 現在の西暦年 - 現在の年齢 + 寿命)
年齢列 = [年齢(year) for year in 西暦年列]
年収列 = [年収(year) for year in 西暦年列]

df = pd.DataFrame(data=dict(年齢=年齢列, 年収=年収列), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

社会保険料

健康保険料の一覧表は下記からダウンロードできる、都道府県ごとに若干変わるようだ。

https://www.kyoukaikenpo.or.jp/g7/cat330/sb3150/r04/r4ryougakuhyou3gatukara/

  • 健康保険料率(40 歳まで):9.51 %
  • 健康保険料率(40〜64 歳まで):11.15 %
  • 厚生年金保険料率:18.3 %

健康保険は 65 歳以上になると国民健康保険になるのかな?

厚生年金は 70 歳まで加入できるようだ。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

10/24 (火) はここまで

20 分ほど経過したので累計時間は 130 分。

社会保険のしくみは複雑すぎる。。。

次は社会保険料について考えてみよう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

追加で 10〜20 分やっていく。

社会保険料については細かい計算が面倒なので将来 75 歳までこれまで通りと仮定して計算してみよう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ショートカット

Command + Shift + P で VSCode みたいにパレットを表示できる。

また、Command + F9 でセルを全てのセルを実行できる。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

社会保険料の計算完了

76 歳以降については国民健康保険に入ることになる。

このような細かい部分は一旦置いておいて後からやろう。


年収 600 万円だと 90 万円弱の社会保険料を支払うことになる。

健康保険料率39歳以下 = 9.51e-2
健康保険料率40歳から75= 11.15e-2
厚生年金保険料率 = 18.3e-2

def 健康保険料(西暦年):
  if 年齢(西暦年) < 40:
    return int(年収(西暦年) * 健康保険料率39歳以下 / 2)
  elif 年齢(西暦年) <= 75:
    return int(年収(西暦年) * 健康保険料率40歳から75/ 2)
  else:
    return 0

def 厚生年金保険料(西暦年):
  if 年齢(西暦年) <= 75:
    return int(年収(西暦年) * 厚生年金保険料率 / 2)
  else:
    return 0

def 社会保険料(西暦年):
  return 健康保険料(西暦年) + 厚生年金保険料(西暦年)

西暦年列 = range(現在の西暦年, 現在の西暦年 - 現在の年齢 + 寿命)
年齢列 = [年齢(year) for year in 西暦年列]
年収列 = [年収(year) for year in 西暦年列]
健康保険料列 = [健康保険料(year) for year in 西暦年列]
厚生年金保険料列 = [厚生年金保険料(year) for year in 西暦年列]
社会保険料列 = [社会保険料(year) for year in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  年収=年収列,
  社会保険料=社会保険料列,
), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

10/25 (水) はここまで

20 分ほど経過したので累計時間は 150 分。

社会保険のしくみは複雑すぎる。。。

次は社会保険料について考えてみよう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

所得税

所得税を計算するには色々な控除を考える必要がある。

  • 給与所得控除
  • 小規模企業共済等掛金控除
  • 生命保険料控除
  • 地震保険料控除
  • 配偶者控除
  • 扶養控除
  • 基礎控除
  • 寄附金控除(ふるさと納税含む)

また、住宅借入金等特別控除などの期間限定の税額控除もある。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

扶養控除

扶養対象は子供だけの場合は 16 歳から巣立つまでとなるので仮に 24 歳までの 9 年間扶養すると仮定しよう。

そうなると 16〜24 歳の子供の数 × 38 万円となる。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

所得税を計算できた


年収 600 万円の場合は所得税は 10 万円くらいになるようだ。

子供が大きくなって扶養控除が増えると 4 万円くらいまで下がる。

自動手当は 1 人 1 万円くらいもらうので扶養控除が増えるよりもお得なようだ。

def 所得税の給与所得控除(西暦年):
  return int(年収(西暦年) * 20e-2 + 440000)

def 小規模企業共済等掛金控除(西暦年):
  return 400000

def 所得税の生命保険料控除(西暦年):
  return 120000

def 地震保険料控除(西暦年):
  return 15000

配偶者の現在の年齢 = 現在の年齢

def 配偶者の年齢(西暦年):
  return 配偶者の現在の年齢 + 西暦年 - 現在の西暦年

def 所得税の配偶者控除(西暦年):
  if 配偶者の年齢(西暦年) < 70:
    return 380000
  else:
    return 480000

配偶者の現在の年齢 = 現在の年齢
子供たちの現在の年齢 = [0, 2, 4]
子供が独立する年齢 = 24

def 所得税の扶養控除(西暦年):
  合計金額 = 0
  経過年数 = 西暦年 - 現在の西暦年
  for 子供の現在の年齢 in 子供たちの現在の年齢:
    子供の年齢 = 子供の現在の年齢 + 経過年数
    if 16 <= 子供の年齢 and 子供の年齢 <= 24:
      合計金額 += 380000
  return 合計金額

def 所得税の基礎控除(西暦年):
  return 480000

def 寄附金控除(西暦年):
  return 80000

def 所得税の所得控除(西暦年):
  return sum([
      所得税の給与所得控除(西暦年),
      社会保険料(西暦年),
      小規模企業共済等掛金控除(西暦年),
      所得税の生命保険料控除(西暦年),
      地震保険料控除(西暦年),
      所得税の配偶者控除(西暦年),
      所得税の扶養控除(西暦年),
      所得税の基礎控除(西暦年),
      寄附金控除(西暦年),
  ])

def 所得税の所得金額(西暦年):
  return 年収(西暦年) - 所得税の所得控除(西暦年)

def 所得税(西暦年):
  金額 = 所得税の所得金額(西暦年)
  if 金額 < 1950000:
    return int(金額 * 5e-2)
  else:
    return int(金額 * 10e-2 - 97500)

西暦年列 = range(現在の西暦年, 現在の西暦年 - 現在の年齢 + 寿命)
年齢列 = [年齢(year) for year in 西暦年列]
年収列 = [年収(year) for year in 西暦年列]
健康保険料列 = [健康保険料(year) for year in 西暦年列]
厚生年金保険料列 = [厚生年金保険料(year) for year in 西暦年列]
社会保険料列 = [社会保険料(year) for year in 西暦年列]

所得税の給与所得控除列 = [所得税の給与所得控除(year) for year in 西暦年列]
小規模企業共済等掛金控除列 = [小規模企業共済等掛金控除(year) for year in 西暦年列]
所得税の生命保険料控除列 = [所得税の生命保険料控除(year) for year in 西暦年列]
地震保険料控除列 = [地震保険料控除(year) for year in 西暦年列]
配偶者の年齢列 = [配偶者の年齢(year) for year in 西暦年列]
所得税の配偶者控除列 = [所得税の配偶者控除(year) for year in 西暦年列]
所得税の扶養控除列 = [所得税の扶養控除(year) for year in 西暦年列]
所得税の基礎控除列 = [所得税の基礎控除(year) for year in 西暦年列]
寄附金控除列 = [寄附金控除(year) for year in 西暦年列]
所得税の所得控除列 = [所得税の所得控除(year) for year in 西暦年列]
所得税の所得金額列 = [所得税の所得金額(year) for year in 西暦年列]
所得税列 = [所得税(year) for year in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  年収=年収列,
  社会保険料=社会保険料列,
  所得税の給与所得控除=所得税の給与所得控除列,
  小規模企業共済等掛金控除=小規模企業共済等掛金控除列,
  所得税の生命保険料控除=所得税の生命保険料控除列,
  地震保険料控除=地震保険料控除列,
  配偶者の年齢=配偶者の年齢列,
  所得税の配偶者控除=所得税の配偶者控除列,
  所得税の扶養控除=所得税の扶養控除列,
  所得税の基礎控除=所得税の基礎控除列,
  寄附金控除=寄附金控除列,
  所得税の所得控除=所得税の所得控除列,
  所得税の所得金額=所得税の所得金額列,
  所得税=所得税列,
), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

住民税の計算完了


年収 600 万円の場合、だいたい 20 万円になるようだ。

ただし子供が大学生くらいになる約 10 年間は 10 万円くらいになる。

10 年 × 10 万円 = 100 万円なのでかなり大きい。

def 給与所得控除(西暦年):
  return int(年収(西暦年) * 20e-2 + 440000)

def 住民税の生命保険料控除(西暦年):
  return 70000

def 住民税の地震保険料控除(西暦年):
  return min(int(所得税の地震保険料控除(西暦年) / 2), 25000)

def 住民税の配偶者控除(西暦年):
  if 配偶者の年齢(西暦年) < 70:
    return 330000
  else:
    return 480000

def 子供たちの年齢(西暦年):
  経過年数 = 西暦年 - 現在の西暦年
  return [子供の年齢 + 経過年数 for 子供の年齢 in 子供たちの現在の年齢]

def 住民税の扶養控除(西暦年):
  合計金額 = 0
  for 子供の年齢 in 子供たちの年齢(西暦年):
    if 16 <= 子供の年齢 and 子供の年齢 <= 18:
      合計金額 += 330000
    elif 19 <= 子供の年齢 and 子供の年齢 <= 22:
      合計金額 += 450000
    elif 23 <= 子供の年齢 and 子供の年齢 <= 子供が独立する年齢:
      合計金額 += 330000
  return 合計金額

def 住民税の基礎控除(西暦年):
  return 430000

def 住民税の所得控除(西暦年):
  return sum([
      給与所得控除(西暦年),
      社会保険料(西暦年),
      小規模企業共済等掛金控除(西暦年),
      住民税の生命保険料控除(西暦年),
      住民税の地震保険料控除(西暦年),
      住民税の配偶者控除(西暦年),
      住民税の扶養控除(西暦年),
      住民税の基礎控除(西暦年),
      寄附金控除(西暦年),
  ])

def 住民税の所得金額(西暦年):
  return 年収(西暦年) - 住民税の所得控除(西暦年)

def 住民税の税額控除前所得割(西暦年):
  return int(住民税の所得金額(西暦年) * 10e-2)

def 住民税の調整控除(西暦年):
  合計金額 = 50000
  if 配偶者の年齢(西暦年) < 70:
    合計金額 += 50000
  else:
    合計金額 += 100000
  for 子供の年齢 in 子供たちの年齢(西暦年):
    if 16 <= 子供の年齢 and 子供の年齢 <= 18:
      合計金額 += 50000
    elif 19 <= 子供の年齢 and 子供の年齢 <= 22:
      合計金額 += 180000
    elif 23 <= 子供の年齢 and 子供の年齢 <= 子供が独立する年齢:
      合計金額 += 50000
  return int(合計金額 * 5e-2)

def 住民税(西暦年):
  return 住民税の税額控除前所得割(西暦年) - 住民税の調整控除(西暦年)


西暦年列 = range(現在の西暦年, 現在の西暦年 - 現在の年齢 + 寿命)
年齢列 = [年齢(year) for year in 西暦年列]
年収列 = [年収(year) for year in 西暦年列]
健康保険料列 = [健康保険料(year) for year in 西暦年列]
厚生年金保険料列 = [厚生年金保険料(year) for year in 西暦年列]
社会保険料列 = [社会保険料(year) for year in 西暦年列]

給与所得控除列 = [給与所得控除(year) for year in 西暦年列]
小規模企業共済等掛金控除列 = [小規模企業共済等掛金控除(year) for year in 西暦年列]
所得税の生命保険料控除列 = [所得税の生命保険料控除(year) for year in 西暦年列]
所得税の地震保険料控除列 = [所得税の地震保険料控除(year) for year in 西暦年列]
配偶者の年齢列 = [配偶者の年齢(year) for year in 西暦年列]
所得税の配偶者控除列 = [所得税の配偶者控除(year) for year in 西暦年列]
所得税の扶養控除列 = [所得税の扶養控除(year) for year in 西暦年列]
所得税の基礎控除列 = [所得税の基礎控除(year) for year in 西暦年列]
寄附金控除列 = [寄附金控除(year) for year in 西暦年列]
所得税の所得控除列 = [所得税の所得控除(year) for year in 西暦年列]
所得税の所得金額列 = [所得税の所得金額(year) for year in 西暦年列]
所得税列 = [所得税(year) for year in 西暦年列]

住民税の生命保険料控除列 = [住民税の生命保険料控除(year) for year in 西暦年列]
住民税の地震保険料控除列 = [住民税の地震保険料控除(year) for year in 西暦年列]
住民税の配偶者控除列 = [住民税の配偶者控除(year) for year in 西暦年列]
住民税の扶養控除列 = [住民税の扶養控除(year) for year in 西暦年列]
住民税の基礎控除列 = [住民税の基礎控除(year) for year in 西暦年列]
住民税の所得控除列 = [住民税の所得控除(year) for year in 西暦年列]
住民税の所得金額列 = [住民税の所得金額(year) for year in 西暦年列]
住民税の税額控除前所得割列 = [住民税の税額控除前所得割(year) for year in 西暦年列]
住民税の調整控除列 = [住民税の調整控除(year) for year in 西暦年列]
住民税列 = [住民税(year) for year in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  # 年収=年収列,
  # 社会保険料=社会保険料列,
  # 給与所得控除=給与所得控除列,
  # 小規模企業共済等掛金控除=小規模企業共済等掛金控除列,
  # 所得税の生命保険料控除=所得税の生命保険料控除列,
  # 所得税の地震保険料控除=所得税の地震保険料控除列,
  # 配偶者の年齢=配偶者の年齢列,
  # 所得税の配偶者控除=所得税の配偶者控除列,
  # 所得税の扶養控除=所得税の扶養控除列,
  # 所得税の基礎控除=所得税の基礎控除列,
  # 寄附金控除=寄附金控除列,
  # 所得税の所得控除=所得税の所得控除列,
  # 所得税の所得金額=所得税の所得金額列,
  # 所得税=所得税列,
  住民税の生命保険料控除=住民税の生命保険料控除列,
  住民税の地震保険料控除=住民税の地震保険料控除列,
  住民税の配偶者控除=住民税の配偶者控除列,
  住民税の扶養控除=住民税の扶養控除列,
  住民税の基礎控除=住民税の基礎控除列,
  住民税の所得控除=住民税の所得控除列,
  住民税の所得金額=住民税の所得金額列,
  住民税の税額控除前所得割=住民税の税額控除前所得割列,
  住民税の調整控除=住民税の調整控除列,
  住民税=住民税列,
), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

10/25 (水) はここまで

35 分ほど経過したので累計時間は 245 分。

次は可処分所得と住宅ローン控除について考えてみよう。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

住宅ローン控除

入居時期について変わるので複雑だが 2020 年入居の場合は 13 年。

最初の 10 年は年末ローン残高の 1% だが最後の 3 年は下記の少ない方。

  • 年末ローン残高の 1 %
  • 物件購入価格の 2 % ÷ 3


3500 万円借入の場合、住宅ローン控除は13 年間合計で 300 万円くらいになるのでインパクトが大きい。

入居年 = 2020
住宅ローン借入金 = 3500e4
建物購入価格 = 2500e4
毎年返済額 = 100e4

def 入居年数(西暦年):
  return 西暦年 - 入居年

def 住宅ローン残高(西暦年):
  return max(0, int(住宅ローン借入金 - 入居年数(西暦年) * 毎年返済額))

def 住宅ローン控除(西暦年):
  年数 = 入居年数(西暦年)
  候補金額 = 0
  if 0 <= 年数 and 年数 < 10:
    候補金額 = int(住宅ローン残高(西暦年) * 1e-2)
  elif 10 <= 年数 and 年数 < 13:
    候補金額 = int(min(住宅ローン残高(西暦年) * 1e-2, 建物購入価格 * 2e-2 / 3))
  return min(候補金額, 所得税(西暦年) + 住民税(西暦年))

入居年数列 = [入居年数(西暦年) for 西暦年 in 西暦年列]
住宅ローン残高列 = [住宅ローン残高(西暦年) for 西暦年 in 西暦年列]
住宅ローン控除列 = [住宅ローン控除(西暦年) for 西暦年 in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  # 年収=年収列,
  # 社会保険料=社会保険料列,
  # 給与所得控除=給与所得控除列,
  # 小規模企業共済等掛金控除=小規模企業共済等掛金控除列,
  # 所得税の生命保険料控除=所得税の生命保険料控除列,
  # 所得税の地震保険料控除=所得税の地震保険料控除列,
  # 配偶者の年齢=配偶者の年齢列,
  # 所得税の配偶者控除=所得税の配偶者控除列,
  # 所得税の扶養控除=所得税の扶養控除列,
  # 所得税の基礎控除=所得税の基礎控除列,
  # 寄附金控除=寄附金控除列,
  # 所得税の所得控除=所得税の所得控除列,
  # 所得税の所得金額=所得税の所得金額列,
  所得税=所得税列,
  # 住民税の生命保険料控除=住民税の生命保険料控除列,
  # 住民税の地震保険料控除=住民税の地震保険料控除列,
  # 住民税の配偶者控除=住民税の配偶者控除列,
  # 住民税の扶養控除=住民税の扶養控除列,
  # 住民税の基礎控除=住民税の基礎控除列,
  # 住民税の所得控除=住民税の所得控除列,
  # 住民税の所得金額=住民税の所得金額列,
  # 住民税の税額控除前所得割=住民税の税額控除前所得割列,
  # 住民税の調整控除=住民税の調整控除列,
  住民税=住民税列,
  入居年数=入居年数列,
  住宅ローン残高=住宅ローン残高列,
  住宅ローン控除=住宅ローン控除列,
), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

可処分所得

年収 - 社会保険料 - 所得税 - 住民税 + 住宅ローン控除で計算できる。


年収 600 万円の可処分所得は 480 万円くらい、20 % くらいはお国に献上する。

def 可処分所得(西暦年):
  return sum([
      年収(西暦年),
      -社会保険料(西暦年),
      -所得税(西暦年),
      -住民税(西暦年),
      住宅ローン控除(西暦年),
  ])

可処分所得列 = [可処分所得(西暦年) for 西暦年 in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  年収=年収列,
  社会保険料=社会保険料列,
  # 給与所得控除=給与所得控除列,
  # 小規模企業共済等掛金控除=小規模企業共済等掛金控除列,
  # 所得税の生命保険料控除=所得税の生命保険料控除列,
  # 所得税の地震保険料控除=所得税の地震保険料控除列,
  # 配偶者の年齢=配偶者の年齢列,
  # 所得税の配偶者控除=所得税の配偶者控除列,
  # 所得税の扶養控除=所得税の扶養控除列,
  # 所得税の基礎控除=所得税の基礎控除列,
  # 寄附金控除=寄附金控除列,
  # 所得税の所得控除=所得税の所得控除列,
  # 所得税の所得金額=所得税の所得金額列,
  所得税=所得税列,
  # 住民税の生命保険料控除=住民税の生命保険料控除列,
  # 住民税の地震保険料控除=住民税の地震保険料控除列,
  # 住民税の配偶者控除=住民税の配偶者控除列,
  # 住民税の扶養控除=住民税の扶養控除列,
  # 住民税の基礎控除=住民税の基礎控除列,
  # 住民税の所得控除=住民税の所得控除列,
  # 住民税の所得金額=住民税の所得金額列,
  # 住民税の税額控除前所得割=住民税の税額控除前所得割列,
  # 住民税の調整控除=住民税の調整控除列,
  住民税=住民税列,
  # 入居年数=入居年数列,
  # 住宅ローン残高=住宅ローン残高列,
  住宅ローン控除=住宅ローン控除列,
  可処分所得=可処分所得列,
), index=西暦年列)

df
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

児童手当

新潟県長岡市の児童手当。

https://www.city.nagaoka.niigata.jp/kosodate/cate01/child-allowance/summary.html

  • 3歳未満の子どもの場合…月15,000円
  • 3歳以上~小学校修了前の子どもで、第1子又は第2子の場合…月10,000円
  • 3歳以上~小学校修了前の子どもで、第3子以降の場合…月15,000円
  • 小学校修了後~中学校修了前の子どもの場合…月10,000円

そろそろ第一子から第三子までの年齢列を作るべき時だ。


第 1〜2 子は 210 万円、第 3 子は 252 万円ももらえる、合計すると 672 万円!

def 児童手当支給月額(子供の年齢, 第n子):
  if 子供の年齢 < 3:
    return 15000
  elif 子供の年齢 < 13:
    if 第n子 < 3:
      return 10000
    else:
      return 15000
  elif 子供の年齢 < 16:
    return 10000
  else:
    return 0

def 第n子の児童手当(西暦年, n):
  return 児童手当支給月額(子供たちの年齢(西暦年)[n - 1], n) * 12

def 児童手当(西暦年):
  合計金額 = 0
  for i, 子供の年齢 in enumerate(子供たちの年齢(西暦年)):
    合計金額 += 第n子の児童手当(西暦年, i + 1)
  return 合計金額

def 可処分所得(西暦年):
  return sum([
    年収(西暦年),
    -社会保険料(西暦年),
    -所得税(西暦年),
    -住民税(西暦年),
    住宅ローン控除(西暦年),
    児童手当(西暦年)
  ])1子の児童手当列 = [第n子の児童手当(西暦年, 1) for 西暦年 in 西暦年列]2子の児童手当列 = [第n子の児童手当(西暦年, 2) for 西暦年 in 西暦年列]3子の児童手当列 = [第n子の児童手当(西暦年, 3) for 西暦年 in 西暦年列]
児童手当列 = [児童手当(西暦年) for 西暦年 in 西暦年列]
可処分所得列 = [可処分所得(西暦年) for 西暦年 in 西暦年列]

df = pd.DataFrame(data=dict(
  年齢=年齢列,
  # 年収=年収列,
  # 社会保険料=社会保険料列,
  # 給与所得控除=給与所得控除列,
  # 小規模企業共済等掛金控除=小規模企業共済等掛金控除列,
  # 所得税の生命保険料控除=所得税の生命保険料控除列,
  # 所得税の地震保険料控除=所得税の地震保険料控除列,
  # 配偶者の年齢=配偶者の年齢列,
  # 所得税の配偶者控除=所得税の配偶者控除列,
  # 所得税の扶養控除=所得税の扶養控除列,
  # 所得税の基礎控除=所得税の基礎控除列,
  # 寄附金控除=寄附金控除列,
  # 所得税の所得控除=所得税の所得控除列,
  # 所得税の所得金額=所得税の所得金額列,
  # 所得税=所得税列,
  # 住民税の生命保険料控除=住民税の生命保険料控除列,
  # 住民税の地震保険料控除=住民税の地震保険料控除列,
  # 住民税の配偶者控除=住民税の配偶者控除列,
  # 住民税の扶養控除=住民税の扶養控除列,
  # 住民税の基礎控除=住民税の基礎控除列,
  # 住民税の所得控除=住民税の所得控除列,
  # 住民税の所得金額=住民税の所得金額列,
  # 住民税の税額控除前所得割=住民税の税額控除前所得割列,
  # 住民税の調整控除=住民税の調整控除列,
  # 住民税=住民税列,
  # 入居年数=入居年数列,
  # 住宅ローン残高=住宅ローン残高列,
  # 住宅ローン控除=住宅ローン控除列,1子の児童手当=1子の児童手当列,2子の児童手当=2子の児童手当列,3子の児童手当=3子の児童手当列,
  児童手当列=児童手当列,
  可処分所得=可処分所得列,
), index=西暦年列)

df
このスクラップは2023/10/27にクローズされました