运行 KaplanMeier 模型的函数(Python)

Function to run KaplanMeier model(Python)

在我的数据集 data1 中,我有一个区域列,其中有 3 个 categories:Asia,欧洲,北美。现在我正在尝试将属于这 3 个区域的某些机器零件的生存分析纳入 KM 模型。使用的变量是机器崩溃前的运行小时数。我使用了以下代码,运行良好:

T=data1['op_hours']
Region_Asia=(data1['Region'] == 'ASIA')
Region_EUROPE=(data1['Region'] == 'EUROPE')
Region_NORTH=(data1['Region'] == 'NORTH AMERICA')
from lifelines import KaplanMeierFitter
kmf = KaplanMeierFitter()
ax = plt.subplot(111)
kmf.fit(T[Region_Asia], label="Asia")
kmf.plot(ax=ax,ci_force_lines=False)
kmf.fit(T[Region_EUROPE], label="Europe")
kmf.plot(ax=ax, ci_force_lines=False)
kmf.fit(T[Region_NORTH], label="North America")
kmf.plot(ax=ax, ci_force_lines=False)
plt.ylim(0, 1);
plt.title("Lifespans of different machines")

我得到以下情节:

现在,我正在尝试创建一个函数,这样我就不必为每个类别编写单独的代码行来获得 KM 拟合。我试过这个:

def Kaplan(c):
    a=[]
    u=[]
    u=c.unique()
    T=data1['op_hours']
    from lifelines import KaplanMeierFitter
    kmf = KaplanMeierFitter()
    ax = plt.subplot(111)
    for i in range(len(u)):
        a=u[i]
        kmf.fit(T[a])
        kmf.plot(ax=ax,ci_force_lines=False)
        plt.ylim(0, 1);
        plt.title("Lifespans of different machines")

Kaplan(data1.Region)

我得到:KeyError: 'ASIA' 有人可以帮我吗,我还是编码方面的新手。非常感谢。

根据你开头给出的代码,你可以这样做

from lifelines import KaplanMeierFitter

def Kaplan(dt, time, regions):
    tobefit = lambda region: dt[time][(dt['Region'] == region)]
    ax = plt.subplot(111)
    kmf = KaplanMeierFitter()
    for region in regions:
        kmf.fit(tobefit(region), label=region)
        kmf.plot(ax=ax,ci_force_lines=False)
    plt.ylim(0, 1);
    plt.title("Lifespans of different machines")

Kaplan(data1, "op_hours", ["Asia", "Europe", "North America"])

更新

如果您有固定的参数并且不想在每次调用函数时都键入它们。您可以使用默认参数定义函数

def Kaplan(dt, time="op_hours", regions=["Asia", "Europe", "North America"]):
    tobefit = lambda region: dt[time][(dt['Region'] == region)]
    ax = plt.subplot(111)
    kmf = KaplanMeierFitter()
    for region in regions:
        kmf.fit(tobefit(region), label=region)
        kmf.plot(ax=ax,ci_force_lines=False)
    plt.ylim(0, 1);
    plt.title("Lifespans of different machines")

# Then you can call your Kaplan function without specifying time and regions  
Kaplan(data1)