File size: 2,362 Bytes
1d0271a
db9ca60
 
 
1d0271a
db9ca60
2835ddd
1d0271a
db9ca60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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()