如何在python中从字符索引中查找行号?
我有一个基因数据集,其中一行的索引是基因的名称。我还希望找到任何给定基因的行号,这样我就可以在基因经过机器学习模型预测后单独观察它们——以shap解释基因的预测。我如何编码形状图目前需要一个行号来提取特定的基因 我的数据如下所示:如何在python中从字符索引中查找行号?,python,pandas,indexing,shap,Python,Pandas,Indexing,Shap,我有一个基因数据集,其中一行的索引是基因的名称。我还希望找到任何给定基因的行号,这样我就可以在基因经过机器学习模型预测后单独观察它们——以shap解释基因的预测。我如何编码形状图目前需要一个行号来提取特定的基因 我的数据如下所示: Index Feature1 Feature2 ... FeatureN Gene1 1 0.2 10 Gene2 1 0.1 7 Gene3 0
Index Feature1 Feature2 ... FeatureN
Gene1 1 0.2 10
Gene2 1 0.1 7
Gene3 0 0.3 10
Index index_mapping
Gene1 0
Gene2 1
Gene3 2
例如,如果我想拉出并查看Gene3
的模型预测,我会这样做:
import shap
shap.initjs()
xgbr = xgboost.XGBRegressor()
def shap_plot(j):
explainerModel = shap.TreeExplainer(xgbr)
shap_values_Model = explainerModel.shap_values(X_train)
p = shap.force_plot(explainerModel.expected_value, shap_values_Model[j], X_train.iloc[[j]],feature_names=df.columns)
return(p)
shap_plot(3)
做shap_plot(3)
对我来说是个问题,因为我实际上不知道我想要的基因是否在随机训练或测试数据的第3行
有没有办法从已知的基因索引中提取行号?或者可能重新编码我的形状图,以便它接受我的字符串索引?我有生物学背景,希望您能给予指导。试试下面的方法。df是您的数据帧,结果将给出给定基因的行号(第一行结果为1等)
list(df.index).index('Gene3')+1
#result
3
有很多方法可以获取与索引值或列值关联的行号 例如,如果您的基因实际上位于名为
“Index”
的列中,您可以执行以下操作:
x_-train[x_-train[“Index”]=“gene3”]。Index+1
如果没有,您可以通过在数据帧上调用reset\u index()
来实现这一点
另一个选择是在数据帧上创建一个从1-n开始的新列,例如
mapping = x_train.assign(index_number=range(x_train.shape[0]))["index_number"]
现在映射应如下所示:
Index Feature1 Feature2 ... FeatureN
Gene1 1 0.2 10
Gene2 1 0.1 7
Gene3 0 0.3 10
Index index_mapping
Gene1 0
Gene2 1
Gene3 2
调用mapping[“Gene2”]
应该返回1
除此之外,我注意到你使用了力图。我建议您阅读shap为什么用决策图取代它们
此外,每次调用函数时都要重建树解释程序。这是非常低效的,为什么不构建一次,然后多次查询它:
类图形绘图仪:
def_uuu初始(自我、模型、x_系列):
self.explainer\u model=shap.treeeexplainer(model)
self.shap\u values\u Model=self.explainer\u Model.shap\u values(x\u train)
self.gene_index_mapping=x_train.assign(index_value=range(x_train.shape[0]))[“index_value”]
def绘图(基因):
idx=自我。获取索引(基因)
shap_plot=shap.force_plot(…)#这里用idx替换j
返回形状图
def_get_索引(基因:str)->int:
#你在这里选择的方法。例如https://stackoverflow.com/a/64279019/1011724
#在本例中,我在_init__fn中构建了一个映射系列,因此您可以通过直接使用基因字符串进行索引来获得索引号:
返回self.gene\u index\u mapping.loc[gene]
这些基因是df的实际索引还是在一个名为“索引”的列中??它们是实际索引