diff --git a/AI/Text2Sql/YunXiao.py b/AI/Text2Sql/YunXiao.py index 7b083566..292221f7 100644 --- a/AI/Text2Sql/YunXiao.py +++ b/AI/Text2Sql/YunXiao.py @@ -1,8 +1,76 @@ import os +from pyecharts import options as opts +from pyecharts.charts import Bar + from Text2Sql.Util.PostgreSQLUtil import PostgreSQLUtil from Text2Sql.Util.SaveToExcel import save_to_excel from Text2Sql.Util.Text2SqlUtil import * + + +def generate_bar_chart_from_result(result, x_column: str, y_columns: list, output_file: str = "bar_chart.html"): + """ + 根据结果集生成柱状图并保存为 HTML 文件。 + + 参数: + result: 结果集,通常是一个列表(字典格式)。 + x_column (str): 作为 X 轴的列名。 + y_columns (list): 作为 Y 轴的列名列表。 + output_file (str): 输出 HTML 文件名(默认 "bar_chart.html")。 + """ + try: + # 如果结果集为空,直接返回 + if not result: + raise ValueError("结果集为空,无法生成图表!") + + # 检查列名是否存在 + if x_column not in result[0]: + raise ValueError(f"X 轴列名 '{x_column}' 不存在!") + for col in y_columns: + if col not in result[0]: + raise ValueError(f"Y 轴列名 '{col}' 不存在!") + + # 提取 X 轴和 Y 轴数据 + x_axis_data = [row[x_column] for row in result] + series_data = [ + (col, [row[col] for row in result]) + for col in y_columns + ] + + print("X 轴数据:", x_axis_data) + print("Y 轴数据:", series_data) + + # 创建柱状图 + bar = Bar() + bar.add_xaxis(x_axis_data) + for name, data in series_data: + bar.add_yaxis(name, data) + + # 设置全局配置 + bar.set_global_opts( + title_opts=opts.TitleOpts(title="动态柱状图"), + xaxis_opts=opts.AxisOpts(name=x_column), + yaxis_opts=opts.AxisOpts(name="值"), + legend_opts=opts.LegendOpts(is_show=True) + ) + + # 确保目标目录存在 + if not os.path.exists(os.path.dirname(output_file)): + os.makedirs(os.path.dirname(output_file)) + + # 保存为 HTML 文件 + bar.render(output_file) + print(f"柱状图已保存为 {output_file}") + + # 检查文件是否存在 + if os.path.exists(output_file): + print("文件生成成功!") + else: + print("文件生成失败!") + except Exception as e: + print(f"生成柱状图时发生错误: {e}") + + ''' 经验: 1、尽量使用宽表,少用关联,越少越好 @@ -24,12 +92,12 @@ if __name__ == "__main__": # 自然语言提问 # 整体情况 - question = ''' - 查询: - 1、发布时间是2024年度 - 2、每个行政区每个学校都上传了多少课程数量 - 3、格式: 行政区划名,学段,排名,学校名称,课程数量 - ''' + # question = ''' + # 查询: + # 1、发布时间是2024年度 + # 2、每个行政区每个学校都上传了多少课程数量 + # 3、格式: 行政区划名,学段,排名,学校名称,课程数量 + # ''' # 指定行政区域 # question = ''' @@ -40,12 +108,12 @@ if __name__ == "__main__": # ''' # 指定学段 - # question = ''' - # 查询: - # 1、发布时间是2024年度 - # 2、每个学段,每个科目,上传课程数量,按由多到少排序 - # 3、字段名: 学段,科目,排名,课程数量 - # ''' + question = ''' + 查询: + 1、发布时间是2024年度 + 2、每个学段,每个科目,上传课程数量,按由多到少排序 + 3、字段名: 学段,科目,排名,课程数量 + ''' common_prompt = ''' 返回的信息要求: 1、行政区划为NULL 或者是空字符的不参加统计 @@ -62,7 +130,15 @@ if __name__ == "__main__": # 执行SQL查询 with PostgreSQLUtil() as db: - sample_data = db.execute_query(sql) + _data = db.execute_query(sql) + + # 生成柱状图 + # generate_bar_chart_from_result( + # _data, + # x_column="科目", + # y_columns=["课程数量"], + # output_file="d:/lesson_bar_chart.html" + # ) filename = "d:/导出信息.xlsx" - save_to_excel(sample_data, filename) - os.startfile(filename) + save_to_excel(_data, filename) + os.startfile(filename) \ No newline at end of file diff --git a/AI/Text2Sql/render.html b/AI/Text2Sql/render.html new file mode 100644 index 00000000..ab4e9e42 --- /dev/null +++ b/AI/Text2Sql/render.html @@ -0,0 +1,776 @@ + + + + + Awesome-pyecharts + + + + + +
+ + +