在python进行处理分析时,经常要写很多重复的EDA代码、统计检验函数、可视化脚本等,既耗时又容易出错。今天我们就来看看一款python数据分析工具包。它基于pandas,Numpy和python标准库打造,内置全套可直接用于生产环境的模版,从EDA探索到统计检验,从数据画像到可视化,轻松搞定。安装好它之后,通过几个步骤就能实现数据 分析,我们来看段代码from src.python_data_analysis_toolkit.core import DataProfiler, EDARunnerfrom src.python_data_analysis_toolkit.utils import detect_outliers, bin_column# 1. 对数据集进行画像分析profiler = DataProfiler(df) # df为你的数据集report = profiler.run()print(report)# 输出示例:Columns: 15 | Rows: 45,231 | Missing: 3.2% | Duplicates: 847# 2. 运行自动化EDA分析eda = EDARunner(df, target_column="revenue") # target_column为目标变量(如营收)eda.univariate_analysis() # 单变量分析eda.correlation_matrix() # 相关性矩阵eda.target_vs_features() # 目标变量与特征的关系分析eda.save_report("output/eda_report.html") # 保存报告到指定路径# 3. 使用工具函数(异常值检测、数据分箱)outliers = detect_outliers(df["revenue"], method="iqr", threshold=1.5) # IQR法检测异常值df["revenue_bin"] = bin_column(df["revenue"], bins=5, strategy="quantile") # 分位数分箱
工具包的核心函数都封装得十分简洁,下面两个高频场景的示例,帮你快速掌握用法:
from collections import Counterimport statisticsdef profile_column(values: list) -> dict: """ 生成单列数据的统计画像。 参数: values: 列中的值列表(可能包含None)。 返回: 包含完整性、唯一性和分布统计信息的字典。 """ non_null = [v for v in values if v is not None] total = len(values) n = len(non_null) profile = { "总数量": total, "非空数量": n, "空值数量": total - n, "完整性": round(n / total, 4) if total > 0 else 0, "唯一值数量": len(set(non_null)), "唯一性": round(len(set(non_null)) / n, 4) if n > 0 else 0, } # 数值型数据统计 numeric = [v for v in non_null if isinstance(v, (int, float))] if numeric: profile.update({ "最小值": min(numeric), "最大值": max(numeric), "平均值": round(statistics.mean(numeric), 4), "中位数": round(statistics.median(numeric), 4), "标准差": round(statistics.stdev(numeric), 4) if len(numeric) > 1 else 0, }) # 分类数据的Top3值统计 if not numeric and non_null: top_3 = Counter(non_null).most_common(3) profile["Top3高频值"] = top_3 return profile
无需手动推导公式,一键完成两独立样本的t检验,还会自动计算效应量(Cohen's d),帮你判断差异的大小:
import mathdef two_sample_ttest(sample_a: list[float], sample_b: list[float]) -> dict: """ 两独立样本的Welch t检验(不假设方差相等)。 返回t统计量、自由度和近似p值,以及效应量。 """ n_a, n_b = len(sample_a), len(sample_b) mean_a = statistics.mean(sample_a) mean_b = statistics.mean(sample_b) var_a = statistics.variance(sample_a) var_b = statistics.variance(sample_b) # Welch t统计量计算 se = math.sqrt(var_a / n_a + var_b / n_b) t_stat = (mean_a - mean_b) / se # Welch-Satterthwaite自由度计算 num = (var_a / n_a + var_b / n_b) ** 2 denom = (var_a / n_a) ** 2 / (n_a - 1) + (var_b / n_b) ** 2 / (n_b - 1) df = num / denom # Cohen's d效应量计算(判断差异大小) pooled_std = math.sqrt(((n_a - 1) * var_a + (n_b - 1) * var_b) / (n_a + n_b - 2)) cohens_d = (mean_a - mean_b) / pooled_std if pooled_std > 0 else 0 return { "t统计量": round(t_stat, 4), "自由度": round(df, 2), "Cohen's d效应量": round(cohens_d, 4), "样本A平均值": round(mean_a, 4), "样本B平均值": round(mean_b, 4), "效应量解读": ( "小效应" if abs(cohens_d) < 0.5 else "中等效应" if abs(cohens_d) < 0.8 else "大效应" ), }# 示例:比较两个用户群体的营收差异对照组 = [45.2, 52.1, 48.7, 51.3, 49.8, 53.2, 47.6, 50.1]实验组 = [55.3, 58.7, 52.1, 57.8, 54.6, 59.2, 56.1, 53.9]结果 = two_sample_ttest(对照组, 实验组)print(结果)
工具包还支持自定义配置,新建config.example.yaml文件来进行配置# config.example.yamlprofiling: sample_size: null # null = 分析所有行,可设置具体数值(如1000)抽样分析 completeness_threshold: 0.95 # 完整性阈值,低于该值的列会被标记outlier_detection: default_method: "iqr" # 异常值检测默认方法:iqr(四分位距法)| zscore(z分数法) iqr_multiplier: 1.5 # IQR法的倍数(常用1.5) zscore_threshold: 3.0 # Z分数法的阈值(常用3.0)
这款工具包有点就是“复用性”和“标准化”——它把数据分析中最常用、最重复的工作,都封装成了可直接调用的模板和函数,让我们从繁琐的重复编码中解放出来,用于数据本身的分析。