在当今数字化时代,大量的业务数据仍以Excel表格和纸质文档的形式存在。如何高效地将这些数据转化为可分析的数字资产,是很多企业和个人面临的挑战。
本项目旨在构建一个智能化的Excel数据分析助手,通过结合OCR技术和自然语言处理,实现从图片到数据分析的端到端解决方案。
通过腾讯云的OCR技术,将图片中的数据转化为可分析的数字资产。在加上混元大模型的自然语言的解析能力与DuckDB 的高性能查询能力相结合,实现了自动化字段解析、数据类型推断与高效数据入库等功能。无论是对复杂数据的快速处理,还是多源数据的灵活支持,系统均能高效响应,满足用户对实时性和准确性的需求。
同时,项目提供了轻量化的分析引擎,在处理数据的同时保持资源占用的低门槛,让用户无需掌握复杂的技术知识即可完成高质量的数据分析。
1. 数据输入模块
2. 分析引擎模块
3. 交互界面模块
4. 可视化实现
支持11种专业图表类型:
基础图表
统计图表
高级图表
如何使用腾讯云OCR
官方文档:API Explorer - 云 API - 控制台
代码
class OcrTableAccurate:
def __init__(self, secret_id, secret_key):
self.secret_id = secret_id
self.secret_key = secret_key
def recognize_table_accurate(self, image_path):
# 读取图片文件
with open(image_path, "rb") as img_file:
img_data = img_file.read()
# 将图片转换为Base64编码
image_base64 = b64encode(img_data).decode()
# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey
cred = credential.Credential(self.secret_id, self.secret_key)
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "ocr.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = ocr_client.OcrClient(cred, "ap-guangzhou", clientProfile)
# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.RecognizeTableAccurateOCRRequest()
params = {
"ImageBase64": image_base64
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个RecognizeTableAccurateOCRResponse的实例,与请求对象对应
resp = client.RecognizeTableAccurateOCR(req)
# 输出json格式的字符串回包
return json.loads(resp.to_json_string())
table_data = result['TableDetections'][0]['Cells'] # 获取单元格数据
参数
result = {
'TableDetections': [ # 检测到的所有表格列表
{
'Cells': [ # 单个表格中的所有单元格
{
# 单元格位置参数
'RowTl': 0, # 行的起始位置(Top-Left,左上角),0行
'ColTl': 0, # 列的起始位置(Top-Left,左上角),0列。
'RowBr': 1, # 行的结束位置(Bottom-Right,右下角)。
'ColBr': 1, # 列的结束位置(Bottom-Right,右下角)。
'Text': '单元格文本内容' # 识别出的文本内容
'Type': 单元格的类型。
'Confidence': 置信度或识别准确度。
'Polygon': 定义单元格的多边形边界。此处定义表格中的4个点的位置。顺时针
},
# ... 更多单元格
]
}
]
}
# 找出表格的最大行列数
max_row = max(cell['RowBr'] for cell in table_data)
max_col = max(cell['ColBr'] for cell in table_data)
# 创建空的二维数组
rows = [['' for _ in range(max_col)] for _ in range(max_row)]
# 填充数据
for cell in table_data:
row_start = cell['RowTl']
col_start = cell['ColTl']
text = cell['Text']
# 处理合并单元格
row_end = cell['RowBr']
col_end = cell['ColBr']
# 填充所有涉及的单元格
for r in range(row_start, row_end):
for c in range(col_start, col_end):
rows[r][c] = text
ExcelToDuckDB 是一个 Python 类,用于将 Excel 数据文件快速解析并导入到 DuckDB 数据库中。该类主要实现了以下功能:
如何使用混元大模型的API:腾讯混元大模型 简介-API 中心-腾讯云
def chat_completions(self, input_text, template_name=None):
"""
发送聊天请求
:param input_text: 输入文本或SQL查询结果
:param template_name: 模板名称
:return: API响应或错误信息
"""
try:
# 实例化认证对象
cred = credential.Credential(self.secret_id, self.secret_key)
httpProfile = HttpProfile()
httpProfile.endpoint = "hunyuan.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化客户端
client = hunyuan_client.HunyuanClient(cred, "ap-guangzhou", clientProfile)
req = models.ChatCompletionsRequest()
# 构建系统提示词
system_prompt = self.get_prompt_template(template_name)
# 构建请求参数
params = {
"Messages": [
{
"Role": "system",
"Content": system_prompt
},
{
"Role": "user",
"Content": input_text
}
],
"Model": "hunyuan-turbo-20241120"
}
req.from_json_string(json.dumps(params))
resp = client.ChatCompletions(req)
Prompt模板
构建的提示词:会根据输入问题的分析是否需要深入回答
简单回答
def _build_data_context(self, message):
"""构建数据上下文"""
basic_stats = {
'total_rows': self.current_df.shape[0],
'total_cols': self.current_df.shape[1],
'null_count': self.current_df.isnull().sum().sum(),
'numeric_cols': self.current_df.select_dtypes(include=['int64', 'float64']).columns.tolist(),
'categorical_cols': self.current_df.select_dtypes(include=['object']).columns.tolist()
}
# 使用模型判断问题类型
question_analysis_prompt = f"""
请分析以下问题的类型,判断是否需要深度分析。
问题:{message}
请只回答"简单"或"深入"。
- 简单:如计算平均值、求和、查找最大最小值等基础操作。
- 深入:如分析趋势、寻找关系、提供建议、评估情况等需要综合分析的问题
"""
# 调用模型判断
analysis_type = self.analyzer.chat.chat_completions(question_analysis_prompt)
needs_deep_analysis = "深入" in self._format_response(analysis_type)
# 基础数据信息
data_context = f"""
数据基本信息:
- 数据规模:{basic_stats['total_rows']}行 × {basic_stats['total_cols']}列
- 缺失值:{basic_stats['null_count']}
- 数值列:{', '.join(basic_stats['numeric_cols'])}
- 分类列:{', '.join(basic_stats['categorical_cols'])}
数据内容:
{self.current_df.to_string()}
"""
# 根据模型判断结果添加分析要求
if needs_deep_analysis:
data_context += """
分析要求:
1. 数据洞察
- 识别关键特征和模式
- 发现数据中的趋势
- 分析异常和特殊情况
2. 统计分析
- 提供相关统计指标
- 解释数据分布特征
- 分析相关性(如适用)
3. 业务建议
- 提供数据驱动的见解
- 给出可行的改进建议
- 指出潜在的机会
4. 可视化建议
- 推荐合适的图表类型
- 建议关注的关键维度
5. 改进建议
- 指出数据质量问题
- 建议额外需要的数据
- 提供优化分析的方向
"""
else:
data_context += """
回答要求:
- 直接回答问题
- 确保计算准确
- 使用简洁的语言
"""
data_context += f"\n用户问题:{message}"
return data_context
- 销售数据分析
- 财务报表分析
- 运营数据分析
- 市场调研分析
- 成绩单分析
- 消费记录分析
- 个人财务分析
- 数据整理归档
Excel智能分析助手通过结合OCR技术和自然语言处理,为用户提供了一个简单易用的数据分析工具。无论是数据的导入转换,还是分析可视化,都能以智能化的方式完成,大大提高了数据分析的效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。