Teera's picture
Update app.py
3d4edd5 verified
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()