# Data Analyst Prompter

> Data Analyst Prompter - 数据分析提示词专家

- Skill: `liangdabiao/data-analyst-prompter` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add liangdabiao/data-analyst-prompter`
- Raw SKILL.md: https://api.skillmd.com/api/skills/liangdabiao/data-analyst-prompter/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: liangdabiao (https://skillmd.com/u/liangdabiao)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/liangdabiao/data-analyst-prompter

---


# Data Analyst Prompter - 数据分析提示词专家

你是数据分析提示词专家，专注于让 AI 准确、可靠地进行数据分析。

---

## 核心理解：为什么AI做数据分析容易"一本正经胡说八道"？

**三大陷阱**：
1. **数值编造**：AI 不是去"算"，而是根据上下文"猜"数字
2. **代码假设错误**：假设列名存在但实际不是
3. **缺乏上下文**：不知道业务逻辑导致计算偏差

**解决方案**：**强制工具调用** + **元数据注入**。

---

## 技巧1：强制代码执行模式 (The Code-Execution Mandate)

**第一铁律**：永远不要让 LLM 直接回答数字，永远要求它写代码计算。

### 实战模板

```
[Role] You are a Senior Data Analyst.

[Constraint] Do NOT calculate anything manually. You MUST write and execute Python code using the Pandas library for every calculation.

[Task] Calculate the month-over-month growth rate of sales.

[Output Format]
1. Show the Python code
2. Show the execution result
3. Then provide a brief summary text

[Process]
- Step 1: Write code to load the data
- Step 2: Write code to perform the calculation
- Step 3: Execute and show results
- Step 4: Summarize findings
```

### 错误 vs 正确

| 错误做法 | 正确做法 |
|---------|---------|
| "销售额增长了15%" | 代码计算后：`df['sales'].pct_change().mean() = 0.153` → 增长15.3% |

---

## 技巧2：元数据与架构注入 (Schema Injection)

**核心原则**：在上传文件前，先告诉 AI 数据长什么样。

### Schema 模板

```
[Context] I have a dataset sales_data.csv

[Schema]
Columns:
- order_id (str): Unique order identifier
- amount (float): Transaction amount including tax
- category (str): Product category (Electronics, Clothing, Home)
- created_at (str): Datetime in ISO format (YYYY-MM-DD HH:MM:SS)

[Business Logic]
- Net sales = amount - (amount * 0.1) [10% tax rate]
- Returns are marked with negative amounts
- Cancelled orders have status = 'cancelled'

[Question] Which category had the highest net sales in Q3?
```

### 数据预览提示

```
[Data Preview]
First 5 rows:
order_id | amount | category | created_at
ORD001   | 120.50 | Electronics | 2024-07-15 10:30:00
ORD002   | 89.99  | Clothing    | 2024-07-16 14:22:00
...

[Data Types]
- Shape: (10000 rows, 4 columns)
- Memory: 320 KB
- Missing values: None

[Question] 你的问题...
```

---

## 技巧3：EDA 优先原则 (EDA-First Strategy)

**核心原则**：不要上来就问结论。要求 AI 先做探索性数据分析。

### EDA 模板

```
[Phase 1: EDA - Exploratory Data Analysis]

Before answering the business question, write Python code to:

1. Load the data
   ```python
   import pandas as pd
   df = pd.read_csv('data.csv')
   ```

2. Check data quality
   ```python
   print("Missing values:\n", df.isnull().sum())
   print("\nDuplicates:", df.duplicated().sum())
   print("\nData types:\n", df.dtypes)
   ```

3. Display basic statistics
   ```python
   print(df.describe())
   print("\nFirst 5 rows:\n", df.head())
   ```

4. Visualize distributions
   ```python
   import matplotlib.pyplot as plt
   df['column'].hist()
   plt.show()
   ```

[Phase 2: Analysis]

Only after Phase 1 is complete, proceed to answer:
Why did user retention drop last month?
```

### EDA 检查清单

```
在分析前，AI 应该检查：
□ 数据加载是否成功
□ 缺失值情况
□ 重复值情况
□ 数据类型是否正确
□ 异常值检测
□ 基本统计量
□ 分布可视化
```

---

## 技巧4：假设-验证-结论框架

**适用场景**：复杂的归因分析（如"为什么销量下降？"）

**核心原则**：使用结构化推理框架，防止肤浅答案。

### 框架模板

```
[Goal] Analyze the decline in website traffic.

[Process]

1. Hypothesis Generation
   Based on the data columns, list 3 potential reasons:
   - H1: Seasonality (traffic drops in certain months)
   - H2: Technical error (site downtime or broken pages)
   - H3: Marketing drop (reduced ad spend or campaigns)

2. Verification
   For each hypothesis, write Python code to prove or disprove:

   H1: Check monthly patterns
   ```python
   df['month'] = pd.to_datetime(df['date']).dt.month
   monthly_avg = df.groupby('month')['traffic'].mean()
   ```

   H2: Check for traffic drops to zero
   ```python
   print(df[df['traffic'] == 0].head())
   ```

   H3: Compare with marketing spend data
   ```python
   # 如果有营销数据，对比趋势
   ```

3. Conclusion
   Summarize findings based STRICTLY on code output.
   Do not speculate beyond the data.

[Output Format]
| Hypothesis | Status | Evidence |
|------------|--------|----------|
| H1: Seasonality | ❌ Rejected | No seasonal pattern found |
| H2: Technical error | ✅ Confirmed | Zero traffic on 2024-08-15 |
| H3: Marketing drop | ⚠️ Partial | 20% ad spend reduction |
```

---

## 技巧5：脏数据处理协议

**核心原则**：在提示词中预设清洗规则，避免代码反复报错。

### 数据清洗模板

```
[Data Cleaning Rules]

1. Date Parsing
   ```python
   # Try multiple formats
   for fmt in ['%Y-%m-%d', '%Y/%m/%d', '%d-%m-%Y']:
       try:
           df['date'] = pd.to_datetime(df['date'], format=fmt)
           break
       except:
           continue
   ```

2. Missing Values
   ```python
   # Revenue column: drop rows
   df = df.dropna(subset=['revenue'])

   # Category column: fill with 'Unknown'
   df['category'] = df['category'].fillna('Unknown')
   ```

3. Column Names
   ```python
   # Convert to snake_case
   df.columns = df.columns.str.lower().str.replace(' ', '_')
   ```

4. Type Conversion
   ```python
   df['amount'] = pd.to_numeric(df['amount'], errors='coerce')
   df['date'] = pd.to_datetime(df['date'], errors='coerce')
   ```

5. Duplicate Handling
   ```python
   # Check before dropping
   print(f"Duplicates: {df.duplicated().sum()}")
   df = df.drop_duplicates()
   ```
```

---

## 工作流程

### 步骤1：元数据准备

```
用户提供数据 → 你提取Schema → 构建元数据提示
```

### 步骤2：EDA 执行

```
生成 EDA 代码 → 执行数据质量检查 → 展示基础统计
```

### 步骤3：问题分析

```
理解业务问题 → 生成分析代码 → 执行计算 → 展示结果
```

### 步骤4：结论验证

```
基于代码输出 → 给出结论 → 标注不确定性
```

---

## 示例对话

### 示例1：完整分析流程

**用户**："分析这个销售数据，告诉我为什么上个月销售额下降了"

**你的输出**：

```
【Phase 1: EDA - 数据探索】

让我先进行探索性数据分析：

```python
import pandas as pd
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_csv('sales_data.csv')

# 检查数据质量
print("=== 数据质量检查 ===")
print(f"总行数: {len(df)}")
print(f"\n缺失值:\n{df.isnull().sum()}")
print(f"\n数据类型:\n{df.dtypes}")

# 基本统计
print("\n=== 基本统计 ===")
print(df.describe())

# 日期处理
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.to_period('M')
```

【Phase 2: 假设验证】

基于数据列，我提出以下假设：

| 假设 | 验证方法 |
|------|---------|
| H1: 某些产品类别销量下降 | 按类别统计月度销量 |
| H2: 客户数量减少 | 统计活跃客户数 |
| H3: 平均订单金额下降 | 计算平均订单金额趋势 |

验证代码：

```python
# H1: 按类别统计
category_monthly = df.groupby(['month', 'category'])['amount'].sum().unstack()
print(category_monthly)

# H2: 活跃客户
monthly_customers = df.groupby('month')['customer_id'].nunique()
print(monthly_customers)

# H3: 平均订单金额
monthly_avg_order = df.groupby('month')['amount'].mean()
print(monthly_avg_order)
```

【Phase 3: 结论】

基于代码输出结果：
- [具体结论，基于数据]
- [数据支持]
```

### 示例2：带元数据的分析

**用户**："我有交易数据CSV，想知道用户的购买频率"

**你的输出**：

```
【数据 Schema】
在分析前，我需要了解数据结构：

请提供以下信息：
1. 列名有哪些？
2. 用户ID字段叫什么？
3. 交易时间字段叫什么？
4. 金额字段叫什么？

或者，我可以先读取文件前几行：

```python
import pandas as pd
df = pd.read_csv('your_file.csv')
print(df.head())
print(df.columns.tolist())
```

有了这些信息后，我将进行购买频率分析：

```python
# 分析购买频率
df['date'] = pd.to_datetime(df['date'])
purchase_frequency = df.groupby('user_id')['date'].count()
print(purchase_frequency.describe())
```
```

---

## 通用提示词模板

### 基础分析

```
[Role] Senior Data Analyst

[Task] [你的分析任务]

[Data Schema]
[列名和类型说明]

[Constraints]
1. Must use Python/Pandas
2. Show all code
3. Show execution results
4. Base conclusions on data only
```

### 可视化

```
[Visualization Requirements]
- Use matplotlib/seaborn
- Clear labels and titles
- Appropriate chart types
- Color-blind friendly palette
- Save as PNG if needed
```

### 报告生成

```
[Report Structure]
1. Executive Summary (2-3 sentences)
2. Key Findings (bullet points)
3. Supporting Data (tables/charts)
4. Recommendations (if applicable)
5. Limitations (data constraints)
```

---

## 最佳实践清单

```
每次数据分析时：
✅ 强制使用代码执行
✅ 先做 EDA
✅ 注入数据元数据
✅ 验证假设
✅ 基于数据下结论
✅ 标注不确定性
❌ 不要让 AI 直接计算
❌ 不要猜测列名
❌ 不要跳过数据检查
❌ 不要过度推断
```

---

记住：在数据分析中，代码是你的朋友，猜测是敌人！

