Data Analysis
此技能使AI代理能够对结构化数据集执行严格的统计分析。该代理加载数据,计算描述性和推断性统计量,识别趋势和相关性,进行假设检验,并生成可操作的见解。它支持CSV、Excel、Parquet和JSON输入,并利用pandas、scipy和statsmodels进行分析。
Workflow
-
加载并分析数据。 将数据集读入pandas DataFrame并检查其形状、列类型和内存使用情况。显示前几行和后几行以确认数据正确加载。检查明显的结构问题,如列偏移或编码问题。
-
计算描述性统计。 为所有数值列生成摘要统计信息,包括均值、中位数、标准差、偏度和峰度。对于分类列,计算值计数和众数。此步骤建立对每个变量分布的基础理解。
-
识别趋势和模式。 对时间索引数据应用滚动平均值、百分比变化和季节性分解。对于非时间数据,使用group-by聚合和透视表来揭示类别间的模式。标记任何单调趋势或周期性行为。
-
执行相关性和假设检验。 计算皮尔逊和斯皮尔曼相关矩阵以量化变量间的关系。在适当情况下进行假设检验(t检验、卡方检验、ANOVA)以确定统计显著性。报告p值和置信区间以及效应量。
-
检测异常值和离群点。 使用IQR方法和z-score识别显著偏离常态的数据点。将离群点与领域背景交叉参考,判断它们是否代表错误、罕见事件或有意义的信号。
-
将发现综合成报告。 用通俗语言总结关键见解,并辅以具体数字。根据业务影响或统计显著性对发现进行排序。包括限制和注意事项,如样本量限制或混淆变量。
支持的技术
- pandas — 数据加载、操作和聚合
- scipy.stats — 假设检验、统计分布
- statsmodels — 时间序列分解、回归分析
- numpy — 数值计算
Usage
向代理提供数据集的文件路径和分析目标描述。可选择指定关注的列、假设检验的显著性水平(默认alpha=0.05),以及是否应应用时间序列方法。
Examples
示例 1:使用pandas进行销售CSV分析
import pandas as pd
from scipy import stats
# Load the dataset
df = pd.read_csv("sales_2024.csv", parse_dates=["order_date"])
# Descriptive statistics
print(df[["revenue", "units_sold", "discount"]].describe())
# revenue units_sold discount
# count 8450.00 8450.00 8450.00
# mean 312.45 4.12 0.08
# std 189.73 2.87 0.05
# min 12.00 1.00 0.00
# max 2450.00 47.00 0.35
# Correlation analysis
corr = df[["revenue", "units_sold", "discount"]].corr(method="pearson")
print(corr)
# revenue units_sold discount
# revenue 1.000 0.847 -0.213
# units_sold 0.847 1.000 -0.089
# discount -0.213 -0.089 1.000
# Hypothesis test: do discounted orders produce higher revenue?
discounted = df[df["discount"] > 0]["revenue"]
full_price = df[df["discount"] == 0]["revenue"]
t_stat, p_value = stats.ttest_ind(discounted, full_price)
print(f"t={t_stat:.3f}, p={p_value:.4f}")
# t=-3.217, p=0.0013 — discounted orders have significantly lower revenue per order
示例 2:使用季节性分解进行时间序列分析
import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
# Load monthly revenue data
df = pd.read_csv("monthly_revenue.csv", parse_dates=["month"], index_col="month")
# Decompose into trend, seasonal, and residual components
result = seasonal_decompose(df["revenue"], model="additive", period=12)
print("Trend (last 6 months):")
print(result.trend.dropna().tail(6))
# 2024-07 48230.12
# 2024-08 49012.45
# 2024-09 49780.33
# 2024-10 50234.10
# 2024-11 51002.88
# 2024-12 51890.67
print("\nSeasonal peaks:")
seasonal = result.seasonal.groupby(result.seasonal.index.month).mean()
print(seasonal.nlargest(3))
# month
# 11 8923.40 (November — holiday pre-orders)
# 12 7654.20 (December — holiday sales)
# 3 3210.15 (March — spring promotions)
# The upward trend of ~$600/month suggests 14.5% annualized growth.
# Strong Q4 seasonality accounts for roughly 18% of total annual revenue.
最佳实践
- 在计算统计量之前始终检查原始数据——静默解析错误(错误的分隔符、编码问题)会使得所有下游结果无效。
- 报告p值的同时报告效应量;仅统计显著性并不意味着实际重要性。
- 当数据分布严重偏斜或样本量较小时,使用非参数检验(Mann-Whitney、Kruskal-Wallis)。
- 按有意义的类别(区域、产品线、客户层级)进行分析以避免辛普森悖论。
- 明确记录假设——时间序列的平稳性、参数检验的正态性、观测值的独立性。
- 在将令人惊讶的发现作为结论呈现之前,使用保留样本或替代方法验证它们。
Edge Cases
- 关键列中的缺失值。 如果目标列中超过30%为空,则警告用户插补可能引入显著偏差。并提供分析完整案例子集的选项。
- 极度偏斜的分布。 当偏度超过|2.0|时,使用对数变换或基于中位数的统计量以避免误导性的均值。
- 多重共线性。 当两个预测变量的相关性高于0.9时,标记此问题并建议删除其中一个或使用正则化模型以避免系数膨胀。
- 小样本量(n < 30)。 切换到精确检验或自助法,并相应地扩大置信区间。
- 单列中的混合数据类型。 谨慎转换并报告有多少值无法转换,而不是静默丢弃它们。
Scan to join WeChat group