Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia
Haga click aquí para acceder a la última versión online
Haga click aquí para ver la última versión online en nbviewer
.
Preparación
In [1]:
# Importa la librería financiera.
# Solo es necesario ejecutar la importación una sola vez.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cashflows as cf
interest_rate
interest_rate(const_value=0, start=None, end=None,
periods=None, freq='A', chgpts=None)
Crea una serie de tiempo que representa una tasa de interés.
const_value
-- valor por defecto de la tasa de interés.start
-- período de tiempo inicial.end
-- período de tiempo final.periods
-- número de períodos (longitud de la serie).chgpts
-- especificación de cambios en la tasa de interés.
In [2]:
cf.interest_rate(const_value=10, # tasa de interés
start='2000Q1', # primer trimestre del año 2000
periods=8, # 8 trimestres
freq='Q') # 4 períodos por año
Out[2]:
In [3]:
cf.interest_rate(const_value=10, # valor por defecto
start='2000Q1', # primer bimestre del año 2000
periods=8, # 8 bimestres
freq='Q') # 6 bimestres por año
Out[3]:
In [4]:
cf.interest_rate(const_value=1, # valor por defecto
start='2000Q1', # primer trimestre del año 2000
periods=8, # ocho trimestres de longitud
freq='Q', # capitalización trimestral
chgpts={'2000Q3':10}) # cambia en el 4to trimestre a 10
Out[4]:
In [5]:
cf.interest_rate(const_value=1, # valor por defecto
start='2000Q1', # primer trimestre del año 2000
periods=8, # ocho trimestres de longitud
freq='Q', # capitalización trimestral
chgpts={3:10, # cambia en el 3r trimestre a 10
6:20}) # y en el 7to a 20
Out[5]:
In [6]:
cf.interest_rate(const_value=1, # valor por defecto
start='2000Q1', # primer trimestre del año 2000
periods=8, # ocho trimestres de longitud
freq='Q', # capitalización trimestral
chgpts={'2000Q4':10, # cambia en el 3r trimestre a 10
'2001Q3':20}) # y en el 7to a 20
Out[6]:
In [7]:
cf.interest_rate(const_value=[10, 20]*10, # especificación como un vector
start='2000Q1',
freq='Q') # capitalización trimestral
Out[7]:
Ejemplo.-- Se va a tomar un crédito a 48 meses a partir de enero del 2000. La tasa inicial es del 3% y aumenta un punto cada año. Represente la tasa de interés.
In [8]:
cf.interest_rate(const_value=3, # valor por defecto
start='2000-01', # primer mes del año 2000
periods=48, # longitud de la serie
freq='M', # capitalización mensual
chgpts={'2001-01':4, # tasa para el año 2
'2002-01':5, # tasa para el año 3
'2003-01':6}) # tasa para el año 4
Out[8]:
In [9]:
x = cf.interest_rate(const_value=3, # valor por defecto
start='2000-1', # primer mes del año 2000
periods=48, # longitud de la serie
freq='M', # capitalización mensual
chgpts={12:4, # tasa para el año 2
24:5, # tasa para el año 3
36:6}) # tasa para el año 4
# se cambia el valor de la serie en este punto
x[5] = 10
x
Out[9]:
cashflow(const_value=0, start=None, end=None,
periods=None, freq='A')
Crea una serie de tiempo que representa un flujo genérico de efectivo.
const_value
-- valor por defecto.start
-- período de tiempo inicial.end
-- período de tiempo final.periods
-- número de períodos (longitud de la serie).freq
-- número de períodos de capitalización por año.
In [10]:
cf.cashflow(const_value=1, # valor constante
start='2000Q1', # fecha inicial
periods=8, # número total de períodos
freq='Q') # número de períodos por año
Out[10]:
In [11]:
## es posible alterar y acceder a valores individuales
## para cada período de tiempo usando []
x = cf.cashflow(const_value=[0, 1, 2, 3], start='2000Q1', freq='Q')
x[3] = 10
x
Out[11]:
In [12]:
x[3]
Out[12]:
In [13]:
x['2000Q4'] = 0
x
Out[13]:
In [14]:
x['2000Q4']
Out[14]:
In [15]:
## función valor absoluto
abs(cf.cashflow(const_value=[-10]*4,
start='2000Q1',
freq='Q'))
Out[15]:
Operaciones entre flujos genéricos de efectivo
In [16]:
x = cf.cashflow(const_value=[1]*4, start='2000Q1', freq='Q')
y = cf.cashflow(const_value=[2]*4, start='2000Q1', freq='Q')
In [17]:
x + y
Out[17]:
In [18]:
x * y
Out[18]:
In [19]:
x - y
Out[19]:
In [20]:
x // y
Out[20]:
In [21]:
x.cumsum()
Out[21]:
Asignación
In [22]:
x = cf.cashflow( const_value=[2]*4, start='2000Q1', freq='Q')
x += cf.cashflow( const_value=[3]*4, start='2000Q1', freq='Q')
x
Out[22]:
In [23]:
x = cf.cashflow( const_value=[6]*4, start='2000Q1', freq='Q')
x //= cf.cashflow( const_value=[4]*4, start='2000Q1',freq='Q')
x
Out[23]:
In [24]:
x = cf.cashflow( const_value=[2]*4, start='2000Q1', freq='Q')
x *= cf.cashflow( const_value=[3]*4, start='2000Q1', freq='Q')
x
Out[24]:
In [25]:
x = cf.cashflow( const_value=[6]*4, start='2000Q1', freq='Q')
x -= cf.cashflow( const_value=[4]*4, start='2000Q1', freq='Q')
x
Out[25]:
In [26]:
## suma de dos series con diferente longitud
x = cf.cashflow([100]*12, start='2000Q1', freq='Q')
y = cf.cashflow([100]*12, start='2001Q1', freq='Q')
x + y
Out[26]:
In [27]:
z = cf.cashflow([0]*24, start='1999Q1', freq='Q')
z
Out[27]:
In [28]:
z[x.index] += x
z
Out[28]:
In [29]:
z[y.index] += y
z
Out[29]:
In [30]:
## convierte el flujo a una lista
cf.cashflow(const_value=[6]*4, start='2000Q1', freq='Q').tolist()
Out[30]:
En algunos casos es necesario introducir patrones de flujo más complejos.
In [31]:
cf.cashflow(const_value=[0, 1, 2, 2, 4, 5, 6, 7, 8], start='2000Q1', freq='Q')
Out[31]:
In [32]:
cflo = cf.cashflow(const_value=0,
start='2000',
periods=15,
freq='A')
cflo[5:10] = 100
cflo
Out[32]:
In [33]:
cflo = cf.cashflow(const_value=0,
start='2000',
periods=15,
freq='A')
cflo[0:5] = 100
cflo[5:10] = 150
cflo[10:15] = 200
cflo
Out[33]:
In [34]:
## gradiente geometrico
cflo = cf.cashflow(const_value=0,
start='2000',
periods=15,
freq='A')
cflo[5:10] = [100 * 1.05 ** (t-5) for t in range(5,10)]
cflo
Out[34]:
In [35]:
cflo[4:11] += 200
cflo
Out[35]:
In [36]:
cflo.plot.barh()
plt.grid(True)
plt.show()
In [37]:
cflo.plot.barh(figsize=(3,10))
plt.grid(True)
plt.show()
In [38]:
cflo.plot.bar(figsize=(10, 4), ylim=(-max(abs(cflo)), max(abs(cflo))))
plt.grid(True)
plt.xlabel('Años')
plt.ylabel('Millones de $')
plt.show()
In [39]:
cf.textplot(cflo)
Ejercicio.-- Represente los siguientes flujos de fondos y luego cómpute y grafique su suma.
Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia
Haga click aquí para acceder a la última versión online
Haga click aquí para ver la última versión online en nbviewer
.