Correlacion / app.py
azarazua's picture
Update app.py
fb81260 verified
import streamlit as st
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random
# Streamlit app layout
st.title("Estimating statistics from two sets of historical data")
with st.form("data_input_form"):
N = st.number_input("Enter the number of data points for each set:", step=1)
# Button to generate random data sets
if st.form_submit_button("Generate Random Data Sets"):
# Generate two sets of N random data points each
set1 = [random.randint(0, 20) for _ in range(N)]
set2 = [random.randint(0, 20) for _ in range(N)]
if "set1" in globals():
# Calculating mean of each set
set1_mean = np.mean(set1)
set2_mean = np.mean(set2)
st.subheader("Expected Values")
st.write(f"Mean of Set 1: {set1_mean:,.2f}")
st.write(f"Mean of Set 2: {set2_mean:,.2f}")
# Calculating variances
set1_var = np.var(set1)
set2_var = np.var(set2)
st.subheader("Variances")
st.write(f"Variance of Set 1: {set1_var:,.2f}")
st.write(f"Variance of Set 2: {set2_var:,.2f}")
# Calculating correlation coefficient
corr_coefficient = np.corrcoef(set1, set2)[0, 1]
st.subheader("Correlation Coefficient")
st.write(f"Correlation Coefficient: {corr_coefficient:,.2f}")
# Scatter plot
plt.scatter(set1, set2)
plt.title("Scatter Plot")
plt.xlabel("Set 1")
plt.ylabel("Set 2")
st.pyplot(plt)
plt.close()
# Line plot
plt.title("Line Plot of Data Sets")
plt.plot(np.arange(len(set1)), set1, label="Set 1")
plt.plot(np.arange(len(set2)), set2, label="Set 2")
plt.ylim(-10, 40)
plt.xlabel("Time")
plt.ylabel("Returns")
plt.legend()
st.pyplot(plt)
plt.close()
# Calculating weights and portfolio returns
w_set1 = (set1_mean - set2_mean + set2_var - corr_coefficient * np.sqrt(set1_var * set2_var)) / (
set1_var + set2_var - 2 * corr_coefficient * np.sqrt(set1_var * set2_var)
)
w_set2 = 1 - w_set1
portfolio_var = (w_set1**2)*set1_var + (w_set2**2)*set2_var + 2*w_set1*w_set2*corr_coefficient*np.sqrt(set1_var * set2_var)
st.subheader("Weights and Portfolio Returns")
st.write("Assuming Set 1 and Set 2 represent returns of portfolios")
st.write(f"Weight of Set 1: {w_set1:,.2f}")
st.write(f"Weight of Set 2: {w_set2:,.2f}")
st.write(f"Expected Portfolio Return: {w_set1*set1_mean + w_set2*set2_mean:,.2f}")
st.write(f"Portfolio Variance: {portfolio_var:,.2f}")
else:
st.write("Please input the number of data points for each set.")