You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Taipy GUI构建带筛选的仪表盘及适配SQLite3、SPARQL的技术求助

Taipy GUI 仪表盘实现方案及多数据源适配指引

一、CSV数据加载与单日评估结果实时展示

1. CSV数据加载处理

针对字符串为主的数据,加载时明确指定列类型,避免自动类型转换异常:

import pandas as pd
from taipy.gui import Gui, State

# 加载CSV文件,指定核心列类型为字符串
df = pd.read_csv("assessment_data.csv", dtype={"实体ID": str, "实体名称": str})
# 统一日期格式为日期类型(便于后续筛选)
df["评估日期"] = pd.to_datetime(df["评估日期"]).dt.date

2. 实体/日期筛选与实时更新

通过Taipy的组件回调实现筛选逻辑,筛选后数据实时同步到仪表盘表格:

# 初始化筛选参数:默认选中最新评估日期
selected_entity = None
selected_date = df["评估日期"].max()
filtered_df = df[df["评估日期"] == selected_date]

def on_filter_change(state: State):
    # 基于选中的实体和日期过滤数据
    temp_df = state.df.copy()
    if state.selected_date:
        temp_df = temp_df[temp_df["评估日期"] == state.selected_date]
    if state.selected_entity:
        temp_df = temp_df[temp_df["实体名称"] == state.selected_entity]
    state.filtered_df = temp_df

# 仪表盘页面布局
dashboard_page = """
# 评估结果仪表盘
<|layout|columns=1 2|
<|筛选区|
<|实体选择|dropdown|lov={list(df["实体名称"].unique())}|value={selected_entity}|on_change=on_filter_change|>
<|日期选择|date|value={selected_date}|on_change=on_filter_change|>
|>
<|单日评估结果|table|data={filtered_df}|columns=["实体名称", "评估日期", "指标1", "指标2", "指标3", "指标4", "指标5"]|>
|>
"""

二、分页评估信息收集表单

利用Taipy的页面导航实现分页表单,支持评估信息录入与保存:

# 表单临时存储数据
form_data = {
    "实体名称": "",
    "评估日期": pd.Timestamp.today().date(),
    "指标1": "",
    "指标2": "",
    "指标3": "",
    "指标4": "",
    "指标5": ""
}

def save_assessment(state: State):
    # 将表单数据追加到主数据框
    new_row = pd.DataFrame([state.form_data])
    state.df = pd.concat([state.df, new_row], ignore_index=True)
    # 重置指标输入框
    for k in state.form_data:
        if k.startswith("指标"):
            state.form_data[k] = ""

# 表单页面布局
form_page = """
# 评估信息收集
<|实体名称|input|value={form_data["实体名称"]}|>
<|评估日期|date|value={form_data["评估日期"]}|>
<|指标1|input|value={form_data["指标1"]}|>
<|指标2|input|value={form_data["指标2"]}|>
<|指标3|input|value={form_data["指标3"]}|>
<|指标4|input|value={form_data["指标4"]}|>
<|指标5|input|value={form_data["指标5"]}|>
<|保存评估|button|on_action=save_assessment|>
"""

# 全局导航页面
root_page = """
<|menu|label=导航|
<|仪表盘|page=dashboard_page|>
<|评估表单|page=form_page|>
|>
"""

# 启动应用
Gui(pages={"/": root_page, "dashboard_page": dashboard_page, "form_page": form_page}).run()

三、SQLite3数据源适配

替换CSV为SQLite存储,支持数据持久化读写:

import sqlite3

# 初始化SQLite数据库表
def init_sqlite_db():
    conn = sqlite3.connect("assessment.db")
    cursor = conn.cursor()
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS assessments (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        entity_name TEXT,
        assess_date DATE,
        metric1 TEXT,
        metric2 TEXT,
        metric3 TEXT,
        metric4 TEXT,
        metric5 TEXT
    )
    """)
    conn.commit()
    conn.close()

# 从SQLite读取数据转为DataFrame
def load_from_sqlite():
    conn = sqlite3.connect("assessment.db")
    df = pd.read_sql("SELECT * FROM assessments", conn)
    df["assess_date"] = pd.to_datetime(df["assess_date"]).dt.date
    conn.close()
    return df

# 将表单数据写入SQLite
def save_to_sqlite(form_data):
    conn = sqlite3.connect("assessment.db")
    cursor = conn.cursor()
    cursor.execute("""
    INSERT INTO assessments (entity_name, assess_date, metric1, metric2, metric3, metric4, metric5)
    VALUES (?, ?, ?, ?, ?, ?, ?)
    """, (
        form_data["实体名称"],
        form_data["评估日期"],
        form_data["指标1"],
        form_data["指标2"],
        form_data["指标3"],
        form_data["指标4"],
        form_data["指标5"]
    ))
    conn.commit()
    conn.close()

# 修改保存函数适配SQLite
def save_assessment(state: State):
    save_to_sqlite(state.form_data)
    state.df = load_from_sqlite()  # 更新数据框
    # 重置指标输入框
    for k in state.form_data:
        if k.startswith("指标"):
            state.form_data[k] = ""

# 初始化数据库并加载数据
init_sqlite_db()
df = load_from_sqlite()

四、SPARQL查询数据源适配

使用SPARQLWrapper库查询RDF数据,转换为DataFrame格式:

from SPARQLWrapper import SPARQLWrapper, JSON

def load_from_sparql(endpoint_url):
    sparql = SPARQLWrapper(endpoint_url)
    # 替换为实际SPARQL查询语句
    sparql.setQuery("""
    PREFIX ex: <http://example.org/assessment/>
    SELECT ?entityName ?assessDate ?metric1 ?metric2 ?metric3 ?metric4 ?metric5
    WHERE {
        ?assessment ex:entityName ?entityName ;
                    ex:assessDate ?assessDate ;
                    ex:metric1 ?metric1 ;
                    ex:metric2 ?metric2 ;
                    ex:metric3 ?metric3 ;
                    ex:metric4 ?metric4 ;
                    ex:metric5 ?metric5 .
    }
    """)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()
    
    # 转换查询结果为DataFrame
    data_rows = []
    for result in results["results"]["bindings"]:
        data_rows.append({
            "实体名称": result["entityName"]["value"],
            "评估日期": pd.to_datetime(result["assessDate"]["value"]).dt.date,
            "指标1": result["metric1"]["value"],
            "指标2": result["metric2"]["value"],
            "指标3": result["metric3"]["value"],
            "指标4": result["metric4"]["value"],
            "指标5": result["metric5"]["value"]
        })
    return pd.DataFrame(data_rows)

# 加载SPARQL数据示例
df = load_from_sparql("http://your-sparql-endpoint-url")

内容的提问来源于stack exchange,提问作者Rym Guerbi Michaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:57:45