Sofi1606/Cashflow
0
1#Importamos las librerías necesarias2import streamlit as st3import numpy as np4import pandas as pd5import matplotlib.pyplot as plt6 7# La función que ayuda a realizar el valor presente 8def calculate_pv(cashflows, rate):9 pv = sum(cf / (1 + rate) ** i for i, cf in enumerate(cashflows))10 return pv11 12# Titulo de la página13st.title('Flujo de dinero: Calculadora de valor presente')14 15# Dar opción para meter la tasa de descuento16rate = st.number_input('Tasa de descuento (%)', min_value=0.0, max_value=100.0, value=10.0, step=0.1)/10017 18# Dar opción para meter cuantos años quiere calcular19n = st.number_input("Ingresa cuántos años quieres calcular", min_value = 0, step=1)20 21# Meter el flujo de dinero22cf_list = [0] * (n+1)23cf_dict = pd.DataFrame({"cashflows": cf_list}).astype(int)24cf_df = st.data_editor(cf_dict.T)25 26cashflows = np.array(cf_df.values[0])27 28# Genera el botón para calcular el valor presente29if st.button('Calcula valor presente'):30 pv = calculate_pv(cashflows, rate)31 st.write(f'El valor presente es: ${pv:,.2f}')32 33 # Para que se muestre en la gráfica los datos de valor presente34 colors = ['lightblue' if cf > 0 else 'lightsage' for cf in cashflows]35 plt.scatter(range(n+1), cashflows, c=colors)36 plt.title('Diagrama de flujo de dinero')37 plt.xlabel('Periodo')38 plt.ylabel('Flujo de dinero')39 for i, cf in enumerate(cashflows):40 plt.annotate(f'{cf:,.2f}', (i, cf), textcoords="offset points", xytext=(0,n), ha='center')41 st.pyplot(plt)42 