数据分析与可视化 #
场景概述 #
数据分析应用范围 #
┌─────────────────────────────────────────────────────────────┐
│ 数据分析应用范围 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 数据处理 │
│ ├── 数据清洗 │
│ ├── 数据转换 │
│ ├── SQL 生成 │
│ └── 代码生成 │
│ │
│ 数据分析 │
│ ├── 趋势分析 │
│ ├── 对比分析 │
│ ├── 异常检测 │
│ └── 相关性分析 │
│ │
│ 报告生成 │
│ ├── 数据报告 │
│ ├── 业务报告 │
│ ├── 分析报告 │
│ └── 决策建议 │
│ │
│ 可视化建议 │
│ ├── 图表选择 │
│ ├── 设计建议 │
│ ├── 代码生成 │
│ └── 交互设计 │
│ │
└─────────────────────────────────────────────────────────────┘
数据处理 #
SQL 生成 #
场景:根据需求生成 SQL 查询语句
提示词模板:
─────────────────────────────────────────────────
# 角色
你是一位数据库专家,擅长 SQL 查询优化。
# 任务
请根据以下需求生成 SQL 查询语句。
# 数据库信息
- 数据库类型:[MySQL/PostgreSQL/等]
- 表结构:
[表名]
- 字段1: 类型
- 字段2: 类型
...
# 查询需求
[描述需要查询的数据]
# 要求
- 优化查询性能
- 添加必要注释
- 考虑边界情况
# 输出格式
## SQL 语句
```sql
[SQL代码]
说明 #
[查询逻辑说明] ─────────────────────────────────────────────────
示例: ─────────────────────────────────────────────────
角色 #
你是一位数据库专家,擅长 SQL 查询优化。
任务 #
请根据以下需求生成 SQL 查询语句。
数据库信息 #
-
数据库类型:MySQL
-
表结构: orders (订单表)
- id: INT, 主键
- user_id: INT, 用户ID
- product_id: INT, 产品ID
- amount: DECIMAL, 金额
- status: VARCHAR, 状态
- created_at: DATETIME, 创建时间
users (用户表)
- id: INT, 主键
- name: VARCHAR, 姓名
- email: VARCHAR, 邮箱
- city: VARCHAR, 城市
查询需求 #
查询2024年1月每个城市的订单数量和总金额, 只统计已完成的订单,按总金额降序排列。
输出: ─────────────────────────────────────────────────
SQL 语句 #
-- 查询2024年1月各城市订单统计
SELECT
u.city AS 城市,
COUNT(o.id) AS 订单数量,
SUM(o.amount) AS 总金额
FROM
orders o
JOIN
users u ON o.user_id = u.id
WHERE
o.status = 'completed' -- 只统计已完成订单
AND o.created_at >= '2024-01-01'
AND o.created_at < '2024-02-01' -- 2024年1月
GROUP BY
u.city
ORDER BY
总金额 DESC;
说明 #
- 使用 JOIN 连接订单表和用户表
- WHERE 条件筛选已完成订单和日期范围
- GROUP BY 按城市分组统计
- ORDER BY 按总金额降序排列
- 使用 COUNT 和 SUM 聚合函数计算订单数和总金额
性能优化建议 #
- 确保 orders.status 和 orders.created_at 有索引
- 如果数据量大,考虑使用覆盖索引
- 可以添加 LIMIT 限制返回行数 ─────────────────────────────────────────────────
### 数据清洗代码生成
场景:生成数据清洗代码
提示词模板: ─────────────────────────────────────────────────
角色 #
你是一位数据工程师,擅长数据清洗和处理。
任务 #
请编写数据清洗代码。
数据描述 #
[数据格式和内容描述]
清洗需求 #
[需要处理的问题]
技术栈 #
- 语言:Python
- 库:pandas
要求 #
- 处理缺失值
- 处理异常值
- 数据类型转换
- 添加注释
输出格式 #
代码实现 #
[代码]
处理说明 #
[各步骤说明] ─────────────────────────────────────────────────
示例: ─────────────────────────────────────────────────
角色 #
你是一位数据工程师,擅长数据清洗和处理。
任务 #
请编写用户数据清洗代码。
数据描述 #
CSV 文件,包含用户信息:
- user_id: 用户ID
- name: 姓名(可能有空格、特殊字符)
- age: 年龄(可能有缺失、异常值)
- email: 邮箱(格式可能不规范)
- phone: 手机号(格式不统一)
- register_date: 注册日期(格式不统一)
清洗需求 #
- 处理姓名中的空格和特殊字符
- 处理年龄缺失值和异常值(0-120范围)
- 验证并标准化邮箱格式
- 统一手机号格式(11位数字)
- 统一日期格式
输出: ─────────────────────────────────────────────────
代码实现 #
import pandas as pd
import re
from datetime import datetime
def clean_user_data(df: pd.DataFrame) -> pd.DataFrame:
"""清洗用户数据
Args:
df: 原始用户数据 DataFrame
Returns:
清洗后的 DataFrame
"""
df = df.copy()
# 1. 清洗姓名:去除空格和特殊字符
df['name'] = df['name'].str.strip() # 去除首尾空格
df['name'] = df['name'].str.replace(r'[^\u4e00-\u9fa5a-zA-Z\s]', '', regex=True)
# 2. 处理年龄
# 将非数字转为 NaN
df['age'] = pd.to_numeric(df['age'], errors='coerce')
# 处理异常值:超出范围的设为 NaN
df.loc[(df['age'] < 0) | (df['age'] > 120), 'age'] = None
# 填充缺失值为中位数
df['age'] = df['age'].fillna(df['age'].median())
# 转为整数
df['age'] = df['age'].astype(int)
# 3. 验证邮箱格式
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
df['email_valid'] = df['email'].str.match(email_pattern, na=False)
# 转为小写
df['email'] = df['email'].str.lower()
# 4. 统一手机号格式
def clean_phone(phone):
if pd.isna(phone):
return None
# 提取数字
digits = re.sub(r'\D', '', str(phone))
# 取后11位
if len(digits) >= 11:
return digits[-11:]
return None
df['phone'] = df['phone'].apply(clean_phone)
# 5. 统一日期格式
def parse_date(date_str):
if pd.isna(date_str):
return None
# 尝试多种格式
formats = ['%Y-%m-%d', '%Y/%m/%d', '%d-%m-%Y', '%d/%m/%Y']
for fmt in formats:
try:
return datetime.strptime(str(date_str), fmt).strftime('%Y-%m-%d')
except ValueError:
continue
return None
df['register_date'] = df['register_date'].apply(parse_date)
return df
# 使用示例
# df = pd.read_csv('users.csv')
# cleaned_df = clean_user_data(df)
# cleaned_df.to_csv('users_cleaned.csv', index=False)
处理说明 #
| 字段 | 处理方式 | 说明 |
|---|---|---|
| name | 去除空格和特殊字符 | 保留中文、英文和空格 |
| age | 处理异常值,填充缺失值 | 范围限制0-120,缺失值用中位数填充 |
| 验证格式,转为小写 | 添加有效性标记列 | |
| phone | 提取11位数字 | 统一格式 |
| register_date | 统一为 YYYY-MM-DD | 支持多种输入格式 |
| ───────────────────────────────────────────────── |
## 数据分析
### 趋势分析
场景:分析数据趋势
提示词模板: ─────────────────────────────────────────────────
角色 #
你是一位数据分析师,擅长趋势分析。
任务 #
请分析以下数据的趋势。
数据 #
[数据内容]
分析维度 #
- 时间范围:[范围]
- 分析指标:[指标]
- 对比基准:[基准]
要求 #
- 识别趋势方向
- 分析变化原因
- 预测未来走势
- 提供建议
输出格式 #
趋势概述 #
[整体趋势描述]
详细分析 #
[分阶段/分维度分析]
关键发现 #
- [发现1]
- [发现2]
原因分析 #
[趋势变化的原因]
预测与建议 #
[未来预测和建议] ─────────────────────────────────────────────────
示例: ─────────────────────────────────────────────────
角色 #
你是一位数据分析师,擅长趋势分析。
任务 #
请分析以下销售数据的趋势。
数据 #
月份 销售额(万元) 2023-01 120 2023-02 135 2023-03 142 2023-04 138 2023-05 155 2023-06 168 2023-07 175 2023-08 182 2023-09 190 2023-10 185 2023-11 210 2023-12 245
输出: ─────────────────────────────────────────────────
趋势概述 #
2023年销售额整体呈上升趋势,从年初的120万元增长到 年末的245万元,年度增长率约104%。增长曲线呈现 "稳步上升+年末冲刺"的特点。
详细分析 #
第一阶段:平稳起步(1-4月) #
- 销售额在120-142万元之间波动
- 月均增长率约5.8%
- 4月出现小幅回落(-4.2%)
第二阶段:稳步增长(5-9月) #
- 连续5个月正增长
- 月均增长率约5.3%
- 增长势头稳定
第三阶段:年末冲刺(10-12月) #
- 10月小幅回调(-2.6%)
- 11-12月大幅增长
- 12月达到全年峰值(245万元)
关键发现 #
- 整体增长强劲:年度销售额翻倍
- 季节性明显:年末销售明显高于其他时期
- 增长稳定:除个别月份外,持续正增长
- 年末效应显著:12月销售额是1月的2倍
原因分析 #
-
年末冲刺因素
- 年底促销活动
- 预算消耗需求
- 节日消费高峰
-
稳步增长因素
- 产品竞争力提升
- 市场拓展效果显现
- 客户积累效应
-
波动因素
- 4月回落:可能受季节因素影响
- 10月回落:国庆假期影响
预测与建议 #
2024年预测 #
- 预计全年增长率:30-50%
- 预计年末销售额:300-350万元
建议 #
- 把握年末机会:加大年末营销投入
- 平滑季节波动:开发淡季促销策略
- 持续增长动力:拓展新客户、新产品
- 关注异常月份:分析4月、10月回落原因 ─────────────────────────────────────────────────
## 报告生成
### 数据报告
场景:生成数据分析报告
提示词模板: ─────────────────────────────────────────────────
角色 #
你是一位专业的数据分析师,擅长撰写分析报告。
任务 #
请根据以下数据生成分析报告。
数据 #
[数据内容]
报告要求 #
- 报告类型:[日报/周报/月报/专项报告]
- 目标读者:[读者描述]
- 报告长度:[字数]
输出格式 #
报告标题 #
执行摘要 #
[核心发现概述]
数据概览 #
[关键指标汇总]
详细分析 #
[分维度分析]
结论与建议 #
[结论和建议]
附录 #
[补充数据] ─────────────────────────────────────────────────
示例: ─────────────────────────────────────────────────
角色 #
你是一位专业的数据分析师,擅长撰写分析报告。
任务 #
请根据以下电商数据生成月度分析报告。
数据 #
- 总订单数:15,680
- 总销售额:2,345,000元
- 平均客单价:149.5元
- 新用户数:3,245
- 复购率:35.2%
- 退货率:5.8%
- 热销品类:服装(35%)、数码(25%)、家居(20%)
- 流量来源:搜索(45%)、推荐(30%)、直接访问(25%)
输出: ─────────────────────────────────────────────────
2024年1月电商运营分析报告 #
执行摘要 #
本月电商业务表现良好,销售额达234.5万元,订单量15,680单。 新用户增长显著,复购率保持稳定。退货率略有上升, 需关注产品质量和物流服务。
数据概览 #
| 指标 | 本月数值 | 环比变化 |
|---|---|---|
| 总销售额 | 234.5万元 | +12.3% |
| 订单数 | 15,680 | +10.5% |
| 客单价 | 149.5元 | +1.6% |
| 新用户数 | 3,245 | +18.2% |
| 复购率 | 35.2% | +0.8% |
| 退货率 | 5.8% | +0.5% |
详细分析 #
一、销售分析 #
整体表现
- 销售额环比增长12.3%,增长势头良好
- 客单价稳定,略有提升(+1.6%)
- 订单量增长是销售额增长的主要驱动力
品类分析
- 服装品类占比最高(35%),是核心品类
- 数码品类(25%)增长潜力大
- 家居品类(20%)表现稳定
二、用户分析 #
新用户获取
- 新用户数3,245,环比增长18.2%
- 获客效果显著,营销投入产出比良好
用户留存
- 复购率35.2%,处于行业平均水平
- 老用户贡献约65%的销售额
三、流量分析 #
流量来源
- 搜索流量占比45%,是主要来源
- 推荐流量30%,有提升空间
- 直接访问25%,品牌认知度良好
四、问题分析 #
退货率上升
- 退货率5.8%,环比上升0.5%
- 主要原因:尺码不合、色差问题
- 建议:优化尺码指南、改善商品图片
结论与建议 #
主要结论 #
- 整体运营状况良好,销售持续增长
- 新用户获取效果显著
- 退货率需重点关注
改进建议 #
-
降低退货率
- 优化商品详情页
- 完善尺码指南
- 提升物流时效
-
提升复购率
- 优化会员体系
- 增加用户触达
- 提供复购激励
-
拓展流量渠道
- 加大推荐流量投入
- 优化搜索关键词
- 发展社交媒体渠道
附录 #
详细数据表 #
[可附加详细数据表格]
趋势图表 #
[可附加可视化图表] ─────────────────────────────────────────────────
## 可视化建议
### 图表选择
场景:根据数据类型推荐合适的可视化方式
提示词模板: ─────────────────────────────────────────────────
角色 #
你是一位数据可视化专家。
任务 #
请为以下数据推荐合适的可视化方式。
数据描述 #
[数据类型和特点]
展示目的 #
[要传达的信息]
要求 #
- 推荐图表类型
- 说明选择理由
- 提供设计建议
- 生成示例代码
输出格式 #
推荐图表 #
[图表类型]
选择理由 #
[为什么选择这种图表]
设计建议 #
[颜色、布局、交互等建议]
示例代码 #
[Python/JavaScript 代码] ─────────────────────────────────────────────────
示例: ─────────────────────────────────────────────────
角色 #
你是一位数据可视化专家。
任务 #
请为销售趋势数据推荐可视化方式。
数据描述 #
- 类型:时间序列数据
- 内容:12个月的销售额
- 特点:有趋势、有季节性波动
展示目的 #
展示销售额的变化趋势和季节性特征
输出: ─────────────────────────────────────────────────
推荐图表 #
主图表:折线图 辅助图表:面积图 + 标注点
选择理由 #
- 折线图最适合展示时间序列数据的趋势变化
- 可以清晰看到:
- 整体趋势方向
- 季节性波动
- 关键转折点
- 面积图可以强调数值的累积感
- 标注点可以突出关键数据
设计建议 #
颜色方案 #
- 主色调:蓝色系(专业、可信)
- 强调色:橙色(突出关键点)
- 背景:浅灰或白色
布局建议 #
- X轴:月份,倾斜45度显示
- Y轴:销售额,添加网格线
- 添加趋势线(可选)
- 标注最高点和最低点
交互建议 #
- 鼠标悬停显示详细数值
- 可缩放查看特定时间段
- 支持数据导出
示例代码 #
Python (Matplotlib) #
import matplotlib.pyplot as plt
import numpy as np
# 数据
months = ['1月', '2月', '3月', '4月', '5月', '6月',
'7月', '8月', '9月', '10月', '11月', '12月']
sales = [120, 135, 142, 138, 155, 168, 175, 182, 190, 185, 210, 245]
# 创建图表
plt.figure(figsize=(12, 6))
# 绘制折线图
plt.plot(months, sales, 'b-o', linewidth=2, markersize=8, label='销售额')
# 填充面积
plt.fill_between(months, sales, alpha=0.3)
# 标注最高点和最低点
max_idx = np.argmax(sales)
min_idx = np.argmin(sales)
plt.annotate(f'最高: {sales[max_idx]}万',
xy=(months[max_idx], sales[max_idx]),
xytext=(10, 10), textcoords='offset points',
fontsize=10, color='orange')
plt.annotate(f'最低: {sales[min_idx]}万',
xy=(months[min_idx], sales[min_idx]),
xytext=(10, -15), textcoords='offset points',
fontsize=10, color='red')
# 设置标签
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(万元)', fontsize=12)
plt.title('2023年月度销售额趋势', fontsize=14, fontweight='bold')
# 添加网格
plt.grid(True, linestyle='--', alpha=0.7)
# 调整布局
plt.tight_layout()
plt.show()
JavaScript (ECharts) #
option = {
title: {
text: '2023年月度销售额趋势'
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月',
'7月', '8月', '9月', '10月', '11月', '12月']
},
yAxis: {
type: 'value',
name: '销售额(万元)'
},
series: [{
data: [120, 135, 142, 138, 155, 168, 175, 182, 190, 185, 210, 245],
type: 'line',
smooth: true,
areaStyle: {
opacity: 0.3
},
markPoint: {
data: [
{ type: 'max', name: '最大值' },
{ type: 'min', name: '最小值' }
]
}
}]
};
─────────────────────────────────────────────────
## 最佳实践
### 数据分析提示词原则
-
明确分析目标 ├── 要回答什么问题 ├── 要发现什么规律 └── 要支持什么决策
-
提供完整上下文 ├── 数据来源 ├── 数据范围 ├── 业务背景 └── 相关指标定义
-
指定分析维度 ├── 时间维度 ├── 分类维度 ├── 对比维度 └── 聚合维度
-
明确输出要求 ├── 报告格式 ├── 分析深度 ├── 可视化需求 └── 建议要求
-
考虑实际应用 ├── 可操作性 ├── 数据可靠性 ├── 结论验证 └── 持续更新
## 学习总结
恭喜你完成了 Prompt Engineering 的全部学习!你已经掌握了:
- 基础概念和原理
- 核心技术和技巧
- 进阶应用方法
- 安全防护措施
- 效果评估方法
- 实战应用案例
继续实践,不断提升你的 Prompt Engineering 技能!