|
|
|
@ -7,70 +7,6 @@ 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、尽量使用宽表,少用关联,越少越好
|
|
|
|
@ -82,7 +18,7 @@ if __name__ == "__main__":
|
|
|
|
|
|
|
|
|
|
# 开始训练
|
|
|
|
|
print("开始训练...")
|
|
|
|
|
# 打开CreateTable.sql文件内容
|
|
|
|
|
# 打开AreaSchoolLesson.sql文件内容
|
|
|
|
|
with open("Sql/AreaSchoolLesson.sql", "r", encoding="utf-8") as file:
|
|
|
|
|
ddl = file.read()
|
|
|
|
|
# 训练数据
|
|
|
|
@ -117,9 +53,7 @@ if __name__ == "__main__":
|
|
|
|
|
common_prompt = '''
|
|
|
|
|
返回的信息要求:
|
|
|
|
|
1、行政区划为NULL 或者是空字符的不参加统计
|
|
|
|
|
2、目标数据库是Postgresql 16,注意字段名称不要有二义性问题
|
|
|
|
|
3、使用stage_name描述学段,一定不要使用stage_id
|
|
|
|
|
4、使用subject_name描述科目,一定不要使用subject_id
|
|
|
|
|
2、目标数据库是Postgresql 16
|
|
|
|
|
'''
|
|
|
|
|
question = question + common_prompt
|
|
|
|
|
# 开始查询
|
|
|
|
@ -132,13 +66,6 @@ if __name__ == "__main__":
|
|
|
|
|
with PostgreSQLUtil() as db:
|
|
|
|
|
_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(_data, filename)
|
|
|
|
|
os.startfile(filename)
|