<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Librería Cashflows
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. 
Cashflows
cashflows es una librería para el cálculo interactivo del valor del dinero en IPython. Las funciones implementadas son similares a las usadas en Microsoft Excel, las calculadoras financieras y otros softwares similares. cashflows permite el análisis de diferentes tipos de inversiones
Step1:  Tipos de interés
Interés nominal (nrate)
Step2:  Función iconv
iconv(nrate=None, erate=None, prate=None, pyr=1)      
donde
Step3:  Los cálculos pueden ejecutarse con una sola llamada a la función.
Step4:  Función pvfv
pvfv(pval=None, fval=None, nrate=None, nper=None, pyr=1, 
  noprint=True) 
<img src="images/pvfv.png" width="300">
La función pvfv returna el valor faltante en la siguiente ecuación
Step5:  Ejemplo.-- ¿Cuál será el valor futuro de $ 100, $ 200, $ 300 y $ 400 en 5 años a una tasa de interés del 3% anual?
Step6:  Ejemplo.-- ¿Cuál será el valor futuro de $ 100 en 1, 2, 3 y 4 años a una tasa de interés de 3% anual?
Step7:  Ejercicio.-- Se compra un propiedad por $ 32000. Si se presenta una depreciación del 2% por año, ¿cuál será el valor de la propiedad al final de 6 años?
Función pvpmt
pvpmt(pmt=None, pval=None, nrate=None, nper=None, pyr=1, 
  noprint=True)
Calcula el parámetro faltante en el siguiente flujo de efectivo.
<img src="images/pvpmt.png" width="300">
Nomenclatura para los parámetros
Step8:  Ejemplo.-- [2, pág. 59] Calcule el pago mensual de una hipoteca por $ 243400 pagada en 348 meses a una tasa nominal de 5.25%.
Step9:  Ejemplo.-- [3, pág. 81] Se está financiando la compra de un carro nuevo con un leasing a tres años a una tasa nominal del 10.5%. El precio del carro es de $ 7250. Se debe realizar un pago inicial de $ 1500. ¿Cuánto es el pago mensual si los pagos se hacen al final del mes?
Step10:  Ejemplo.-- Para el caso del ejemplo anterior, se desea reducir la cuota mensual en $ 10, ¿cuál tasa de interés debería obtenerse?
Step11:  Ejercicio.-- Se hará un préstamo de $ 35000 para la compra de una turbina de generación a gas. Si la tasa nominal es del 10.5% con pagos pagos mensuales de $ 550 al final de cada mes, ¿cuánto tiempo se requiere para cancelar la deuda?  
Función pmtfv
pmtfv(pmt=None, fval=None, nrate=None, nper=None, pyr=1, 
  noprint=True)
Calcula el parámetro faltante para el siguiente flujo de efectivo.
<img src="images/pmtfv.png" width="300">
Nomenclatura para los parámetros
Step12:  Función tvmm
tvmm(pval=None, fval=None, pmt=None, nrate=None, nper=None, 
  due=0, pyr=1, noprint=True)
Esta función calcula el parámetro faltante en el flujo de efectivo especificado por el parámetro due.
<img src="images/tvmm.png" width="600">
Nomenclatura para los parámetros
Step13:  Ejemplo.-- [2, pág. 58] ¿Cuánto se puede pagar por una propiedad que generará un flujo neto anual de $ 17500 durante 5 años, si al final la propiedad se puede vender en $ 540.000? (la tasa nominal de interés es del 12%)
Step14:  Ejemplo.-- ¿Cuál es la amortización para los siguientes préstamos (fval es el pago final residual)? 
plazo      5,        5,       6,       7
pval     100,      110,     110,     105
fval     -20,      -10,     -20,       0
tasa       0.020,    0.017,   0.016,   0.017
Step15:  Ejercicio.-- Se abre una cuenta hoy con un depósito de $ 775. La tasa nominal es 6.25% con capitalización mensual. ¿Si se desea tener un capital de $ 4000 en 60 meses, ¿Cuánto se debe depositar mensualmente (al final del mes)?
Función amortize
amortize(pval=None, fval=None, pmt=None, nrate=None,
  nper=None, due=0, pyr=1)
Imprime la tabla de amortizaciones. La llamada a la función retorna un pandas.DataFrame. Esta función usa los mismos parámetros de la función tvmm.
Ejemplo.-- Construya la tabla de amortización (balance) para un préstamo de  $ 1000 a 6 meses con pagos mensuales iguales a una tasa de interés del 1% mensual.
<ASSISTANT_TASK:>
Python Code:
import cashflows as cf
Explanation: Librería Cashflows
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. 
Cashflows
cashflows es una librería para el cálculo interactivo del valor del dinero en IPython. Las funciones implementadas son similares a las usadas en Microsoft Excel, las calculadoras financieras y otros softwares similares. cashflows permite el análisis de diferentes tipos de inversiones:
ara los siguientes tipos de inversiones:
Créditos
Ahorros
Depreciaciones
Bonos
Flujos genéricos de efectivo
Este análisis ayuda a responder diferentes preguntas:
¿Cuáles son los indicadores financieros de un proyecto de generación?
¿Cuáles es la mejor alternativa de crédito para financiar la compra de un equipo?
¿Cuál es el incentivo mínimo que debe darse a una nueva tecnología para incentivar su adopción?
¿Cuál es el riesgo en el que se incurre en una inversión (transmisión, generación, distribución, etc.)?
Instalación de la librería
La instalación de la librería puede realizarse usando pip: 
pip install cashflows
Ayuda
Las funciones de la librería se encuentran documentadas y su ayuda puede obtenerse a través de la función help.  Por ejemplo, para obtener la ayuda de la función cashflow se digita el siguiente comando en el prompt interactivo:
&gt;&gt;&gt; help(cashflow)
como resultado se abrirá la ayuda de dicha función.
Documentación
La documentación de la libraría puede consultarse en: 
 http://cashflows.readthedocs.io/en/latest/
Carga de la librería
Para cargar la librería use:
import cashflows as cf
Lenguaje de desarrollo
La librería está desarrollada en Python 3.6. No hay compatibilidad para Python 2.x.
End of explanation
pow(1+0.0672/2, 2) - 1 ## tasa efectiva anual para el Banco #1
pow(1+0.0670/4, 4) - 1 ## tasa efectiva anual para el Banco #2 
                       ## tasa mas favorable
pow(1+0.0665/12, 12) - 1 ## tasa efectiva anual para el Banco #3
Explanation: Tipos de interés
Interés nominal (nrate): expresado sobre una base anual para un número pyr de períodos de pago en el año. 
Interés efectivo por período de pago (o períodico) (prate): representa el interés real para cada período de pago en el año.  
Interés efectivo anual (erate): interés real para un período único de pago de un año.  
$$ prate= \frac{nrate}{pyr}, \qquad erate = \left( \displaystyle 1 +  prate\right)^{nper} - 1 = \left( \displaystyle 1 + \frac{nrate}{pyr}\right)^{nper} - 1 $$
Ejemplo.-- Se está considerando abrir una cuenta de ahorros en uno de tres bancos. ¿Cuál banco tienen la tasa de interés más favorable?
Banco #1: 6.72% anual, compuesto semestralmente.
Banco #2: 6.70% anual, compuesto trimestralmente.
Banco #3: 6.65% anual, compuesto mensualmente.
Solución manual
End of explanation
cf.iconv(nrate = 6.72, pyr =  2)  ## Banco 1: 6.72% comp semestralmente
cf.iconv(nrate = 6.70, pyr =  4)  ## Banco 2 6.70% comp trimestralmente
cf.iconv(nrate = 6.65, pyr = 12)  ## Banco 3: 6.65% comp mensualmente
Explanation: Función iconv
iconv(nrate=None, erate=None, prate=None, pyr=1)      
donde:
nrate -- tasa nominal.
prate -- tasa períodica o tasa efectiva por período de capitalización.
erate -- tasa efectiva por año.
pyr -- número de períodos de capitalización por año.
La función recibe una de las tasa de interés y retorna las otras dos así:
Al especificar nrate retorna (erate, prate).
Al especificar erate retorna (nrate, prate).
Al especificar prate retorna (nrate, erate).
Los cálculos son ejecutados usando las siguientes ecuaciones:
$$ prate= \frac{nrate}{pyr}, \qquad erate = \left( \displaystyle 1 +  prate\right)^{nper} - 1 = \left( \displaystyle 1 + \frac{nrate}{pyr}\right)^{nper} - 1 $$
Los cálculos usando iconv se realizan de la siguiente manera:
End of explanation
## Otra forma
cf.iconv(nrate = [6.72, 6.79, 6.65], pyr = [2, 4, 12])
Explanation: Los cálculos pueden ejecutarse con una sola llamada a la función.
End of explanation
cf.pvfv(nrate =     7.2,   # tasa de interes
        pval  = -2000,     # valor presente
        fval  = +3000)     # valor futuro
# Ya que nper es un valor entre 5 y 6, se requieren 6 años 
# para tener un balance de al menos $ 3000.
# El balance al final de los seis años es (R/ 3035.28):
cf.pvfv(nrate =     7.2, # tasa de interes
        pval  = -2000,   # valor presente
        nper  =     6)   # numero de periodos
Explanation: Función pvfv
pvfv(pval=None, fval=None, nrate=None, nper=None, pyr=1, 
  noprint=True) 
<img src="images/pvfv.png" width="300">
La función pvfv returna el valor faltante en la siguiente ecuación:
$$fval = - pval * \left(1 + \frac{nrate}{pyr}\right) ^ {nper}$$
donde:
* pval -- valor presente.
* fval -- valor futuro.
* nper -- cantidad de períodos.
* nrate -- tasa de interés nominal.
* pyr -- número de períodos de capitalización por año.
Ejemplo.-- [3, pág. 88] Se depositan $ 2000 en una cuenta de ahorros que paga un interés anual del 7.2% (capitalizado anualmente). Si no se hacen otros depósitos en la cuenta, ¿cuánto tiempo se requiere para que la cuenta tenga $ 3000? R/ 5.83
<img src="images/sesion-2-ejemplo-1.png" width="350">
End of explanation
# uno de los parámetros puede ser un vector
cf.pvfv(pval  =  [100, 200, 300, 400], 
        nper  =  5,
        nrate =  3.0)
Explanation: Ejemplo.-- ¿Cuál será el valor futuro de $ 100, $ 200, $ 300 y $ 400 en 5 años a una tasa de interés del 3% anual?
End of explanation
cf.pvfv(pval  =  100, 
        nper  =    [1, 2, 3, 4],
        nrate =    3.0)
Explanation: Ejemplo.-- ¿Cuál será el valor futuro de $ 100 en 1, 2, 3 y 4 años a una tasa de interés de 3% anual?
End of explanation
cf.pvpmt(pmt   =  -450,   # pago mensual
         nrate =     5.9, # tasa de interés
         nper  =    48,   # numero de periodos
         pyr   =    12)   # periodos de capitalización por año
_ + 1500
Explanation: Ejercicio.-- Se compra un propiedad por $ 32000. Si se presenta una depreciación del 2% por año, ¿cuál será el valor de la propiedad al final de 6 años?
Función pvpmt
pvpmt(pmt=None, pval=None, nrate=None, nper=None, pyr=1, 
  noprint=True)
Calcula el parámetro faltante en el siguiente flujo de efectivo.
<img src="images/pvpmt.png" width="300">
Nomenclatura para los parámetros:
* pval -- valor presente.
* pmt -- pago períodico o anualidad.
* nper -- cantidad de períodos.
* nrate -- tasa nominal de interés por año.
* pyr -- número de períodos por año.
Ejemplo.-- [2, pág. 57] Si se va a realizar un leasing a una tasa nominal de 5.9% y se deben realizar 48 pagos mensuales de $ 450 y un pago inicial de $ 1500 al constituirse el crédito, ¿cuál es el monto del préstamo?
End of explanation
cf.pvpmt(pval  = 243400,    # monto
         nrate =      5.25, # tasa de interés
         nper  =    348,    # número de períodos
         pyr   =     12)    # períodos de capitalización por año
Explanation: Ejemplo.-- [2, pág. 59] Calcule el pago mensual de una hipoteca por $ 243400 pagada en 348 meses a una tasa nominal de 5.25%.
End of explanation
cf.pvpmt(pval  = 5750,  # = 7250 - 1500
         nrate =   10.5,   
         nper  =   36,
         pyr   =   12)
Explanation: Ejemplo.-- [3, pág. 81] Se está financiando la compra de un carro nuevo con un leasing a tres años a una tasa nominal del 10.5%. El precio del carro es de $ 7250. Se debe realizar un pago inicial de $ 1500. ¿Cuánto es el pago mensual si los pagos se hacen al final del mes?
End of explanation
cf.pvpmt(pval = 5750,
         pmt  = -176.89,   
         nper =   36,
         pyr  =   12)
Explanation: Ejemplo.-- Para el caso del ejemplo anterior, se desea reducir la cuota mensual en $ 10, ¿cuál tasa de interés debería obtenerse?
End of explanation
cf.pmtfv(pmt=-1000, nrate=12, nper=12, pyr=12)
Explanation: Ejercicio.-- Se hará un préstamo de $ 35000 para la compra de una turbina de generación a gas. Si la tasa nominal es del 10.5% con pagos pagos mensuales de $ 550 al final de cada mes, ¿cuánto tiempo se requiere para cancelar la deuda?  
Función pmtfv
pmtfv(pmt=None, fval=None, nrate=None, nper=None, pyr=1, 
  noprint=True)
Calcula el parámetro faltante para el siguiente flujo de efectivo.
<img src="images/pmtfv.png" width="300">
Nomenclatura para los parámetros:
pmt -- pago períodico.
fval -- valor futuro.
nper -- cantidad de períodos.
nrate -- tasa nominal.
pyr -- número de períodos de capitalización por año.
Ejemplo.-- Si al principio de cada mes se ahorran $ 1000, a una tasa nominal del 12% con capitalización mensual, ¿Cuánto se tendrá ahorrado al final del mes 12?
End of explanation
cf.tvmm(pval = -6000,     # depósito inicial
        nper =    32,     # número de períodos
        pmt  =     0,     # pago períodico
        fval = 10000,     # saldo final
        pyr  =    12)     # capitalización mensual
Explanation: Función tvmm
tvmm(pval=None, fval=None, pmt=None, nrate=None, nper=None, 
  due=0, pyr=1, noprint=True)
Esta función calcula el parámetro faltante en el flujo de efectivo especificado por el parámetro due.
<img src="images/tvmm.png" width="600">
Nomenclatura para los parámetros:
pval -- valor presente.
fval -- valor futuro.
pmt -- pago períodico.
nper -- cantidad de períodos.
nrate -- tasa de interés por período.
pyr -- número de períodos por año.
due -- momento del período en que se paga la anualidad: 'end' (o 0) indica el pago al final del período; 'begin' (o 1) indica el pago al principio del período.
Ejemplo.-- [2, pág. 55] ¿Qué tasa de interés debe obtenerse para acumular $ 10000 en 32 meses si se hace una inversión de $ 6000? R/ 1.61%
End of explanation
cf.tvmm(pmt   =  17500,   # pago períodico anual
        fval  = 540000,   # valor de venta
        nrate =     12.0, # tasa de interés
        nper  =      5)   # numero de periodos
Explanation: Ejemplo.-- [2, pág. 58] ¿Cuánto se puede pagar por una propiedad que generará un flujo neto anual de $ 17500 durante 5 años, si al final la propiedad se puede vender en $ 540.000? (la tasa nominal de interés es del 12%)
End of explanation
cf.tvmm(pval  = [ 100,   110,   110,   105   ],
        fval  = [ -20,   -10,   -20,     0   ],         
        nper  = [   5,     5,     6,     7   ], 
        nrate = [   2.0,   1.7,   1.6,   1.7 ])
Explanation: Ejemplo.-- ¿Cuál es la amortización para los siguientes préstamos (fval es el pago final residual)? 
plazo      5,        5,       6,       7
pval     100,      110,     110,     105
fval     -20,      -10,     -20,       0
tasa       0.020,    0.017,   0.016,   0.017
End of explanation
cf.amortize(pval=1000, fval=0, pmt=None, nrate=1.0, 
            nper=6, due=0)
table = cf.amortize(pval=1000, fval=0, pmt=None, nrate=1.0, 
                    nper=6, due=0)
table['Principal']
sum(table['Principal'])
table['Interest']
table['Interest'].tolist()
sum(table['Interest'])
table['Payment']
sum(table['Payment'])
Explanation: Ejercicio.-- Se abre una cuenta hoy con un depósito de $ 775. La tasa nominal es 6.25% con capitalización mensual. ¿Si se desea tener un capital de $ 4000 en 60 meses, ¿Cuánto se debe depositar mensualmente (al final del mes)?
Función amortize
amortize(pval=None, fval=None, pmt=None, nrate=None,
  nper=None, due=0, pyr=1)
Imprime la tabla de amortizaciones. La llamada a la función retorna un pandas.DataFrame. Esta función usa los mismos parámetros de la función tvmm.
Ejemplo.-- Construya la tabla de amortización (balance) para un préstamo de  $ 1000 a 6 meses con pagos mensuales iguales a una tasa de interés del 1% mensual.
End of explanation
<END_TASK>