如何基于同一DataFrame的不同子集高效重复统计建模分析?
高效实现多子集混合模型分析的方法
需求背景
你需要基于同一DataFrame的不同子集依次运行混合线性模型分析,具体任务包括:
- 针对个体会员注册(
indvsignup)全量数据构建模型 - 筛选
type为monthly的子集,重新构建indvsignup模型 - 筛选
famsignup列无缺失值的子集,针对家庭会员注册(famsignup)构建模型
当前每次重复分析都重新导入数据集或新建Notebook,效率低下,以下是更高效的实现方案。
数据集示例
| responseID | indvsignup | famsignup | type | usage | age |
|---|---|---|---|---|---|
| 1 | 10 | 10 | annual | yes | 56 |
| 1 | 9 | 1 | monthly | yes | 19 |
| 2 | 1 | NaN | monthly | no | 26 |
| 2 | 2 | 1 | annual | no | 19 |
| 3 | 8 | NaN | annual | yes | 35 |
| 3 | 1 | 8 | monthly | no | 39 |
高效实现步骤
1. 一次性导入数据集
只需要在代码开头导入一次数据集,后续所有分析都基于这个DataFrame操作:
import pandas as pd import statsmodels.formula.api as smf # 导入数据集(替换为你的数据路径) df = pd.read_csv("your_data.csv") # 注意:确保列名大小写统一,比如原数据是responseID,代码里不要写成ResponseId
2. 封装模型训练函数
把重复的模型训练和结果输出逻辑封装成函数,避免重复编写相同代码:
def run_mixed_model(data, formula, group_col): """ 运行混合线性模型并打印模型摘要 参数: data: 用于建模的DataFrame子集 formula: 模型公式字符串 group_col: 分组列名 """ model = smf.mixedlm(formula, data, groups=data[group_col]).fit() print("="*50) print(f"模型公式: {formula}") print("="*50) print(model.summary()) return model
3. 定义分析任务清单并批量执行
把每个分析任务的关键信息(筛选条件、模型公式、分组列)整理成列表,通过循环批量执行所有任务:
# 定义所有分析任务 analysis_tasks = [ # 任务1:全量数据跑indvsignup模型 { "name": "全量数据-个体会员注册模型", "filter": lambda df: df, # 全量数据无筛选 "formula": "indvsignup ~ C(type) + C(usage) + age", "group_col": "responseID" }, # 任务2:筛选type=monthly的子集跑indvsignup模型 { "name": "月度用户-个体会员注册模型", "filter": lambda df: df[df["type"] == "monthly"], "formula": "indvsignup ~ C(usage) + age", "group_col": "responseID" }, # 任务3:筛选famsignup无缺失的子集跑famsignup模型 { "name": "家庭会员无缺失数据-家庭会员注册模型", "filter": lambda df: df[df["famsignup"].notna()], "formula": "famsignup ~ C(type) + C(usage) + age", "group_col": "responseID" } ] # 循环执行所有任务 for task in analysis_tasks: print(f"\n--- 开始执行:{task['name']} ---") filtered_df = task["filter"](df) run_mixed_model(filtered_df, task["formula"], task["group_col"])
优势说明
- 避免重复劳动:不需要每次重复编写模型训练代码,修改任务只需调整任务清单
- 统一管理:所有分析任务集中在一处,便于维护和修改
- 效率提升:仅导入一次数据,减少IO操作耗时
内容的提问来源于stack exchange,提问作者drsmj
相关产品推荐
相关产品推荐

