From 8fc02944c81697e6231fae2ae171b4a39d14ee70 Mon Sep 17 00:00:00 2001 From: Jeason <1710884619@qq.com> Date: Mon, 9 Mar 2026 10:37:35 +0800 Subject: [PATCH] 12345678 --- ANALYSIS_RESULTS.md | 171 ------- .../run_20260309_102648/analysis_report.md | 177 +++++++ .../charts/avg_close_time_by_issue_type.png | Bin 0 -> 50739 bytes .../charts/bar_chart_trend.png | Bin 0 -> 28787 bytes .../charts/efficiency_by_responsible.png | Bin 0 -> 47485 bytes .../charts/outlier_bar_chart.png | Bin 0 -> 24862 bytes .../charts/outlier_pie_chart.png | Bin 0 -> 39166 bytes .../charts/workload_by_responsible.png | Bin 0 -> 42960 bytes run_analysis_en.py | 13 +- .../report_generation.cpython-311.pyc | Bin 29372 -> 33439 bytes .../task_execution.cpython-311.pyc | Bin 18387 -> 18646 bytes src/engines/report_generation.py | 60 ++- .../__pycache__/viz_tools.cpython-311.pyc | Bin 19499 -> 19519 bytes src/tools/query_tools.py | 301 ------------ src/tools/stats_tools.py | 325 ------------- src/tools/tool_manager.py | 52 -- src/tools/viz_tools.py | 443 ------------------ 17 files changed, 244 insertions(+), 1298 deletions(-) delete mode 100644 ANALYSIS_RESULTS.md create mode 100644 analysis_output/run_20260309_102648/analysis_report.md create mode 100644 analysis_output/run_20260309_102648/charts/avg_close_time_by_issue_type.png create mode 100644 analysis_output/run_20260309_102648/charts/bar_chart_trend.png create mode 100644 analysis_output/run_20260309_102648/charts/efficiency_by_responsible.png create mode 100644 analysis_output/run_20260309_102648/charts/outlier_bar_chart.png create mode 100644 analysis_output/run_20260309_102648/charts/outlier_pie_chart.png create mode 100644 analysis_output/run_20260309_102648/charts/workload_by_responsible.png delete mode 100644 src/tools/query_tools.py delete mode 100644 src/tools/stats_tools.py delete mode 100644 src/tools/tool_manager.py delete mode 100644 src/tools/viz_tools.py diff --git a/ANALYSIS_RESULTS.md b/ANALYSIS_RESULTS.md deleted file mode 100644 index 1cd83de..0000000 --- a/ANALYSIS_RESULTS.md +++ /dev/null @@ -1,171 +0,0 @@ -# 完整数据分析系统 - 执行结果 - -## 问题解决 - -### 核心问题 -工具注册失败,导致 `ToolManager.select_tools()` 返回 0 个工具。 - -### 根本原因 -`ToolManager` 在初始化时创建了一个新的空 `ToolRegistry` 实例,而工具实际上被注册到了全局注册表 `_global_registry` 中。两个注册表互不相通。 - -### 解决方案 -修改 `src/tools/tool_manager.py` 第 18 行: -```python -# 修改前 -self.registry = registry if registry else ToolRegistry() - -# 修改后 -self.registry = registry if registry else _global_registry -``` - -## 系统验证结果 - -### ✅ 阶段 1: AI 数据理解 -- **数据类型识别**: ticket (IT服务工单) -- **数据质量评分**: 85.0/100 -- **关键字段识别**: 15 个 -- **数据规模**: 84 行 × 21 列 -- **隐私保护**: ✓ AI 只能看到表头和统计信息,无法访问原始数据行 - -**AI 分析摘要**: -> 这是一个典型的IT服务工单数据集,记录了84个车辆相关问题的处理全流程。数据集包含完整的工单生命周期信息(创建、处理、关闭),主要涉及远程控制、导航、网络等车辆系统问题。数据质量较高,缺失率低(仅SIM和Notes字段缺失较多),但部分文本字段存在较长的非结构化描述。问题类型和模块分布显示远程控制问题是主要痛点(占比66%),工单主要来自邮件渠道(55%),平均关闭时长约5天。 - -### ✅ 阶段 2: 需求理解 -- **用户需求**: "Analyze ticket health, find main issues, efficiency and trends" -- **生成目标**: 2 个分析目标 - 1. 健康度分析 (优先级: 5/5) - 2. 趋势分析 (优先级: 4/5) - -### ✅ 阶段 3: 分析规划 -- **生成任务**: 2 个 -- **预计时长**: 120 秒 -- **任务清单**: - - [优先级 5] task_1. 质量评估 - 健康度分析 - - [优先级 4] task_2. 趋势分析 - 趋势分析 - -### ✅ 阶段 4: 任务执行 -- **可用工具**: 9 个(修复后) - - get_column_distribution (列分布统计) - - get_value_counts (值计数) - - perform_groupby (分组聚合) - - create_bar_chart (柱状图) - - create_pie_chart (饼图) - - calculate_statistics (描述性统计) - - detect_outliers (异常值检测) - - get_time_series (时间序列) - - calculate_trend (趋势计算) - -- **执行结果**: - - 成功: 2/2 任务 - - 失败: 0/2 任务 - - 总执行时间: ~51 秒 - - 生成洞察: 2 条 - -### ✅ 阶段 5: 报告生成 -- **报告文件**: analysis_output/analysis_report.md -- **报告长度**: 774 字符 -- **包含内容**: - - 执行摘要 - - 数据概览(15个关键字段说明) - - 详细分析 - - 结论与建议 - - 任务执行附录 - -## 系统架构验证 - -### 隐私保护机制 ✓ -1. **数据访问层隔离**: AI 无法直接访问原始数据 -2. **元数据暴露**: AI 只能看到列名、数据类型、统计信息 -3. **工具执行**: 工具在原始数据上执行,返回聚合结果 -4. **结果限制**: - - 分组结果最多 100 个 - - 时间序列最多 100 个数据点 - - 异常值最多返回 20 个 - -### 配置管理 ✓ -所有 LLM API 调用已统一从 `.env` 文件读取配置: -- `OPENAI_MODEL=mimo-v2-flash` -- `OPENAI_BASE_URL=https://api.xiaomimimo.com/v1` -- `OPENAI_API_KEY=[已配置]` - -修改的文件: -1. src/engines/task_execution.py -2. src/engines/requirement_understanding.py -3. src/engines/report_generation.py -4. src/engines/plan_adjustment.py -5. src/engines/analysis_planning.py - -### 工具系统 ✓ -- **全局注册表**: 12 个工具已注册 -- **动态选择**: 根据数据特征自动选择适用工具 -- **类型检测**: 支持时间序列、分类、数值、地理数据 -- **参数验证**: JSON Schema 格式参数定义 - -## 测试数据 - -### cleaned_data.csv -- **行数**: 84 -- **列数**: 21 -- **数据类型**: IT 服务工单 -- **主要字段**: - - 工单号、来源、创建日期 - - 问题类型、问题描述、处理过程 - - 严重程度、工单状态、模块 - - 责任人、关闭日期、关闭时长 - - 车型、VIN - -### 数据质量 -- **完整性**: 85/100 -- **缺失字段**: SIM (100%), Notes (较多) -- **时间字段**: 创建日期、关闭日期 -- **分类字段**: 来源、问题类型、严重程度、工单状态、模块 -- **数值字段**: 关闭时长(天) - -## 执行命令 - -```bash -python run_analysis_en.py -``` - -## 输出文件 - -``` -analysis_output/ -├── analysis_report.md # 分析报告 -└── *.png # 图表文件(如有生成) -``` - -## 性能指标 - -- **数据加载**: < 1 秒 -- **AI 数据理解**: ~5 秒 -- **需求理解**: ~3 秒 -- **分析规划**: ~2 秒 -- **任务执行**: ~51 秒 (2 个任务) -- **报告生成**: ~2 秒 -- **总耗时**: ~63 秒 - -## 系统状态 - -### ✅ 已完成 -1. 工具注册系统修复 -2. 配置管理统一 -3. 隐私保护验证 -4. 端到端分析流程 -5. 真实数据测试 - -### 📊 测试覆盖率 -- 单元测试: 314/328 通过 (95.7%) -- 属性测试: 已实施 -- 集成测试: 已通过 -- 端到端测试: 已通过 - -## 结论 - -系统已完全就绪,可以进行生产环境部署。所有核心功能已验证,隐私保护机制有效,配置管理规范,工具系统运行正常。 - ---- - -**生成时间**: 2026-03-09 09:08:27 -**测试环境**: Windows, Python 3.x -**数据集**: cleaned_data.csv (84 rows × 21 columns) diff --git a/analysis_output/run_20260309_102648/analysis_report.md b/analysis_output/run_20260309_102648/analysis_report.md new file mode 100644 index 0000000..5c439cd --- /dev/null +++ b/analysis_output/run_20260309_102648/analysis_report.md @@ -0,0 +1,177 @@ +# 工单分析报告 + +生成时间:2026-03-09 10:29:31 +数据源:cleaned_data.csv + +--- + +# 工单数据分析报告 + +## 1. 执行摘要 + +本报告基于84条工单数据(质量分数88/100)进行全面分析,主要发现如下: + +1. **工单处理效率存在显著异常**:平均关闭时长为54.77天,但存在2个异常工单(处理时长分别为277天和237天),占总数的2.38%。"Activation SIM"问题的平均处理时长高达142.5天,远高于其他问题类型。 +2. **工单来源渠道集中**:邮件渠道占比54.76%(46张),Telegram bot占比42.86%(36张),渠道来源仅占2.38%(2张),显示渠道管理可优化。 +3. **问题类型高度集中**:远程控制问题占主导(66.67%,56张),前五类问题占总量的87%以上,表明问题分布集中。 +4. **车型问题分布不均**:EXEED RX(T22)车型工单最多(45.24%,38张),JAECOO J7(T1EJ)次之(26.19%,22张),特定车型问题集中。 +5. **责任人工作负载差异大**:Vsevolod处理工单最多(31个),但平均处理时长66.68天;Vsevolod Tsoi平均处理时长最高(152天),而何韬处理效率最高(平均3.5天)。 + +## 2. 数据概览 + +- **数据类型**:工单(ticket) +- **数据规模**:84行 × 21列 +- **数据质量**:88.0/100 +- **关键字段**:工单号、来源、创建日期、问题类型、问题描述、处理过程、跟踪记录、严重程度、工单状态、模块、责任人、关闭日期、车型、VIN、关闭时长(天)等 +- **分析时间范围**:2025年1月2日至2025年2月24日 + +## 3. 详细分析 + +### 3.1 工单概况分析 + +工单状态分布显示,82.14%(69张)已关闭,17.86%(15张)临时关闭,表明大部分问题已解决。 + +![工单状态分布](analysis_output\run_20260309_102648\charts\outlier_pie_chart.png) + +**来源渠道分析**: +- 邮件(Mail):54.76%(46张) +- Telegram bot:42.86%(36张) +- Telegram channel:2.38%(2张) + +**问题类型分布**(前5位): +1. 远程控制(Remote control):66.67%(56张) +2. 网络问题(Network):7.14%(6张) +3. 导航问题(Navi):5.95%(5张) +4. 应用问题(Application):4.76%(4张) +5. 成员中心认证问题:3.57%(3张) + +前五类问题合计占总量的87.09%,显示问题类型高度集中。 + +### 3.2 工单处理效率分析 + +**关闭时长统计**: +- 平均值:54.77天 +- 中位数:41天 +- 标准差:48.19天 +- 最小值:2天 +- 最大值:277天 +- 四分位距(IQR):26.25天(Q25)至84.5天(Q75) + +**异常值检测**: +- 检测到2个异常工单(277天和237天),占总数的2.38% +- 异常值上限为171.875天,这两个工单远超此阈值 + +![关闭时长分布](analysis_output\run_20260309_102648\charts\outlier_bar_chart.png) + +**按问题类型分析平均关闭时长**: +- Activation SIM:142.5天(效率最低) +- Remote control:66.5天 +- PKI problem:47天 +- doesn't exist on TSP:31.67天 +- Network:24天 + +![按问题类型平均关闭时长](analysis_output\run_20260309_102648\charts\avg_close_time_by_issue_type.png) + +### 3.3 工单内容与趋势分析 + +**工单创建时间趋势**(2025年1-2月): +- 创建高峰期:2025年1月13日(8个工单) +- 创建低谷期:2025年1月8日、15日、29日、30日及2月多日(仅1个工单) +- 整体趋势波动较大,无明显持续上升或下降模式 + +![工单创建趋势](analysis_output\run_20260309_102648\charts\bar_chart_trend.png) + +### 3.4 责任人工作负载分析 + +**工单处理数量**: +- Vsevolod:31个(最多) +- Evgeniy:28个 +- Kostya:5个 +- 何韬:4个 + +**平均关闭时长**: +- Vsevolod Tsoi:152天(最高,仅处理2个工单) +- 林兆国:89天 +- Vadim:69天 +- Vsevolod:66.68天 +- Evgeniy:62.39天 +- 何韬:3.5天(最低,效率最高) + +![责任人工作负载](analysis_output\run_20260309_102648\charts\workload_by_responsible.png) + +![责任人处理效率](analysis_output\run_20260309_102648\charts\efficiency_by_responsible.png) + +### 3.5 车辆相关信息分析 + +**车型分布**: +- EXEED RX(T22):45.24%(38张) +- JAECOO J7(T1EJ):26.19%(22张) +- EXEED VX FL(M36T):20.24%(17张) +- CHERY TIGGO 9 (T28):8.33%(7张) + +**VIN分布**: +- LVTDD24B1RG023450和LVTDD24B1RG021245各出现2次,表明特定车辆问题可能复发 +- 其他VIN均唯一,显示问题主要分散于不同车辆 + +## 4. 结论与建议 + +### 4.1 主要结论 + +1. **处理效率需优化**:整体平均关闭时长54.77天,且存在严重异常值(277天和237天),"Activation SIM"问题处理时长高达142.5天。 +2. **渠道管理可改进**:邮件渠道占比过高(54.76%),Telegram渠道未充分利用。 +3. **问题类型集中**:远程控制问题占66.67%,需针对性优化。 +4. **车型问题分布不均**:EXEED RX(T22)车型问题最集中(45.24%)。 +5. **责任人效率差异大**:Vsevolod Tsoi处理时长152天,而何韬仅3.5天,存在明显效率差距。 + +### 4.2 可操作建议 + +1. **优化异常工单处理流程**: + - 针对处理时长超过100天的工单(如Activation SIM问题)建立专项处理机制 + - 定期审查异常工单,分析根本原因 + - 依据:异常值检测显示2个工单处理时长分别为277天和237天 + +2. **平衡渠道分配**: + - 推广Telegram bot使用,减轻邮件渠道压力 + - 依据:邮件渠道占比54.76%,Telegram bot仅42.86% + +3. **加强远程控制问题管理**: + - 建立远程控制问题知识库和快速响应机制 + - 依据:远程控制问题占66.67%(56张) + +4. **针对EXEED RX(T22)车型专项优化**: + - 分析该车型高工单率的原因 + - 依据:该车型工单占比45.24%(38张) + +5. **提升责任人效率一致性**: + - 建立效率标杆(如何韬的3.5天平均时长) + - 对处理时长较长的责任人提供培训和支持 + - 依据:责任人平均处理时长从3.5天到152天不等 + +6. **建立工单创建趋势监控**: + - 监控工单创建高峰期(如1月13日的8个工单) + - 提前调配资源应对潜在高峰 + - 依据:工单创建趋势显示明显波动 + +通过实施这些建议,预计可显著提升工单处理效率,优化资源分配,并改善客户满意度。 + +--- + +## 分析追溯 + +本报告基于以下分析任务: + +- ✓ 工单概况分析:基本分布统计 + - 工单总数为84,其中82.14%(69张)已关闭,17.86%(15张)临时关闭,表明大部分问题已解决。 + - 工单来源中,邮件(Mail)占比最高,达54.76%(46张),Telegram bot占42.86%(36张),渠道来源仅占2.38%(2张)。 +- ✓ 工单处理效率分析:关闭时长统计 + - 关闭时长的平均值为54.77天,中位数为41天,标准差为48.19天,表明数据右偏分布,存在处理时间较长的工单。 + - 异常值检测发现2个工单(277天和237天)处理时间过长,占总工单数的2.38%,需重点关注这些异常情况。 +- ✓ 工单内容与趋势分析:文本和时间序列 + - 2025年1月13日工单创建数量最高,达到8个,是整体趋势中的峰值。 + - 2025年1月8日、15日、29日、30日及2月多日工单创建数量最低,仅为1个,显示这些日期工单活动较少。 +- ✓ 责任人工作负载分析 + - Vsevolod 处理工单数量最多(31个),但平均关闭时长为66.68天,工作量大且周期长。 + - Vsevolod Tsoi 平均关闭时长最高(152天),但仅处理2个工单,可能存在效率问题或复杂任务。 +- ✓ 车辆相关信息分析:车型和VIN分布 + - EXEED RX(T22)车型占比最高,达45.24%(38/84),是问题集中的主要车型。 + - JAECOO J7(T1EJ)车型工单数为22,占比26.19%,是第二大问题车型。 diff --git a/analysis_output/run_20260309_102648/charts/avg_close_time_by_issue_type.png b/analysis_output/run_20260309_102648/charts/avg_close_time_by_issue_type.png new file mode 100644 index 0000000000000000000000000000000000000000..b9075f4b2a5cdc4552ac954c021bfcd6dd24c7b5 GIT binary patch literal 50739 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%0Ak2{!!aHOK~N4wg-oV?wZvwmaC&7duW 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 literal 0 HcmV?d00001 diff --git a/analysis_output/run_20260309_102648/charts/bar_chart_trend.png b/analysis_output/run_20260309_102648/charts/bar_chart_trend.png new file mode 100644 index 0000000000000000000000000000000000000000..af05076d23ab22d6394c29a96f050f1dfe78c593 GIT binary patch literal 28787 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 VHzGQCidKOP^>p=fS?83{1OWSp#{mEU literal 0 HcmV?d00001 diff --git a/analysis_output/run_20260309_102648/charts/efficiency_by_responsible.png b/analysis_output/run_20260309_102648/charts/efficiency_by_responsible.png new file mode 100644 index 0000000000000000000000000000000000000000..c69f068f71f3c9e102ed958250ee40fdba1938b6 GIT binary patch literal 47485 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 v$`DhO zdOPaR&{Veck-n<^PmWx}J`4l)A_E_>{-7W+?}356qeMs>$&PLo+nsnPR#%!&<|4Vf znrlw6t6|o;xkzjWEZ0lK4qt=?i=roWFVom53W>-XgeC4_J~A!|wN2G4sI+8$0e%;) z?Sku7580&zD`163OOhn=Y7r)1hNFxM&gIrFP^!Kfj?bav4fLf>GsqAw+6?(WpO3)S z#=P}cDZ_R&MvLGajv(DXj#d;_G#tJls*Q<+!uZk?2;rDm@oh%u0pe8w{fJkkyMnq{ zeD0@7R!FWi7oNB_g0BF!ra?}G zi;)~Dww*z=m=L>kMHjEDNjK3zDMwR+C}!dO7eXqg!FLdPqCi6K$G?bckA20oBt^&} z<%k6sp0oktPT3YYWkhcBN1<6_8_u~qND87E5j~Je@d%Vr3#zp5RMb9W=}9gS80W?( zncz1%(9;8w1pxEHB&`_UZhAcUrXVz;9Q~9$nqZG)s{`$sh7vJt6!suf?Lk5>0(VPJ zZW5i?7-}d5WhVW1mn1kIHE{L_YoH7YNBE=|K>c$x5OCMEIWUXSTwf+7vt zAcFwh+fbj>EO;*G1;Y{sw;+-95@)~aqKZ`mF44lBqBSfChrSiLzx?~BmkF4%ie4#L z2lA*zNjuKKPg=fe_~LeHYn1Y#I3A(!28M#Yr;$-d3jAyCZ?(xkS)Ek))U2v(9)@Yt zh^i*MQ;zJQ`Yj$v?!DmKdJyyF;7X9g_n?W!f4GUk7!9as={BxAtvBW7bXpA0894<=g`l$&|j zdH%~n_J>@yRcV)Ow5l z8(gjmdI40?cN2kKj~wQLp_#7Je*JYl2Cc6LcFEC7%%k!BjyS2uz-EVHkW>=_r6h)t zt%vzE6qz6trRFi5`A`4>epIl>aC<0N{0zI~X?B7JJSg25i#A?NAU*hEK98QE8#eJX z=dwh+4=SVK`k18cecX zcPL@q9Q2Cc1(>(+9xWN^@2*2xtcu%x2eRfJprR_)FAuRJ53x}N7QONBA(H0-!vUSs zD6>$U_+!9F7-=WE_}0qCI~V~oz7|NYsz9?e$UF~h4b@(GRDZ!=mWQbE4#vWxSlweV zKAouPlfOH)x%P`Mn!u7VaHayo5U{q_X@a_OZCWy2ZUuUpXqvhmO7%Q2vUzB?cn9m+ z5lG9oT}!KW<2LUiF$+Pn#^PT^aff*3i@R8gNk*2CLN}P#O4nne4}_s3u42c4AVN{a z)9QyJE9UIW$U{H&J*=xQtVnlp_7)krR>1Twgj}~6V|{b(OU2vaHy6A^7LKlhy70Oo z->>SO-&V`Y#O{SMpaVVbh0e->78jZ9~!4Q7=a+qM+MqaxZjCWq>>?b2jiHE?DV zu+~N-(M0D@4trmX9Jp})JZA1%tDyVs9s2rJ!Q0THS+nv1lYQYrr=6ph`I{*AVH%vn zG-WPFdo11x%@u89^|Dr@*pS(WAKyWdpRH$u=AQ9gih^c+d7Pn|^};E(bC3YVsGSC@ ziVC5|74tk$4d20j@x@*MQQoRMWREPy4~*7?b zM^ysAxR`3pZj8IUhngZEgA@@BRdCrce|$#~XIe8V|Kq%42hY5AncAc=@Z0x*0q-I= z-h=5F!+Ey9{xsMztN_QLz zl-vY#D~{@DJ<2u-*bCRgit==Hwur=x88hNDj=>3$hZtR-fO@3@qkCWe7#O&VJaPvp zZHZC)FEdd6tOvps2g2+e{oubuKh3sq@SZes^+1ECnhN~ls)!+~RQ*E&QK9PJp(Fh` zp3D&_X-8pKJ~Yx!Ra!T~lwQBj{<_!ogBVOzGI{c3T^~$Cs@!N^TTS&RiP@Eiu zyXcUauhxkV>pmo(6=mw^jHB~ZbA&i z>QK-bWwL`9c}W2a(}>k9yus3f{;Plj~NoHe;~NfC{KFi zX+1^Cq43fj1F}5^lti1n35?wMW(OQO2JniYP8~_D3g!orPQMrikw#m-v(^YhbH?K$ z!Y=&|q{Y&a2uO|HzPjh-s)dbPj5oM2LnlJJnUnt;Tdad2_QsqIsEdP3iy~?&!`p{p>-#|MErvZ8E0AOiJWK080QxPujnt=- zIK#S&mo8O2IpXUJhzXnctpRi@(8#lQ$Xu8!`t;iM>*C0woA4{2Zd=y?iWhmU)2|$S zeUYdr95ejBm3)TIz@|=wnY$p}1Z%tNk(xK5Al!r~Edk3OW^9hMRm@e4P%=4Q5wP2k z7OC?W4kom@op6ekjiZ()M1u9|cKR$RDWzDr@iEZmwKV0MMmAf4f<-%%33~JB zw~?edg(mj*kbMQma*JJ8FfA1p-++LS86n@aSGQv%aGB^h+ z7uQ}r25GC=_(DJkQ4C>FIB%bADc;_&oG~!ww_7;nCS;C>TwW2ltYWe=LdQRhQSTtc z5;|j^RbWS{=A;YzITb(_b`Zh$P+zjAM~T6pmu`MrlDxh&GX1#?Q(p)q!r8$;|J?(~ zBS$9H-!w7fRf|n37!mPsVpIUjX;B;>*|Oa`i^3(Y|IF$iRgt2FLtK7>{yYsbbe5Qf z@zp7fUwxRsCoXXjtOOPg(JCNF6=*Ki#F_uZT=yv+;(#qjRDxLBE_@VdL{M4uK!|%z zemlXV=qsV_ayxzNq3-^WkPz3yVT+mLfcpC!y<1$vL`D?@!39mV5UQC$(T}(Gj=27| zy8aEN=5tb&vN4_N`GO;$U+o-huedD(0Ckoe?ttCpJ6!lx>$FbBG4)56Tl0EikA`%W zmd-~K5k}>iH-0FHYmh{}1{hfiEP29v5e&AtF=nq+WMq8~PU{*i zR3dEY?-*MfzoB99oKM4Ew**M>(~oYR&?SHYNN_uJ1onfDHVR~Iqe!VSNE<@J5@N*p zz{6=j@BQSv#2px-XIN-cB6MMpeuT?mA>;0KOZ3G zx^1|$?B_XR=~tvxaWxn5`6%`;RlAoJM?mL^>DmiAH?UV=1Fmm9IdjPTBUxodR?mUF<7hb? zL(7;tOF#2rUk>4Tn8o-x!QMYW2_f3h5y^JA!p4!?RJ61TSmLnGeMgzU-J}gKD#nZ7 zhd{SIG3J|_2KEvgPMWyGM(mdNiTREx(PiPQNGh7-mkF%$1W_y`Y+b*e+5H0aR+3ae zJVG3M-))V}uL-_d4B`_*!o_unmDDEbAx}NBR~)~tw+~Pt5Z3*lH4 zChvH4qll5d_r(AdQLe(>*@H*!Q*@F(?aV&5oBQiW(ofhjd(OT+``DhdVo%)=4O?bU z?s!)0*6^V0uhLYh`Q%(@QpmCA8`e_4XaGbt5zG)D(z(?o5B2ypH-bDb=M@$?+{5rO z0To(<)$p4zLEM`d`($9`v%H0Xe-#al$D3=4UYn2T^IrF_jmfoMZiJa!0E7eKp-;_% zFD-M<6+_JQ`s#LkUbXg@Q=LjS=XZqGYTj8ZraF9^c~cI+KKdj0+re|5?2GM#KFZ=2xuKnV=(j zNoAc|j9<`eJR7)lpQT%GX5++d7MkKy1=k|VC+2>iZu;5sBB_37SY3<9o4lo=akK8t z>rs1Xq`@$Iq=NbkYEA_A~WVh7Q$KS3hKHZ~Zrz74NGu z_b{3B@XNloX^f)l%nJ^?lw_l2m))!S-MdXxRoV3xFBh(u)V*aWRmSo0>*W=7UGIGP zvKcQ!2rt79_+=^?j$M!f@%*^B_$0#Ttl6_G zSeOFtZNf5ejEXZeSl7tJ#2R`_wp+J@8y~a_*V~>=NP3i#vIj+TVK5GaaLiHJWy~>h zh8pf7Bcl>(u_xv6<3Iw2rM~{XZGAo6?!%FpLsxFyx^}LMO-^U*jso* zT+|wno}NBdQ#0qU?X}HK&bQp^y(kHeYp#;vjn&Pb^yb1xC2j3cVmXIW_uAE~t2bo878G12n8^FITrx5ncJ#;jdxsTGX4%==mcLX?9YIoy z+_R@mY;5ciJ0Nih&rIRw%<1FL7t zw&$eW`abbI%A^(XT-zqSOLcYiu(VxSxk*cFiehjr^M@X8jRx71wbNdDt7rNFE+M0?=MWY?)0nvN4t3w4X#r^YU-r%lt6Uul8mLq}U% zE$`#2#KV+3rW;1t+S-m8Ja{)DE8_h5;XQlyWQSCJ_>c?iwJ?r;yAYP6lsxIMc5P1m z+dM9SxWDfC#s0AuE(AG8pewa+-~MrGs^_z3&$7>XCWnRah?b=;-LpE-rahmz{HyGM1AlDP<1Q@BD@nDkm?WO}S7<>{ix1Fl(Eu>t#Np zu*ZCEK!7l+-X`@Zx%{TZ75Ei2blk9uP9hEd5|zwQU0 zgh}an+if4sMVrL#Np$DU4jemS!r9>9KJ1ZfXr;>(QOCzvwQj(T13-k0p_ z*RL;&Z&SI5DYYZ!osux9DxJevkL;%$uP96_Y2+NW`6i4Guwc4D*Ewog_kX#^ZU6aw zOU0d!pFYi5zI^!rZ6{A#dyR|eb|&6;ligiv^2El%jC2LfpFmTIKZNC-J110QFQ$R9 zdh+^7ctgp4H~p-{P^(;Vis^ef!iFf zqwj5hhI29BNu-ZA2!uhNCeP{#46gu}+cMt6y0U?wR{iU!T+0I0IoDYk2WPIrCY-XR*f225km9aAxijF&&BPBHYZM zKOfXJox({kZ|HdBp=?%z;BFw-KYUAs1D@Oq5aLcU#F$Yej$qF16Wh$h-AiHx-FhU_ z1imQ|C8weZ*2Rg-zFyt-n7lUs?=+O&htHoMMW&d)!i944Qe1Az*)T1~!6QeGtg5Uu zT)TEHzf)u6NI%Aplri=r1#neIkvhx7q!g~Bfcv#L&uTxGt$4StX>r`MT7VddMJ4CR z@UyxT5GcYzLJsEYDk@^nAci|wT2A2r1cpwSKKW^=-sqWxl@llWi-pGDvt;Q~XR5p7 zk{PP*y1bs-kzk&j{Z7dP58m@O09D-Lw%i6%8?5LvtYbJ2dfQ;;zo$Ty# z9xm?YC-{c9EPU0wcbQZSy4xOq9#o^!Q(VS#V;mvDnq8=c4m2cG-`+nYd$g2ii-EQE zU~-rd#)qOL7XnVB(lL~Zk?KdTZP(lSWgq$Y48QU~@8RF_{ibho>4%xMoQ04bFknvI z?a4uGp%Lbn2O=cSK4OwaiDSP_@6xsjg@J*A_c)yK@K9nC6Q~Q=#9Q6m?D};N3Jy*O z3&!z;ZddhAt#Bn);V1 zi%3clQ+u-^EiKJ%re(!Yil$R!k)O@YMKdF9hvdZj&tCa{LG|22{0d5P=f=+^B4Qw4 z7Ba|?iZV#KsWh!KKgSVD@)f2K?=EusOP4Oy^Z0eVva(WfUBB?>3`6xIlD$DsDS&4e zCzZ%`>h$SBz<@kbWIV*c)oa(Hjvnnx^uLZVSG*_81#d#sZR)<%yhi1Q;5qaz6L0kB`*Hj~|ajK21XDOrfZ$Yxz~vVpMt3b3rg{ z5|?&{(|9E|9>7>6K>~3taR}vq=+N0=K_A;%zqzw(9q&Fo_UIQ%&2`s&pRO4vjvYnh z6<7r7*CEDE&@UGjUm8G`dH|RI_|Bbyi;H8j)z(}Kqe*l4@@3160?}?xU%NIg1AX4t z4C3HKo%@czT7GT+jyo>kW^!@?)C6Io;+VX=$F~h}&993a!8dWpIUk;!?P}~qRuKq_ zFqFe@ji-L+9}VFQ-s63j^CmW7aY$H`zn>gdN^)+ZIIic6BM#|p`&ylbFKZLrLH5|c zf9L*ZkVn3ge||ZvlG0MjBl-FIa{qBAFzcW)-1q}*ej1}j`4ejeO4HQPXk;^7W_b{F ztZx-H#C^NXSW%*FxH3`1h>07Y3a;$I*i}jzHfJ-xC@gdo%}uNOP$e!gH!rWMso|Am zkJwG@*t2L6SAcF70m7W>N(3iRwb{kDzn0a%g>pG<5|v&5)#Q2X(iwPx1IrKBt(mw)SEZAr3#DI(tC)#2D{f0ZrShvNDJ$5erN6xV_Z8N|E)mJP zBIm`-n%Jdl*SCCA%U_e~rK_(T_f5pzNLg?Pe>t~-ii!VX#I zU1eoD|DqE=;pvknHfUyE&r5Um1q7_3z?8I?NOqeTzO)0j-#2Zx@+FQ`RwM1APoNH8n*&1qWcs3K-e@+lugQ z=BqvW*C)H!`4oBP;$5CN&qijjL>d*D{rg)i<6zkWF&JG-^rf`Wol zsh#FWnW-7P~iaG>6qS5 zHq;cKCCIZ~=4iy{2!8I!`$-xb2b_$HJbPB$W2&IFX(0FPol%bFoIGIYkRv4evVS(< zcmI$X8L7O17|;JFN|sX3N0+>t9L^RzG`VITAeA&=i~A#P1a&Z|sjzxT#ZZrnE%C0k z){Hz{+4K)zop)kl1`Q5lXyg#^R8crYTX3Nc_Qbp>NQP2`%z1j(C3~=!^nWi zJB}0fD_7vmmKA_0O zdA#N@!6~l-?789aA%Pr4N-Pm&JuYl+_dJBf*R+R}ZRP5B&GU|~gCAd(uug7F?bZV^G<3a{97`1s*NT>ksqoQ&EFTMqd7Rggus zn7} J$o`Zy0l3*UtmzLaK;d1>3zW-d-93J(IL$H*;&H{gQ5pUM5kkC0{9o13|3HwETU(zFk(YUE4-NzVQT!nlD+>S_0A7hRHtb zijw8Lyu7%dqz&)AGw;IO!op!p^`&EczOiHqfIz!tfl_-!4ppl}uqhB@*bC zboR<4nin~0lCFw+)3I?}24Cf#oU90j)u&b+7bmmQZ0pt=bv1|sr>K=SIXdoI5^G4f zeMF@2?KeS&pRgNj2H_)qB-mTpFxE{@PVRF_a zaG$0WlL=J06KeC8Ev7i9q-V5LY+rr*ebLQ{jQ9>B(@zlawHv0-5zc@8Wyqg=^ZxyT z&!0aZ?_!~(p`iiVQzP~%P}8NM@OD#B@P!&0tfnRfhW9p!x(8p%y|AsZ=69q(e)lw{ zC$Xxex*A@tGey?QCf$*-$=l?c-`s7p?8as(LP1+e$gyKKuwf4$J(|kQs8eUpdc#_j zO>SxGN^RwhNA(nePRrw$?x*70T_viEF36II$0o{aTT}DM>bj0WMQ!cu?2LJ#KLzVM zo<_7w64J_q(78E8{%}Z0M-niulvaS6yR>?F14+wRDLRHVk)Zsrida*YZQ8tfI(3)T znl<~m)MfCHA?;qgc(G~Amc6%cPZknqResap($Z2(2L~UvWC^i5gd3H4$G!mPHj*!2 zzHDM1>$~deGgJVL(CMb|ce6sqv|^Jy==(!X()iKLL!lS#KL6~0ZAq+hBq_n4+Q0^Q_3+sE&)YxeNqi%is9{t$bta+P-kJ=HFz2sD-Nt62DxN&2QV3Aj!EPuUT3_0XQi|x#A z--L9F{60uq8)zSN7tGX6UVgur1)x=ZoH0vns2C{n<@iG>D7^=RgS|KotumV(u{P`s z2B+;F|f2`OvSm#{RX=-Oe;3iYRdjv6-@mRUd38aZy@#`W3~neo z;lvg{w=7YEI|=rq{I$+Z>Z`#HNe8KxeE8tY8dB}`<6m0+@Kh^$N4o$xu{l{m?z%$e z(PH3FH6MY~{o&)s`qan>JiA+(-%bu&aYR83YN=>{oE<=Oh%X7j20wsMiEkOpx*Hi9 zwikc9vC-96R=u@kQ%%t%iivhq$Obs29^#zgs@GDAk;@4Q>AVj|+FEEivSP!J89Ua~ zBx*NWme=#j9M_-U$K~F?{|J7!8Cg~$LA2A|`lTZR;9WG*%OD0^Vlpg88ujL7{M4|5 zk}0=ttiV%|&Q6%e+ag|D;dvxD?OYO@jyJ271ZqnaI7wULe)dTTFi5PF_|4cd?xm)- zol-Q(zon3KQ&L*mn#07Hle;M?ZGaE04>k!ouNM$0gRrBH6;DCWT~NH1w>DAR! zd3}FXJ>Dzmeb^Z^?bX)S`aOFdcK=7(ZuTRTp z?%Fn__+Rw*0v~4h4-R!}{sit$kXb>cPLbH1LT~lDb;n~>EO!Kkhl@*@qg?AijOILW zU}*6%l8oZy9l8AI;ZJmn)}MNKe(~rimBlMURGJs-{dHR@i~1yv{UMNcR&LcmK*n2$ z?&9~UN5zLv)3ms&^%TcKRx0BDvQ4S_-Bkp=honc~vd-@lT~b)6dw14FmmDEfHg=;ElzNWtSP zj9uN$*#5_)Z2&;P1su6ju&U{9zRrfVYy42CIezUkUyyBBmq{5gE7M}st4mAo0gLtA z>O4s(tDw4>>a4x(+d51*p)?zma2SqMIbhZL^*0>T1Q^6HN^SqeS|6!nGWC z^Ri9-Ax%Fis9U!M63n``|xRT5{`r^Re%FL!cL?^gytkPQ)Vf zd-5q|Xdbf2OC!`pNG+&#JS_=nkT!ebBw+l*F4Y9|EaNSyS-qjqGb+EcXicbDLv_w zIK|CVBBWqp37|7{(7=Hb9^xH*hp(R>_t_1pc;K+2$Up9z_}pHq^CTp}bZWOv6k(Dn zR88~F%^P%eWAOlEW8-~3K6e2|rpzdogg%*w!WogZFta-fdMc?|+#RVkabg*)(>s`2 z{OZzd>g!2KHn2}308pq=Ebm6*ISq&mlbJNbZv9-5x}BWvL0Vf`TJ8ixh&+QRHf7VM zF~r?=AU4#~HdDSG@`X~lzPYLg`Mkrxjh{SD#uX1yRvxIQHvlL;gCJwIdUeNv&N@bL z3$r+`}Y8d^ff3Zw=m1@j1a#cPnjT+NTRkXF#@213XnQ>bIh zTz4|`dBWKX+h@csiXe9uz|wIqQ!BC^&P+ggn}VC$Ccv#9DHF5FOKNHYusB))NoB{c zlO;Dlg6gYqu7A<+MLq687OX1MeF^@}`F@>RmOXy_SY!@aIl0qBXOit*QUmn`$wEdo zB8MuWEtTiF1;gw*)v-3F-1gVl*eGcyCI#aCqDnwTr>Q zZF%@zmoJY&#psU;clqj7&s(?j0G2@xnHF``-!?N?nWPFk-Tv~mYkNjS;s+@3!*H#heUc#B*nin()yAf}f4!zrDi zpw50@|HS2M46ySdw_O4At*Ii!I*Hcfs>^y4A=aTH+E1zc)~#pHJ(L=DCWokY`F1ag zb|q!ywp4w4A!%V8Zb?T)MV%(M$xi(1LR=9zZSR#U>NrdGQuLJYaH`9$qks+WHei51 z^Tb5TM;W_Ie7VAtfd1#i4-cHyrAwDFP&fsJg?Bm2u*8h9mUwkl^v7o_=n~p?x>FH* zLY6noIa7DT#pAgEoCqHg&|$Jf8bYxE_lzp;&2on@c`2d6Uixke_LnywKl%~!BiKLM zw`8X^BP?4DdZRC?MAACY8gKRV88ei0bmWmL#r|je&}G@q zb=$Tws!H)?++MZ|ro0qW5}JVEenf^PC`@^BzSh7l{{_6rG*}Eicm~GoKCDU_HI(J5 zRo)nDWDrO6fkE@QkkU@ak&@N3VMk0t`+V7O;-6+^C8aiO z+dYYi+7~Wd7~}EF9S3)BY7I{WGhwVn&1(%6pGG+z6emw3zX904yP{$ML84XW%a`+) zERkPv%iRY_ZlH=vd(PlAAOg9!J-lig3er1RR2(@VG)T6BHJ*;hqK@F2?B3J^hO+0* z(~8Bvxa77Jp}N_IQ@nf{4hV?VCz;L zUtiyc&=s>UnfR-ZA1@~Cje$S{8ORSi(g{ zC7MK-{rGx5=*hJB>EA|8toiHk%vrN+iB9xL{8m+9a27=Sl&>PrXWvFJGNAh9$&YZa z)*HYTYWh8%PjleFDSJ$JERXX#$9SksWMTlrqirdZZZ9HWXFq)a(*R{^8oNkSNofzz zh04S+;gdc&>lCyxwnLZMdoQR{s-8hrB;03{V;z}@VA8Mb>eaDCXD7r9oDz{53sv4H zj)42itG({LhX%V9iB5aTNrH(tr_$caJ=8iEmRXS%Q2oBt)>B*~Zvugx|awKUV(Pze=(s^> z%gf0*5~t}CQ{^YlW;J9O)(ut_NCcu=zy~mnBgsaA0F1gZ?xwu<;PdUag9})08@sLE zWFVBJbkxmSpgxWIgWo@mNg*M}L+FlJ_%{PetA0y7(jmyZ&}A)x|Q z&<>s9w~wJ2Z?z!ozP*1Qz>J1uY&JH`+Un)@z-Z>oGB%-D5&=wv*wWmn4os;+aRqpY zzlm9|gbiaJY1BPEEv=Sn5~D?eM!wdinHWLHRs{^i{yTpSF*S$?Oh{7>Eo^dv_wFJk zbsD7!COQZ75l@B`Vg@?$k-YCqqEG+41c9F>Bq#ojW!KjHR`MvG4&@$CP*hOJ<)5mL z8FSFKve!3~mH6VYEiZY!K)lb;O${ z`x(vkdo#(o!uIm%#kB*rmBwxeG!E9*_pq7N6HM3uf}|9S3&}Lw^Jo4VYH7s8a}g0K zywh4Sflj8%BLVhRUS7VAU~cl-muSoH{87V;gaH$p6{ksO!n%SxME8oE$X=lqIrfw~ zBg`T@Vk-{$mE?gEJ5EcQEM?~u7eBjcK1{v0*>pIg7g zH(nv=>bf_M$vdu{0w3@wE6WFou!2lo7%`(O0>EYd67l~n8nbaA$I6TD-rq8zO!CcI|3`8M;p89ccskJL|K-s6KcW zNEi>HzKIL&wWaOA-w*JH)e8~n(V4VuZ+!`M3)Zx%>_81GG`&PXG+1zf#SW~lAj`wV z1z|!EY&4I2SefB=hBIg8xX<4xM2J_&=p3^g{$xDih8_$Z!S@FW#gO^nB06g7>K>=l zvJ#{y%kLrmrDtStWSpK+z=@p;0d1Vvy#h8CPHzlO09*SrHEfG!vX)UGqkJ#SJKdV{ z;=+~dlRNZoYB>ZoxpF6w1Rc5w)hmW7Hem4901|py&vu zNfid;1y6bMq^H2EXhT62NC{~ajoth7@w#(oitdhPSwVo2-RoWlg?g+dE_IZWx(ioJ zc$4Dnx2C&$lZ(p?s^YQzi*D2GCCwB@c#}3@uv8$;sY{mvc-$0-0gPU0m>~Cy>*=4UAv}Hu6uji zKlL;57itU{dmE(HogKZ0vz(Hd*^#QSAjxGkKoPT3D~d`jZSA}H`Mt^5Q^CW`gXp+^ z{dyL?GAZGGT=CC%;F3@h1sBB?LVnO)R^&m3;0zO$2LJTlvuAxE&SA&WKowT&*7*|7 zT4g3Zu`c@hxnvqGMFS-CyG-7xjA``%$?lARy8H$x@jW7SJ$%@WBp_z?CFEsxEk4}n z3X7FO1C2Tz-vaiK!>2(|K)4+Y4BQQYWzEhqzq-0RPBAHdE%a1R3fzv;(gtLUu{S%( zpI&rcozO{}Z%Pe4l#xgK3sMzc zqN3TEped9zh9B8}4{sdHvA9aJ$BpA(J`^5CN5s_gx5h`+$v%F5b}*jrFl~>R=-#*~ z!2>?oqDuZSE&@QZNJ6Z$kpIlNh9)Y0PooyQa22d2u+>{n&Ft|;O zTDXFJMWhwFZoA${N{VNvYYeXK-?SyEX}E>UHxP6>of(i;fvDOg;5p+!=%;A%FP@)5 zGzu?IPt^#Ix+gAbKVE0>SYt#u;5nS&-k#>?S8!}ZgWm%#g8-}AQWX67QWfFbF*|^n zx^qdsb~h-}Wn4ZKOvRBjpFb627UK%jC_Q7CQxd_imWnsKjI`>={#MQcu{5UXcSZ;kmMfE}Gk_bK?bD#-MAFLMR(Egn7Gsl& zon58>`6n)}l)_LO27ZZD?iUH61DW+?Rl3FqV$--R4O1d$%2NR!QJH$KA%C#yG z?HJMey;u5NzpnM0Ch9x7l6q=2o*tsa5Opr_)gx90BbLbfFL1WK{bMYNA)1m!XimUR zXCl9Fp0XC;kOw5rRp+-IR%DXXF7`U?&l&Vikp-!dRiEr9dSnWX5|WM2b010ZcO8c! zF=FDeX_Ygd$78CcYAyL-;rvI4ABN$Dyj-m-$O79f`G{k zooRgS#9wxhL@DKA5m@iwDO^f5dWd7tYg^E(D<|u=CG> z780I!tW`&=J^;!&#n(|nwTFuGVXq39z@2Ssh$Xu@cLTYg+hJ&UapsN&2SF2&$KUXo zSmM)0tYANRm+ zGlh6Sv(INh@EI@_5@aiGAUSv`piI$;7(f@Yyb$A}&%V``pS7>Tg73{6@3}B`Q9S>) zfD}nv-lqdF>)4r_9UTRtow)hk9rDfP)sN2LYIts0uDuor3y`Eyt4NVOML&?0ab+qbDy~rm%%Nl%BPSXSk4@{HenTDn~&Ad$aa2d zIcrvz*RNg)+xNN?3h|#tl}9CYX*o~ui$m0a;Z}ujH5d1A9gK0GTRNZCmCx+o>@q;W zBVrf?Dd1>yyr291JPw*G%C8lB_ef=L50&D@e`RH5A&0+#zl$4rw8q$dKcQU+^uk-^ z=jWG5stYV9`qj;PTbVcL{R>+-e+6zewcnGKwu5pEPYdkFHRUXDMm_LP-hY@&XKCpQ zk6-nQAl5ZHL8A?4JTbnKtTJd&D}14QBO;Upc@BL?%IH7~RmYAUr%)>6Yg)>Nwx-d) zW9QB(U^7vfGb2IO=8ag9EDNnQ1uuvxHs3D&#&-dqne0m9+aur$R~K9! zL@+qlt9?+Cj7LqLi#=SzZZ@CLk8u;d5P+sZJfe}bMo0`|Jo}zQ9y_2d zHlb1yuj!ce;a7+gmfc@Av1k2CN(~abK96fRq7csZuFL2A?>31Fv}!8#2tIz?7wSaV znguQrcllKvbQ)P$qvwCTb8|cpo#9QrfND=Rs}Ale_#v*&+R2jXQ;R<-aqnHO_4PSz zRRSP_6WbiDs`hxx_kOOe&3ZCqhqBt&P?XwfGv3~AlP82!5i1bEWi{=)5X3x5MWtjG zYF;VE`3X`|DECz~vL(Cn9qsu}mbf@QNjTKEZF#k`y~EC@Wn@HP z*cVa|Dz~KBB`F!M7m$qzbVi{WsbM#fv<%q-=Iye|w7&Y~Z9o(BMtLbO^?WEv)as*O zuEODicR3ZE(pX)dZ<83QGDe5i=NH63w*;qe}6;3I@!_-sC)PReQD}#u>}vY zhP-&d+S)O7uTC?CQkEK)Ke`7`;yoZdWIzGeq|)ZOkMnDyU#*0AQp)ZLnY3-ZMAgR( z2UC!$X=_;g&-L{wKs85ZMxajOrC+OIJ7~I|DR-kA8%doWrGfJ?Dc7Qn;?q zSxe{7Zz#QFY*yWQDeg=1TQ@m5AGl`0R|SqJjn6bOqHW|(aj_yC+!RRjTD*|MFNufa z*IvONB9sa-o$7z=M)Yi`{6D#aZ*fulD(ASIK(=z=gK&3=a&96 zip!*9l9|HM2R3y#AQsRzPBvD&67gPYR|W=s-)&nR+W469JiC#tOF*(lbLONYZZb#B z28Tcjo_V(u>kj;Rl}`Oe&hBvVsBw=e?iasB`P?}Ht+jST9RxQucrAp@Ji zREXqF)ae4F@ZB>AU5;3SyCD9eUJ8juq$_EI5x;jU|I@6gws}k-o{ldo6YGRPhHp!<+E}S1s)WP~{$IA>@&s1k)o9FwQB`#cEZv zKVMf`d`LX%EQETvyMu=g?IN1!&zRAHZ=L~=XeGh=mrg1EhBE~IJp6uy8an@bRO3!3Iv?uX>~_bR<|N{_ zC$5+~g@tku6$Np2orykIuoP8n2|U>2&tAP2c*snDwK-h*=FPv7hQntvV&@d1fykR; z-v}%Mn!ZP*e8gO2X~W@v-lqG2z@Q%bd&D-`yjd&}`r=@0Dg>!}G=DOAwl9{HyO;&2 zIIcTYbYcXgm4ib})#bf^c5h2)FP*-Fy>Fr-5Cg|(YPLD3y(JGWN7QHBekld|L4Io` z5l9@eeIWXeP`4RpHjkSRXM2tQ?~m!DVP>*VA?V=2oj~+^Saof`UI=AhoZOvD%q(@r9~#1d-+9bvsyW`#%y=aMPxPbM1f ziHX6^^kDq! zxqkwE=2~U7A=71;%eRw~h9~u=w7OeVG(hk^LNcYhZMOH&KdW9YD^5%bG?jQqR5enF zp97^xVklXQo}B)(xZSi3iF&IalGaP!zV)VteT7Pipvu__lbQMF+Z#*ycF*>p#3?g} z$LCF1u%H)**%B{x$+E)=kQbi`&WZAjLm+Z*TF|;&YAOUbI0HR=;VoiKhNnQ zaZLshC3%^wF8N*FEgs2ui-}xYX3? z{AZx9t^(O772)boSlE6bwD?4iev7dR(r~kjzwc2wu8;WPjbs0P)W+7l+YS)a4S{Ct z0`V0wF={(=BYPP~MnzeHLcxUIb#j2gROpHl5IQf7cIf`#amHRumPl~cO{F+_L!!0lP3arrW2xz5jS%nq*|SAlUw#J;m75O^kWYu@ z#O*(UDO;>Dj2WMx&Pe9VOl9PIgqQU{r$w>(m@;p<6AnGQ{YBo(l3lw?gz*wH$uG^= zD`I1%o}F*nsnhQr?7nEtHF@q)^tyO)RF9rL;fPymCs{S z5_SY}Trk1%7bK7;9kx`N^SDlT?oze?JkXRs?|Z7n z@^5j+CvEG4rfI-iNT{$_-gqkru2f;-UtMq&PVw{Q$+as2J?9_kb#>#or zGzl3T$?3#y^p2D3n?TsN&ASMP9mrB0_d?X28@v@^2ta?Yo&hq@|-{O>V%#=mp2g>Ii!e zWXNgYi?F>?&J}Olh(X}-lP9et(1t>dCqSPvixEC<9PRB%OZ=CYEG=e#ef&uy({%cb z=3QNFid5BsYTCVKBSq^SOaN4LC_2LKX{&Qm{2V9G{Z7xstLRu;*u>jqc!g`@=RpL} z_P9(0{{?-f52@11_SvB&m<<`c;ZJdS{l*Pz;g(w^oa9(#QmMm)4=6P)jVhz-up`ws zZ#M|u=H0tH1qHHG>|OL|R1yi1Wt#u1a%CZ&BV0(kDD-V0nIAq5+;;SLxQzQZi`2G* zFPEbIU@8q6^O#r2OmkTdq@w$JR2t+3Z!+|%^EG2}LI}eR%)_tp+b4k6?b;^O#Sk3 zdY#5SwaT-vrtB&9eYridrr~7=srUEwv7X601!RySnwYn_yAH7enjbx(#cr{SN{Hf648pegZL^=L9-ewc;@9(caweY=dp+C&IRo&G!+eA=G>XeVsJ<0=a zv(f+#6=mfzanG4?v$?NDYbC$fesRjFwO`9A6L)8)YU{I7r-s|x50AeQNWL)8kaWE= z=hDby&$$U*o}D{;a%2Sr5?=>~87@o>wLBbXQ&#_Axo5DgVBx{kFANNgzG|3Irm{@i z&a){eL-QvFn=%SbJm#l+R<2l4{l|u#>?WJ{SiT#pl8+F0$|mQY`C!k*gjCb2Znx01 zwB3~4OX?p!d^jQdOHK<7kKkSuBM{gWueo#e<~@Q{FS6`=_;>Bnur8Q;p&7`hoT!_u zbLmoMWrTc$>FE$*3KKJPbX{GYLf}Y~bwRxHogMujQe%Y;a(R`dUB}~ET?d5n7UsV{ z5H}5woBdkkZoOi~iW7|wA~x(i(Oa);sI9NBA365v(oPWr5iN!v&42Kd;_x)tqS|hqasO6iySy zjAgRO%gZa*Bp1x{b8$r|^t`bApwU$xB4Xoq=+LztCqm<1zdmyD!*fLg1A_n)R~Hv$ zsSlV+2$i>eJYW%b!}@nh7w?Ml5EV`qOZIrozmjWlf?ox3U+qFyocMq1LT z)bnPzI-B@;f4Q07?L6Gv7hYXkF*-7G+t=4uM#gTTMNB~8D2uTEyV0(4W_ET#<(biP zk%?iig?&{cr!%aQ=I6fme19LU5=@OsoRsZpJ5uQ-B5B`!tm2`hs&ku12Bsu=*SR-L zu7b+aE~8Q1m0^h+h4fyxwHZ?Do}Lm{JanixSl2+kz;jNErk|C_*`spwuHfx@^ZKtH zMSi&=7&}k0?jId_s*}haua|BfaO?52EZv{EspC@x3zYl!?^C0!TC(~0_>{e{$a$3a zIS)C!9T^?1d3#@6`-#%(<-h!5(N_~qjdGpnk9QgC4(P-RIu^Fi`EE!^2reqP(J$(# z>7>l}FRA^tv4NQ6_InXwVM$-USbng4vCN`M$}iS=xK*#fGjG|lW$Y#bI#1t?be5){ zEn9!?+_}El>9MS3=~o;EKWeMWj9lxkib(e5@;ph&aSG=4_}1Y&`t|F(FCS9J=3FU# zWjiD4TJzi-r&^rLMH$o0YL#&NZ{EDoFgAXSiM}K7GPtGf={F_R@7<-+}ML1-c)epG%(6 z=jppC+4`>7k7c6!p>;P~gqVrX0||>5>|^Qqi~4-n{ROk5e(vt>pZogy;>ge$dQ1er zDk?h1s+1oxa?aFL0F&;NLm?BWnZAsHp@&2vZ;MX@0|RxrvklB_V#e2Ub91$FoGzBW z#}^NOThK|;GaG8oqH^QjTRguH1`ICD4SP+@j#c%njQ;rI;=^H+o}X4bx4M`{hO9Fv z6ZMz5jPY=%nzj~R{*hxr-l11bNH2}IDzvUni$ms;8d*|U2Di2z{M^$Mi~BcUn4f#z zG^qFN%w=iEer~_w$8+DO$c=8=w8^~T=_#5?ad9!~N!L%ZmoHylE|<){++%f;PNLl0xTeQQG0W)qco6o7jEoFoH@jbo zh<>Kps*Qs0TCgPQ)%Y>WcXk}FNi(ahOVkw+qGa#Z-K%pCVOw_e_4d(;iTcgfxwnTy z3+4u`Kc<=Ctq-EUeEA|{r2lZw#ULv6)33{AWn|J^C(IqOZ>p=SABY-VL0E_i7SQb< zNG@~%7!o;?lteC9P;YtK8-WAX=a+S0V9P!uD#Ip zCOB)d;685n^YCyoqJE2*PPT*DsiX#d6OE3L)a%!;lf4?C#(fyOjbG3Wf$%4;bG4)Ru`{H750#BdlM{hF7?A`C?%-#&Cvm2 zuhvy8!ga5%uNt##N;M5+leBs|J=W8c&Hh}pU~cl^M!}PhUS9phqWZC-Zr-?vuMw+j ze|)S%d*KfxRV1iCQOY07&C8pZn`%ou8Y28a#^pIS_+vz;c$Hv&s_=E|kY8-P=BHzQ zR&S0$5bsU)noEpYSa1atuwUGY+saN!npK8M_1DGMY9I7z^Zb6iV1CAe=91$)d^aK@ z;zWd;kn#gb>u|la3+nA+xK4Lw=+Nui+egQ9r$vkq_Y6EHw8_SBdBM!o`?<8XHud#{ ztE+2w4nt-}Mh4zc87`aX%jp_dIA>ZFp7bHr^k{b4ytZeDQRR%9u3Sj@@WRYMa>D71 zA?*QKhu&M{0W_jj%8XNbd#j&Ng@rT>v3%zylD)KTY@X>nJ$ZY0o<+n!tM~?UedNJk zO5bC1OicGgBpwdrG=Kjr(g`b}*Yz|OZB3N&oiw{HmHK2uLz3XbFMaw$-@c}{wm#KV z)y2(ifUFR9ksg1*!ZX4Od<+a~+-qgWZ`~C!r1jOtlANg8^b8n(qo*AlJ!yUww{tgM#{8&VQuJV^FZxJ&n@()YM7&2gZiuawK{twhEni6pDL z{Mre#ud?OKtv@O$@I$UtQhR1LbzJKiKQO&k|4Oy;num2EAy2Q z+!12l0TK4Gu3}`wUe~3GDK8ISK|X{rh}VkOaH$+sR#v|4VAe4?TY2_PW#wINS)e7C z7ZjHj9Y}!^&O`cS|0e1rQL*ISgoq5+jpdGJeP-Qt_V<_*VF^9qZYNSwQm%(bkH0&( zHXajAfCYj&l3+cyu8=|Q$+?+{I}UsfGuR60xOM#wRVOE>@T1HTZbMQezh?D>*T!qc zI`o7&zd_&wgvx$#u_*@Vspmn#r4i$b2zf&Z^Ex%$#BR&?&-53BRl{ZCIb~gW<>U-5 zeoRvbmZLeoZ1r03AbaoQ^K*VCmgRSa*rXleYD40dF?c`T9)t|n_*66YgtXn~-{+B1 z^*c#)LmrO{3JQ{mFm}$`H~{nHY%0gD0v+$OUADhlgiP z1`AVSzJ2l&QK16N4SowM0jy3yoOG!?cKU@SiH7V0M<|>}JODXdN6U61hNT%7uLSH< za+~~8#$2Kur*?polQXNtuAwLU`5r{wPO_R9V%_H^8lQi#%&J_ea{Rb`6F{B9qO2Pr?F+T}Kj?K*Is#o!iFO+&I_veHd9=B$#?ql}G7r(+Qf zyWEuZ4y;@mZ6{}>O6ByLwdIiaoJ|NBmU@CAFt3UFLn)9m2}wRtKg&+>W83*uvqluBPSA`h6?!v+0`Sp=Ur}XxYZ`b?p9|Y- ztAG&=knAU67eP4KqJ^ig=A4UDPK%gT>W8zbA9kBovLEJ^F#hxRWi0u3qjH9_1=>cY zTHQpdI$Lwkp~IV z++*FknAIs3sL6a7H$Aq_pH@2PyQcn`QIW&9uST&`RV$)tj1=Lu(ZC{M1{?a#8H?T# z(18um|MC~EI&AJPAhPj!i-xBt>|FChT*IXuRgm$^oeQ2l69pck*tak+w0HAevPBu< zUH+vhL$$1|OxkVo>G};DCL$JQ57$Jix*k1t?5*Qwo8ZI_VH&U2m6z);A2YyXiHQ=|e@ICwB@jVdPNNy*L40}rk9s~;V>N_NaP`NmK+ za|FDAhvN$&%&oj+$4u1gGOt?~c~|JPIr81dOxq{f4ttT16 z3x=6CkuR*G|c$mrK1MD19~C?#zC%m}B=J^J&H~W#)M;%H2(EeoO;u{Hu z1)ek)6oG={F0=FBhpDvuN)31STyC=x|4l0y8SBW^jf#AvCfyL>v|~?j+~kziEAn02 zh|x^BXsAyh)YavquMo5`ctGq(s-RD_3e@x!K*sobMAp zZP`c*L&ZQAB^HN1X4|1Z6Y-^&9$yGDB00XzYatJBBbQDwDec}TDK0*i5UGg_I3~N9 zcjx}H6)QeFI%vWy{tIGSwr#-U6#CPr5g(#$zdj5E94@=kRi|vO4 z;_$E}qmlgKGI|yTh+LbhgT=?RcoYHSDE`dx(0VDx*Qs~zNLaoXEoFaL(fxjER8`_B zz=G$uj$aTfj^aXE8CEUa6g@ACmTbq5`5rmkT{Eu8qo=UPocdh^DcM?8a^Ig;hV9#l zC4()?BJG96K#ltP)rKVTj5bfVaH&Aq$$KawC%&XsC18YImc@I`k3~G#ZARFP`g99j z4~%$LrO!h-kL(5nc%joTNCAdWb3!&`R!&{4XT5q~O(XKFmt+4)gsmBRD%x#ccjT9~ zoLV56$l%~Xo)u;RrK1?kQV0@IJbbukU-;d-JCw7*P0h~Ef_~XcQfX^zt4p`R;Mpu2r}K-h~TQDW8>p> zKsjUj(kC(INhebjCi?4Z5nmijIh^-WzITyyj1rM7<^Jj?ha>YsgeP7g*SHR4^{mVj zOvdkLumZ>YW22+Z5bHi>SVy#aOi^UV-io_4IIUd0y54`2cwK_F048oeL4vvaQ?cK2 z&x=1W6jqps(VVPg85jx|Sbfw#r`~RtMuzb*Vq#-t)-^LTleX{nuQg3UqMkbVH>Pl8 zQwE_2{|kb!g&L7>n$hHlObs-0w^$D!#>;9;k!TPwA69nv^iM72E!4<5fC#NTS4Z6t z`dieDIrcdnBXfMY$+}D}!Scg%)I_$kb8{5^)r%L|Uv`^HeM~~hXvmdjYNS>rkK6qG z{9lBnv!VlhkWT%kV8EJy&$?IS7ZK}E~Hi>Z)uT*qH zY&1E-H}>_fU%XfE%^k=7g>U;`c}V{|?(K#mFNxaqG|FjUICF$QV8Wfsgw#aU)~SMytUK0S!Mu5M;<1)507jT0 z)O<`a@qPaMd7AUE0mwQ5QBgHij{K)zJmoe+3|2XDqJi+0NJj`~7B8a=p=FRqZZPkE-008@EGv`&o})1G*6zqhZxAMymjl= z8-al$U&WAe@K2|wiprY`mt9L2y-{8jl&!C%wkq*@HP$mRa^@|CMsgQ?VQNaEAqzJ30f0idjc!WL!4D7!Pz5ZgYdr{oS-zN8Bv z-m91&s`bZ4c-DYBodA7ZUS2LxHQ8j9a~yGSr)s#Cn%XVGU|G1Cnoy4?AkSfb7QE9&kq9I-&;lT|ED3Zt=)-s$)h`ks zp71dtl~PJMH60w%wr$&nF{8{{(r>AqF~nDc0Cj*7lIE>jWlAq8C|sGD8cvq;n0alU zZvM6X<&A)VyWB3WuIBTz(`i7k+3iCbJcYy&$lQ zD*Dsn?+aU){H|Bhw}g$wR#Fq=^?xZc%TOo`?Q6{Qp5d;WwR~e0v$GfPvQWrJ{NEx| z{C9-4e~+B_ulJwP8Zq> zFW>m%k7@w9bgLHWM!9v17i8F5(G^*j@9};2#gDtOmsNxLwQE4erkj+mNzzMKK}r5V z%033g?UUZ#3qmKK?Wd-J+tNGzo}N~w zqNHNt;u29N$sosR5d1y2@>H{Zpuwe%>&v)`&ZpuLq=sUnqMCbS>D%3Vo6Yonjga!! zuipWX?l%7O*XXDy-o1O@r&K_0Fi+=4T&ddQ<>dvI)2|+bAHKUg0n?zn;Td^T1H1ta*0Ogk$S$eEx z&<`sYX)7P8Rh2hGNS^^G+||_;jc7dhA$4aX(Stzx3h?qCF|7iDh-ax7>qDwd=zRj58{?it+5F_;yjBQzbe! zHW4xoQHGJpqQ`ow1|Sfaw`8YlXlSI_bSNlm{4I*tKRLYiVr%XxqMw4wXuZ_A+Ht7) zLva;7b~04jO?SEdli*I|K-?KWia8`4q9Jm}D_mc>SOr71h&y(F7pX}fEBfh=EnQ0O zEZ~Ui(axX@?{KABK(*j#=fdkK z0hU7N?Af#VO-Q@YY%T2+7yp(a(?Hlza|wHAaQ^FU-2Zn1o=mc1Y0~KoqIEUUC^-%& z%1$NeXvb?P0!xA`myJS^-S%2~387wLk_!5m=axZaiZEF>9Z&|ET3SJb+XM;;lX1}) zXiRRrx>ha@Ag~Wi9U@1%mBI)5wA+{}X1iMhQ1rh~c>?1?0su{KSBRmG?;4J}XGRAl zteQ^(N|4pQ2DT3{jD{%93A<>mGq`jK%@YxP>AR~_C$CYK>BSQBkmx) zc#T5WL?hA=QJO>6wN9*ia8Rg76jWrG={)Xn0#1nwU*4xoThZfAVN!XY+8b!EzH7Pe z78~38pAy_yI%tPjN3;QAMgbU}EYYSzO7HbA`>t2!<>qoL%gM=IuiWR@A4I|i1YZm6 z!cd;&i#OpdW7S*wX>KfHK?@Rs!|XTPIWTg-(D}E0m!Rbe_0MYkZ;noY%tg`7#K}qf zh4a#WuplI0<3m;_Z!cbof%jBszPrd_zl}n`kvz(9!%(9<=VtmU_YK#f5Mf%s-p)jT z9yRv=q4`;jFdB;$1s*|Jq+s?rw7*DjhK|Fnl+Mz?#yIsS>@Sz*#wL23Vg3|uZJ;kU zq5+{diBvxu{S@&mnn0zlwf% z=hU>}w!!j0LR>)*a6RU&%%)CQngm5bbs4Y*e1Efr}!l2T)15Lkdef%kGjvRVB&Bp;GoMn?0d2 z^%pG6B@bnG1`N2c(jO;CR8g;2MnWR}^;+Ue*f#vv>aFNgGY5?vARZAq5$H905XO?T z$Cr43&z~H49UCdmeVu{wI#5lBgX;D9ROY>sV8ovs4s1xRl1n5imY(lYMCPq|pn+#; zAXAH7g%O}&;}C%*7Uc#A=z%}~*g#TOfHdQSWV`jZKXYD zGxO&rPs0+>3$_Xd6g50xUCi;#d1ICP5>BRks)$?4o;-yTUNZ*i=JmTV-{ z6lcc4J&{+t(w2X$1hNO#L=(UxW#9cdM~IKF&votE#dmwJ@6A3K57N-QIn#F9$_?g( z-A1pjC30?urQzkvm(uRvo|#y_y(jkkq+q~l#1M`qYe}Nk3afJMZ8~yP>bo%ig|c=$f^gdxWx^< zjVyW4-@2BTPf=^7U#NaO;K8oU!_czZx;0lJ zQ0hz}1Bh+js(BziZTQMSXEU?1#yvk*u0n;+g>dd95IXkPsUv7Y?NI1D_R>M{ ziG;dN4JDC%-BT4IVq@Us^nwIl$iN=6Bc<7xhgGsexh`Y7QGV;25Y4{DN*CM%)x%=*7%F~mLh0%?YbwPz0FHfAeF#YcEHy_4h**mKMfzN2 zdMX<9<|5{iWq$&?E^e70`-k|^xV&Z~QOzqrU`FssBW5-Pxwc!|taAqUfF2=P@xXxt zU`mhC2IJ%7M<*wRZM>jpO@II1vxEZ+9bp)lGOvq^Buq6?e~Fv}r<(=rB>gQp8Bs?E zWDuUr#(S$9weSkc|MqEB=^W+}W~?~Ge~`G^@C%uoM$81ua^=buT3-tN=Fj9?tc>Q4 zhdB)bh&Qppn4ZStj(7NSnZu_=j2X8BTcVUVK)O+upa1rR$YG#jF1)_Ab#!b@6YK7O z0-~et%eK(3eM3ambSJK?jnN8DPPV3vz z-ksAe5iJ}N9IV~`;^Dd@^xG@Uqd4U8?8wr}hhj~$)^4$;BJm64To z?0vTtqzpfJBjmKqz+&TSQVwFFwB0gZ$|Spx&sJ~Rb?9&ayKQsENkIq!_1aScVE7P$ z2p+RYT(bP~1k{EMljsbCipsHLh|CX}n3$sQQm}@Jhd2_k6zs(#=y`^r8C1Ut%GM7f z3n;s?=1<@9_GYM0I;{(RF|TBle$Q&_DYXhcNN;eGHO{HZO&@~f6zhp-qi;{tbQGTk zhQajr@~Vf*X)c-(0@V1oZashsgIF4wH*MlGG;GtimpZzXR&=vt)cD24H374zQE-vP zLvJG4l!=|){h;3xIxBNH9;t%{RTnZ`^1svt|nmCbhv+p^9!9PHZ9Qa(i%h-9C zJ&s^BYhV~jhOdmclCkt^D-xFIF{?^rR-cY9pNTvMPZ4Y@PX4%jFZ`r1UionMksq*4 zXi~+;Ra9<3IzvS&h~ie0Gxa~QWzAaS^sLsi_hAlG-?8{vea~rwN)P&jJrYG|Y8GW| zu`T7u8p?o|Gdw(GO>l5<*FDW>73PcYpLP5lIz}FeBxr!~}$FCXlwjyCO{R^y~;zRrQdmFg+ML%2up$t~*8uMb7JmP9vz~sUA@5dt}mBAVV zx$DHB<_pVHgq4J!s8N3l{YomFu?P7u&VYhMdV&WhtKYpyl-LI6x&6 zB&aw)o(Bbv0{w;>h1z?tIZG3`yV7|GbS%;JfY?q6-W^C}VxS#JV$sRYzV@*HYuXXr zki{!BMjf$Gp==VIgE_1pDfaT%aPHU%;y?LGgZ>q-qhEu3qyd;+r-?XL$xi84bu8^6 z1&Su`qCk#Gg}MidxE7xbF%5t}1TL@@*k7Ns{gxnanFiJf4>5c~R!>Icbr@=vg3IYB z@L-)upe*5Y!PiQ)A@Y_4a;YxqWZp6;6NnWYx)%nI2)0z>%p=Itx!Kkig@-`JJ+Y#7 z3ZNejgGDF25qyUZ_6c+V?|s_NHPRjyY@t)n{~RfElLA0V_xSFV_x05(*H3@!1eUs> ztbrRzzu2^A*pP9t{qMelyT-qIxgis&utI{vP0 zVcyyC%lqn--mK*0WRME?En0tHx4rJg#nVWSqa`}@eeS)!sIPnqrDL>NZ4B{9&p^Tr zx_x^qq9tJ(B0OizXjuTG#1d)}s@hK9`Gs8=N#ww;ZwpgxUWRbL-9b*jJhr+>4Z^}M zaq$(=^!vHxheEJx9`UrbSDOASn^m^1$Kzj}H8mZ8%}NdC71~I;MI#(_ok}uGOo+-Y zgl^bWB#^?9gq5?IR0yu~njJYzb5WI@2m+gzT%fY_%)E_EDs$kDNH!y}1)Nd2sK36& zG327-@b@FZ}^m$H~&+8_J zT22G6d|J&%*9;kWFe+Lw;@3qVWtoHJ0v6}HsK4)-R{p}}{s^uRxQ`8HKHpKLxhkP* zyB_}!x?>3HqBrWOnuzllofDPzC3P0bc`?|e#ELEXbU!kA_^-?@o98fNlBaJUjF(@S z)kKn@?uL-AOf_O98X0V&G)y`lOfLXcDS*LNmP?tCcioNgKDRdav72x(KLXx=ZJcre zwLXE%oF3!qP;+|AMGEQwpSb46YgGxE_B=J!TBl`cnoY10$$$|h4B(B}mIQ4KAXvb= z5eI+^>q?hW-QP#Me2P?_phyK|Wb~0r`5df3P3*R45CkAU;_-b_8{A@YjvBdqrO|Ow z2Jd|~GspOVYG6fBCN?9+BAcf|!JVVuQIV>{6-WxN=6l4`hL@T#liBfjc1$w?rzBdl zg7tjuXhxq-J{$}fZ?Rk zVC&MmL$O>($1q`Vx`FhB=iTiI=Tf!H^QQzQ|1Z9C?LVR3a*QnK_ee8b3aZ_ULDfbx z_;aiBcvTB?>AdYx|1vf< zCQLX3wli()t4Ztl`S?Rou#cEFwA(RwrtXio~P% zAohQbCi+CF%`*F`fxvgc;y*@9`G+#=Qt1l-2N;=;P~qg@MEs~|eoS9KHWg5&yt(1e z>DhD?eNz%ve+i>eK|xFapYKvC(Au)|L@4jqZ_tVNJQQmD3sOrLe*%WMg#2Gxy0h^l ztb*V~?wX#iymWw=Wr67yB~{5JEBbBfQ&Lt(leE_T_P)Ley@IJs6*A4;vSG(DqVaV) zfz5iTBT0WdjrQJ0BQi1)@`G)&>X9S2D$Z-Fsi}ouL`|%Q5`U%4T@=&M1&Je&yxOIU z_XNS7tP2#hQCOc>8Dpn|ek54G$sRl!{rpR?P*ssFEV z+vRkqUMRt@6RG9NuS@aP4i4$xBrLnGgd$U1QJPmu~>=g}Z;JA#BruLFt!lr3cvOU4m_ zuP0H#X`?#o)PW)9Aw`aU*DKZWv;r+oO&9S2IBcJTrMzQtnr;zU)l8fwaN0OEgJN|` zU5YFFx8AtOOJodU4Y8G{TSLHKrXcmOcLF$KfLE?u$^Z2vP{ZidRFxw=4S5e-%Fgz_ zvfHfY5J-D;z61xMYY+ou0saOR>76C=Mt1VO$=@Su;!*n3df&mf5>!tn21tc;MW8Q> znS+BkUH>tx>V_;4+}n6xL8|1SD( zZC2kHROq4q{QtuweH{LMgU7$Glk#uz?|<d(<5Q{f7$%_{%YX;Jw1x1d+MU61sTg1JP012qagoxr3$`x=)#6FYbATx80v zJR=uOGNSKKo}``WZmePMjrji9dFbYRmgG!NYj1?x6R)8p?y11m#XrCOVpwTHxp<$) zuOnua81W^eQKSyGHVzXQ#p^)Eg4)Z{w>Na@VkZ4~=R@e#kWD!nf$v$Nop4!3&ft9w zI2#v3pbq+4NUP0?=pD!IJ%W*3dI&v6r1IrA%+CdP$T#r-5`iKr&_?_%x*>=A?bHs9 zS9w(Ln^Ib6-aKb-JzkYpEkC6=y!Z#6JTD(3Ua;!O2tp3w7)sFQ$U>^L6uR}I=l(!v z=bfE}NFKTOyO>vj8R8k`no7DdpC#h@*8|g^KEF3?>FGtbY-vxhZ+40tgSrE_d*n6bM;~(f6yT2jc6%Y2gR#S1d!gBq<}o;Bf<+8l>$~X72aAJisXi>6 z%lsRPv@!h4zxH=)_?HMvTgx(=zn&iW)ciI2L&YVM>3$hT0)`b!v$6j}pDMKDwQa zbT53&b`+2oZ>d8gOFRmEq!mr-x0W6&*!zhjgp&yLYm&y6Or`$Sk(w8M`fED0DopSwuJ7Ahs1)jUSwr+1D3%Dd`D zT4{+Ll5lcF?8RK|@GE|0p(bfF`Q_AVE;)UO3wA%f&J4ORdkZR})pJ=wP zibv4~^2ctrp0&6MoF=M2VyriSHA43$n*_VH|8%iNE@@gJeBu0PNC7cHIQjRCCr2$@ z;o~FU30C4eqs=CI#+x*X!8LUBQ;(@_1{l8FL?NED45i}q3X1!m`5XB%r&bELXu+hZ9ARwMyc zGO2?h>>htM{4);V0QLyFb*uf?E2+<)>+9E7boKQwvl+wb3~{J&Nk0^iGQ`Jf`zqO3 zbd^w`p58TLo%QCAIT5-y61q?y!a<`za_%-|@ZSx7BKdJp1g_;X+Z%dLM+0UiHX67c zr|w2$4moE7LQgf!0d>#M9ffclLeeQHGdXC6TuYQr$V}QWPlGO_P}o-5qC4&S zwQGAlr_fP!0p28HjfQ}r4Wl)S?(bK)ckD<&yAyf*CthH>XPVmPV}=VB!XxfmodGr^ zjd+irJmFC$Hfm6XFl|64{t3EIcBTT8&(xYB;yZ)xNg81EGOUD@Nf#6`|1@SnJ@Mq*y z1jq)2MI|W(4>0r^$sn}_Qdf2;zq06uqIy4BvFlV$lJ-jPSNjPxzXF}*B6cMVKJ0AQRq14l$`=H*>$u$2=q8B3NZa`<8 z^KcZRi|6s5moGOfqw)}e85?c<_4dFEhzYs-Ma~nK0_bvV+I{oS7d~1f6NllAn>Xtb z9~Rvi&@?o_?`k9Hfm?2=KiBC+K7+81)~*4JNU#xWKtcESnHhdrS&D!zjo5lH1B^%j z<#0xV1p~KILpp~@S0+vbAVMozx3?=3d%02odpxoY99Hj(wL4Wn-(yk^g2DF1nhy#N zCiJ-(mYgf>G~?(jC)c+IU+x^WrlO%^K5#{#bclP{x+Lsk&fi3=7d6*z`gT>fN&fp?w!V499j z;xH+D=mruR=-5Qx>OsVVz4QDsh$}cu0n*~jV&?6K_4PxCa)#x|JQJJRP)iO+6E>m4 z=hy3$H9$C_%uFI~7pTP|BaPEJen=+qSYz1e5pdx?!jFAei}h&Kk3!>C0!)~sJ_F&z zgsxDxp{&FBptIwLZxNyMWMiPtohg-{--?vC_hB9AII?-k={8Ui%j&y6t%Tn~2cf+# z#pEz4G)d1P(X?3%E**g0vx~84L@&l`VIF52SkWRM*_Wwf=|*Lap5FUavH>(3%!59&UB-RW$IMA`I1x! z3kx+WXE^^fo;n0xSxlfnk*EViYJz}}Sp{rO?~iIm{RH2F4rwpHs%`Gh457+QWHspZQ}%hD=Y)$D{#|uA zA1L}#QMq$&SV81`8rTTx#Y)k03uup8z6PDry(gb>(n9Xti-XIF5W%jUHzmjW6O;SN zVE~eC?oYNJ^dV;&k>hUc=Pp-(oWLX6*>=6Y4JH_gXaMIL*!p*ceh3?rjz+s$t~0L> zn1*o#2x5|(fl>h(nU|=c#PkskeG7ol06JIvUBOeI-s5)m319aa=*o5e24#i}9I+pQ z`gcXE4H`zC;3${9`D;ZCa^qkE2+5pUtDmn+)T~5w$)g$2cMbdAN9cL)hx@AmtAi{x zvNVY$1Ivx1CbGqdx|8NOpo6Qut?z0Z4IMN@Mp^6#gocZ4ppCdmp-9h{BKD)9{k9P+ z=-u0pj1iv^jH7S@js>d<*fLn1khi)`Z|(!$Wb4#4;&!UE)k>2DN-NNDh>Vd#G{jp zq~t-edm!zY(CN@iVio~vCR@jl;^>Vd#38Kn$XS23LoMouW9<$% zF@L}@5K6`xnemNPh6U!z_3O)DC?_TC^ru@Rkw9k}3+AICCilZHnLx>T!Rh(Uh`?Ng zOaOV!GJU@)@1}ilNs1w)bpo9QqyRR4_&PNuNsMfrNaAR)DnY98hv#Jzpv-O@Gk{%u zo_()PA&*4o0&}_-nH`hx7Awg-gV_SmiL5xbObiGo#9}sYs#ScbV8OFUl+grIuo8sv z)rN+Kor%f$$StCDjZaa7`kv?x4+1Ps59|8NuDwasdI|A0Exm9|EUV z(|W$R`JyP>L@o|dPG2p0`qyX`Zw%eyO^HF*@5Gn-80pV+RcG3onBdm3xT$BZ)y1E`0&REE_^58CT%1^FczV8?bw`#BewI z9ozL|pUrpWUT6Z6QAcZ~38*6)|Ayt6&%F>SCGZ&(x2CxWK1zU;b`^pC{=0GhTVYkD z@nd{5?m-MPqi)a*cl}nlGvqswb0h=UrHsc1n;I{mh*3vlc&CWhwBJZb!EA9aZq=k9 z^c@$?dD@~1m}_5&z30Nk=FIA^V`Jh5m}vd)Bdsqd$cO>YNWJJ9hZ)|Z1h~(N6#Ha` z(GW27O=?vmU%#6#b_uI}_ggVigy{xbvMI!`-y$Sb5r-vhi)gzUguosgv?fW`88kvA zBo=?1AyOhXb^9=<*w1S@->$l992Ga`h7)IcBm96GO5)TauXMikBMSu}P8>%(4cx0m zXMSffi{Wnc5L&xqE0v%f#UI5~%@Gw9JN5e49mf`6=C}zJ!2|?)iQ&SG?sguYVr?L) z>4{-LJEz&;OL!0^I2Ka?=y5-tp!}7N9Ql0&2`>BT`B`}oW3(@ARGy>$*hgf|qP*T6 zz$t5P*_!)7l(Fc@kt3q$R=EkWHS4Lt=ixVv;lxO1S-xUe(yIBwPe1?6Mou8`OZYQ* zrRyB^-o4&?cY=e@adUIC!rZ(I$=x4E8E)F>SNtA+i^MlRFWr0-jUva^7Xlmrh`{PV z&NaYuNL+Zgg`5D0X4-cIwgYdRBvJ#yXBz4-x%_n2NUxz%w0WJcctDZ@cONY5w+jji zNMV3kO~e-glrr8O-!X3i}5yg#KRLAoftKKr1_paEgy8_^7goYOPhRgs0)U3z_s7og z#k6K#&rgb3MEC~GGhuLmO_U!>TI*oS{SuYd%=CmqmXASJya1CoH40IkWHi7#4JcL< zC~?gIBMA(fcq?ADcjJmYX3zM{tFLBIrMTtcK%;;x7}#798F6@wqi(RD08?E7sfw^X z9NiZj`)U+nNrXfB9WkB|*&WE@vDc7r!92E`I>KV*#8|C)`WwI|;u(R!rGIJ{?N*yb z6{)w$2{J@PBU6v#Z@K`X@(6Cx#vx_<6IglQ41|CPvcRe!&1fs4Zv243fUR)hd)(H{ z>*SD7^zISNg%)4-PDA&R>#go%#|Pi199)>6Dj-d8s5F$}dkX;e>3Vg;R%)gv-_A7z znGXSH08}BIe*OriOmIh|frs?{5V{FdMvj%7=&LOyg=pwt8$=#r-1h+LBn9NJM9$b z<{#q3Q{vkpr&(YVa5Fh=#iLyoNai?H4YIBlERat%j^!*uzcniuFI$il*v{MKBZqWd988L|5tIdGaeCt0vL!JvEO|M5GHlp;IA2(` zB#@dA^GldvgmA%!6+8NBwo!=}8|EeuaAbLTz|Gof+tFIAg^esyJX z5*tA=cZ;>g0t}MF#&fqJndmqcZ)^@YM9NHp0~bA8gw263kz(RX}A4Lp<|94fR#6oqdWQr&c)c^ zBU~BWFZCcf32TS=g0ki+Hy`ZH=+V%9qI9zkNBQ2|B(4NRx5dko)GMAni zWi(MvEv_7vyuT!wzmM9YK4ZnGz$bYNc`g?*(PjQ}vVK-gCMeLG=-J32ROx?^IR3N# z`d!0@Z*(4GWt*Vhd;3739$JYvHB!7re7HYBMTfGOGF9e?%TKkc1dFSl{^1L zAESRU?qclM=w^7J8&NrEqg>GqxnhCo{4Yl&^zX;rxMXJ2^&5s}*Z(sYj3gBXz{Mk6 ztbQeeq_^?nL7Q-u2U!S05JSfj>C%Y&&gK&dz(|=;DufqFzYNO?-yFoQG372Tr?t!D# zmz*1|SxUjFX2=oMGM&V8HZ@gX&YO1j(;XKr0*qyQB2I z_YXf3@@n9|X}GOFaM9C36P%oeb6VqHU3vEQ?b`ujX>Mm*Jk6YGJ2-RHcUstp>?WXY zG|rqkLlavYctt*$oPk8nmHMi{B>*#UwmF76lXG!gihr*+uLm|_A5ibY*(_IyGhSgz z)@wc&mNjSryr#MrURPG?p!xv;YhNJ&qlUiUm4!cv<)U_zPb4~81^D>NY%Rb_;MDDV z7J}fYtMU;F&~IZe_RXZ=zfUz;IaNqXOSmEdSic4qf8{hiXFHm?s)n;6%wMi<92WK+Zn{->uyndgWCD zs`q|?M-^4oDrYxz6cdIFj_SVbfyGv%*P@IFSi?T-Xu)XLTO8SD2HXrf2yOCBrJ4T} zWyI;+iIs#xX|XDx&5(n|32TodL+_}{sRI_HwYg|OdI!4VCl-4cGk?IUc!IOYn}bYn z`oUgi1LpJKS+T=!6H_7Fs=bi@aOQO00cK1)Q&=&AcD*77sJ$D9bdwgTT2ouHO)dW} l414h}xq<#$PO$neFXPL4NMJ<7AK%KLta#!OP2tRy{{gVo$$ literal 0 HcmV?d00001 diff --git a/analysis_output/run_20260309_102648/charts/outlier_pie_chart.png b/analysis_output/run_20260309_102648/charts/outlier_pie_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..27fbb801fd1fc86fddd3c61f89bdab7251e23f73 GIT binary patch literal 39166 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 literal 0 HcmV?d00001 diff --git a/run_analysis_en.py b/run_analysis_en.py index 98213a5..0642ffd 100644 --- a/run_analysis_en.py +++ b/run_analysis_en.py @@ -23,7 +23,7 @@ from src.engines.ai_data_understanding import ai_understand_data_with_dal from src.engines.requirement_understanding import understand_requirement from src.engines.analysis_planning import plan_analysis from src.engines.task_execution import execute_task -from src.engines.report_generation import generate_report +from src.engines.report_generation import generate_report, _convert_chart_paths_in_report from src.tools.tool_manager import ToolManager from src.tools.base import _global_registry from src.models import DataProfile, AnalysisResult @@ -156,7 +156,8 @@ def run_analysis( else: report = generate_report(results, requirement, profile, output_path=run_dir) - # Save report + # Save report — convert chart paths to relative (./charts/xxx.png) + report = _convert_chart_paths_in_report(report, run_dir) with open(report_path, 'w', encoding='utf-8') as f: f.write(report) @@ -262,7 +263,8 @@ def _generate_template_report( def _collect_chart_paths(results: List[AnalysisResult], run_dir: str = "") -> str: - """Collect all chart paths from task results for embedding in reports.""" + """Collect all chart paths from task results for embedding in reports. + Returns paths relative to run_dir (e.g. ./charts/bar_chart.png).""" paths = [] for r in results: if not r.success: @@ -280,7 +282,10 @@ def _collect_chart_paths(results: List[AnalysisResult], run_dir: str = "") -> st paths.append(cp) if not paths: return "(无图表)" - return "\n".join(f"- {p}" for p in paths) + # Convert to relative paths + from src.engines.report_generation import _to_relative_chart_path + rel_paths = [_to_relative_chart_path(p, run_dir) for p in paths] + return "\n".join(f"- {p}" for p in rel_paths) if __name__ == "__main__": diff --git a/src/engines/__pycache__/report_generation.cpython-311.pyc b/src/engines/__pycache__/report_generation.cpython-311.pyc index f85e3fea84bd7b1c568cb9a9b10ce93453b5941c..42702422178d3b1507b0ec6d428575075e6a2bf7 100644 GIT binary patch delta 8572 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 delta 5138 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 diff --git a/src/engines/__pycache__/task_execution.cpython-311.pyc b/src/engines/__pycache__/task_execution.cpython-311.pyc index 4606476768d5a8d1da15c2ca46736097e1715536..ec02d87a9ab4a7b118d375ef1d7a98829c804185 100644 GIT binary patch delta 617 zcmZ8c&ubGw6yDcu+UCc`G=V5W!?V`XV%_PP=1vaXY*0%$CMW zr56u^t{B0yPy`Qx%+dcqF9D-Oyc9292L!>JyKNH0IlOt__r3RhGoPQq*XNLbV;C7N zK2`Ib^KzA44ZQC#%VBjsgT&p2?U?UkjK-w5zu&OZJh*b2f|E`@g4df<2tNI?O+_* zUA1F_P2!tavndAD_X2^8Qj6nZ64K3eYFX66ACHjQo;p#j2>pn-HNZXW4Xb|YL_RK z7Iz1wQ!KZOlS=R5eaNX)52z7sprq1$nA1+0tPsC=`SHS4fN@#4 zSRI6AdHvF3{q8)(?~O|*Q&xI>?`MxhxpsC;r4nUG%NL`Gh`+iVZ8y!faY79z^oUkE a8u8||N+&3z4W(5!=@O%ViZ9KjJ@^Ym*~l;e delta 325 zcmcaMk@0drBj0jfUM>b8VA5EZ`PgtHA2Tnb%Vr_oN&)7?4~&!hWN%A`XQbvSROXi| zWF(fQDx~J+m!@YZq$HLkZf=z?V73wGVVRI}MNI7j1CRwKZU~885mNiW4C6mw str: +def _to_relative_chart_path(chart_path: str, report_dir: str = "") -> str: + """ + 将图表绝对路径转换为相对于报告文件的路径。 + + 例如: + chart_path = "analysis_output/run_xxx/charts/bar.png" + report_dir = "analysis_output/run_xxx" + → "./charts/bar.png" + + 如果无法计算相对路径,则只保留 ./charts/filename.png + """ + if not chart_path: + return chart_path + + # 统一为正斜杠 + chart_path = chart_path.replace('\\', '/') + + if report_dir: + report_dir = report_dir.replace('\\', '/') + try: + rel = os.path.relpath(chart_path, report_dir).replace('\\', '/') + return './' + rel if not rel.startswith('.') else rel + except ValueError: + pass + + # Fallback: 提取 charts/filename 部分 + parts = chart_path.replace('\\', '/').split('/') + if 'charts' in parts: + idx = parts.index('charts') + return './' + '/'.join(parts[idx:]) + + # 最后兜底:直接用文件名 + return './charts/' + os.path.basename(chart_path) + + +def _convert_chart_paths_in_report(report: str, report_dir: str = "") -> str: + """ + 将报告中所有 ![xxx](绝对路径) 的图表路径转换为相对路径。 + 同时统一反斜杠为正斜杠。 + """ + def replace_img(match): + alt = match.group(1) + path = match.group(2) + rel_path = _to_relative_chart_path(path, report_dir) + return f'![{alt}]({rel_path})' + + # 匹配 ![任意文字](路径) + return re.sub(r'!\[([^\]]*)\]\(([^)]+)\)', replace_img, report) + + def generate_report( results: List[AnalysisResult], requirement: RequirementSpec, @@ -370,6 +422,10 @@ def generate_report( with open(output_path, 'w', encoding='utf-8') as f: f.write(report) + # 将图表路径转换为相对于报告所在目录的路径 + report_dir = output_path if output_path and os.path.isdir(output_path) else "" + report = _convert_chart_paths_in_report(report, report_dir) + return report @@ -394,11 +450,11 @@ def _generate_report_with_ai( # 收集所有图表路径 for viz in (r.visualizations or []): if viz: - all_chart_paths.append(viz) + all_chart_paths.append(_to_relative_chart_path(viz)) if isinstance(r.data, dict): for key, val in r.data.items(): if isinstance(val, dict) and val.get('chart_path'): - all_chart_paths.append(val['chart_path']) + all_chart_paths.append(_to_relative_chart_path(val['chart_path'])) data_section = "\n\n".join(data_summaries) if data_summaries else "无详细数据" diff --git a/src/tools/__pycache__/viz_tools.cpython-311.pyc b/src/tools/__pycache__/viz_tools.cpython-311.pyc index e575eac2e08138415d573391c0a86e54e59df9ed..f4d29ea58c3e8e0cc1314da2ca76cf237dc171cc 100644 GIT binary patch delta 1997 zcma)+Yitx%6vy}O>@52%-O?7jOl@}y+U3z=ORP)iW2-<5lv=hFp{;egGqyu_cQ$vn z51LgPMPrCD>cQBkiEE;?LZgBC;3FoIm_!!&S#Hmp|i!l(U*I$hc;fz`M>>e4$h{Qw(#? zRov21z2g4PBXI)*qhb>SF-@8Kmy;9jsIe6S*-jlIQ z1+c{(AOVQGmysa6;J&}4;wksj?x;mF|D$BoGREz;jFQlDIOUeSogrd4)P7B-BeDdm zJ$oE=?2PXd8iAKQmHJ1X*9fVHw!BT`ML3jqa>K`uOm52wkvSo9qH<2ydO>JEE41f? zjya*@g3x|<#qHl)!Q z`t1k_AtRnd3?LN5UWSl|`p~Xs;OP(}yi;8CK%5zdO-suun!xUQM3O=CFqGf$(E{vJ z_3ujA9jElE@-ZUd5vYdIEIC>9d`z0z;{o`gun%6WN?ZzlniS9wX zf_My(VKD45HOU4W_NZ)*zOJERjU^0QR8H3#JQb4zGSwkmwJvI^dbjEoE~saUM;GqK zycY9Dy5U6CvV4^E1~ET`U#qG}68zOcqU!b4cFvY!5zyf)FQpV?OTrrFR zsM&UUCk?aMorQBX|B|eJrdHxem%gs9Zc&+;8K!h!V~DxOGic=yvv9DX%Zo7~j=qVW zx8V1N1LPpk#(K9Ias<6$__R^kk2z`B#No7h`9JoBZ1h|7*hMWR$I^yvB%vgc;+R>4 z?3R^*!F0%K)}mo$wRs8S`Tn>V8=}XV&8GMnUDgrN;A3iBr8I(W>wNxy!|eI=!E9PT zU;HiTyrrfW4a#CVA*OE2BeS?^4lXrSke#na%C_TK4SQORD_Z(mrN`K+3zcrTTO!fE z=*CEM`;P4frzJJ|i#bL~XoKpg;nL)E-?fte1QL;&{x5Jtn1qJIJVL)n=UH3a{hd zCJ}Ei-1It}hsB$R)*fVTcHQQRSW+wxd>D?YNv|?!90PlPu01JmWOHA|2zK7`ikw6r zqJ^+Qf5Ne#A2zl86hK#~l#a8XVNZ!kNz~@+lur&P*pvGkY;9djdLYxf%YFst_yaDs fmWL+L%p%N*Z(i&l$A*L|4aemM>eYi=oYwyVt+VzR delta 1952 zcma)+U2GIp6vumKcc9$a|?et??v@Ed{7lg*pcBzE6d@N$i_s2Tj9lF!*?yPsF z2!d1+FcN(r9z;}PeNbza7;zF}f>C24A2H$l|dIz1{JRLptSz%T3*oEB?i`@c?;S zf@<%bi+&TpsVzN=X3y8RF%UycMu+^3c@vhZm+6< zN>44B3vE?%VZEoq6--v1u7W|2NvdJDCj>V=K1fwpzGQL+Il6$O6uZh+ z$nuJ42?ulb8%CO%_Mx&L+}^{O4kM0$s#MC4V%Q4LE0Nwd4BHVM2>d15$0C;sD|tRl=ql87Ayy;SAl7m)XIjr{bUnCg8bxRqIGA&Q>PaT=we-Z0N&7J`BNB)tLPP9Eq!2ns*hd2xw{WbXgBU)9 zXhO_Kh$R@}5p$ZBmZND*E=OcIOdm)69S1GLTUq~r;diGsgGDXJx*E@(_1 zKO2HCLm|jDM9454Dl3;qPN*5D>&1WuLb?Gy8QB{By2ibmVt^tWrx7%D_%?_ea# zdl#bxi1!eWAR>sx9I;_shO0-;{&w!fxFi(QXg4=A)*M}nK2E#wTG)z?_WiF@j-0NA zUGxc*Za_TA!8{4o(gqBwYbG57)?C+j%SE~kRp=kxia3VYjM&e?P$}6HniA zmr02XbM|W1V&+9^>z7}k~y>4R3#A;!I%wrk3_#QPqteMPh zSSgLh&EX71%kMDzqoP+@nn?y0wlt8ey`e>R$Ocy=B#1s(TSK2l^(@4_KEuh#0-uHV z=5WMl!Rb*NxW;yZY&eUl$GVF!H! zGj9UvI82Vh3mt76`orJ1N7AteQD3VKL{PjGjfRd&Oqu zYpxHZtgs~ZER*;i{t5N2{U1durH=~Txcfjt;Y&O zq6?FE?fv4Erdk;_cTZP|AwctRJ=)lg?Zo`1mgdFAlh(c*w@J$8n4BHX^lP**FJ#L| z>!vj`EE2q+nPCANR#a3?<11u6W2TH}n8(zt_{@;_6b`M3^nZn=VRNz)@iYA@EzFkt z?X}Xod+oM;!nr)m>8z`|H8_~0XBg2L8KmOV8Hjb(@}|mko^|laJa5&n$_Xs#HN@*2 z{}~&T(AYJ!=qOL~^%ft(9mX3WfO70f`VWWc;NWvt_QZ);k)5TYpPvC11?^#5)!?B*t@^yUfPxzy!-Yce*XyEe@TwOza_R`gE F>0g6w^YQ=y diff --git a/src/tools/query_tools.py b/src/tools/query_tools.py deleted file mode 100644 index bc2d303..0000000 --- a/src/tools/query_tools.py +++ /dev/null @@ -1,301 +0,0 @@ -"""数据查询工具。""" - -import pandas as pd -import numpy as np -from typing import Dict, Any - -from src.tools.base import AnalysisTool -from src.models import DataProfile - - -class GetColumnDistributionTool(AnalysisTool): - """获取列的分布统计工具。""" - - @property - def name(self) -> str: - return "get_column_distribution" - - @property - def description(self) -> str: - return "获取指定列的分布统计信息,包括值计数、百分比等。适用于分类和数值列。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "column": { - "type": "string", - "description": "要分析的列名" - }, - "top_n": { - "type": "integer", - "description": "返回前N个最常见的值", - "default": 10 - } - }, - "required": ["column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行列分布分析。""" - column = kwargs.get('column') - top_n = kwargs.get('top_n', 10) - - if column not in data.columns: - return {'error': f'列 {column} 不存在'} - - col_data = data[column] - value_counts = col_data.value_counts().head(top_n) - total = len(col_data.dropna()) - - distribution = [] - for value, count in value_counts.items(): - distribution.append({ - 'value': str(value), - 'count': int(count), - 'percentage': float(count / total * 100) if total > 0 else 0.0 - }) - - return { - 'column': column, - 'total_count': int(total), - 'unique_count': int(col_data.nunique()), - 'missing_count': int(col_data.isna().sum()), - 'distribution': distribution - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于所有数据。""" - return True - - -class GetValueCountsTool(AnalysisTool): - """获取值计数工具。""" - - @property - def name(self) -> str: - return "get_value_counts" - - @property - def description(self) -> str: - return "获取指定列的值计数,返回每个唯一值的出现次数。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "column": { - "type": "string", - "description": "要分析的列名" - }, - "normalize": { - "type": "boolean", - "description": "是否返回百分比而不是计数", - "default": False - } - }, - "required": ["column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行值计数。""" - column = kwargs.get('column') - normalize = kwargs.get('normalize', False) - - if column not in data.columns: - return {'error': f'列 {column} 不存在'} - - value_counts = data[column].value_counts(normalize=normalize) - - result = {} - for value, count in value_counts.items(): - result[str(value)] = float(count) if normalize else int(count) - - return { - 'column': column, - 'value_counts': result, - 'normalized': normalize - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于所有数据。""" - return True - - -class GetTimeSeriesTool(AnalysisTool): - """获取时间序列数据工具。""" - - @property - def name(self) -> str: - return "get_time_series" - - @property - def description(self) -> str: - return "获取时间序列数据,按时间聚合指定指标。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "time_column": { - "type": "string", - "description": "时间列名" - }, - "value_column": { - "type": "string", - "description": "要聚合的值列名" - }, - "aggregation": { - "type": "string", - "description": "聚合方式:count, sum, mean, min, max", - "default": "count" - }, - "frequency": { - "type": "string", - "description": "时间频率:D(天), W(周), M(月), Y(年)", - "default": "D" - } - }, - "required": ["time_column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行时间序列分析。""" - time_column = kwargs.get('time_column') - value_column = kwargs.get('value_column') - aggregation = kwargs.get('aggregation', 'count') - frequency = kwargs.get('frequency', 'D') - - if time_column not in data.columns: - return {'error': f'时间列 {time_column} 不存在'} - - # 转换为日期时间类型 - try: - time_data = pd.to_datetime(data[time_column]) - except Exception as e: - return {'error': f'无法将 {time_column} 转换为日期时间: {str(e)}'} - - # 创建临时 DataFrame - temp_df = pd.DataFrame({'time': time_data}) - - if value_column: - if value_column not in data.columns: - return {'error': f'值列 {value_column} 不存在'} - temp_df['value'] = data[value_column] - - # 设置时间索引 - temp_df.set_index('time', inplace=True) - - # 按频率重采样 - if value_column: - if aggregation == 'count': - result = temp_df.resample(frequency).count() - elif aggregation == 'sum': - result = temp_df.resample(frequency).sum() - elif aggregation == 'mean': - result = temp_df.resample(frequency).mean() - elif aggregation == 'min': - result = temp_df.resample(frequency).min() - elif aggregation == 'max': - result = temp_df.resample(frequency).max() - else: - return {'error': f'不支持的聚合方式: {aggregation}'} - else: - result = temp_df.resample(frequency).size().to_frame('count') - - # 转换为字典 - time_series = [] - for timestamp, row in result.iterrows(): - time_series.append({ - 'time': timestamp.strftime('%Y-%m-%d'), - 'value': float(row.iloc[0]) if not pd.isna(row.iloc[0]) else 0.0 - }) - - # 限制返回的数据点数量,最多100个(隐私保护要求) - if len(time_series) > 100: - # 均匀采样以保持趋势 - step = len(time_series) / 100 - sampled_indices = [int(i * step) for i in range(100)] - time_series = [time_series[i] for i in sampled_indices] - - return { - 'time_column': time_column, - 'value_column': value_column, - 'aggregation': aggregation, - 'frequency': frequency, - 'time_series': time_series, - 'total_points': len(result), # 记录原始数据点数量 - 'returned_points': len(time_series) # 记录返回的数据点数量 - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含日期时间列的数据。""" - return any(col.dtype == 'datetime' for col in data_profile.columns) - - -class GetCorrelationTool(AnalysisTool): - """获取相关性分析工具。""" - - @property - def name(self) -> str: - return "get_correlation" - - @property - def description(self) -> str: - return "计算数值列之间的相关系数矩阵。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "columns": { - "type": "array", - "items": {"type": "string"}, - "description": "要分析的列名列表,如果为空则分析所有数值列" - }, - "method": { - "type": "string", - "description": "相关系数方法:pearson, spearman, kendall", - "default": "pearson" - } - } - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行相关性分析。""" - columns = kwargs.get('columns', []) - method = kwargs.get('method', 'pearson') - - # 如果没有指定列,使用所有数值列 - if not columns: - numeric_cols = data.select_dtypes(include=[np.number]).columns.tolist() - else: - numeric_cols = [col for col in columns if col in data.columns] - - if len(numeric_cols) < 2: - return {'error': '至少需要两个数值列来计算相关性'} - - # 计算相关系数矩阵 - corr_matrix = data[numeric_cols].corr(method=method) - - # 转换为字典格式 - correlation = {} - for col1 in corr_matrix.columns: - correlation[col1] = {} - for col2 in corr_matrix.columns: - correlation[col1][col2] = float(corr_matrix.loc[col1, col2]) - - return { - 'columns': numeric_cols, - 'method': method, - 'correlation_matrix': correlation - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含至少两个数值列的数据。""" - numeric_cols = [col for col in data_profile.columns if col.dtype == 'numeric'] - return len(numeric_cols) >= 2 diff --git a/src/tools/stats_tools.py b/src/tools/stats_tools.py deleted file mode 100644 index a72cc71..0000000 --- a/src/tools/stats_tools.py +++ /dev/null @@ -1,325 +0,0 @@ -"""统计分析工具。""" - -import pandas as pd -import numpy as np -from typing import Dict, Any -from scipy import stats - -from src.tools.base import AnalysisTool -from src.models import DataProfile - - -class CalculateStatisticsTool(AnalysisTool): - """计算描述性统计工具。""" - - @property - def name(self) -> str: - return "calculate_statistics" - - @property - def description(self) -> str: - return "计算指定列的描述性统计信息,包括均值、中位数、标准差、最小值、最大值等。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "column": { - "type": "string", - "description": "要分析的列名" - } - }, - "required": ["column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行统计计算。""" - column = kwargs.get('column') - - if column not in data.columns: - return {'error': f'列 {column} 不存在'} - - col_data = data[column].dropna() - - if not pd.api.types.is_numeric_dtype(col_data): - return {'error': f'列 {column} 不是数值类型'} - - statistics = { - 'column': column, - 'count': int(len(col_data)), - 'mean': float(col_data.mean()), - 'median': float(col_data.median()), - 'std': float(col_data.std()), - 'min': float(col_data.min()), - 'max': float(col_data.max()), - 'q25': float(col_data.quantile(0.25)), - 'q75': float(col_data.quantile(0.75)), - 'skewness': float(col_data.skew()), - 'kurtosis': float(col_data.kurtosis()) - } - - return statistics - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含数值列的数据。""" - return any(col.dtype == 'numeric' for col in data_profile.columns) - - -class PerformGroupbyTool(AnalysisTool): - """执行分组聚合工具。""" - - @property - def name(self) -> str: - return "perform_groupby" - - @property - def description(self) -> str: - return "按指定列分组,对另一列进行聚合计算(如求和、平均、计数等)。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "group_by": { - "type": "string", - "description": "分组依据的列名" - }, - "value_column": { - "type": "string", - "description": "要聚合的值列名,如果为空则计数" - }, - "aggregation": { - "type": "string", - "description": "聚合方式:count, sum, mean, min, max, std", - "default": "count" - } - }, - "required": ["group_by"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行分组聚合。""" - group_by = kwargs.get('group_by') - value_column = kwargs.get('value_column') - aggregation = kwargs.get('aggregation', 'count') - - if group_by not in data.columns: - return {'error': f'分组列 {group_by} 不存在'} - - if value_column and value_column not in data.columns: - return {'error': f'值列 {value_column} 不存在'} - - # 执行分组聚合 - if value_column: - grouped = data.groupby(group_by, observed=True)[value_column] - else: - grouped = data.groupby(group_by, observed=True).size() - aggregation = 'count' - - if aggregation == 'count': - if value_column: - result = grouped.count() - else: - result = grouped - elif aggregation == 'sum': - result = grouped.sum() - elif aggregation == 'mean': - result = grouped.mean() - elif aggregation == 'min': - result = grouped.min() - elif aggregation == 'max': - result = grouped.max() - elif aggregation == 'std': - result = grouped.std() - else: - return {'error': f'不支持的聚合方式: {aggregation}'} - - # 转换为字典 - groups = [] - for group_value, agg_value in result.items(): - groups.append({ - 'group': str(group_value), - 'value': float(agg_value) if not pd.isna(agg_value) else 0.0 - }) - - # 限制返回的分组数量,最多100个(隐私保护要求) - total_groups = len(groups) - if len(groups) > 100: - # 按值排序并取前100个 - groups = sorted(groups, key=lambda x: x['value'], reverse=True)[:100] - - return { - 'group_by': group_by, - 'value_column': value_column, - 'aggregation': aggregation, - 'groups': groups, - 'total_groups': total_groups, # 记录原始分组数量 - 'returned_groups': len(groups) # 记录返回的分组数量 - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于所有数据。""" - return True - - -class DetectOutliersTool(AnalysisTool): - """检测异常值工具。""" - - @property - def name(self) -> str: - return "detect_outliers" - - @property - def description(self) -> str: - return "使用IQR方法或Z-score方法检测数值列中的异常值。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "column": { - "type": "string", - "description": "要检测的列名" - }, - "method": { - "type": "string", - "description": "检测方法:iqr 或 zscore", - "default": "iqr" - }, - "threshold": { - "type": "number", - "description": "阈值(IQR倍数或Z-score标准差倍数)", - "default": 1.5 - } - }, - "required": ["column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行异常值检测。""" - column = kwargs.get('column') - method = kwargs.get('method', 'iqr') - threshold = kwargs.get('threshold', 1.5) - - if column not in data.columns: - return {'error': f'列 {column} 不存在'} - - col_data = data[column].dropna() - - if not pd.api.types.is_numeric_dtype(col_data): - return {'error': f'列 {column} 不是数值类型'} - - if method == 'iqr': - # IQR 方法 - q1 = col_data.quantile(0.25) - q3 = col_data.quantile(0.75) - iqr = q3 - q1 - lower_bound = q1 - threshold * iqr - upper_bound = q3 + threshold * iqr - outliers = col_data[(col_data < lower_bound) | (col_data > upper_bound)] - elif method == 'zscore': - # Z-score 方法 - z_scores = np.abs(stats.zscore(col_data)) - outliers = col_data[z_scores > threshold] - else: - return {'error': f'不支持的检测方法: {method}'} - - return { - 'column': column, - 'method': method, - 'threshold': threshold, - 'outlier_count': int(len(outliers)), - 'outlier_percentage': float(len(outliers) / len(col_data) * 100), - 'outlier_values': outliers.head(20).tolist(), # 最多返回20个异常值 - 'bounds': { - 'lower': float(lower_bound) if method == 'iqr' else None, - 'upper': float(upper_bound) if method == 'iqr' else None - } if method == 'iqr' else None - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含数值列的数据。""" - return any(col.dtype == 'numeric' for col in data_profile.columns) - - -class CalculateTrendTool(AnalysisTool): - """计算趋势工具。""" - - @property - def name(self) -> str: - return "calculate_trend" - - @property - def description(self) -> str: - return "计算时间序列数据的趋势,包括线性回归斜率、增长率等。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "time_column": { - "type": "string", - "description": "时间列名" - }, - "value_column": { - "type": "string", - "description": "值列名" - } - }, - "required": ["time_column", "value_column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行趋势计算。""" - time_column = kwargs.get('time_column') - value_column = kwargs.get('value_column') - - if time_column not in data.columns: - return {'error': f'时间列 {time_column} 不存在'} - - if value_column not in data.columns: - return {'error': f'值列 {value_column} 不存在'} - - # 转换时间列 - try: - time_data = pd.to_datetime(data[time_column]) - except Exception as e: - return {'error': f'无法将 {time_column} 转换为日期时间: {str(e)}'} - - # 创建数值型时间索引(天数) - time_numeric = (time_data - time_data.min()).dt.days.values - value_data = data[value_column].dropna().values - - if len(value_data) < 2: - return {'error': '数据点太少,无法计算趋势'} - - # 线性回归 - slope, intercept, r_value, p_value, std_err = stats.linregress( - time_numeric[:len(value_data)], value_data - ) - - # 计算增长率 - first_value = value_data[0] - last_value = value_data[-1] - growth_rate = ((last_value - first_value) / first_value * 100) if first_value != 0 else 0 - - return { - 'time_column': time_column, - 'value_column': value_column, - 'slope': float(slope), - 'intercept': float(intercept), - 'r_squared': float(r_value ** 2), - 'p_value': float(p_value), - 'growth_rate': float(growth_rate), - 'trend': 'increasing' if slope > 0 else 'decreasing' if slope < 0 else 'stable' - } - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含日期时间列和数值列的数据。""" - has_datetime = any(col.dtype == 'datetime' for col in data_profile.columns) - has_numeric = any(col.dtype == 'numeric' for col in data_profile.columns) - return has_datetime and has_numeric diff --git a/src/tools/tool_manager.py b/src/tools/tool_manager.py deleted file mode 100644 index e120cae..0000000 --- a/src/tools/tool_manager.py +++ /dev/null @@ -1,52 +0,0 @@ -"""Tool manager — selects applicable tools based on data profile. - -The ToolManager filters tools by data type compatibility (e.g., time series tools -need datetime columns). The actual tool+parameter selection is fully AI-driven. -""" - -from typing import List, Dict, Any - -from src.tools.base import AnalysisTool, ToolRegistry, _global_registry -from src.models import DataProfile - - -class ToolManager: - """ - Tool manager that selects applicable tools based on data characteristics. - - This is a filter, not a decision maker. AI decides which tools to actually - call and with what parameters at runtime. - """ - - def __init__(self, registry: ToolRegistry = None): - self.registry = registry if registry else _global_registry - self._missing_tools: List[str] = [] - - def select_tools(self, data_profile: DataProfile) -> List[AnalysisTool]: - """ - Return all tools applicable to this data profile. - Each tool's is_applicable() checks if the data has the right column types. - """ - self._missing_tools = [] - return self.registry.get_applicable_tools(data_profile) - - def get_all_tools(self) -> List[AnalysisTool]: - """Return all registered tools regardless of data profile.""" - tool_names = self.registry.list_tools() - return [self.registry.get_tool(name) for name in tool_names] - - def get_missing_tools(self) -> List[str]: - return list(set(self._missing_tools)) - - def get_tool_descriptions(self, tools: List[AnalysisTool] = None) -> List[Dict[str, Any]]: - """Get tool descriptions for AI consumption.""" - if tools is None: - tools = self.get_all_tools() - return [ - { - 'name': t.name, - 'description': t.description, - 'parameters': t.parameters - } - for t in tools - ] diff --git a/src/tools/viz_tools.py b/src/tools/viz_tools.py deleted file mode 100644 index 44c544c..0000000 --- a/src/tools/viz_tools.py +++ /dev/null @@ -1,443 +0,0 @@ -"""可视化工具。""" - -import pandas as pd -import numpy as np -import matplotlib -matplotlib.use('Agg') # 使用非交互式后端 -import matplotlib.pyplot as plt -from typing import Dict, Any -import os -from pathlib import Path - -from src.tools.base import AnalysisTool -from src.models import DataProfile - -# 尝试导入 seaborn,如果不可用则使用 matplotlib -try: - import seaborn as sns - HAS_SEABORN = True -except ImportError: - HAS_SEABORN = False - - -# 设置中文字体支持 -plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans'] -plt.rcParams['axes.unicode_minus'] = False - - -class CreateBarChartTool(AnalysisTool): - """创建柱状图工具。""" - - @property - def name(self) -> str: - return "create_bar_chart" - - @property - def description(self) -> str: - return "创建柱状图,用于展示分类数据的分布或比较。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "x_column": { - "type": "string", - "description": "X轴列名(分类变量)" - }, - "y_column": { - "type": "string", - "description": "Y轴列名(数值变量),如果为空则计数" - }, - "title": { - "type": "string", - "description": "图表标题", - "default": "柱状图" - }, - "output_path": { - "type": "string", - "description": "输出文件路径", - "default": "bar_chart.png" - }, - "top_n": { - "type": "integer", - "description": "只显示前N个类别", - "default": 20 - } - }, - "required": ["x_column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行柱状图生成。""" - x_column = kwargs.get('x_column') - y_column = kwargs.get('y_column') - title = kwargs.get('title', '柱状图') - output_path = kwargs.get('output_path', 'bar_chart.png') - top_n = kwargs.get('top_n', 20) - - if x_column not in data.columns: - return {'error': f'列 {x_column} 不存在'} - - if y_column and y_column not in data.columns: - return {'error': f'列 {y_column} 不存在'} - - try: - # 准备数据 - if y_column: - # 按 x_column 分组,对 y_column 求和 - plot_data = data.groupby(x_column, observed=True)[y_column].sum().sort_values(ascending=False).head(top_n) - else: - # 计数 - plot_data = data[x_column].value_counts().head(top_n) - - # 创建图表 - fig, ax = plt.subplots(figsize=(12, 6)) - plot_data.plot(kind='bar', ax=ax) - ax.set_title(title, fontsize=14, fontweight='bold') - ax.set_xlabel(x_column, fontsize=12) - ax.set_ylabel(y_column if y_column else '计数', fontsize=12) - ax.tick_params(axis='x', rotation=45) - plt.tight_layout() - - # 确保输出目录存在 - Path(output_path).parent.mkdir(parents=True, exist_ok=True) - - # 保存图表 - plt.savefig(output_path, dpi=100, bbox_inches='tight') - plt.close(fig) - - return { - 'success': True, - 'chart_path': output_path, - 'chart_type': 'bar', - 'data_points': len(plot_data), - 'x_column': x_column, - 'y_column': y_column - } - - except Exception as e: - return {'error': f'生成柱状图失败: {str(e)}'} - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于所有数据。""" - return True - - -class CreateLineChartTool(AnalysisTool): - """创建折线图工具。""" - - @property - def name(self) -> str: - return "create_line_chart" - - @property - def description(self) -> str: - return "创建折线图,用于展示时间序列数据或趋势变化。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "x_column": { - "type": "string", - "description": "X轴列名(通常是时间)" - }, - "y_column": { - "type": "string", - "description": "Y轴列名(数值变量)" - }, - "title": { - "type": "string", - "description": "图表标题", - "default": "折线图" - }, - "output_path": { - "type": "string", - "description": "输出文件路径", - "default": "line_chart.png" - } - }, - "required": ["x_column", "y_column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行折线图生成。""" - x_column = kwargs.get('x_column') - y_column = kwargs.get('y_column') - title = kwargs.get('title', '折线图') - output_path = kwargs.get('output_path', 'line_chart.png') - - if x_column not in data.columns: - return {'error': f'列 {x_column} 不存在'} - - if y_column not in data.columns: - return {'error': f'列 {y_column} 不存在'} - - try: - # 准备数据 - plot_data = data[[x_column, y_column]].copy() - plot_data = plot_data.sort_values(x_column) - - # 如果数据点太多,采样 - if len(plot_data) > 1000: - step = len(plot_data) // 1000 - plot_data = plot_data.iloc[::step] - - # 创建图表 - fig, ax = plt.subplots(figsize=(12, 6)) - ax.plot(plot_data[x_column], plot_data[y_column], marker='o', markersize=3, linewidth=2) - ax.set_title(title, fontsize=14, fontweight='bold') - ax.set_xlabel(x_column, fontsize=12) - ax.set_ylabel(y_column, fontsize=12) - ax.grid(True, alpha=0.3) - plt.xticks(rotation=45) - plt.tight_layout() - - # 确保输出目录存在 - Path(output_path).parent.mkdir(parents=True, exist_ok=True) - - # 保存图表 - plt.savefig(output_path, dpi=100, bbox_inches='tight') - plt.close(fig) - - return { - 'success': True, - 'chart_path': output_path, - 'chart_type': 'line', - 'data_points': len(plot_data), - 'x_column': x_column, - 'y_column': y_column - } - - except Exception as e: - return {'error': f'生成折线图失败: {str(e)}'} - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含数值列的数据。""" - return any(col.dtype == 'numeric' for col in data_profile.columns) - - -class CreatePieChartTool(AnalysisTool): - """创建饼图工具。""" - - @property - def name(self) -> str: - return "create_pie_chart" - - @property - def description(self) -> str: - return "创建饼图,用于展示各部分占整体的比例。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "column": { - "type": "string", - "description": "要分析的列名" - }, - "title": { - "type": "string", - "description": "图表标题", - "default": "饼图" - }, - "output_path": { - "type": "string", - "description": "输出文件路径", - "default": "pie_chart.png" - }, - "top_n": { - "type": "integer", - "description": "只显示前N个类别,其余归为'其他'", - "default": 10 - } - }, - "required": ["column"] - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行饼图生成。""" - column = kwargs.get('column') - title = kwargs.get('title', '饼图') - output_path = kwargs.get('output_path', 'pie_chart.png') - top_n = kwargs.get('top_n', 10) - - if column not in data.columns: - return {'error': f'列 {column} 不存在'} - - try: - # 准备数据 - value_counts = data[column].value_counts() - - if len(value_counts) > top_n: - # 只保留前 N 个,其余归为"其他" - top_values = value_counts.head(top_n) - other_sum = value_counts.iloc[top_n:].sum() - plot_data = pd.concat([top_values, pd.Series({'其他': other_sum})]) - else: - plot_data = value_counts - - # 创建图表 - fig, ax = plt.subplots(figsize=(10, 8)) - colors = plt.cm.Set3(range(len(plot_data))) - wedges, texts, autotexts = ax.pie( - plot_data, - labels=plot_data.index, - autopct='%1.1f%%', - colors=colors, - startangle=90 - ) - - # 设置文本样式 - for text in texts: - text.set_fontsize(10) - for autotext in autotexts: - autotext.set_color('white') - autotext.set_fontweight('bold') - autotext.set_fontsize(9) - - ax.set_title(title, fontsize=14, fontweight='bold') - plt.tight_layout() - - # 确保输出目录存在 - Path(output_path).parent.mkdir(parents=True, exist_ok=True) - - # 保存图表 - plt.savefig(output_path, dpi=100, bbox_inches='tight') - plt.close(fig) - - return { - 'success': True, - 'chart_path': output_path, - 'chart_type': 'pie', - 'categories': len(plot_data), - 'column': column - } - - except Exception as e: - return {'error': f'生成饼图失败: {str(e)}'} - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于所有数据。""" - return True - - -class CreateHeatmapTool(AnalysisTool): - """创建热力图工具。""" - - @property - def name(self) -> str: - return "create_heatmap" - - @property - def description(self) -> str: - return "创建热力图,用于展示数值矩阵或相关性矩阵。" - - @property - def parameters(self) -> Dict[str, Any]: - return { - "type": "object", - "properties": { - "columns": { - "type": "array", - "items": {"type": "string"}, - "description": "要分析的列名列表,如果为空则使用所有数值列" - }, - "title": { - "type": "string", - "description": "图表标题", - "default": "相关性热力图" - }, - "output_path": { - "type": "string", - "description": "输出文件路径", - "default": "heatmap.png" - }, - "method": { - "type": "string", - "description": "相关系数方法:pearson, spearman, kendall", - "default": "pearson" - } - } - } - - def execute(self, data: pd.DataFrame, **kwargs) -> Dict[str, Any]: - """执行热力图生成。""" - columns = kwargs.get('columns', []) - title = kwargs.get('title', '相关性热力图') - output_path = kwargs.get('output_path', 'heatmap.png') - method = kwargs.get('method', 'pearson') - - try: - # 如果没有指定列,使用所有数值列 - if not columns: - numeric_cols = data.select_dtypes(include=[np.number]).columns.tolist() - else: - numeric_cols = [col for col in columns if col in data.columns] - - if len(numeric_cols) < 2: - return {'error': '至少需要两个数值列来创建热力图'} - - # 计算相关系数矩阵 - corr_matrix = data[numeric_cols].corr(method=method) - - # 创建图表 - fig, ax = plt.subplots(figsize=(10, 8)) - - if HAS_SEABORN: - # 使用 seaborn 创建更美观的热力图 - sns.heatmap( - corr_matrix, - annot=True, - fmt='.2f', - cmap='coolwarm', - center=0, - square=True, - linewidths=1, - cbar_kws={"shrink": 0.8}, - ax=ax - ) - else: - # 使用 matplotlib 创建基本热力图 - im = ax.imshow(corr_matrix, cmap='coolwarm', aspect='auto', vmin=-1, vmax=1) - ax.set_xticks(range(len(corr_matrix.columns))) - ax.set_yticks(range(len(corr_matrix.columns))) - ax.set_xticklabels(corr_matrix.columns, rotation=45, ha='right') - ax.set_yticklabels(corr_matrix.columns) - - # 添加数值标注 - for i in range(len(corr_matrix.columns)): - for j in range(len(corr_matrix.columns)): - text = ax.text(j, i, f'{corr_matrix.iloc[i, j]:.2f}', - ha="center", va="center", color="black", fontsize=9) - - plt.colorbar(im, ax=ax, shrink=0.8) - - ax.set_title(title, fontsize=14, fontweight='bold') - plt.tight_layout() - - # 确保输出目录存在 - Path(output_path).parent.mkdir(parents=True, exist_ok=True) - - # 保存图表 - plt.savefig(output_path, dpi=100, bbox_inches='tight') - plt.close(fig) - - return { - 'success': True, - 'chart_path': output_path, - 'chart_type': 'heatmap', - 'columns': numeric_cols, - 'method': method - } - - except Exception as e: - return {'error': f'生成热力图失败: {str(e)}'} - - def is_applicable(self, data_profile: DataProfile) -> bool: - """适用于包含至少两个数值列的数据。""" - numeric_cols = [col for col in data_profile.columns if col.dtype == 'numeric'] - return len(numeric_cols) >= 2