{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Net Present Value (NPV) - Examples"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PV Example"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"lifetime = 20 #years\n",
"discount_rate = 0.04 #0.0775 #per unit\n",
"size = 100 #kW\n",
"specific_cost = 800 #EUR/kW\n",
"fom = 20 #EUR/kW/a\n",
"fit = 0.1 #EUR/kWh\n",
"flh = 1000 #h/a\n",
"flows = pd.DataFrame(index=range(lifetime+1))\n",
"flows[\"investment\"] = [-size*specific_cost] + [0]*lifetime\n",
"flows[\"FOM\"] = [0] + [-size*fom]*lifetime\n",
"flows[\"income\"] = [0] + [size*flh*fit]*lifetime\n",
"flows[\"total_flow\"] = flows.sum(axis=1)\n",
"flows[\"discount_factor\"] = [(1+discount_rate)**(-t) for t in range(lifetime+1)]\n",
"flows[\"discounted_total_flow\"] = flows[\"total_flow\"]*flows[\"discount_factor\"]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" investment | \n",
" FOM | \n",
" income | \n",
" total_flow | \n",
" discount_factor | \n",
" discounted_total_flow | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -80000 | \n",
" 0 | \n",
" 0.0 | \n",
" -80000.0 | \n",
" 1.000000 | \n",
" -80000.000000 | \n",
"
\n",
" \n",
" 1 | \n",
" 0 | \n",
" -2000 | \n",
" 10000.0 | \n",
" 8000.0 | \n",
" 0.961538 | \n",
" 7692.307692 | \n",
"
\n",
" \n",
" 2 | \n",
" 0 | \n",
" -2000 | \n",
" 10000.0 | \n",
" 8000.0 | \n",
" 0.924556 | \n",
" 7396.449704 | \n",
"
\n",
" \n",
" 3 | \n",
" 0 | \n",
" -2000 | \n",
" 10000.0 | \n",
" 8000.0 | \n",
" 0.888996 | \n",
" 7111.970869 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" -2000 | \n",
" 10000.0 | \n",
" 8000.0 | \n",
" 0.854804 | \n",
" 6838.433528 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" investment FOM income total_flow discount_factor \\\n",
"0 -80000 0 0.0 -80000.0 1.000000 \n",
"1 0 -2000 10000.0 8000.0 0.961538 \n",
"2 0 -2000 10000.0 8000.0 0.924556 \n",
"3 0 -2000 10000.0 8000.0 0.888996 \n",
"4 0 -2000 10000.0 8000.0 0.854804 \n",
"\n",
" discounted_total_flow \n",
"0 -80000.000000 \n",
"1 7692.307692 \n",
"2 7396.449704 \n",
"3 7111.970869 \n",
"4 6838.433528 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flows.head()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"investment -80000.000000\n",
"FOM -40000.000000\n",
"income 200000.000000\n",
"total_flow 80000.000000\n",
"discount_factor 14.590326\n",
"discounted_total_flow 28722.610760\n",
"dtype: float64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flows.sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6650050203417118"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(size*specific_cost/(sum(flows[\"discount_factor\"])-1)+2500)/1e5"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"flows[\"discount_factor\"].plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Nuclear Example"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"lifetime = 40 #years\n",
"discount_rate = 0.10 #per unit\n",
"size = 3e6 #kW\n",
"specific_cost = 5000 #EUR/kW\n",
"decommissioning_cost = 0 #EUR/kW\n",
"fom = 20 #EUR/kW/a\n",
"fuel = 10 #EUR/MWh\n",
"market_value = 50 #EUR/MWh\n",
"flh = 8000 #h/a\n",
"flows = pd.DataFrame(index=range(lifetime+1))\n",
"flows[\"investment\"] = [-size*specific_cost] + [0]*(lifetime-1) + [-size*decommissioning_cost]\n",
"flows[\"FOM\"] = [0] + [-size*fom]*lifetime\n",
"flows[\"income\"] = [0] + [size*flh*market_value/1000]*lifetime\n",
"flows[\"total_flow\"] = flows.sum(axis=1)\n",
"flows[\"discount_factor\"] = [(1+discount_rate)**(-t) for t in range(lifetime+1)]\n",
"flows[\"discounted_total_flow\"] = flows[\"total_flow\"]*flows[\"discount_factor\"]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" investment | \n",
" FOM | \n",
" income | \n",
" total_flow | \n",
" discount_factor | \n",
" discounted_total_flow | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -1.500000e+10 | \n",
" 0.0 | \n",
" 0.000000e+00 | \n",
" -1.500000e+10 | \n",
" 1.000000 | \n",
" -1.500000e+10 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.000000e+00 | \n",
" -60000000.0 | \n",
" 1.200000e+09 | \n",
" 1.140000e+09 | \n",
" 0.909091 | \n",
" 1.036364e+09 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.000000e+00 | \n",
" -60000000.0 | \n",
" 1.200000e+09 | \n",
" 1.140000e+09 | \n",
" 0.826446 | \n",
" 9.421488e+08 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.000000e+00 | \n",
" -60000000.0 | \n",
" 1.200000e+09 | \n",
" 1.140000e+09 | \n",
" 0.751315 | \n",
" 8.564989e+08 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.000000e+00 | \n",
" -60000000.0 | \n",
" 1.200000e+09 | \n",
" 1.140000e+09 | \n",
" 0.683013 | \n",
" 7.786353e+08 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" investment FOM income total_flow discount_factor \\\n",
"0 -1.500000e+10 0.0 0.000000e+00 -1.500000e+10 1.000000 \n",
"1 0.000000e+00 -60000000.0 1.200000e+09 1.140000e+09 0.909091 \n",
"2 0.000000e+00 -60000000.0 1.200000e+09 1.140000e+09 0.826446 \n",
"3 0.000000e+00 -60000000.0 1.200000e+09 1.140000e+09 0.751315 \n",
"4 0.000000e+00 -60000000.0 1.200000e+09 1.140000e+09 0.683013 \n",
"\n",
" discounted_total_flow \n",
"0 -1.500000e+10 \n",
"1 1.036364e+09 \n",
"2 9.421488e+08 \n",
"3 8.564989e+08 \n",
"4 7.786353e+08 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flows.head()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"investment -1.500000e+10\n",
"FOM -2.400000e+09\n",
"income 4.800000e+10\n",
"total_flow 3.060000e+10\n",
"discount_factor 1.077905e+01\n",
"discounted_total_flow -3.851882e+09\n",
"dtype: float64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flows.sum()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}