HyperPapers / app.py
2catycm's picture
refrac
db9ca60
raw
history blame
2.36 kB
import streamlit as st
from data_processor import load_data, process_data
from visualizer import visualize_gmm, visualize_ratings
from hypergraph_drawer import draw_hypergraph
# 设置页面配置
st.set_page_config(layout="wide")
# 主应用
def main():
st.title("高斯混合分布聚类可视化")
# 使用 sidebar 控制参数
with st.sidebar:
st.header("控制面板")
autoplay = st.button("自动播放")
if autoplay:
for i in range(1, 11):
with st.spinner(f"迭代 {i}"):
time.sleep(1)
st.session_state.iteration = i
st.session_state.autoplay = False
st.experimental_rerun()
# 主页面布局
if 'autoplay' not in st.session_state:
st.session_state.autoplay = True
if 'iteration' not in st.session_state:
st.session_state.iteration = 1
if st.session_state.autoplay:
# 隐藏迭代次数滑条
iteration = st.session_state.iteration
else:
# 显示迭代次数滑条
iteration = st.slider("选择迭代次数", min_value=1, max_value=10, value=st.session_state.iteration, step=1)
# 动态限制采样数量的最大值
df = load_data()
max_samples = len(df)
num_samples = st.slider("选择采样论文数量", min_value=1, max_value=min(100, max_samples), value=min(10, max_samples), step=1)
# 处理数据
sampled_df, probabilities, hyperedges = process_data(df, iteration, num_samples)
# 并排展示超图和高斯混合分布
col1, col2 = st.columns(2)
with col1:
st.header("超图可视化")
hypergraph_image = draw_hypergraph(hyperedges)
st.image(hypergraph_image, caption="超图可视化", use_container_width=True)
with col2:
st.header("高斯混合分布聚类结果")
fig_gmm = visualize_gmm(sampled_df, iteration)
st.plotly_chart(fig_gmm, use_container_width=True)
# 显示采样论文的详细信息
st.header("采样论文详细信息")
st.dataframe(sampled_df[["title", "keywords", "rating_avg", "confidence_avg", "site"]])
# 增加第二种可视化方式
st.header("论文评分分布")
fig_bar = visualize_ratings(sampled_df)
st.plotly_chart(fig_bar, use_container_width=True)
if __name__ == "__main__":
main()