Spaces:
Sleeping
Sleeping
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() |