# 、%{} 和%{#} 什么时候该用

Struts2中有值堆栈和堆栈上下文的概念,你用 <s:debug />可以看出.

S标签中用#可以取出堆栈上下文中的存放的对象.
用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.

%{#}就不太清楚了.肯定也是拿这两个区域里面的东西.

 

 

%{}用于计算表达式
      如%{10+20}结果将输出30
      如%{"a"+"b"}结果将输出"ab"
#通常强调从上下文取
      如#parameters.name[0]等价于request.getParameter("name")
      如#session.name等价于session.getAttribute("name")
      如#request.name等价于request.getAttribute("name")
%{#}仍然用于计算表达式,只不过操作元可以是变量
      如先定义一个变量
      <s:set name="age" value="%{25}"/>
      则%{#age}将输出25,也可以省略"#",写为%{age}
      若将age加10,可这么写:
      %{#age+10},将输出30.不能省略"#"。也就说变量用于计算时不能省略"#"

 

http://topic.youkuaiyun.com/u/20080217/20/6f5b5cff-91ea-4028-8a52-ce6cb8b5ef7f.html

# %% [markdown] # 课程目标:Epidermal Growth Factor Receptor (EGFR)抑制剂建模之数据清洗 # 1、EGFR数据下载 # 2、EGFR数据清洗 # %% import pandas as pd import warnings # 屏蔽一些无用的提示信息 warnings.filterwarnings("ignore") # 读取数据集 data = pd.read_csv( "data/CHEMBL203.csv", # 注意这里的相对径 sep=";" # 每行数据的分隔符是; ) # %% [markdown] # 展示前5行数据 # %% data.head(2) # %% [markdown] # 输出所有列的名称,方便后面使用 # %% data.columns # %% [markdown] # 挑选出对建模有用的数据列 # %% [markdown] # # %% data = data[ [ "Molecular Weight", "Smiles", "Standard Type", "Standard Relation", "Standard Value", "Standard Units", ] ] # %% data.head(5) # %% data[&#39;Standard Relation&#39;].unique() # %% [markdown] # 在Standard Relation表示数据集中的Standard Value值与文献中报道活性值的关系 # 这里我们挑选=关系的数据 # %% data = data[data["Standard Relation"].isin(["&#39;=&#39;", "&#39;~&#39;"])] # 注意这里 双引号中的的 &#39;=&#39;,有2个单引号 print(len(data)) # %% [markdown] # 将所有分子的Smiles进行标准化,因为一个分子非标准化的SMILES会有多个 # 标准化后,每个分子的Smiles均相同,方便去除重复的分子 # %% from rdkit import Chem from tqdm.notebook import tqdm def get_canoncialsmiles(smiles): try: mol = Chem.MolFromSmiles(smiles) if mol: return Chem.MolToSmiles(mol, canonical=True) else: return None except: return None data[&#39;Smiles&#39;] = [get_canoncialsmiles(smiles) for smiles in tqdm(data[&#39;Smiles&#39;])] # %% [markdown] # 对Smiles进行去除空白值,因为SMILES为空的分子,就没有分子结构 # %% data.dropna(subset=[&#39;Smiles&#39;], how = &#39;any&#39;, inplace=True) print(len(data)) # %% [markdown] # 对Smiles进行去重,对于重复的SMILES,只保留第一个 # %% data.drop_duplicates(subset=[&#39;Smiles&#39;], keep=&#39;first&#39;, inplace=True) print(len(data)) # %% [markdown] # 查看Standard Type,也就是活性类型的情况 # %% data[&#39;Standard Type&#39;].unique() # %% [markdown] # 在挑选的时候,一定要注意各个活性类型的意义,只挑选与你的目标一致的活性类型 # 不同活性类型可能对应的分别是抑制剂或激活剂,这2类有着明显不同的机理,因此,不要混用 # %% data = data[ data["Standard Type"].isin(["Kd", "IC50", "Inhibition", "Ki", "EC50", "INH"]) ] print(len(data)) # %% [markdown] # 查看活性单位的情况 # %% data[&#39;Standard Units&#39;].unique() # %% [markdown] # 为什么删除&#39;/uM&#39;?请检索它的意义 # %% data = data[data[&#39;Standard Units&#39;].isin([&#39;nM&#39;, &#39;%&#39;, &#39;ug.mL-1&#39;, &#39;uM&#39;, &#39;10^3 uM&#39;])] print(len(data)) # %% [markdown] # 统一单位,必须要统一单位 # 因为后面标记分子是活性分子还是非活性分子时,我们依据的是活性值 # %% def unit_convert(data:pd.DataFrame): for index, row in data.iterrows(): unit = row["Standard Units"] value = row["Standard Value"] mw = row["Molecular Weight"] if unit == "ug.mL-1": data.loc[index, "Standard Value"] = 1e6 * value / mw data.loc[index, "Standard Units"] = &#39;nM&#39; if unit == "uM": data.loc[index, "Standard Value"] = 1e3 * value data.loc[index, "Standard Units"] = "nM" if unit == "10^3 uM": data.loc[index, "Standard Value"] = value * 1e6 data.loc[index, "Standard Units"] = "nM" unit_convert(data) # %% data["Standard Units"].unique() # %% [markdown] # 删除活性值为空的数据行 # %% data.dropna(subset=[&#39;Standard Value&#39;], inplace=True) print(len(data)) # %% def set_activity(data:pd.DataFrame): activity: list = [] ic50_low = 1000 ic50_high = 20000 inh_low = 50 inh_high = 70 for _, row in data.iterrows(): value = row[&#39;Standard Value&#39;] if row["Standard Units"] == "nM": if value <= ic50_low: activity.append(1) if value >= ic50_high: activity.append(0) #if ic50_low<value<ic50_high if value< ic50_high and value>ic50_low: activity.append(2) if row["Standard Units"] == "%": if value <= inh_low: activity.append(0) if value >= inh_high: activity.append(1) if inh_low< value < inh_high: activity.append(2) return activity # %% data["Activity"] = set_activity(data) # %% data # %% from rdkit import Chem from rdkit.Chem import rdMolDescriptors import numpy as np data = data.query(&#39;Activity !=2&#39;) mols = [Chem.MolFromSmiles(smi) for smi in data[&#39;Smiles&#39;]] x = np.array([rdMolDescriptors.GetMorganFingerprintAsBitVect(mol, 2, 2048) for mol in mols]) y = data[&#39;Activity&#39;] # %% from sklearn.model_selection import train_test_split x_train, x_test , y_train, y_test = train_test_split(x, y, test_size= 0.2, random_state=42) # %% from sklearn.ensemble import RandomForestClassifier rfc = RandomForestClassifier(class_weight=&#39;balanced&#39;, random_state=42) model: RandomForestClassifier = rfc.fit(x_train, y_train) # %% from sklearn.metrics import accuracy_score, confusion_matrix , classification_report y_pred = model.predict(x_test) print(accuracy_score(y_test, y_pred)) print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred)) # %% [markdown] # 0.8922056384742952 # [[ 326 132] # [ 63 1288]] # precision recall f1-score support # # 0 0.84 0.71 0.77 458 # 1 0.91 0.95 0.93 1351 # # accuracy 0.89 1809 # macro avg 0.87 0.83 0.85 1809 # weighted avg 0.89 0.89 0.89 1809 # %% print(len(data.query(&#39;Activity==1&#39;))) print(len(data.query("Activity==0"))) # %% 以这个模板生成一个清洗文件名为badian.csv的数据
最新发布
12-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值