Finance Data Analysis
AI驱动的财务分析与可视化工具,支持KPI追踪与自动化报告生成。
下载 20
提供Python/R代码模板与可视化图表,支持统计分析与报告生成。
openclaw skills install @534422530/data-analysis-plus命令、参数、文件名以原文为准
通过代码模板、可视化图库和统计方法增强数据分析能力。
| 分析类型 | Python 模板 | R 模板 |
|---|---|---|
| 描述性分析 | df.describe() | summary(df) |
| 假设检验 | scipy.stats.ttest_ind() | t.test() |
| 回归分析 | sklearn.linear_model | lm() |
| 聚类分析 | sklearn.cluster.KMeans | kmeans() |
| 时间序列分析 | statsmodels.tsa | forecast::auto.arima() |
import pandas as pd
import numpy as np
# CSV 文件
df = pd.read_csv("data.csv")
# Excel 文件
df = pd.read_excel("data.xlsx")
# JSON 文件
df = pd.read_json("data.json")
# 数据库连接
import sqlalchemy
engine = sqlalchemy.create_engine("sqlite:///data.db")
df = pd.read_sql("SELECT * FROM table", engine)# 基础统计信息
df.describe()
# 按分组汇总
df.groupby("category").agg({
"value": ["mean", "median", "std", "count"]
})
# 相关性分析
df.corr()# 缺失值处理
df.isnull().sum()
df.fillna(df.mean())
df.dropna()
# 重复值处理
df.duplicated().sum()
df.drop_duplicates()
# 异常值处理
Q1 = df["value"].quantile(0.25)
Q3 = df["value"].quantile(0.75)
IQR = Q3 - Q1
df = df[(df["value"] >= Q1 - 1.5*IQR) & (df["value"] <= Q3 + 1.5*IQR)]from scipy import stats
# 独立样本 t 检验
group1 = df[df["group"] == "A"]["value"]
group2 = df[df["group"] == "B"]["value"]
stat, p_value = stats.ttest_ind(group1, group2)
# 卡方检验
contingency = pd.crosstab(df["cat1"], df["cat2"])
chi2, p_value, dof, expected = stats.chi2_contingency(contingency)
# 单因素方差分析(ANOVA)
f_stat, p_value = stats.f_oneway(group1, group2, group3)from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X = df[["feature1", "feature2"]]
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = LinearRegression()
model.fit(X_train, y_train)
print(f"R²: {model.score(X_test, y_test)}")
print(f"系数: {model.coef_}")from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df[["feature1", "feature2"]])
kmeans = KMeans(n_clusters=3, random_state=42)
df["cluster"] = kmeans.fit_predict(X_scaled)import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
# 日期解析
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")
# 分解
decomposition = seasonal_decompose(df["value"], model="additive", period=12)
decomposition.plot()library(readr)
library(readxl)
# CSV 文件
df <- read_csv("data.csv")
# Excel 文件
df <- read_excel("data.xlsx")
# JSON 文件
library(jsonlite)
df <- fromJSON("data.json")# 基础统计信息
summary(df)
# 按分组汇总
library(dplyr)
df %>%
group_by(category) %>%
summarise(
mean = mean(value, na.rm = TRUE),
median = median(value, na.rm = TRUE),
sd = sd(value, na.rm = TRUE),
n = n()
)
# 相关性分析
cor(df[, sapply(df, is.numeric)], use = "complete.obs")# t 检验
t.test(value ~ group, data = df)
# 卡方检验
chisq.test(table(df$cat1, df$cat2))
# 方差分析(ANOVA)
aov_result <- aov(value ~ group, data = df)
summary(aov_result)# 线性回归
model <- lm(target ~ feature1 + feature2, data = df)
summary(model)
# 逻辑回归
model <- glm(binary_target ~ feature1 + feature2, data = df, family = "binomial")
summary(model)# K-means 聚类
library(cluster)
df_scaled <- scale(df[, c("feature1", "feature2")])
kmeans_result <- kmeans(df_scaled, centers = 3)
df$cluster <- kmeans_result$cluster| 问题类型 | 图表类型 | Python | R |
|---|---|---|---|
| 时间趋势 | 折线图 | matplotlib | ggplot2 |
| 对比分析 | 条形图 | seaborn.barplot | ggplot2::geom_bar |
| 分布形态 | 直方图 | seaborn.histplot | ggplot2::geom_histogram |
| 关系探索 | 散点图 | seaborn.scatterplot | ggplot2::geom_point |
| 构成分析 | 饼图/堆叠条形图 | matplotlib.pyplot.pie | ggplot2::geom_bar(position="fill") |
| 相关性展示 | 热力图 | seaborn.heatmap | pheatmap |
import matplotlib.pyplot as plt
import seaborn as sns
# 折线图
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x="date", y="value", hue="category")
plt.title("时间趋势")
plt.savefig("trend.png", dpi=300, bbox_inches="tight")
# 散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x="feature1", y="feature2", hue="target")
plt.title("特征关系")
plt.savefig("scatter.png", dpi=300, bbox_inches="tight")
# 热力图
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(), annot=True, cmap="coolwarm", center=0)
plt.title("相关性矩阵")
plt.savefig("heatmap.png", dpi=300, bbox_inches="tight")library(ggplot2)
# 折线图
ggplot(df, aes(x = date, y = value, color = category)) +
geom_line() +
labs(title = "时间趋势") +
theme_minimal()
# 散点图
ggplot(df, aes(x = feature1, y = feature2, color = target)) +
geom_point() +
labs(title = "特征关系") +
theme_minimal()
# 条形图
ggplot(df, aes(x = category, fill = category)) +
geom_bar() +
labs(title = "类别分布") +
theme_minimal()数据是分类的吗?
├── 是 → 卡方检验
└── 否 → 数据是否正态分布?
├── 是 → t检验(2组) / 方差分析(3组及以上)
└── 否 → 曼-惠特尼U检验(2组) / 克鲁斯卡尔-沃利斯检验(3组及以上)def sample_size计算器(effect_size, alpha=0.05, power=0.8):
from statsmodels.stats.power import TTestIndPower
analysis = TTestIndPower()
n = analysis.solve_power(effect_size=effect_size, alpha=alpha, power=power)
return int(np.ceil(n * 2)) # 总样本量# [分析标题]
## 关键发现
1. [带证据的发现1]
2. [带证据的发现2]
3. [带证据的发现3]
## 方法论
- 数据:[来源、时间范围、样本量]
- 方法:[使用的统计检验]
- 局限性:[注意事项]
## 建议
1. [行动1]
2. [行动2]
3. [行动3]
## 附录
- 图表:[可视化列表]
- 统计表格:[p值、置信区间]# [分析标题] - 技术报告
## 数据
- 来源:[数据库/文件]
- 记录数:[数量]
- 变量:[列表及类型]
- 缺失值:[汇总信息]
## 方法
- [方法1]:[理由说明]
- [方法2]:[理由说明]
## 结果
### [检验1]
- 统计量:[数值]
- p值:[数值]
- 效应量:[数值]
- 置信区间:[范围]
## 代码
[可复现的代码]| 陷阱 | 解决方案 |
|---|---|
| p值操纵(P-hacking) | 提前注册研究假设 |
| 相关性不等于因果性 | 尽可能使用实验设计 |
| 选择偏差 | 采用随机抽样 |
| 存活者偏差 | 包含失败案例 |
| 辛普森悖论 | 分层分析
已收录 7 个 Skill