diff --git a/fire-101/budgeting.ipynb b/fire-101/budgeting.ipynb
index 6c29bee..ebd910d 100644
--- a/fire-101/budgeting.ipynb
+++ b/fire-101/budgeting.ipynb
@@ -17,7 +17,18 @@
"1. Understand how much you make and how much you spend\n",
"2. Understand where you spend your money\n",
" - Everyone has different styles or preferences (more or less granularity)\n",
- " - Here are my bins (housing, health, food, transportation, utilities, miscellaneous)\n",
+ " - Setup categories that work for you\n",
+ " - housing/rent\n",
+ " - healthcare\n",
+ " - daycare/school\n",
+ " - food\n",
+ " - transportation\n",
+ " - utilities\n",
+ " - vacation\n",
+ " - giving\n",
+ " - entertainment\n",
+ " - Automate tracking\n",
+ " - Track your spending\n",
"\n",
"**Tools**\n",
"- YNAB & MINT\n",
@@ -25,6 +36,68 @@
"- Quicken\n",
"- Bank apps"
]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### YNAB Income vs Expense Report\n",
+ "\n",
+ "![YNAB Income Expense Report](images/ynab-income-exp-1024x691.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### YNAB Spending Report\n",
+ "\n",
+ "![YNAB Spending Report](images/ynab-spending-1024x720.png)\n"
+ ]
}
],
"metadata": {
diff --git a/fire-101/financial-planning.ipynb b/fire-101/financial-planning.ipynb
index b94a45b..6f60732 100644
--- a/fire-101/financial-planning.ipynb
+++ b/fire-101/financial-planning.ipynb
@@ -13,12 +13,19 @@
"source": [
"# Become financially independent\n",
" \n",
- "## 4% and 25 times rules"
+ "## 4% and 25 times rules\n",
+ "\n",
+ "| Annual Spending | Retirement Stash Needed |\n",
+ "| :------- | :------- |\n",
+ "| $\\$$25,000 | $\\$$625,000 |\n",
+ "| $\\$$50,000 | $\\$$1,250,000 |\n",
+ "| $\\$$100,000 | $\\$$2,500,000 |\n",
+ "| $\\$$150,000 | $\\$$3,750,000 |"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 5,
"metadata": {
"editable": true,
"scrolled": true,
@@ -39,7 +46,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 6,
"metadata": {
"editable": true,
"slideshow": {
@@ -195,7 +202,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 7,
"metadata": {
"editable": true,
"slideshow": {
@@ -209,7 +216,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "1623b20923414f278ad256f12f72ebda",
+ "model_id": "b9eb64b13faf417e8be9acb155186552",
"version_major": 2,
"version_minor": 0
},
@@ -217,7 +224,7 @@
"VBox(children=(interactive(children=(IntText(value=4, description='Rate of return on investments:', style=Desc…"
]
},
- "execution_count": 4,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -268,7 +275,13 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
"source": [
"
\n",
"\n",
@@ -312,7 +325,13 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
"outputs": [],
"source": []
}
diff --git a/fire-101/images/100-sp500.png b/fire-101/images/100-sp500.png
new file mode 100644
index 0000000..60e9034
Binary files /dev/null and b/fire-101/images/100-sp500.png differ
diff --git a/fire-101/images/sp-500-historical-annual-returns-2024-05-30-macrotrends.png b/fire-101/images/sp-500-historical-annual-returns-2024-05-30-macrotrends.png
new file mode 100644
index 0000000..5487430
Binary files /dev/null and b/fire-101/images/sp-500-historical-annual-returns-2024-05-30-macrotrends.png differ
diff --git a/fire-101/images/sp-500-historical-chart-data-2024-05-30-macrotrends.png b/fire-101/images/sp-500-historical-chart-data-2024-05-30-macrotrends.png
new file mode 100644
index 0000000..9ad8226
Binary files /dev/null and b/fire-101/images/sp-500-historical-chart-data-2024-05-30-macrotrends.png differ
diff --git a/fire-101/images/ynab-income-exp-1024x691.png b/fire-101/images/ynab-income-exp-1024x691.png
new file mode 100644
index 0000000..0f642d2
Binary files /dev/null and b/fire-101/images/ynab-income-exp-1024x691.png differ
diff --git a/fire-101/images/ynab-spending-1024x720.png b/fire-101/images/ynab-spending-1024x720.png
new file mode 100644
index 0000000..cdafea9
Binary files /dev/null and b/fire-101/images/ynab-spending-1024x720.png differ
diff --git a/fire-101/investing.ipynb b/fire-101/investing.ipynb
index 27b3ee0..7129b09 100644
--- a/fire-101/investing.ipynb
+++ b/fire-101/investing.ipynb
@@ -52,23 +52,52 @@
"tags": []
},
"source": [
- " ## Investing options\n",
- " ### Standard investment options\n",
+ "## Investing options\n",
+ " \n",
+ "### Standard investment options\n",
" - Savings\n",
" - Money Market\n",
" - Certificate of Deposit (CD)\n",
+ " - High Yield Savings Accounts (HYSA)\n",
" - Bonds\n",
" - Stocks (Index Funds)\n",
" - Real estate\n",
" \n",
- " ### Speculation (risky investments)\n",
+ "### Speculation (risky investments)\n",
" - Lottery\n",
" - CryptoCurrency\n",
" - Individual stocks\n",
" - Meme stocks (Gamestop)\n",
- " - Stock options\n",
- " \n",
- " ### How & where to invest (keep it simple)\n",
+ " - Stock options"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### How & where to invest (keep it simple)\n",
" * Company investments\n",
" * **401K**\n",
" * Employee Stock Purchase Plans\n",
@@ -83,8 +112,35 @@
" * traditional & roth IRAs (tax benefits)\n",
" * actively managed funds (beware)\n",
" * Robo advisers (automated allocation and diversification offered by many online brokers)\n",
- " * Certified Financial Planner (CFP)\n",
- " \n",
+ " * Certified Financial Planner (CFP)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
"### Free money (Yes you heard that right)\n",
" * Company benefits\n",
" * 401k matching\n",
@@ -122,7 +178,7 @@
"tags": []
},
"source": [
- " ## Investing strategies\n",
+ "## Investing strategies\n",
" - Diversify\n",
" - Low or no fee index funds\n",
" - Be wary of investment advisers\n",
@@ -149,6 +205,99 @@
"----------\n",
"
"
]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### S&P 500 Invest $\\$$100, 1957-2023\n",
+ "If you invested $\\$$100 in the S&P 500 at the beginning of 1957, you would have about $\\$$72,148.05 at the end of 2023, assuming you reinvested all dividends. This is a return on investment of 72,048.05%, or 10.32% per year.\n",
+ "\n",
+ "This lump-sum investment beats inflation during this period for an inflation-adjusted return of about 6,553.58% cumulatively, or 6.47% per year.\n",
+ "\n",
+ "![S&P 500 Historic Returns](images/100-sp500.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### S&P 500 Historic Chart\n",
+ "\n",
+ "![S&P 500 Historic Chart](images/sp-500-historical-chart-data-2024-05-30-macrotrends.png)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### S&P 500 Historic Annual Returns\n",
+ "\n",
+ "![S&P 500 Historic Annual Returns](images/sp-500-historical-annual-returns-2024-05-30-macrotrends.png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": []
}
],
"metadata": {
diff --git a/fire-101/spending-less.ipynb b/fire-101/spending-less.ipynb
index ffb2062..a1a6464 100644
--- a/fire-101/spending-less.ipynb
+++ b/fire-101/spending-less.ipynb
@@ -45,7 +45,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 22,
"metadata": {
"editable": true,
"scrolled": true,
@@ -72,7 +72,7 @@
" \n",
"def get_compound_simple_df(i, one_time):\n",
" start_age = 20\n",
- " stop_age = 60\n",
+ " stop_age = 65\n",
" yi = i*365\n",
" \n",
" df = pd.DataFrame({'Age': pd.Series(range(start_age,stop_age))})\n",
@@ -190,6 +190,22 @@
"### **$\\$$1,305** total savings per year"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "----------\n",
+ "
"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
@@ -205,7 +221,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 23,
"metadata": {
"editable": true,
"slideshow": {
@@ -219,7 +235,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "a4b0f70a82ac4f0988c9571c09aee90f",
+ "model_id": "df1b77948d5349859aa33fae22f1c8a8",
"version_major": 2,
"version_minor": 0
},
@@ -227,7 +243,7 @@
"VBox(children=(Play(value=1, description='Press play', interval=500, max=20, min=1), interactive(children=(Int…"
]
},
- "execution_count": 3,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -253,6 +269,388 @@
"----------\n",
"
"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "# Get dataframe for $1 invested\n",
+ "df1 = get_compound_simple_df(1, False)\n",
+ "df1 = df1.drop('Money Market', axis=1)\n",
+ "df1['Mattress 0%'] = df1['Mattress 0%'].map(\"${:,.0f}\".format)\n",
+ "df1['Bank/CD 4%'] = df1['Bank/CD 4%'].map(\"${:,.0f}\".format)\n",
+ "df1['Stocks 7%'] = df1['Stocks 7%'].map(\"${:,.0f}\".format)\n",
+ "\n",
+ "# Get dataframe for $10 invested\n",
+ "df10 = get_compound_simple_df(10, False)\n",
+ "df10 = df10.drop('Money Market', axis=1)\n",
+ "df10['Mattress 0%'] = df10['Mattress 0%'].map(\"${:,.0f}\".format)\n",
+ "df10['Bank/CD 4%'] = df10['Bank/CD 4%'].map(\"${:,.0f}\".format)\n",
+ "df10['Stocks 7%'] = df10['Stocks 7%'].map(\"${:,.0f}\".format)\n",
+ "\n",
+ "# Get dataframe for $20 invested\n",
+ "df20 = get_compound_simple_df(20, False)\n",
+ "df20 = df20.drop('Money Market', axis=1)\n",
+ "df20['Mattress 0%'] = df20['Mattress 0%'].map(\"${:,.0f}\".format)\n",
+ "df20['Bank/CD 4%'] = df20['Bank/CD 4%'].map(\"${:,.0f}\".format)\n",
+ "df20['Stocks 7%'] = df20['Stocks 7%'].map(\"${:,.0f}\".format)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### $1 Invested"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Mattress 0% | \n",
+ " Bank/CD 4% | \n",
+ " Stocks 7% | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 20 | \n",
+ " $365 | \n",
+ " $365 | \n",
+ " $365 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 30 | \n",
+ " $4,015 | \n",
+ " $5,098 | \n",
+ " $6,114 | \n",
+ "
\n",
+ " \n",
+ " 20 | \n",
+ " 40 | \n",
+ " $7,665 | \n",
+ " $12,104 | \n",
+ " $17,423 | \n",
+ "
\n",
+ " \n",
+ " 30 | \n",
+ " 50 | \n",
+ " $11,315 | \n",
+ " $22,474 | \n",
+ " $39,670 | \n",
+ "
\n",
+ " \n",
+ " 40 | \n",
+ " 60 | \n",
+ " $14,965 | \n",
+ " $37,824 | \n",
+ " $83,433 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Mattress 0% Bank/CD 4% Stocks 7%\n",
+ "0 20 $365 $365 $365\n",
+ "10 30 $4,015 $5,098 $6,114\n",
+ "20 40 $7,665 $12,104 $17,423\n",
+ "30 50 $11,315 $22,474 $39,670\n",
+ "40 60 $14,965 $37,824 $83,433"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df1.iloc[::10, :]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### $10 Invested"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Mattress 0% | \n",
+ " Bank/CD 4% | \n",
+ " Stocks 7% | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 20 | \n",
+ " $3,650 | \n",
+ " $3,650 | \n",
+ " $3,650 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 30 | \n",
+ " $40,150 | \n",
+ " $50,978 | \n",
+ " $61,140 | \n",
+ "
\n",
+ " \n",
+ " 20 | \n",
+ " 40 | \n",
+ " $76,650 | \n",
+ " $121,035 | \n",
+ " $174,232 | \n",
+ "
\n",
+ " \n",
+ " 30 | \n",
+ " 50 | \n",
+ " $113,150 | \n",
+ " $224,737 | \n",
+ " $396,701 | \n",
+ "
\n",
+ " \n",
+ " 40 | \n",
+ " 60 | \n",
+ " $149,650 | \n",
+ " $378,241 | \n",
+ " $834,332 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Mattress 0% Bank/CD 4% Stocks 7%\n",
+ "0 20 $3,650 $3,650 $3,650\n",
+ "10 30 $40,150 $50,978 $61,140\n",
+ "20 40 $76,650 $121,035 $174,232\n",
+ "30 50 $113,150 $224,737 $396,701\n",
+ "40 60 $149,650 $378,241 $834,332"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df10.iloc[::10, :]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### $20 Invested"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": [
+ "hide-input"
+ ]
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Mattress 0% | \n",
+ " Bank/CD 4% | \n",
+ " Stocks 7% | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 20 | \n",
+ " $7,300 | \n",
+ " $7,300 | \n",
+ " $7,300 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 30 | \n",
+ " $80,300 | \n",
+ " $101,956 | \n",
+ " $122,280 | \n",
+ "
\n",
+ " \n",
+ " 20 | \n",
+ " 40 | \n",
+ " $153,300 | \n",
+ " $242,070 | \n",
+ " $348,464 | \n",
+ "
\n",
+ " \n",
+ " 30 | \n",
+ " 50 | \n",
+ " $226,300 | \n",
+ " $449,474 | \n",
+ " $793,403 | \n",
+ "
\n",
+ " \n",
+ " 40 | \n",
+ " 60 | \n",
+ " $299,301 | \n",
+ " $756,481 | \n",
+ " $1,668,663 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Mattress 0% Bank/CD 4% Stocks 7%\n",
+ "0 20 $7,300 $7,300 $7,300\n",
+ "10 30 $80,300 $101,956 $122,280\n",
+ "20 40 $153,300 $242,070 $348,464\n",
+ "30 50 $226,300 $449,474 $793,403\n",
+ "40 60 $299,301 $756,481 $1,668,663"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df20.iloc[::10, :]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": []
}
],
"metadata": {