File size: 4,840 Bytes
3d4edd5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import pandas as pd
import gradio as gr

# โหลดข้อมูลจากไฟล์ Excel ที่อยู่ในโค้ด
def load_data():
    # แทนที่ "path_to_your_file.xlsx" ด้วยพาธไฟล์ Excel ของคุณ
    data = pd.read_excel("./BT-Engage-ขาวคาดแดง.xlsx")
    return data

# ฟังก์ชันสำหรับกรองข้อมูลพร้อมจัดการกับข้อผิดพลาด
def filter_data(columns, budget_order, office_filter, ministry_filter, 
                citizen_service, digital_government, data_service, ai, cloud_security, 
                cybercrime, learning_center):

    # โหลดข้อมูล
    data = load_data()

    # เลือกคอลัมน์ที่จะใช้
    if columns:
        data = data[columns]
    
    # เรียงลำดับงบประมาณ
    if budget_order == 'น้อยไปมาก':
        data = data.sort_values('งบประมาณ', ascending=True)
    elif budget_order == 'มากไปน้อย':
        data = data.sort_values('งบประมาณ', ascending=False)

    # กรองสำนักงาน
    if office_filter != "ทั้งหมด":
        data = data[data['สำนักงาน'] == office_filter]

    # กรองกระทรวง
    if ministry_filter != "ทั้งหมด":
        data = data[data['กระทรวง'] == ministry_filter]

    # ฟิลเตอร์สำหรับคอลัมน์ Y/N โดยตรวจสอบการมีอยู่ของคอลัมน์และค่าที่กรองได้
    yn_columns = {
        'Citizen Service & Doing Business': citizen_service,
        'Digital Government': digital_government,
        'Data Service': data_service,
        'AI': ai,
        'Cloud & Security': cloud_security,
        'Cybercrime': cybercrime,
        'Learning Center/Museum/Environmental/Forest': learning_center
    }

    for col, yn_filter in yn_columns.items():
        if yn_filter != "ไม่กรอง":
            # ตรวจสอบว่าคอลัมน์มีอยู่ในข้อมูลหรือไม่และฟิลเตอร์ค่า Y หรือ N
            if col in data.columns:
                data = data[data[col].fillna('') == yn_filter]

    return data

# โหลดข้อมูลสำหรับตัวเลือกในดรอปดาวน์
data = load_data()
offices = ["ทั้งหมด"] + sorted(data['สำนักงาน'].dropna().unique().tolist())
ministries = ["ทั้งหมด"] + sorted(data['กระทรวง'].dropna().unique().tolist())

# การตั้งค่าอินเตอร์เฟซ Gradio
with gr.Blocks() as demo:
    gr.Markdown("# Data Viewer and Filter")
    
    column_selector = gr.CheckboxGroup(
        choices=['ชื่อโครงการ', 'งบประมาณ', 'วัตถุประสงค์', 'สถานที่ดำเนินการ', 
                 'ระยะเวลาดำเนินการ', 'สำนักงาน', 'กระทรวง', 
                 'Citizen Service & Doing Business', 'Digital Government',
                 'Data Service', 'AI', 'Cloud & Security', 'Cybercrime',
                 'Learning Center/Museum/Environmental/Forest'], 
        label="เลือกคอลัมน์ที่ต้องการแสดง")

    budget_order = gr.Radio(["น้อยไปมาก", "มากไปน้อย", "ไม่เรียงลำดับ"], label="เรียงลำดับงบประมาณ")
    
    office_filter = gr.Dropdown(choices=offices, label="เลือกสำนักงาน")
    ministry_filter = gr.Dropdown(choices=ministries, label="เลือกกระทรวง")

    yn_filter_labels = [
        'Citizen Service & Doing Business', 'Digital Government', 
        'Data Service', 'AI', 'Cloud & Security', 'Cybercrime',
        'Learning Center/Museum/Environmental/Forest'
    ]
    yn_filters = {}
    for label in yn_filter_labels:
        yn_filters[label] = gr.Radio(["ไม่กรอง", "Y", "N"], label=label, value="ไม่กรอง")

    submit_button = gr.Button("Filter Data")
    output_data = gr.Dataframe(label="ผลลัพธ์ข้อมูลที่กรองแล้ว")

    submit_button.click(
        filter_data, 
        inputs=[column_selector, budget_order, office_filter, ministry_filter] + list(yn_filters.values()),
        outputs=output_data
    )

# รันแอปพลิเคชัน Gradio
demo.launch()