# SmartGrid **Repository Path**: zxporz/SmartGrid ## Basic Information - **Project Name**: SmartGrid - **Description**: SmartGrid 是一个智能 Excel 数据分析平台,使用非常简单,用自然语言描述需求,自动分析 Excel 数据、生成图表等。对数据分析师和开发人员同样友好,支持微调 sql 进行数据分析。更多功能等你来探! - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-18 - **Last Updated**: 2026-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: AI ## README # 前言 SmartGrid 是一款面向非技术用户的全栈数据智能分析工具,目标是将 Excel 数据快速转化为可查询、可洞察、可可视化的知识资产。 如果有一些交互问题,请无需在意,因为本产品并不是以交互体验为主的。它集中为你解决excel数据分析的能力。 比如:透视图、关联Sheet分析,一些Excel的函数,如果不会深度使用excel那么你一定会望Excel兴叹,即便你是数据分析师或开发人员。 我部署了最新的版本供你尝试,[请戳链接](http://180.184.78.42:81/?db=smartGrid+%281%29_b371afe5_20251218_173214) 如果你觉得这个项目帮助了你或者对你有启发,还望不吝Star,您的鼓励是我迭代的动力! 后续我还会尝试添加各种能力,比如机器学习分析excel的功能。 核心能力包括: - Excel 导入与 SQLite 持久化 - 自然语言转 SQL(NLU→SQL) - 数据字典生成与编辑(用于提升Test2SQL的准确度) - 图表推荐与可视化(pyecharts/matplotlib)帮你快速生成分析结果可交互图表 - AI 分析结论生成(基于大模型) # 快速开始 1. `pip install -r requirements.txt` 2. windows `streamlit run --server.port 80 excel_processor.py` 3. linux `nohup python -m streamlit run --server.port 80 excel_processor.py &` 4. 你需要一个QWEN的api_key,从https://bailian.console.aliyun.com/申请,并替换到`config.json->api_key` 5. 运行成功后,访问 http://localhost # 项目结构 项目采用“前端 + 多个后端处理模块”的扁平结构,便于理解与扩展: - 前端入口:excel_processor.py(Streamlit 应用) - 数据处理:excel_to_sqlite.py(Excel→SQLite、SQL 查询、数据字典) - SQL 生成:genSql.py(基于表结构与数据字典生成 SQL) - 大模型封装:llmmodels.py(统一调用 DashScope API) - 可视化:pandas_chart.py(图表推荐与生成) - 配置与依赖:config.json、requirements.txt - 启动脚本:start.bat - 示例图表模板:pyechartsDemos/*.txt ```mermaid graph TB subgraph "前端" V["excel_processor.py
Streamlit 视图层"] end subgraph "后端处理" M1["excel_to_sqlite.py
Excel→SQLite/SQL/数据字典"] M2["genSql.py
NLU→SQL"] M3["llmmodels.py
大模型封装"] M4["pandas_chart.py
图表推荐/生成"] end subgraph "资源与配置" C["config.json
API密钥等"] R["requirements.txt
依赖清单"] S["start.bat
启动脚本"] D["pyechartsDemos/*.txt
示例代码模板"] end V --> M1 V --> M4 M1 --> M2 M1 --> M3 M2 --> M3 M4 --> M3 V --> C V --> R V --> S M4 --> D ``` # 核心组件 - Streamlit 前端(View 层) - 文件上传、Excel 保存与备份、侧边栏文件管理、数据预览、数据字典面板、SQL 调试区、分析结论生成、图表生成与展示 - Excel→SQLite 持久化(Model/Controller) - Excel 文件解析、表名清洗、SQLite 写入、查询执行、表结构与列信息查询、数据字典生成/加载/保存 - NLU→SQL(Model/Controller) - 基于表结构、示例数据与数据字典,调用大模型生成 ANSI SQL - 大模型封装(Model/Controller) - 统一的 DashScope 客户端与提示词模板,支持不同模型与参数 - 图表推荐与生成(Model/Controller) - 基于数据特征与用户问题推荐图表类型;优先使用大模型生成 pyecharts 代码,失败回退 matplotlib - file://pandas_chart.py#L1-L821) # 架构总览 SmartGrid 的控制流从 Streamlit 页面发起,经由 excel_processor.py 调用 excel_to_sqlite.py 完成数据入库与查询,再通过 genSql.py 生成 SQL,最终由 llmmodels.py 调用大模型完成 SQL 生成与分析结论生成;图表生成由 pandas_chart.py 完成,优先使用 pyecharts,失败回退 matplotlib。 ```mermaid sequenceDiagram participant U as "用户" participant V as "excel_processor.py" participant M1 as "excel_to_sqlite.py" participant M2 as "genSql.py" participant M3 as "llmmodels.py" participant M4 as "pandas_chart.py" U->>V : 上传Excel并提交自然语言指令 V->>M1 : 保存Excel并生成SQLite数据库 V->>M1 : analyze_database_sql(指令) M1->>M2 : genSql(表结构/示例/数据字典, 指令) M2->>M3 : 调用大模型生成SQL M3-->>M2 : 返回SQL文本 M2-->>M1 : 返回美化后的SQL M1-->>V : 执行SQL并返回结果DataFrame V->>M4 : generate_chart(结果DataFrame, 指令) M4->>M3 : 推荐图表类型/生成代码可选 M3-->>M4 : 返回推荐/代码 M4-->>V : 返回图表对象或matplotlib Figure V-->>U : 展示结果、SQL、结论、图表 ``` # 详细组件分析 ## 组件A:Streamlit 前端(View 层) - 功能要点 - 上传 Excel 并保存至 excelfile 目录,同时生成备份 - 侧边栏列出 Excel 文件,支持打开与删除 - 加载 SQLite 数据并预览各 Sheet 的前若干行 - 数据字典面板:一键生成/重新生成字段说明与数据示例,支持在线编辑并自动保存 - 分析区:自然语言指令输入、SQL 调试(表名/列名、可编辑 SQL、执行)、分析结论生成、图表生成与展示 - 关键交互 - 通过 session_state 管理状态,避免重复计算 - URL 参数 db 用于定位当前数据库文件 - 支持“执行 SQL”即时验证与刷新 ```mermaid flowchart TD Start["进入页面"] --> Upload["上传Excel"] Upload --> Save["保存Excel并生成SQLite"] Save --> Preview["预览各Sheet数据"] Preview --> DictPanel["数据字典面板"] DictPanel --> GenSQL["生成SQLNLU→SQL"] GenSQL --> ExecSQL["执行SQL并返回结果"] ExecSQL --> Answer["生成分析结论"] ExecSQL --> Chart["生成图表"] Answer --> End["展示结论"] Chart --> End ``` ## 组件B:Excel→SQLite 与数据字典(Model/Controller) - 功能要点 - Excel→SQLite:逐 Sheet 读取,清洗列名,写入 SQLite - 查询执行:支持 SQL 查询并返回 DataFrame - 表结构与列信息:获取建表语句、表名、列名、示例数据 - 数据字典:生成字段说明(调用大模型)、数据示例、保存/加载 excel_dict 表 - 关键算法 - 列名清洗:去除特殊字符、处理中文、避免以数字开头、替换空格为下划线 - SQL 生成:将表结构、示例数据、数据字典拼装为提示词,调用大模型生成 ANSI SQL ```mermaid flowchart TD A["Excel文件"] --> B["读取Sheet"] B --> C["清洗列名"] C --> D["写入SQLite表"] D --> E["查询/统计"] E --> F["生成数据字典"] F --> G["保存excel_dict表"] ``` ## 组件C:自然语言转 SQL(Model/Controller) - 功能要点 - 将用户自然语言指令转换为 ANSI SQL,支持日期字段的正确处理规则 - 可选加入数据字典与示例数据,提升 SQL 准确性 - 关键提示词 - 明确 ANSI SQL 标准、注释说明、日期字段处理规则、必要时多表关联 ```mermaid sequenceDiagram participant V as "excel_processor.py" participant M1 as "excel_to_sqlite.py" participant M2 as "genSql.py" participant M3 as "llmmodels.py" V->>M1 : analyze_database_sql(指令) M1->>M1 : 获取表结构/示例/数据字典 M1->>M2 : genSql(表结构/示例/数据字典, 指令) M2->>M3 : 调用大模型生成SQL M3-->>M2 : 返回SQL M2-->>M1 : 返回美化SQL M1-->>V : 返回SQL ``` ## 组件D:大模型封装(Model/Controller) - 功能要点 - 统一 DashScope 客户端初始化与调用 - 支持不同模型(qwen-turbo/qwen3-max-preview 等)与参数(temperature/top_p) - 支持 JSON 输出与调试打印 - 配置 - 从 config.json 读取 api_key ```mermaid classDiagram class LLMModel { +getTongYi(api_key) +getTongYiModelResponse(...) +getModelResponse(...) +promptTemplate(template) } class MyLargeModel { +_llm_type +_call(prompt, stop) +_identifying_params } LLMModel <|-- MyLargeModel ``` ## 组件E:图表推荐与可视化(Model/Controller) - 功能要点 - 基于数据特征与用户问题推荐图表类型(饼图/柱状图/折线图/雷达图/K线图/3D柱状图/多轴组合图) - 使用大模型生成 pyecharts 代码,失败回退 matplotlib - 支持示例模板(pyechartsDemos/*.txt)辅助生成 - 关键流程 - recommend_chart_by_llm → generate_chart_code_by_llm → exec 生成图表对象 - 失败时 _determine_chart_type 自动选择 matplotlib 图表类型 ```mermaid flowchart TD DF["DataFrame"] --> Rec["recommend_chart_by_llm"] Rec --> Code["generate_chart_code_by_llm"] Code --> Exec["exec 生成图表对象"] Exec --> Show["渲染/展示"] Rec --> |失败| Mat["matplotlib 自动选择类型"] Mat --> Show ``` # 依赖关系分析 - 外部依赖 - Streamlit、pandas、openai、langchain、sqlparse、pyecharts、openpyxl、requests、python-docx、tabulate 等 - 内部模块耦合 - excel_processor.py 依赖 excel_to_sqlite.py、pandas_chart.py - excel_to_sqlite.py 依赖 genSql.py、llmmodels.py - genSql.py 依赖 llmmodels.py - pandas_chart.py 依赖 llmmodels.py、pyechartsDemos 示例模板 ```mermaid graph LR V["excel_processor.py"] --> M1["excel_to_sqlite.py"] V --> M4["pandas_chart.py"] M1 --> M2["genSql.py"] M1 --> M3["llmmodels.py"] M2 --> M3 M4 --> M3 M4 --> D["pyechartsDemos/*.txt"] ``` # 性能与可扩展性 - 性能特性 - Excel→SQLite:按 Sheet 逐表写入,避免一次性大内存操作 - SQL 查询:使用 pandas.read_sql_query,支持 LIMIT 与 COUNT 估算 - 图表生成:优先 pyecharts,失败回退 matplotlib,兼顾质量与稳定性 - 可扩展方向 - SQL 生成:引入更多上下文(如历史查询、业务规则) - 图表:增加更多模板与样式配置 - 数据字典:支持多语言、字段分类、质量评分 - 并发与缓存:为常用查询与图表生成增加缓存层 [本节为通用建议,无需章节来源] # 故障排查指南 - 常见问题 - 上传文件后无法加载:确认 excelfile 与 dbfile 目录存在,且文件名匹配 - SQL 执行报错:检查 SQL 是否符合 ANSI 标准,日期字段处理是否正确 - 图表生成失败:检查 pyecharts 依赖安装与示例模板是否存在 - 大模型调用失败:检查 config.json 中 api_key 是否正确 - 定位方法 - 查看 Streamlit 页面的错误提示与 traceback - 在 SQL 调试区手动执行 SQL,逐步缩小问题范围 - 在数据字典面板中核对字段说明与示例 ## 结论 SmartGrid 以“前端交互 + 后端处理模块”的方式,将 Excel 数据快速转化为可查询、可洞察、可可视化的知识资产。通过自然语言转 SQL、数据字典、图表推荐与可视化、AI 分析结论生成等能力,显著降低了数据分析门槛,适用于数据分析师、业务人员与开发者。未来可在 SQL 上下文增强、图表模板扩展、数据字典治理与缓存等方面持续演进。 # 附录 ### 使用场景示例:销售数据“上季度各区域销售额对比” - 步骤 1) 在前端上传销售数据 Excel,系统自动保存并生成 SQLite 数据库 2) 在分析区输入自然语言指令:“上季度各区域销售额对比” 3) 系统调用 excel_to_sqlite.analyze_database_sql 生成 ANSI SQL 4) 执行 SQL 得到结果 DataFrame 5) 自动生成分析结论与图表(默认柱状图,可由大模型推荐更合适图表) - 路径映射 - 前端交互:excel_processor.py - SQL 生成:excel_to_sqlite.py → genSql.py - 大模型:llmmodels.py - 图表生成:pandas_chart.py ```mermaid sequenceDiagram participant U as "用户" participant V as "excel_processor.py" participant M1 as "excel_to_sqlite.py" participant M2 as "genSql.py" participant M3 as "llmmodels.py" participant M4 as "pandas_chart.py" U->>V : 上传Excel并输入指令 V->>M1 : analyze_database_sql(指令) M1->>M2 : genSql(表结构/示例/数据字典, 指令) M2->>M3 : 调用大模型 M3-->>M2 : 返回SQL M2-->>M1 : 返回SQL M1-->>V : 执行SQL得到结果 V->>M4 : generate_chart(结果, 指令) M4-->>V : 返回图表 V-->>U : 展示结果/SQL/结论/图表 ``` # 目标用户与价值 - 目标用户 - 数据分析师:快速生成 SQL、验证假设、生成结论与图表 - 业务人员:通过自然语言表达业务问题,获得可解释的洞察 - 开发者:可复用模块(SQL 生成、数据字典、图表生成)集成到更大系统 - 价值 - 降低数据分析门槛:从 Excel 到洞察的自动化流水线 - 提升协作效率:数据字典与结论可共享、可编辑 - 强化可解释性:SQL 可调试、图表可解释、结论可溯源