Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#Importamos librerías
|
2 |
+
|
3 |
+
import streamlit as st
|
4 |
+
import numpy as np
|
5 |
+
import pandas as pd
|
6 |
+
import matplotlib.pyplot as plt
|
7 |
+
import random
|
8 |
+
|
9 |
+
# Le ponemos el titulo de la app
|
10 |
+
st.title("Trazando el Rumbo: Estimación de Tendencias desde Dos Listas de Valores Históricos")
|
11 |
+
|
12 |
+
with st.form("my_form"):
|
13 |
+
N = st.number_input(" ¿Cuántos elementos quieres para cada lista?", step=1)
|
14 |
+
|
15 |
+
# Botón para generar el cálculo
|
16 |
+
if st.form_submit_button("Click para generar numeros de manera aleatoria' lists"):
|
17 |
+
# Genera dos listas de 100 numeros aleatorios cada uno
|
18 |
+
serie_a = [random.randint(0, 100) for _ in range(N)]
|
19 |
+
serie_b = [random.randint(0, 100) for _ in range(N)]
|
20 |
+
|
21 |
+
if "serie_a" in locals() and "serie_b" in locals():
|
22 |
+
promedio_a = np.mean(serie_a)
|
23 |
+
promedio_b = np.mean(serie_b)
|
24 |
+
|
25 |
+
st.subheader("Valores esperados")
|
26 |
+
st.write(f"Promedio de lista A = {promedio_a:.2f}")
|
27 |
+
st.write(f"Promedio de lista B = {promedio_b:.2f}")
|
28 |
+
|
29 |
+
varianza_a = np.var(serie_a)
|
30 |
+
varianza_b = np.var(serie_b)
|
31 |
+
|
32 |
+
st.subheader("Varianzas")
|
33 |
+
st.write(f"Varianza de lista A = {varianza_a:.2f}")
|
34 |
+
st.write(f"Varianza de lista B = {varianza_b:.2f}")
|
35 |
+
|
36 |
+
correlacion_ab = np.corrcoef(serie_a, serie_b)[0, 1]
|
37 |
+
|
38 |
+
st.subheader("Correlación")
|
39 |
+
st.write(f"Correlación entre lista A y B = {correlacion_ab:.2f}")
|
40 |
+
|
41 |
+
plt.figure(figsize=(6, 4))
|
42 |
+
plt.scatter(serie_a, serie_b)
|
43 |
+
plt.title("Gráfico de Dispersión A vs B")
|
44 |
+
plt.xlabel("Serie A")
|
45 |
+
plt.ylabel("Serie B")
|
46 |
+
st.pyplot(plt)
|
47 |
+
|
48 |
+
plt.figure(figsize=(6, 4))
|
49 |
+
plt.plot(serie_a, label='Serie A')
|
50 |
+
plt.plot(serie_b, label='Serie B')
|
51 |
+
plt.title("Evolución de las Series")
|
52 |
+
plt.xlabel("Tiempo")
|
53 |
+
plt.ylabel("Valores")
|
54 |
+
plt.legend()
|
55 |
+
st.pyplot(plt)
|
56 |
+
|
57 |
+
w_a = (promedio_a - promedio_b + varianza_b - correlacion_ab * np.sqrt(varianza_a * varianza_b)) / (
|
58 |
+
varianza_a + varianza_b - 2 * correlacion_ab * np.sqrt(varianza_a * varianza_b)
|
59 |
+
)
|
60 |
+
w_b = 1 - w_a
|
61 |
+
|
62 |
+
var_portafolio = (w_a*2) * varianza_a + (w_b*2) * varianza_b + 2 * w_a * w_b * correlacion_ab * np.sqrt(varianza_a * varianza_b)
|
63 |
+
|
64 |
+
st.subheader("Ponderaciones y rendimiento del portafolio")
|
65 |
+
st.write("Suponiendo que A y B son rendimientos de portafolios")
|
66 |
+
st.write(f"Ponderación para A = {w_a:.2f}")
|
67 |
+
st.write(f"Ponderación para B = {w_b:.2f}")
|
68 |
+
st.write(f"Rendimiento esperado del portafolio = {(w_a * promedio_a + w_b * promedio_b):.2f}")
|
69 |
+
st.write(f"Varianza del portafolio = {var_portafolio:.2f}")
|
70 |
+
|
71 |
+
else:
|
72 |
+
st.error("Por favor, ingresa el número de elementos para las series.")
|