File size: 3,697 Bytes
f7438a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
import pandas as pd
from scipy.spatial.distance import euclidean
import gradio as gr

def rank_candidates(candidates, ideal_scores):
    # 理想スコアとの差を計算
    ranked = sorted(candidates, key=lambda x: euclidean(x["スコア"], ideal_scores))
    return pd.DataFrame(ranked)

# 候補者データ
candidates = [
    {"候補者ID": "candidate1", "名前": "伊藤 卓郎", "スコア": [8, 7, 9]},
    {"候補者ID": "candidate2", "名前": "上川 一郎", "スコア": [9, 8, 9]},
    {"候補者ID": "candidate3", "名前": "佐久間 孝彦", "スコア": [7, 6, 8]},
    {"候補者ID": "candidate4", "名前": "寺田 智", "スコア": [8, 8, 8]},
    {"候補者ID": "candidate5", "名前": "佐藤 和人", "スコア": [6, 9, 7]},
    {"候補者ID": "candidate6", "名前": "本間 武", "スコア": [7, 6, 9]},
    {"候補者ID": "candidate7", "名前": "坂本 吾郎", "スコア": [8, 7, 5]},
    {"候補者ID": "candidate8", "名前": "広川 裕子", "スコア": [7, 9, 7]},
    {"候補者ID": "candidate9", "名前": "小沢 茂美", "スコア": [7, 6, 5]},
    {"候補者ID": "candidate10", "名前": "小暮 琢磨", "スコア": [8, 7, 7]},
    {"候補者ID": "candidate11", "名前": "川上 伸介", "スコア": [8, 6, 8]},
    {"候補者ID": "candidate12", "名前": "野沢 百合子", "スコア": [7, 6, 8]},
    {"候補者ID": "candidate13", "名前": "広沢 啓介", "スコア": [4, 9, 5]},
    {"候補者ID": "candidate14", "名前": "野口 琢磨", "スコア": [7, 5, 5]},
    {"候補者ID": "candidate15", "名前": "進藤 洋二", "スコア": [7, 8, 6]}
]

models = ['モデル1(信頼性の高さ、計画性のある進行)', 'モデル2(積極的な姿勢、データドリブンアプローチ)', 'モデル3(高度なプレゼン力、結果志向の行動)'] 
model_scores = {'モデル1(信頼性の高さ、計画性のある進行)': [9, 10, 9], 'モデル2(積極的な姿勢、データドリブンアプローチ)': [9, 8, 8], 'モデル3(高度なプレゼン力、結果志向の行動)': [8, 9, 9]}


# 理想スコア
ideal_scores = [10, 9, 10]

def return_model_scores(rs):
    # 選択されたモデルのスコアを取得して、個別に返す
    scores = model_scores.get(rs, [None, None, None])
    return scores[0], scores[1], scores[2]

def display_ranked_df(continuity, decision, hypo):
    # 実際の入力値を理想スコアとして使用
    dynamic_ideal_scores = [int(continuity), int(decision), int(hypo)]
    ranked_df = rank_candidates(candidates, dynamic_ideal_scores)

    # 結果をHTML形式で出力
    styled_html = f"""
    <div style="display: flex; justify-content: center; flex-direction: column; align-items: center;">
        {ranked_df.to_html(index=False, show_dimensions=True)}
    </div>
    """
    return styled_html
    #return ranked_df.to_html(index=False)

# Gradio UI
with gr.Blocks(css="footer {visibility: hidden;}",theme=gr.themes.Glass(),title="Candidate Evaluation") as app:
    gr.Markdown("### 候補者ランキングツール")
    rs = gr.Dropdown(label="モデル", choices=models, value='モデル1')

    continuity = gr.Number(label="継続力スコア")
    decision = gr.Number(label="投資判断スコア")
    hypo = gr.Number(label="仮説構築力スコア")
    result = gr.HTML(label="ランク付け結果")
    button = gr.Button("ランキングを表示")

    rs.change(fn=return_model_scores, inputs=[rs], outputs=[continuity,decision,hypo])
    
    button.click(
        display_ranked_df,
        inputs=[continuity, decision, hypo],
        outputs=[result]
    )

app.launch(favicon_path="favicon.ico")