55**请严格遵循以下规范生成代码**:
661. **纯净输出**:只输出可执行的Python代码,禁止包含任何额外说明或自然语言。在代码内部需要有适量的注释方便阅读。
77 - **特别注意**:模型输出的文本直接接入Python解释器运行,因此不要添加任何额外符号,**比如Markdown的代码块标记符号**!
8- 2. **输入规范**:从`sys.stdin`读取JSON数据(List[Dict]), 使用`json.load(sys.stdin)`。
8+ 2. **输入规范**:从`sys.stdin`读取JSON数据(List[List[ Dict]]),外层数组按执行顺序保存每个SQL步骤的结果集。 使用`json.load(sys.stdin)`,根据分析需求分别处理或关联各结果集,不要把不同结构的结果直接混合 。
993. **输出规范**:最终结果必须是JSON对象(Dict),通过`print(json.dumps(result, ensure_ascii=False))`输出,JSON字段可以自定义,但要满足用户需求。
10104. **错误处理**:使用以下结构捕获所有异常:
1111 ```python
4949 # 从stdin读取输入数据
5050 input_data = json.load(sys.stdin)
5151
52- # 将输入数据转换为DataFrame以便于分析
53- df = pd.DataFrame(input_data)
54-
55- # 自动类型推断:将字符串形式的数值转换为实际数值类型(解决后端统一返回字符串的问题)
56- for col in df.columns:
57- df[col] = pd.to_numeric(df[col], errors='ignore')
52+ # 每个元素对应一个SQL步骤的结果集,分别转换为DataFrame
53+ dataframes = []
54+ for step_data in input_data:
55+ df = pd.DataFrame(step_data)
56+ # 自动类型推断:将字符串形式的数值转换为实际数值类型
57+ for col in df.columns:
58+ df[col] = pd.to_numeric(df[col], errors='ignore')
59+ dataframes.append(df)
5860
5961 # 动态分析逻辑
6062 # 示例:计算某些统计指标
6163 result = \{
62- "summary": \{\},
63- "details": []
64+ "step_summaries": []
6465 \}
6566
66- # 示例逻辑:计算每列的平均值(可根据需求调整)
67- for column in df.columns:
68- if pd.api.types.is_numeric_dtype(df[column]):
69- result["summary"][column] = \{
70- "mean": df[column].mean(),
71- "min": df[column].min(),
72- "max": df[column].max()
73- \}
74-
75- # 示例逻辑:将原始数据分组并统计(可根据需求调整)
76- grouped = df.groupby(list(df.columns[:2])).size().reset_index(name="count")
77- result["details"] = grouped.to_dict(orient="records")
67+ # 示例逻辑:分别统计每个SQL步骤的数值字段
68+ for step_number, df in enumerate(dataframes, start=1):
69+ summary = \{"step_number": step_number, "statistics": \{\}\}
70+ for column in df.columns:
71+ if pd.api.types.is_numeric_dtype(df[column]):
72+ summary["statistics"][column] = \{
73+ "mean": df[column].mean(),
74+ "min": df[column].min(),
75+ "max": df[column].max()
76+ \}
77+ result["step_summaries"].append(summary)
7878
7979 # 输出结果为JSON对象
8080 print(json.dumps(result, ensure_ascii=False))
@@ -89,7 +89,7 @@ except Exception:
8989
9090# 注意事项
9191
92- 1. **输入验证**:确保代码能够正确处理空输入或格式不正确的输入 ,并在异常时提供清晰的错误信息。**处理的数据必须来自`json.load(sys.stdin)`**。
92+ 1. **输入验证**:确保代码能够正确处理空输入、空结果集或格式不正确的输入 ,并在异常时提供清晰的错误信息。**处理的数据必须来自`json.load(sys.stdin)`,外层数组中的每个元素代表一个SQL步骤的结果集 **。
93932. **类型转换**:由于后端SQL查询结果统一转换为字符串格式,**必须在DataFrame创建后进行类型推断**,使用`pd.to_numeric()`将数值字符串转换为实际数值类型,以便进行数学运算和统计分析。
94943. **性能优化**:尽量减少不必要的计算和内存占用,确保代码在性能约束内高效运行。
95954. **结果完整性**:输出的JSON对象应全面反映分析结果,且字段命名清晰易懂。
@@ -114,26 +114,21 @@ try:
114114 # 从stdin读取输入数据
115115 input_data = json.load(sys.stdin)
116116
117- # 转换为DataFrame
118- df = pd.DataFrame(input_data)
119-
120- # 自动类型推断:将字符串形式的数值转换为实际数值类型
121- for col in df.columns:
122- df[col] = pd.to_numeric(df[col], errors='ignore')
117+ # 分别读取两个SQL步骤的结果
118+ channel_df = pd.DataFrame(input_data[0]) if len(input_data) > 0 else pd.DataFrame()
119+ conversion_df = pd.DataFrame(input_data[1]) if len(input_data) > 1 else pd.DataFrame()
123120
124- # 动态分析逻辑
125- result = \{
126- "channel_stats": []
127- \}
121+ for df in (channel_df, conversion_df):
122+ for col in df.columns:
123+ df[col] = pd.to_numeric(df[col], errors='ignore')
128124
129- # 计算每个渠道的线索数量和转化率
130- if "channel" in df.columns and "conversion" in df.columns:
131- grouped = df.groupby("channel").agg(
132- lead_count=("conversion", "size"),
133- conversion_rate=("conversion", "mean ")
134- ).reset_index( )
125+ # 根据共同维度关联两个步骤的数据,再完成综合分析
126+ result = \{"channel_stats": []\}
127+ common_columns = list(set(channel_df.columns) & set(conversion_df.columns))
128+ if common_columns:
129+ merged = channel_df.merge(conversion_df, on=common_columns, how="inner ")
130+ result["channel_stats"] = merged.to_dict(orient="records" )
135131
136- result["channel_stats"] = grouped.to_dict(orient="records")
137132
138133 # 输出结果为JSON对象
139134 print(json.dumps(result, ensure_ascii=False))
0 commit comments