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_rateinterest_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.