如何将CSV中分类变量smoker重编码为虚拟变量smoke?
解决方案
你可以通过以下几种方式将smoker列重编码为名为smoke的虚拟变量,以下是整合后的完整代码:
方法1:手动映射(适用于明确二元分类值,如"yes"/"no")
import numpy as np import pandas as pd import statsmodels.formula.api as sms from statsmodels.formula.api import ols ins = pd.read_csv("insurance.csv") # Recode the column smoker into a dummy variable with the prefix smoke # 假设smoker列值为"yes"(吸烟者)和"no"(非吸烟者) ins['smoke'] = ins['smoker'].map({'yes': 1, 'no': 0}) results = ols(formula='charges ~ age + bmi + smoke', data=ins) model = results.fit() aov_table = sms.stats.anova_lm(model, typ=2) print(aov_table)
方法2:使用pandas get_dummies生成虚拟变量(通用型)
如果smoker是多分类变量(二元场景也适用),这种方法更灵活:
import numpy as np import pandas as pd import statsmodels.formula.api as sms from statsmodels.formula.api import ols ins = pd.read_csv("insurance.csv") # Recode the column smoker into a dummy variable with the prefix smoke # 生成带前缀的虚拟变量,提取目标列作为smoke dummy_df = pd.get_dummies(ins['smoker'], prefix='smoke') # 提取"smoke_yes"列作为虚拟变量(1代表吸烟者) ins['smoke'] = dummy_df['smoke_yes'] # 可选:删除原smoker列,避免模型混淆 # ins.drop('smoker', axis=1, inplace=True) results = ols(formula='charges ~ age + bmi + smoke', data=ins) model = results.fit() aov_table = sms.stats.anova_lm(model, typ=2) print(aov_table)
补充说明
- 若
smoker列已是布尔值(True/False),可直接转整数:ins['smoke'] = ins['smoker'].astype(int) - 虚拟变量中1代表目标类别(如吸烟者),0代表参照类别(如非吸烟者),模型中
smoke的系数将直接反映两类群体在charges上的差异
内容的提问来源于stack exchange,提问作者Kayla
相关产品推荐
相关产品推荐

