You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:57:17