Files
vibe_data_ana/__pycache__/run_analysis_en.cpython-311.pyc

188 lines
14 KiB
Plaintext
Raw Normal View History

2026-03-09 10:06:21 +08:00
<EFBFBD>
5*<2A>iv$<00> <00><00>dZddlZddlZej<00>dej<00>e<06><00><00><00>ddlmZedg<01><00>ddl Z ddl
Z
ddl m Z ddl m Z mZddlmZddlmZdd lmZdd
lmZdd lmZdd lmZdd lmZddlmZddlm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(m)Z)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3m4Z4e'e(e)e*e,e-e.e/e1e2e3e4f D]Z5e%e5<65><00><00><00><00>e j6e j7<00><15><00> d0de8de e8de e8de8fd<1B>Z9de dee!de8de8fd <20>Z:e;d!kr<>ddl<Z<e<j=d"<22>#<23><00>Z>e><3E>?d$d%d&<26>'<27><00>e><3E>?d(dd)<29>'<27><00>e><3E>?d*dd+<2B>'<27><00>e><3E>?d,dd-<2D>'<27><00>e><3E>@<00><00>ZAe9eAjBeAjCeAjDeAjE<00>.<2E><00>ZFejGeFrdnd/<2F><00>dSdS)1u!
AI-Driven Data Analysis Framework
==================================
Generic pipeline: works with any CSV file.
AI decides everything at runtime based on data characteristics.
Flow: Load CSV → AI understands metadata → AI plans analysis → AI executes tasks → AI generates report
<EFBFBD>N)<01>load_env_with_fallbackz.env)<01>datetime)<02>Optional<61>List)<01>OpenAI)<01>ai_understand_data_with_dal)<01>understand_requirement)<01> plan_analysis)<01> execute_task)<01>generate_report)<01> ToolManager)<01>_global_registry)<02> DataProfile<6C>AnalysisResult)<01>
get_config)<01> register_tool)<04>GetColumnDistributionTool<6F>GetValueCountsTool<6F>GetTimeSeriesTool<6F>GetCorrelationTool)<04>CalculateStatisticsTool<6F>PerformGroupbyTool<6F>DetectOutliersTool<6F>CalculateTrendTool)<04>CreateBarChartTool<6F>CreateLineChartTool<6F>CreatePieChartTool<6F>CreateHeatmapTool)<01>level<65>analysis_output<75> data_file<6C>user_requirement<6E> template_file<6C>
output_dirc <00><>
<00>tj|d<01><02><00>t<00><00>}td<03><00>td<04><00>td<05><00>tdt j<00><00><00>d<07><00><00><00><02><00>td|<00><00><02><00>|rtd |<02><00><02><00>td<05><00>td
<EFBFBD><00>td <0B><00>t|<00><00>\}}td |j<00><00><02><00>td |j <00>d<0E><03><00>td|j
<00>d|j <00><00><04><00>td|j dd<13><00>d<14><03><00>td<15><00>t|pd||<02><17><00>}tdt|j<00><00><00><00><02><00>|jD]"}td|j<00>d|j<00>d<1B><05><00><00>#td<1C><00>t%t&<00><00>} | <09>|<05><00>}
tdt|
<EFBFBD><00><00><00><02><00>t+|||
<EFBFBD><1E><00>} tdt| j<00><00><00><00><02><00>t/| jd <20>d<01>!<21><00>D]R} td"| j<00>d#| j<00><00><04><00>| jr*td$d%<25>| j<00><00><00><00><02><00><00>Std&<26><00>g} t/| jd'<27>d<01>!<21><00>}t5|d(<28><00>D]<5D>\}} td)|<0F>d*t|<0E><00><00>d+| j<00><00><06><00>t7| |
|<06><00>}| <0A>|<10><00>|jrZtd,|jd-<2D>d.t|j<00><00><00><00><04><00>|jdd/<2F>D]}td0|dd1<64><00><00><02><00><00><1D><>td2|j <00><00><02><00><00><>tCd3<64>| D<00><00><00><00>}td4|<12>d*t| <0A><00><00>d5<64><05><00>td6<64><00>tj"<00>|d7<64><00>}|r2tj"<00>#|<02><00>rtI|| ||<04><00>}ntK| ||<05><00>}tM|d8d9<64>:<3A><00>5}|<15>'|<14><00>ddd<12><00>n #1swxYwYtd;|<13><00><02><00>td<t|<14><00><00>d=<3D><03><00>td<03><00>td><3E><00>td?t j<00><00><00>d<07><00><00><00><02><00>td@|<13><00><02><00>td<05><00>dS)Aa
Run the full AI-driven analysis pipeline.
Args:
data_file: Path to any CSV file
user_requirement: Natural language requirement (optional)
template_file: Report template path (optional)
output_dir: Output directory
T)<01>exist_okzG
======================================================================<3D>AI-Driven Data AnalysiszF======================================================================zStart: <20>%Y-%m-%d %H:%M:%SzData: z
Template: z
[1/5] AI Understanding Data...u, (AI sees only metadata — never raw rows)z Type: z Quality: z/100z Columns: z, Rows: z Summary: N<>xz...z$
[2/5] Understanding Requirements...u对数据进行全面分析)<03>
user_input<EFBFBD> data_profile<6C> template_pathz Objectives: z - z (priority: <20>)z
[3/5] AI Planning Analysis...z Available tools: )<01>available_toolsz Tasks planned: c<00><00>|jS<00>N<><01>priority<74><01>ts <20>6D:\code\iov_data_analysis_agent_old\run_analysis_en.py<70><lambda>zrun_analysis.<locals>.<lambda>ps<00><00>!<21>*<2A><00>)<02>key<65>reversez [z] z tools: z, z
[4/5] AI Executing Tasks...c<00><00>|jSr0r1r3s r5r6zrun_analysis.<locals>.<lambda>zs<00><00>Q<EFBFBD>Z<EFBFBD>r7<00>z
Task <20>/z: u ✓ Done (z.1fzs), insights: <20>z - <20>Pu ✗ Failed: c3<00>(K<00>|] }|j<00> dV<00><00>dS)r;N)<01>success)<02>.0<EFBFBD>rs r5<00> <genexpr>zrun_analysis.<locals>.<genexpr><3E>s)<00><00><00><00>5<>5<>1<EFBFBD>1<EFBFBD>9<EFBFBD>5<>Q<EFBFBD>5<>5<>5<>5<>5<>5r7z
Results: z tasks succeededz
[5/5] Generating Report...zanalysis_report.md<6D>w<>utf-8<><01>encodingz Report saved: z Report length: z charszAnalysis Complete!zEnd: zOutput: )(<28>os<6F>makedirsr<00>printr<00>now<6F>strftimer<00> inferred_type<70> quality_score<72> column_count<6E> row_count<6E>summaryr <00>len<65>
objectives<EFBFBD>namer2r r<00> select_toolsr
<00>tasks<6B>sorted<65>required_tools<6C>join<69> enumerater <00>appendr@<00>execution_time<6D>insights<74>error<6F>sum<75>path<74>exists<74>_generate_template_reportr <00>open<65>write)r!r"r#r$<00>config<69>profile<6C>dal<61> requirement<6E>obj<62> tool_manager<65>tools<6C> analysis_plan<61>task<73>results<74> sorted_tasks<6B>i<>result<6C>insight<68>
successful<EFBFBD> report_path<74>report<72>fs r5<00> run_analysisrw9s<00><00><07>K<EFBFBD>
<EFBFBD>T<EFBFBD>*<2A>*<2A>*<2A>*<2A> <17>\<5C>\<5C>F<EFBFBD> <09>/<2F><1A><1A><1A> <09>
#<23>$<24>$<24>$<24> <09>(<28>O<EFBFBD>O<EFBFBD>O<EFBFBD> <09>
B<EFBFBD>H<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD>+<2B>+<2B>,?<3F>@<40>@<40>
B<EFBFBD>
B<EFBFBD>C<>C<>C<> <09>
<1F>I<EFBFBD>
<1F>
<1F> <20> <20> <20><14>,<2C> <0A>*<2A>=<3D>*<2A>*<2A>+<2B>+<2B>+<2B> <09>(<28>O<EFBFBD>O<EFBFBD>O<EFBFBD>
<EFBFBD>
,<2C>-<2D>-<2D>-<2D> <09>
8<EFBFBD>9<>9<>9<>.<2E>y<EFBFBD>9<>9<>L<EFBFBD>G<EFBFBD>S<EFBFBD> <09>
,<2C>W<EFBFBD>*<2A>
,<2C>
,<2C>-<2D>-<2D>-<2D> <09>
3<EFBFBD><07>-<2D>
3<EFBFBD>
3<EFBFBD>
3<EFBFBD>4<>4<>4<> <09>
I<EFBFBD><07>,<2C>
I<EFBFBD>
I<EFBFBD>g<EFBFBD>6G<EFBFBD>
I<EFBFBD>
I<EFBFBD>J<>J<>J<> <09>
2<EFBFBD><07><0F><04><13><04>-<2D>
2<EFBFBD>
2<EFBFBD>
2<EFBFBD>3<>3<>3<>
<EFBFBD>
1<EFBFBD>2<>2<>2<>(<28>#<23>D<>'D<><1C>#<23><06><06><06>K<EFBFBD>

<EFBFBD>
8<EFBFBD>3<EFBFBD>{<7B>5<>6<>6<>
8<EFBFBD>
8<EFBFBD>9<>9<>9<><1A>%<25>><3E>><3E><03> <0A><<3C>s<EFBFBD>x<EFBFBD><<3C><<3C>S<EFBFBD>\<5C><<3C><<3C><<3C>=<3D>=<3D>=<3D>=<3D>
<EFBFBD>
+<2B>,<2C>,<2C>,<2C><1E>/<2F>0<>0<>L<EFBFBD> <18> %<25> %<25>g<EFBFBD> .<2E> .<2E>E<EFBFBD> <09>
,<2C><03>E<EFBFBD>
<EFBFBD>
<EFBFBD>
,<2C>
,<2C>-<2D>-<2D>-<2D>!<21>'<27>;<3B><05>N<>N<>N<>M<EFBFBD> <09>
8<EFBFBD>c<EFBFBD>-<2D>"5<>6<>6<>
8<EFBFBD>
8<EFBFBD>9<>9<>9<><16>}<7D>*<2A>0D<30>0D<30>d<EFBFBD>S<>S<>S<>F<01>F<01><04> <0A>2<>d<EFBFBD>m<EFBFBD>2<>2<>t<EFBFBD>y<EFBFBD>2<>2<>3<>3<>3<> <0F> <1E> F<01> <11>D<>D<EFBFBD>I<EFBFBD>I<EFBFBD>d<EFBFBD>.A<>$B<>$B<>D<>D<> E<> E<> E<><45>
<EFBFBD>
)<29>*<2A>*<2A>*<2A>$&<26>G<EFBFBD><19>-<2D>-<2D>3G<33>3G<33>QU<51>V<>V<>V<>L<EFBFBD><1C>\<5C>1<EFBFBD>-<2D>-<2D>
5<>
5<><07><01>4<EFBFBD> <0A>><3E>!<21>><3E>><3E>c<EFBFBD>,<2C>/<2F>/<2F>><3E>><3E>4<EFBFBD>9<EFBFBD>><3E>><3E>?<3F>?<3F>?<3F><1D>d<EFBFBD>E<EFBFBD>3<EFBFBD>/<2F>/<2F><06><0F><0E><0E>v<EFBFBD><1E><1E><1E> <11>><3E> 5<> <11>b<>6<EFBFBD>#8<>b<>b<>b<>C<EFBFBD>PV<50>P_<50>L`<60>L`<60>b<>b<> c<> c<> c<>!<21>?<3F>2<EFBFBD>A<EFBFBD>2<EFBFBD>.<2E> 1<> 1<><07><15>/<2F><17><13>"<22><13><1C>/<2F>/<2F>0<>0<>0<>0<> 1<> <12>3<>V<EFBFBD>\<5C>3<>3<> 4<> 4<> 4<> 4<><14>5<>5<><07>5<>5<>5<>5<>5<>J<EFBFBD> <09>
E<EFBFBD>*<2A>
E<EFBFBD>
E<EFBFBD>s<EFBFBD>7<EFBFBD>|<7C>|<7C>
E<EFBFBD>
E<EFBFBD>
E<EFBFBD>F<>F<>F<>
<EFBFBD>
(<28>)<29>)<29>)<29><14>'<27>,<2C>,<2C>z<EFBFBD>+?<3F>@<40>@<40>K<EFBFBD><14>@<01><12><17><1E><1E> <0A>6<>6<>@<01>*<2A>7<EFBFBD>G<EFBFBD>]<5D>F<EFBFBD>S<>S<><06><06> <20><17>+<2B>w<EFBFBD>?<3F>?<3F><06>
<0E>k<EFBFBD>3<EFBFBD><17> 1<> 1<> 1<><18>Q<EFBFBD> <09><07><07><06><0F><0F><0F><18><18><18><18><18><18><18><18><18><18><18><><EFBFBD><EFBFBD><18><18><18><18>
<EFBFBD>
*<2A>[<5B>
*<2A>
*<2A>+<2B>+<2B>+<2B> <09>
1<EFBFBD>c<EFBFBD>&<26>k<EFBFBD>k<EFBFBD>
1<EFBFBD>
1<EFBFBD>
1<EFBFBD>2<>2<>2<>
<EFBFBD>/<2F><1A><1A><1A> <09>
<1E><1F><1F><1F> <09>
@<40>(<28>,<2C>.<2E>.<2E>)<29>)<29>*=<3D>><3E>><3E>
@<40>
@<40>A<>A<>A<> <09>
"<22>[<5B>
"<22>
"<22>#<23>#<23>#<23> <09>(<28>O<EFBFBD>O<EFBFBD>O<EFBFBD> <0F>4s<00> R/<03>/R3<07>6R3rfrnr,<00>returnc<00>l<00>t|jj|jj<00><01><00>}t |dd<03><04><00>5}|<05><00><00>}ddd<05><00>n #1swxYwYi}g}|D]\} | jrStj| j dt<00><07><00>dd<08>| j d <09>|| j <|<08> | j <00><00><00>]tj|dd
<EFBFBD> <0B><00>}
t|
<EFBFBD><00>d kr |
dd <0C>d z}
d|j<00>d|j<00>d|j<00>d|j<00>d|jdd<13><00>dtj|jdd<15> <0B><00><00>d|
<EFBFBD>dt+d<18><00><00>d<19>|dd<1A>D<00><00><00><00><00>d|<06>d<1C>} t/d<1D><00>|jj<00>|jjddd <20>d!| d <20>gd"d#<23>$<24><00>} | jd%jj} d&t?j <00><00><00>!d'<27><00><00>d(|j"<00>d)|j<00>d*|j<00>d+|j<00>d,|<02>d-<2D> }|| zS).z@Use AI to fill a template with data from task execution results.)<02>api_key<65>base_urlrBrErFNF)<02> ensure_ascii<69>defaulti<74>)<02>datar]r;)r|<00>indenti<74>.z
... (truncated)u<>你是一位专业的数据分析师。请根据以下分析结果,按照模板格式生成完整的报告。
## 数据概况
- 类型: u
- 行数: u
, 列数: u
- 质量: u/100
- 摘要: i<>u
## 关键字段
r=u
## 分析结果
u
## 关键洞察
<EFBFBD>
c3<00> K<00>|] }d|<01><00>V<00><00>
dS)z- N<>)rArps r5rCz,_generate_template_report.<locals>.<genexpr><3E>s(<00><00><00><00> 2<> 2<>1<EFBFBD>h<EFBFBD>1<EFBFBD>h<EFBFBD>h<EFBFBD> 2<> 2<> 2<> 2<> 2<> 2r7<00>u
## 报告模板
```markdown
u
```
## 要求
1. 用实际数据填充模板中所有占位符
2. 根据数据中的字段,智能映射到模板分类
3. 所有数字必须来自分析结果,不要编造
4. 如果某个模板分类在数据中没有对应,标注"本期无数据"
5. 保持Markdown格式
z. AI filling template with analysis results...<2E>systemu}你是数据分析专家。根据分析结果填充报告模板所有数字必须来自真实数据。输出纯Markdown。)<02>role<6C>content<6E>userg333333<33>?i<>)<04>model<65>messages<65> temperature<72>
max_tokensrz<!--
Generated: r(z
Data: z (z rows x z cols)
Quality: z/100
Template: uI
AI never accessed raw data rows — only aggregated tool results
-->
)#r<00>llmrzr{rc<00>readr@<00>json<6F>dumpsr~<00>strr]<00> task_name<6D>extendrRrMrPrOrNrQ<00>
key_fields<EFBFBD>chrrYrJ<00>chat<61> completions<6E>creater<65><00>choices<65>messager<65>rrKrL<00> file_path)rfrnr,re<00>clientrv<00>template<74>all_data<74> all_insightsrB<00> data_json<6F>prompt<70>responseru<00>headers r5rbrb<00>s1<00><00><14>F<EFBFBD>J<EFBFBD>.<2E><16><1A>9L<39> M<> M<> M<>F<EFBFBD> <0A>m<EFBFBD>S<EFBFBD>7<EFBFBD> 3<> 3<> 3<><1C>q<EFBFBD><14>6<EFBFBD>6<EFBFBD>8<EFBFBD>8<EFBFBD><08><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><1C><><EFBFBD><EFBFBD><1C><1C><1C><1C><12>H<EFBFBD><15>L<EFBFBD> <14>,<2C>,<2C><01> <0C>9<EFBFBD> ,<2C><1C>
<EFBFBD>1<EFBFBD>6<EFBFBD><05>s<EFBFBD>K<>K<>K<>E<EFBFBD>T<EFBFBD>E<EFBFBD>R<><1D>J<EFBFBD>%<0E>%<0E>H<EFBFBD>Q<EFBFBD>[<5B> !<21> <19> <1F> <1F><01>
<EFBFBD> +<2B> +<2B> +<2B><><14>
<EFBFBD>8<EFBFBD>%<25><01>B<>B<>B<>I<EFBFBD>
<EFBFBD>9<EFBFBD>~<7E>~<7E><05><1D><1D><1D>f<EFBFBD>u<EFBFBD>f<EFBFBD>%<25>(;<3B>;<3B> <09><04> <13> <20><04><04> <13> <1C> <04><04>)0<>(<<3C> <04><04>
<13> <20> <04><04> <13>?<3F>4<EFBFBD>C<EFBFBD>4<EFBFBD> <20> <04><04><06><1A>G<EFBFBD> <1E>U<EFBFBD>1<EFBFBD>=<3D>=<3D>=<3D><04><04> <0B><04><04><05>R<EFBFBD><17><17><1C><1C> 2<> 2<> <0C>S<EFBFBD>b<EFBFBD>S<EFBFBD> 1<> 2<> 2<> 2<>2<>2<><04><04>&
<EFBFBD>'<04><04><04>F<EFBFBD><
<EFBFBD>
:<3A>;<3B>;<3B>;<3B><15>{<7B>&<26>-<2D>-<2D><14>j<EFBFBD><1E><1D>+j<02> k<02> k<02><1B><06> /<2F> /<2F>
<EFBFBD><18><17>.<2E><06><06>H<EFBFBD><16> <1D>a<EFBFBD> <20> (<28> 0<>F<EFBFBD><04><16>l<EFBFBD>n<EFBFBD>n<EFBFBD>%<25>%<25>&9<>:<3A>:<3A><04><04> <10> <1A><04><04>%<25>/<2F><04><04>9@<40>9M<39><04><04> <14> !<21><04><04><1B> <04><04><04>F<EFBFBD> <12>F<EFBFBD>?<3F>s<00>A<03>A<07> A<07>__main__r')<01> descriptionz--datazcleaned_data.csvz CSV file path)r}<00>helpz --requirementz'Analysis requirement (natural language)z
--templatezReport template pathz--outputzOutput directory)r!r"r#r$r;)NNr )H<>__doc__<5F>sysrHr`<00>insert<72>dirname<6D>__file__<5F>src.env_loaderr<00>loggingr<67>r<00>typingrr<00>openair<00>!src.engines.ai_data_understandingr<00>%src.engines.requirement_understandingr <00>src.engines.analysis_planningr
<00>src.engines.task_executionr <00>src.engines.report_generationr <00>src.tools.tool_managerr <00>src.tools.baser<00>
src.modelsrr<00>
src.configr<00> src.toolsr<00>src.tools.query_toolsrrrr<00>src.tools.stats_toolsrrrr<00>src.tools.viz_toolsrrrr<00>tool_cls<6C> basicConfig<69>WARNINGr<47>rwrb<00>__name__<5F>argparse<73>ArgumentParser<65>parser<65> add_argument<6E>
parse_args<EFBFBD>argsr~rhr<><00>outputr@<00>exitr<74>r7r5<00><module>r<>s8<00><01><04><04> <0B>
<EFBFBD>
<EFBFBD>
<EFBFBD> <09> <09> <09> <09><03><08><0F><0F><01>2<EFBFBD>7<EFBFBD>?<3F>?<3F>8<EFBFBD>,<2C>,<2C>-<2D>-<2D>-<2D>1<>1<>1<>1<>1<>1<><16><16><06>x<EFBFBD> <20> <20> <20><0E><0E><0E><0E> <0B> <0B> <0B> <0B><1D><1D><1D><1D><1D><1D>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><19><19><19><19><19><19>I<>I<>I<>I<>I<>I<>H<>H<>H<>H<>H<>H<>7<>7<>7<>7<>7<>7<>3<>3<>3<>3<>3<>3<>9<>9<>9<>9<>9<>9<>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>2<>2<>2<>2<>2<>2<>2<>2<>!<21>!<21>!<21>!<21>!<21>!<21>$<24>#<23>#<23>#<23>#<23>#<23><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02> <1E>1<>3D<33>FX<46><1B>/<2F>1C<31>EW<45><16>+<2B>-?<3F>AR<41><02><1E><1E>H<EFBFBD>
<12>M<EFBFBD>(<28>(<28>*<2A>*<2A><1D><1D><1D><1D><13><07><13>'<27>/<2F>*<2A>*<2A>*<2A>*<2A>
'+<2B>#'<27>'<27> h<10>h<10><12>h<10><1E>s<EFBFBD>m<EFBFBD>h<10><1C>C<EFBFBD>=<3D>h<10><14> h<10>h<10>h<10>h<10>VO<1B> <18>O<1B> <11>.<2E> !<21>O<1B><17>O<1B>
 <09> O<1B>O<1B>O<1B>O<1B>d <0C>z<EFBFBD><19><19><13>O<EFBFBD>O<EFBFBD>O<EFBFBD> $<24>X<EFBFBD> $<24>1J<31> K<> K<> K<>F<EFBFBD>
<EFBFBD><17><17><08>*<<3C>?<3F><17>S<>S<>S<>
<EFBFBD><17><17><0F><14><e<><17>f<>f<>f<>
<EFBFBD><17><17> <0C>d<EFBFBD>9O<39><17>P<>P<>P<>
<EFBFBD><17><17>
<EFBFBD>,=<3D>DV<44><17>W<>W<>W<> <11> <1C> <1C> <1E> <1E>D<EFBFBD><1A>l<EFBFBD><16>)<29><1D>)<29><1A>m<EFBFBD><17>;<3B> <06><06><06>G<EFBFBD>  <0A>C<EFBFBD>H<EFBFBD>'<27> <20>Q<EFBFBD>Q<EFBFBD>q<EFBFBD>!<21>!<21>!<21>!<21>!<21><1A>r7