{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![Callysto.ca Banner](https://github.com/callysto/curriculum-notebooks/blob/master/callysto-notebook-banner-top.jpg?raw=true)\n", "\n", "\"Open" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CALM - Moving Out Project" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*This project is also available as a series of individual notebook files starting [here](./CALM-moving-out-1.ipynb)*\n", "\n", "Imagine that you are in your early twenties and it is time to move out of your family home.\n", "\n", "You work 40 hours per week and your wage is $15.00 per hour gross income (before deductions).\n", "\n", "You will be required to calculate your net income and manage financial resources effectively.\n", "\n", "You may choose to live with a roommate. If you choose to live with a roommate and share rent, you must each complete and hand in a separate assignment.\n", "\n", "You will use the internet for all the information required to complete this project. However, you may want to also refer to flyers to find prices for food and household items.\n", "\n", "Cells with a white background are ones that you can or should double-click on to edit.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

My Personal Profile - Age Twenty-something

\n", "Complete these questions based on what your hope of plan to do with your life. Double-click on a cell in order to edit it.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "My name is " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. I will move out of my family home at the age of " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. My educational path will be " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. My occupation or job at that time will be " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. I expect to take home $ each month." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5. I (will / will not) be married sometime in my twenties." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "6. By the age of 30 I will likely have children." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "7. I (will / will not) buy a home sometime in my twenties." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "8. My home or living accommodations will be described as\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "9. I will be living in or near the city/town of " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "10. A vehicle I would like to drive when I'm in my twenties is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "11. Other things I own will be\n", " 1. \n", " 2. \n", " 3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "12. I (will / will not) plan to travel in my twenties." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "13. If I plan to travel, some of my vacations will be\n", " 1. \n", " 2. \n", " 3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "14. My major accomplishments or bucket list items in my twenties will be\n", " 1. \n", " 2. \n", " 3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Income

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Paycheque Definitions

\n", "\n", "

Gross Income (pay/earnings)

\n", "The amount of income/earnings, for any pay period, before deductions\n", " \n", "

Net income (pay/earnings)

\n", "The amount of income/earnings, for any pay period, after deductions (Take home pay)\n", "\n", "

CPP - Canada Pension Plan

\n", "2.3% of gross income deducted for insurance in case of unemployment\n", " \n", "

Income Tax

\n", "A deduction paid to the Federal and Provincial government for taxes\n", " \n", "

LTD

\n", "A deduction for Long Term Disability insurance\n", " \n", "

Union Dues

\n", "Fees paid for membership in a union\n", " \n", "

Bonds

\n", "An investment in which a business or government pays a set interest rate\n", " \n", "

Advance Earnings

\n", "Deducted money that was received in advance of the pay cheque\n", " \n", "

Overtime Earnings

\n", "Pay received for working over 8 hours a day or 44 hours a week, whichever is greater\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Calculating Net Income

\n", "\n", "Click on the code cell below, then press the `Run` button on the toolbar to calculate your net income. You may also change some values in the code to see how the results change.\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "wagePerHour = 15 # this is your wage in $/hour\n", "hoursPerDay = 8\n", "daysPerMonth = 21\n", "\n", "grossIncome = wagePerHour * hoursPerDay * daysPerMonth\n", "print('Your gross income is $', grossIncome, 'per month.')\n", "\n", "incomeTax = .15 + .10 # assume federal income tax is 15% and provincial is 10%\n", "cpp = .0495 # assume Canada Pension Plan is 4.95%\n", "ei = .0188 # assume Employment Insurance is 1.88%\n", "unionDues = .0075 # 0.75% sounds reasonable for union dues\n", "\n", "deductions = grossIncome * (incomeTax + cpp + ei + unionDues)\n", "print('$', '{:.2f}'.format(deductions), ' will be taken off your paycheck.')\n", "\n", "netIncome = grossIncome - deductions\n", "print('Your net income is $', '{:.2f}'.format(netIncome), 'per month.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "We can also look at how your net income (take-home pay) changes based on your hourly wage. We will use [2019 taxation rates](https://www.canada.ca/en/revenue-agency/services/tax/individuals/frequently-asked-questions-individuals/canadian-income-tax-rates-individuals-current-previous-years.html) as well as [EI](https://www.canada.ca/en/revenue-agency/services/tax/businesses/topics/payroll/payroll-deductions-contributions/employment-insurance-ei/ei-premium-rates-maximums.html) and [CPP](https://www.canada.ca/en/revenue-agency/services/tax/businesses/topics/payroll/payroll-deductions-contributions/canada-pension-plan-cpp/cpp-contribution-rates-maximums-exemptions.html) rates. `Run` the cell below to generate a graph.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Run this cell without editing it to generate a graph of Net Income vs Hourly Wage\n", "def calculateFederalTax(income):\n", " taxBrackets = [47630, 95259, 147667, 210371]\n", " taxRates = [.15, .205, .26, .29, .33]\n", " taxes = []\n", " for i in range(0, len(taxBrackets)):\n", " taxes.append(taxBrackets[i] * taxRates[i])\n", " if income < taxBrackets[0]:\n", " tax = income * taxRates[0]\n", " elif income < taxBrackets[1]:\n", " tax = taxes[0] + (income - taxBrackets[0]) * taxRates[1]\n", " elif income < taxBrackets[2]:\n", " tax = taxes[1] + (income - taxBrackets[1]) * taxRates[2]\n", " elif income < taxBrackets[3]:\n", " tax = taxes[2] + (income - taxBrackets[2]) * taxRates[3]\n", " else:\n", " tax = taxes[3] + (income - taxBrackets[3]) * taxRates[4]\n", " return tax\n", "\n", "def calculateProvincialTax(income):\n", " taxBrackets = [131220, 157464, 209952, 314928] # for Alberta\n", " taxRates = [.1, .12, .13, .14, .15]\n", " taxes = []\n", " for i in range(0, len(taxBrackets)):\n", " taxes.append(taxBrackets[i] * taxRates[i])\n", " if income < taxBrackets[0]:\n", " tax = income * taxRates[0]\n", " elif income < taxBrackets[1]:\n", " tax = taxes[0] + (income - taxBrackets[0]) * taxRates[1]\n", " elif income < taxBrackets[2]:\n", " tax = taxes[1] + (income - taxBrackets[1]) * taxRates[2]\n", " elif income < taxBrackets[3]:\n", " tax = taxes[2] + (income - taxBrackets[2]) * taxRates[3]\n", " else:\n", " tax = taxes[3] + (income - taxBrackets[3]) * taxRates[4]\n", " return tax\n", "\n", "def calculateEI(income):\n", " eiMaxInsurableEarnings = 53100\n", " eiRate = 0.0162\n", " if income >= eiMaxInsurableEarnings:\n", " eiPremium = eiMaxInsurableEarnings * eiRate\n", " else:\n", " eiPremium = income * eiRate\n", " return eiPremium\n", "\n", "def calculateCPP(income):\n", " cppMaxContributoryEarnings = 53900\n", " cppRate = 0.051\n", " if income >= cppMaxContributoryEarnings:\n", " cppPremium = cppMaxContributoryEarnings * cppRate\n", " else:\n", " cppPremium = income * cppRate\n", " return cppPremium\n", "\n", "wages = []\n", "grossIncomes = []\n", "netIncomes = []\n", "for wage in range(15, 150):\n", " wages.append(wage)\n", " grossAnnualIncome = wage * 8 * 240\n", " grossIncomes.append(grossAnnualIncome)\n", " incomeTax = calculateFederalTax(grossAnnualIncome) + calculateProvincialTax(grossAnnualIncome)\n", " eiPremium = calculateEI(grossAnnualIncome)\n", " cppPremium = calculateCPP(grossAnnualIncome)\n", " netIncome = grossAnnualIncome - (incomeTax + eiPremium + cppPremium)\n", " netIncomes.append(netIncome)\n", "\n", "import plotly.graph_objects as go\n", "fig = go.Figure()\n", "#fig.add_trace(go.Scatter(x=wages, y=grossIncomes, name='Gross Income'))\n", "fig.add_trace(go.Scatter(x=wages, y=netIncomes, name='Net Income'))\n", "fig.update_layout(\n", " title=go.layout.Title(text='Net Income vs Hourly Wage'),\n", " xaxis=go.layout.XAxis(title=go.layout.xaxis.Title(text='Hourly Wage')),\n", " yaxis=go.layout.YAxis(title=go.layout.yaxis.Title(text='Income')))\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Accommodation Options

\n", "\n", "Using [Kijiji](https://www.kijiji.ca) or other internet sources, investigate each of the following options and add information to the cells below. Edit each white cell by double-clicking on it.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Apartment\n", "Advantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Disadvantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Approximate cost per month: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Townhouse or Duplex\n", "Advantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Disadvantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Approximate cost per month: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Single Detached House\n", "Advantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Disadvantages:\n", "1. \n", "2. \n", "3. \n", "\n", "Approximate cost per month: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best choice of housing for a retired couple with no children who do not want to cut grass or do other maintenance is _______ because" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best choice of housing for a middle-aged couple with two small children who what room for children and friends to visit is _______ because" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best choice of housing for a young couple with a small child is _______ because" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best choice of housing for a young, single person who travels frequently for work is _______ because" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The type of home I picture myself in when I decide to move out is (be descriptive)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "For the purpose of this project you will consider rental properties only. Find an online listing for a suitable place to rent and include a screenshot below if possible.\n", "\n", "Carefully read the listing and fill in the information in the following cell.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Address: \n", "\n", "Type of accomodation: \n", "\n", "Rent per month: \n", "\n", "Utilities included in rent: \n", "\n", "Damage deposit or security deposit amount: \n", "\n", "Other costs not included in rent (e.g. parking, coin laundry): \n", "\n", "Summary of other important information: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Expenses

\n", "\n", "Expenses are the money that you spend on necessary or desired goods and services.\n", "\n", "Some expenses can be decreased by having a roommate. For the purposes of this project you may choose to have one roommate.\n", "\n", "Complete the statements in the cells below.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Advantages of living on my own are:\n", "1. \n", "2. \n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Disadvantages of living on my own are:\n", "1. \n", "2. \n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Advantages of living with a roommate are:\n", "1. \n", "2. \n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Disadvantages of living with a roommate are:\n", "1. \n", "2. \n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have decided to live (on my own / with a roommate) because " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Essential characteristics of a roommate are:\n", "1. \n", "2. \n", "3. \n", "4. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Housing Expenses

\n", "\n", "When investigating costs, be aware of \"introductory specials\" or contracts where the price increases. For these calculations use the price after the introductory offer.\n", "\n", "The CMHC (Canadian Home and Mortgage Corporation) [recommends](https://www.cmhc-schl.gc.ca/en/finance-and-investing/mortgage-loan-insurance/calculating-gds-tds) that you should not spend more than 35% of your net income on housing costs.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have decided to use the following service providers:\n", "(remove any lines that are not applicable)\n", "\n", "Natural Gas (Heat): \n", "\n", "Electricity: \n", "\n", "Tenant Insurance: \n", "\n", "Mobile Phone: \n", "\n", "Landline: \n", "\n", "Internet: \n", "\n", "TV, Video, Music Subscriptions: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Calculating Housing Expenses

\n", "\n", "Follow the instructions in the code cell below to edit the numbers, then `Run` the cell to calculate your monthly housing expenses.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "rent = 900\n", "\n", "# change this to 1 if you plan to have a roommate\n", "roommate = 0\n", "\n", "# Natural Gas is hard to estimate, depending on different circumstances, but rough guidelines are:\n", "# Average 1200 sq. ft. house - $94 per month\n", "# New energy efficient average home (1200 sq. ft.) - $67 per month\n", "# Large new home (1800 sq. ft.) - $90 per month\n", "# Larger older home with heated garage - $128 per month\n", "# enter 0 if this is included in your rent\n", "heating = 94\n", "\n", "# Electricity:\n", "# an average two-bedroom apartment will cost about $50 per month\n", "# a small 1100 square foot home with the usual appliances will cost $75 per month\n", "# a large home with many appliances, a hot tub, and air conditioning will cost over $120 per month\n", "electricity = 75\n", "\n", "# Water and Waste will be about 60 for an apartment, 100 for a house\n", "waterAndWaste = 100\n", "\n", "# Tenant Insurance: each individual must have their own tenant insurance to cover their belongings\n", "# in case of fire, theft, flooding, or natural disaster. Landlords have insurance on the building\n", "# but not on your personal possessions. Use the following chart to estimate how much you would pay:\n", "# Value Annual Premium (we will divide this by 12 to get the monthly cost)\n", "# $10,000 $92\n", "# $20,000 $159\n", "# $30,000 $208\n", "# $40,000 $268\n", "# $50,000 $305\n", "# $60,000 $367\n", "tenantInsurance = 367 / 12\n", "\n", "# Mobile Phone: check out various service providers and choose a plan\n", "phone = 65\n", "\n", "# TV and Internet Access: check out Shaw and Telus to see what plans are available\n", "internet = 100\n", "streaming = 14\n", "\n", "# Now you've finished adjusting the code, run the cell to calculate your monthly housing costs\n", "if roommate == 1:\n", " monthlyBills = (rent + heating + electricity + waterAndWaste + internet) / 2 + tenantInsurance + phone + streaming\n", "else:\n", " monthlyBills = rent + heating + electricity + waterAndWaste + tenantInsurance + phone + internet + streaming\n", "\n", "print('Your monthly bills will be approximately $' + str('{:.2f}'.format(monthlyBills)) + '.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Moving Expenses

\n", " \n", "As well as the monthly expenses there are one-time moving expenses to consider. Change the numbers in the following cell, if necessary, then `Run` the cell to display the calculated value.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Security / Damage Deposit: this is usually equal to one month's rent.\n", "# You can get your deposit back when you move out, if you take care of your home.\n", "# Some landlords charge a non-refundable pet fee.\n", "damageDeposit = rent\n", "petFee = 0\n", "\n", "# If you plan to have a pet, estimate the cost of the pet, toys, furniture, etc.\n", "petPurchase = 1000\n", "\n", "# There are sometimes utility activation or hookup costs\n", "electricalActivation = 10\n", "naturalGasActivation = 10\n", "waterActivation = 0\n", "internetActivation = 0\n", "mobilePhoneActivitation = 25\n", "\n", "mobilePhonePurchase = 300\n", "\n", "furnitureAndAppliances = 500\n", "\n", "movingCosts = 300\n", "\n", "# You've finished editing numbers, now run the cell to add up expenses\n", "\n", "if roommate == 1:\n", " movingExpenses = (\n", " damageDeposit + \n", " electricalActivation + \n", " naturalGasActivation + \n", " waterActivation + \n", " internetActivation + \n", " furnitureAndAppliances\n", " ) / 2 + mobilePhoneActivitation + mobilePhonePurchase + movingCosts + petFee + petPurchase\n", "else:\n", " movingExpenses = (\n", " damageDeposit +\n", " electricalActivation + \n", " naturalGasActivation + \n", " waterActivation + \n", " internetActivation + \n", " furnitureAndAppliances + \n", " mobilePhoneActivitation + \n", " mobilePhonePurchase + \n", " movingCosts + \n", " petFee + \n", " petPurchase\n", " )\n", "\n", "print('Moving expenses will be about $' + str(movingExpenses))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Transportation

\n", "\n", "Find the cost of a monthly bus pass, and compare that to purchasing and operating a vehicle. Other forms of transportation exist, but we will just be comparing these two.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An adult monthly bus pass costs: $ .\n", "\n", "or\n", "\n", "I will be attending postsecondary, so U-Pass (or similar) costs: $ per semester." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Owning and Operating a Car

\n", "\n", "Complete this section regardless if you already have a car or ultimately decide against owning a car.\n", "\n", "Find an advertisement for a vehicle that you would like to drive. If you already own your own vehicle consider the next vehicle you would purchase if you were to upgrade or replace your car in the event of huge repair bill or accident. If possible, include a screenshot of the advertisement.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I chose this vehicle because: \n", "\n", "The total price of this vehicle is: \n", "\n", "Year: \n", "\n", "Make: \n", "\n", "Model: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Now let's consider the cost of a loan to purchase that vehicle. Enter the purchase price and run the code cell to calculate monthly costs.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "purchasePrice = 5000\n", "interestRate = 0.07 # assume a 7% interest rate\n", "financingTerm = 48 # 48 months is four years\n", "\n", "monthlyInterest = interestRate / 12\n", "monthlyCarPayment = purchasePrice * (monthlyInterest) * ((1+monthlyInterest) ** financingTerm) / (((1+monthlyInterest) ** financingTerm)-1)\n", "totalCost = monthlyCarPayment * financingTerm\n", "print('Purchasing this vehicle with financing will cost $' + str('{:.2f}'.format(monthlyCarPayment)) + ' per month.')\n", "print('The total cost of the vehicle over', financingTerm, 'months will be $' + str('{:.2f}'.format(totalCost)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "To find out how much car insurance will cost, use one of these online [insurance](https://www.lowestrates.ca/insurance/auto/alberta) [quote](https://www.insurancehotline.com/Quote/Auto?postalCode=T8A4Y1#Vehicles) [sites](https://www.pcinsurance.ca/en/).\n", "\n", "As well, look up and record the cost of [registering a vehicle](https://www.alberta.ca/vehicle-registration-renewal.aspx), and list the approximate current price of fuel.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Car insurance will cost about $ per month.\n", "\n", "To register a car in Alberta costs $\n", "\n", "Fuel is currently $ per litre." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Operating a vehicle is expensive and we often don’t realize the costs of repairs, oil changes, tires, gas, registration, or depreciation. Keep in mind there are additional costs for driving offenses such as speeding, running a red light, distracted driving, and parking tickets.\n", "\n", "According to the Canadian Automobile Association the average Canadian drives 20,000 km per year for work, recreation and travel. \n", "\n", "Go to the Canadian Automobile Associate (CAA) [Driving Cost Calculator](http://caa.ca/car_costs) to \n", "estimate the operating cost for the year, make, and model of your selected vehicle.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The likely monthly operating costs for this vehicle are: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Fill in your numbers in the cell below, then run it to calculate your estimated vehicle costs as compared to public transportation.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# The cost of monthly adult bus pass\n", "busPass = 0\n", "\n", "# The costs of a vehicle\n", "monthlyPayment = 0\n", "vehicleInsurance = 0\n", "vehicleOperatingCosts = 0\n", "\n", "vehicleCosts = monthlyPayment + vehicleInsurance + vehicleOperatingCosts\n", "print('Estimated vehicle costs per month are $' +str(vehicleCosts)+ ' which is $' +str(vehicleCosts - busPass)+ ' more than a bus pass.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Determine the method of transportation you will be using. Will you use your own car? Take public transportation? Will you have to pay for parking if you drive? Can you car pool? What is your decision? Explain your reasons.\n", "\n", "Then run the code cell below it to finish calculating transportation costs.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have decided to \n", "\n", "because" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "In the code cell below, record your decision about transportation:\n", "\n", "`transportationDecision = 1` if you plan to take the bus\n", "\n", "`transportationDecision = 2` if you plan to drive a vehicle\n", "\n", "Then `Run` the cell to calculate your monthly transportation costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "transportationDecision = 0\n", "\n", "#Run this cell after you have recorded your decision above (1 or 2).\n", "transportationCost = 0\n", "if transportationDecision == 1:\n", " transportationCost = busPass\n", " print('You will be spending $' + str(transportationExpenses) + ' per month to take the bus.')\n", "elif transportationDecision == 2:\n", " transportationCost = vehicleCosts\n", " print('You will be spending approximately $' + str('{:.2f}'.format(vehicleCosts)) + ' for your vehicle.')\n", "else:\n", " print('Please change transportationDecision to 1 or 2 and run the cell again.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Food and Household Supplies

\n", "\n", "With the [Canadian Food Guide](https://food-guide.canada.ca/en/food-guide-snapshot/) in mind, complete a 7-day menu plan considering nutritionally balanced choices at each meal. Use this plan to decide your grocery needs for one week. You can choose to eat out only twice on this menu.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|Day|Breakfast|Lunch|Dinner|\n", "|-|-|-|-|\n", "|Monday| meal | meal | meal |\n", "|Tuesday| meal | meal | meal |\n", "|Wednesday| meal | meal | meal |\n", "|Thursday| meal | meal | meal |\n", "|Friday| meal | meal | meal |\n", "|Saturday| meal | meal | meal |\n", "|Sunday| meal | meal | meal |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Food Shopping

\n", "\n", "From your menu plan make a shopping list of food needed to prepare three meals a day for one week. Research the price of these food items by going to grocery store websites, using grocery fliers, going shopping to the grocery store, or reviewing the receipts or bills with your family. Buying items in bulk may be more economical in the long run, but for this exercise you only require food for one week so choose the smallest quantities possible.\n", "\n", "`Run` the following cell to generate a data table that you can then edit.\n", "\n", "Double-click on the \"nan\" values to put in your information. Use the \"Add Row\" and \"Remove Row\" buttons if necessary.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import qgrid\n", "foodItemList = ['Vegetables','Fruit','Protein','Whole Grains','Snacks','Restaurant Meal 1','Restaurant Meal 2']\n", "foodColumns = ['Size','Quantity','Price']\n", "foodIndex = range(1,len(foodItemList)+1)\n", "dfFood = pd.DataFrame(index=pd.Series(foodIndex), columns=pd.Series(foodColumns))\n", "dfFood.insert(0,'Item(s)',foodItemList,True)\n", "dfFoodWidget = qgrid.QgridWidget(df=dfFood, show_toolbar=True)\n", "dfFoodWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "After you have added data to the table above, `Run` the next cell to calculate your food costs for the month. It adds up weekly food costs and multiplies by 4.3 weeks per month.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "foodShoppingList = dfFoodWidget.get_changed_df()\n", "foodPrices = pd.to_numeric(foodShoppingList['Price'])\n", "weeklyFoodCost = foodPrices.sum()\n", "monthlyFoodCost = weeklyFoodCost * 4.3\n", "print('That is about $' + str(weeklyFoodCost) + ' per week for food.')\n", "print('Your food for the month will cost about $' + str(monthlyFoodCost) + '.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Household Supplies and Personal Items

\n", "\n", "The following is a typical list of household and personal items. Add any additional items you feel you need and delete items you don’t need. Look for smaller quantities with a one-month budget in mind, or adjust pricing if buying in bulk.\n", "\n", "`Run` the next cell to generate a data table that you can then edit.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "householdItemList = ['Toilet Paper','Tissues','Paper Towel',\n", " 'Dish Soap','Laundry Detergent','Cleaners',\n", " 'Plastic Wrap','Foil','Garbage/Recycling Bags',\n", " 'Condiments','Coffee/Tea','Flour','Sugar',\n", " 'Shampoo','Conditioner','Soap','Deodorant',\n", " 'Toothpaste','Mouthwash','Hair Products','Toothbrush',\n", " 'Makeup','Cotton Balls','Shaving Gel','Razors',\n", " ]\n", "householdColumns = ['Size','Quantity','Price']\n", "householdIndex = range(1,len(householdItemList)+1)\n", "dfHousehold = pd.DataFrame(index=pd.Series(householdIndex), columns=pd.Series(householdColumns))\n", "dfHousehold.insert(0,'Item(s)',householdItemList,True)\n", "dfHouseholdWidget = qgrid.QgridWidget(df=dfHousehold, show_toolbar=True)\n", "dfHouseholdWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "After you have added data to the above data table, `Run` the next cell to calculate your monthly household item costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "householdShoppingList = dfHouseholdWidget.get_changed_df()\n", "householdPrices = pd.to_numeric(householdShoppingList['Price'])\n", "monthlyHouseholdCost = householdPrices.sum()\n", "print('That is about $' + str(monthlyHouseholdCost) + ' per month for household items.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Furniture and Equipment

\n", "\n", "Think about items you need for your place. How comfortable do you want to be? Are there items you have already been collecting or that your family is saving for you? Discuss which items they may be willing to give you, decide which items you can do without, which items a roommate may have, and which items you will need to purchase. Although it is nice to have new things, remember household items are often a bargain at garage sales, dollar stores, and thrift stores.\n", "\n", "`Run` the next cell to generate a data table that you can edit.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fneItemList = ['Pots and Pans','Glasses','Plates','Bowls',\n", " 'Cutlery','Knives','Oven Mitts','Towels','Cloths',\n", " 'Toaster','Garbage Cans','Kettle','Table','Kitchen Chairs',\n", " 'Broom and Dustpan','Vacuum Cleaner','Clock',\n", " 'Bath Towels','Hand Towels','Bath Mat',\n", " 'Toilet Brush','Plunger',\n", " 'Bed','Dresser','Night Stand','Sheets','Blankets','Pillows',\n", " 'Lamps','TV','Electronics','Coffee Table','Couch','Chairs',\n", " ]\n", "fneColumns = ['Room','Quantity','Price']\n", "fneIndex = range(1,len(fneItemList)+1)\n", "dfFne = pd.DataFrame(index=pd.Series(fneIndex), columns=pd.Series(fneColumns))\n", "dfFne.insert(0,'Item(s)',fneItemList,True)\n", "dfFneWidget = qgrid.QgridWidget(df=dfFne, show_toolbar=True)\n", "dfFneWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Next `Run` the following cell to add up your furniture and equipment costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fneList = dfFneWidget.get_changed_df()\n", "fnePrices = pd.to_numeric(fneList['Price'])\n", "fneCost = fnePrices.sum()\n", "print('That is about $' + str(fneCost) + ' for furniture and equipment items.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Clothing

\n", "\n", "When calculating the cost of clothing for yourself, consider the type of work you plan to be doing and how important clothing is to you. Consider how many of each item of clothing you will purchase in a year, and multiply this by the cost per item. Be realistic.\n", "\n", "`Run` the next cell to generate an editable data table.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "clothingItemList = ['Dress Pants','Skirts','Shirts','Suits/Jackets/Dresses'\n", " 'T-Shirts/Tops','Jeans/Pants','Shorts',\n", " 'Dress Shoes','Casual Shoes','Running Shoes',\n", " 'Outdoor Coats','Boots','Sports Clothing',\n", " 'Pajamas','Underwear','Socks','Swimsuits'\n", " ]\n", "clothingColumns = ['Quantity Required','Cost per Item']\n", "clothingIndex = range(1,len(clothingItemList)+1)\n", "dfClothing = pd.DataFrame(index=pd.Series(clothingIndex), columns=pd.Series(clothingColumns))\n", "dfClothing.insert(0,'Item(s)',clothingItemList,True)\n", "dfClothingWidget = qgrid.QgridWidget(df=dfClothing, show_toolbar=True)\n", "dfClothingWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "`Run` the next cell to add up your clothing costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "clothingList = dfClothingWidget.get_changed_df()\n", "clothingQuantities = pd.to_numeric(clothingList['Quantity Required'])\n", "clothingPrices = pd.to_numeric(clothingList['Cost per Item'])\n", "clothingList['Total Cost'] = clothingQuantities * clothingPrices\n", "clothingCost = clothingList['Total Cost'].sum()\n", "monthlyClothingCost = clothingCost / 12\n", "print('That is $' + str('{:.2f}'.format(clothingCost)) + ' per year, or about $' + str('{:.2f}'.format(monthlyClothingCost)) + ' per month for clothing.')\n", "clothingList # this displays the table with total cost calculations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Charitable Donations and Gifts

\n", "\n", "In a year, how many birthday or Christmas gifts do you purchase for friends and family members? How much do you spend on gifts?\n", "\n", "Do you donate to any charities? Charitable donations are tax-deductible so you will essentially get 25% back at tax time. This means if you plan to donate \\\\$100 then you can record it as \\\\$75 in the table below.\n", "\n", "`Run` the next cell to display a data table that you can edit with your expected health costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "giftsList = range(1,7)\n", "giftsColumns = ['Name','Occasion','Amount']\n", "dfGifts = pd.DataFrame(index=pd.Series(giftsList), columns=pd.Series(giftsColumns))\n", "dfGiftsWidget = qgrid.QgridWidget(df=dfGifts, show_toolbar=True)\n", "dfGiftsWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "`Run` the next cell to add up your gifts and donations costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "giftsList = dfGiftsWidget.get_changed_df()\n", "giftsCost = pd.to_numeric(giftsList['Amount']).sum()\n", "monthlyGiftsCost = giftsCost / 12\n", "print('That is $' + str('{:.2f}'.format(giftsCost)) + ' per year, or about $' + str('{:.2f}'.format(monthlyGiftsCost)) + ' per month for gifts and donations.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Health Care

\n", "\n", "Most people living and working in Alberta have access to hospital and medical services under the [Alberta Health Care Insurance Plan (AHCIP)](https://www.alberta.ca/ahcip.aspx) paid for by the government. Depending on where you work, your employer may offer additional benefit packages such as Extended Health Care that cover a portion of medical and dental expenses. \n", "\n", "If you do not have health benefits from your employer you will have to pay for medications, dental visits, and vision care. \n", "\n", "Allow money in your budget for prescriptions and over-the-counter medications. \n", "\n", "Budget for the dentist and optometrist. One visit to the dentist including a check-up x-rays and teeth cleaning is approximately $330. You should see your dentist yearly!\n", "\n", "A visit to the optometrist is approximately $120. You should normally see your optometrist once every 2 years, or once a year if you’re wearing contact lenses.\n", "\n", "`Run` the next cell to display a data table that you can edit with your expected health costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "healthItems = [\n", " 'Pain Relievers','Bandages','Cough Medicine',\n", " 'Prescriptions','Dental Checkup',\n", " 'Optometrist','Glasses','Contacts','Contact Solution',\n", " 'Physiotherapy','Massage'\n", "]\n", "healthColumns = ['Cost Per Year']\n", "healthIndex = range(1,len(healthItems)+1)\n", "dfHealth = pd.DataFrame(index=pd.Series(healthIndex), columns=pd.Series(healthColumns))\n", "dfHealth.insert(0,'Item or Service',healthItems,True)\n", "dfHealthWidget = qgrid.QgridWidget(df=dfHealth, show_toolbar=True)\n", "dfHealthWidget" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "`Run` the next cell to add up your health care costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "healthList = dfHealthWidget.get_changed_df()\n", "healthCost = pd.to_numeric(healthList['Cost Per Year']).sum()\n", "monthlyHealthCost = healthCost / 12\n", "print('That is $' + str('{:.2f}'.format(healthCost)) + ' per year, or about $' + str('{:.2f}'.format(monthlyHealthCost)) + ' per month for health care.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Recreation and Entertainment

\n", "\n", "Recreation is highly personal and reflects your values. In this section plan for such things as concerts, athletics or memberships, skiing, travelling, hobbies, buying a boat or other recreational equipment, music, movies, parties, and other events or items.\n", "\n", "For some items like yearly holidays or subscriptions divide by 12 for the monthly costs. For areas such as coffee or other drinks you may need to figure out what you typically spend daily or weekly to determine the monthly cost. Be totally honest in this section as these costs can sneak up on you if you don’t keep accurate accounting of your spending.\n", "\n", "Use the next few code cells to calculate monthly entertainment costs.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# use this cell to calculate monthly cost from yearly cost (optional)\n", "yearlyCost = 0\n", "print(yearlyCost / 12)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# use this cell to calculate monthly cost from weekly cost (optional)\n", "weeklyCost = 0\n", "print(weeklyCost * 4.3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# What would you spend on movies, videos, concerts, and other events?\n", "events = 0\n", "\n", "# What do you spend on things like coffee with friends\n", "socialBeverages = 0\n", "\n", "# Consider any lifestyle choices such as health or diet supplements, cigarettes, etc.\n", "lifestyle = 0\n", "\n", "# How much would it cost to holiday? Remember to divide a yearly amount by 12\n", "travel = 0\n", "\n", "# Consider the replacement of lost, stolen, broken, or cracked devices,\n", "# as well as video games, computers, and subscription costs\n", "electronics = 0\n", "\n", "# Do you have any hobbies that you need to buy supplies or equipment for?\n", "hobbies = 0\n", "\n", "# Memberships or entrance fees to gyms, clubs, or other recreation facilities \n", "memberships = 0\n", "\n", "# Do you enjoy playing soccer, hockey, basketball, golf, snowboarding, or other sports? \n", "# Think about the cost to play and the equipment you will need.\n", "sports = 0\n", "\n", "# Pets If you have an average size dog, you can plan on spending $50 per month on food, bones, toys, etc. \n", "# If you plan to have a pet, Wealthsimple estimates that a dog costs about $100 to $180 per month\n", "# for food, toys, etc. and a cat is about half of that\n", "# A yearly trip to the vet with vaccinations is approximately $150, and an emergency vet trip is expensive.\n", "pets = 0\n", "\n", "# Can you think of anything else you might want to spend money on?\n", "other = 0\n", "\n", "monthlyEntertainmentCost = events + socialBeverages + lifestyle + travel + electronics + hobbies + memberships + sports + pets + other\n", "print('That is about $' + str(monthlyEntertainmentCost) + ' per month for recreation and entertainment.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Reflections

\n", "\n", "It can cost a lot of money to have the ‘extras’ in life! How does this section reflect your values? Any surprises here? Do you notice any areas of concern, or are there things you can justify as necessary to your happiness and wellbeing?\n", "\n", "Answer in the cell below.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Education

\n", "\n", "Education is a costly expense that usually pays for itself in the long run. Your parents may have been saving money for you to attend postsecondary in an RESP, but a good number of individuals will pay their own way through postsecondary working full or part-time jobs and perhaps taking out student loans.\n", "\n", "It is wise to invest some time to see if you qualify for the many grants, scholarships, or bursaries. If you are paying for your education you will need to work the costs into your budget. If you are planning to attend postsecondary you have already investigated the cost in your Occupational Research.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I (am / am not) planning to attend any type of postsecondary education.\n", "\n", "I (will / will not) be paying for my own education\n", "\n", "I (have / have not) looked into bursaries, grants, and scholarships.\n", "\n", "During my postsecondary education, I will be living (at home / on my own)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "If you are planning on attending postsecondary, change the values in the next cell. Otherwise just `Run` the cell without editing it.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tuitionPerYear = 0\n", "booksAndSuppliesPerYear = 0\n", "\n", "tuitionPerMonth = tuitionPerYear / 12\n", "booksAndSuppliesPerMonth = booksAndSuppliesPerYear / 12\n", "monthlyEducationCost = tuitionPerMonth + booksAndSuppliesPerMonth\n", "print('You will likely be spending $' + str('{:.2f}'.format(monthlyEducationCost)) + ' per month for education.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Savings and Investments

\n", "\n", "When you do move out, what do you think you will be saving money for? Education, a car, a house, retirement, early retirement?\n", "\n", "1.\tThe secret to retirement is to **pay yourself first**:\n", " 1. Aim to save 10% of each paycheck.\n", " 2. Put this money into an account like a TFSA or RRSP that you don’t spend until retirement. \n", "2.\tKeep an **emergency fund** for unexpected things like a job loss, break-ups, and break-downs.\n", "3.\tHave some short term (3 – 6 months) and long-term **financial goals**.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I plan to retire by the time I am \n", "\n", "I intend to have $ set aside for emergencies.\n", "\n", "My short-term financial goals are:\n", "1. \n", "2. \n", "\n", "My long-term financial goals are:\n", "1. \n", "2. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Run this cell once you have completed all of the above activities.\n", "\n", "Ensure that you have run all of the previous cells, even if they result in zero expenses.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "totalCostsValues = [transportationCost, \n", " monthlyFoodCost, \n", " monthlyHouseholdCost, \n", " monthlyClothingCost, \n", " monthlyGiftsCost, \n", " monthlyHealthCost, \n", " monthlyEntertainmentCost, \n", " monthlyEducationCost]\n", "dfTotalCosts = pd.DataFrame({'Item': ['Transportation',\n", " 'Food',\n", " 'Household Items',\n", " 'Clothing',\n", " 'Gifts',\n", " 'Health',\n", " 'Entertainment',\n", " 'Education'],\n", " 'Cost Per Month': totalCostsValues})\n", "\n", "oneTimeExpenses = movingExpenses + fneCost\n", "\n", "\n", "\n", "totalCostsPerMonth = pd.to_numeric(dfTotalCosts['Cost Per Month']).sum()\n", "print('Your total expense per month will be about $' + str('{:.2f}'.format(totalCostsPerMonth)) + '.')\n", "print('This is about ' + str('{:.1f}'.format(totalCostsPerMonth / netIncome * 100)) + '% of your net income.')\n", "dfTotalCosts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Summary

\n", "\n", "Can you afford your lifestyle?\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yes / No" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "If no, then what can you change to have a balanced budget? Describe a financial recovery plan.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "If yes, what will you do with the excess money?\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Explain in detail five things you have learned from this project. What was the most surprising or eye-opening learning you had completing this project? Be specific.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. \n", "\n", "2. \n", "\n", "3. \n", "\n", "4. \n", "\n", "5. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " You have now completed your CALM - Moving Out Project. Check with your teacher if you should download it as a pdf or in some other format in order to submit it.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[![Callysto.ca License](https://github.com/callysto/curriculum-notebooks/blob/master/callysto-notebook-banner-bottom.jpg?raw=true)](https://github.com/callysto/curriculum-notebooks/blob/master/LICENSE.md)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }