# Add a one hot encoding of drugs to the drug features one_hot = pd.DataFrame(np.eye(len(drug_fps)), columns=["hot_" + str(i) for i in range(len(drug_fps))], dtype=int).set_index(drug_fps.index) drug_feat = pd.concat((drug_fps, one_hot), axis=1) return drug_feat, rec_id_to_idx_dict解释一下
时间: 2023-06-17 12:05:34 浏览: 78
这段代码的功能是将药物特征向量(drug_fps)转换为药物特征矩阵(drug_feat),并且在药物特征矩阵中添加了药物的 one-hot 编码。
首先,使用 np.eye() 函数创建一个单位矩阵,该矩阵的大小为药物特征向量的长度。然后,将每个单位矩阵的行作为一个药物的 one-hot 编码,将这些编码作为列添加到一个新的 DataFrame 中。这个 DataFrame 的索引与原始药物特征向量的索引相同。
接下来,使用 set_index() 函数将新的 DataFrame 的索引设置为原始药物特征向量的索引,以便将原始药物特征向量和新的 one-hot 编码矩阵按行连接起来。最后,使用 concat() 函数将原始药物特征向量和新的 one-hot 编码矩阵按列连接起来,得到一个新的药物特征矩阵(drug_feat)。
返回的 drug_feat 是一个 DataFrame,其中每行代表一个药物,每列代表一个药物特征或 one-hot 编码,rec_id_to_idx_dict 是一个字典,用于将药物 ID 映射到其在 drug_feat 矩阵中的行索引。
相关问题
帮我解读下这个代码:import csv import os import numpy as np import pandas as pd import pymysql from pymysql import connect # %% # drug_table = pd.read_excel('./data/drug.xlsx') drug_table_an = pd.read_excel('./data/mimiciv_feature_info.xlsx', sheet_name='antibiotic') drug_table_sa = pd.read_excel('./data/mimiciv_feature_info.xlsx', sheet_name='sedatives_and_analgesics') drug_table_co = pd.read_excel('./data/mimiciv_feature_info.xlsx', sheet_name='anticoagulant') prescriptions = pd.read_csv('/data/check_in/EHR_data/MIMIC_III/CSV/PRESCRIPTIONS.csv') item = pd.read_csv('/data/check_in/EHR_data/MIMIC_III/CSV/D_ITEMS.csv') labitem = pd.read_csv('/data/check_in/EHR_data/MIMIC_III/CSV/D_LABITEMS.csv') columns_pre = prescriptions.columns.tolist() columns_item = item.columns.tolist() columns_labitem = labitem.columns.tolist() # drugs = (drug_table['anticoagulant'].to_list()+drug_table['antiplatelet'].to_list())[:-4] drugs = ['barbital' ,'zepam' ,'zolam' ,'zolpidem' ,'propofol' ,'dexmedetomidine' ,'pentobarbital' ,'clonazepam' ,'alprazolam' ,'estazolam' ,'Zolpidem Tartrate'] drug_test_tsv = open('drug_patients_sedative.csv', 'w', newline='', encoding='utf-8') drug_test = csv.writer(drug_test_tsv, delimiter=',') drug_test.writerow(columns_pre) item_test_tsv = open('item_patients_sedative.csv', 'w', newline='', encoding='utf-8') item_test = csv.writer(item_test_tsv, delimiter=',') item_test.writerow(columns_item) labitem_test_tsv = open('labitem_patients_sedative.csv', 'w', newline='', encoding='utf-8') labitem_test = csv.writer(labitem_test_tsv, delimiter=',') labitem_test.writerow(columns_labitem) # import pdb;pdb.set_trace() for drug in drugs: # print(type(drug)) sql = "select * FROM PRESCRIPTIONS where drug like '%"+ drug + "%' or drug_name_poe like '%"+ drug + "%' or drug_name_generic like '%"+ drug + "%'" print(sql) conn = connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mimiciii') cursor = conn.cursor() cursor.execute(sql) data_tmp = cursor.fetchall() # print(data_tmp is None) if len(data_tmp) != 0: for data_cur in data_tmp: print(data_cur[1], data_cur[2], data_cur[3], data_cur[7], data_cur[8], data_cur[9]) drug_test.writerow(list(data_cur)) # import pdb;pdb.set_trace() for drug in drugs: # print(type(drug)) sql = "select * FROM D_ITEMS where label like '%{}%'" .format(drug) print(sql) conn1 = connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mimiciii') cursor1 = conn1.cursor() cursor1.execute(sql) data_tmp = cursor1.fetchall() if len(data_tmp) != 0: for data_cur in data_tmp: print(data_cur[1], data_cur[2]) item_test.writerow(list(data_cur)) # import pdb;pdb.set_trace() for drug in drugs: # print(type(drug)) sql = "select * FROM D_LABITEMS where label like '%{}%'" .format(drug) print(sql) conn1 = connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mimiciii') cursor1 = conn1.cursor() cursor1.execute(sql) data_tmp = cursor1.fetchall() if len(data_tmp) != 0: for data_cur in data_tmp: print(data_cur[1], data_cur[2]) labitem_test.writerow(list(data_cur)) # import pdb;pdb.set_trace() # %% import pandas as pd drug = pd.read_csv('drug_patients_sedative.csv') print(drug.DRUG.unique()) # %% print(drug.DRUG_NAME_POE.unique()) # %% print(drug.DRUG_NAME_GENERIC.unique()) # %%
这段代码是Python语言的导入模块语句,它导入了csv、os、numpy、pandas和pymysql等模块,并从pymysql模块中导入connect函数。这些模块提供了各种功能,如读写CSV文件、操作操作系统、进行数值计算、处理数据和连接MySQL数据库等。
drugs_to_search = [ {"drug_name": "Viagra"}, {"input_smiles": "C[C@@H]1C[C@H]2[C@@H]3CCC4=CC(=O)C=C[C@]4(C)[C@@]3(F)C@@HC[C@]2(C)[C@@]1(O)C(=O)CO"}, {"pubchem_cid": "5362132"}, {"drug_name": "bla"}] mapped_drugs = rsv.map_drugs(pd.DataFrame(drugs_to_search))解释一下
这段代码的作用是将一个包含不同药品信息的列表 `drugs_to_search` 映射成一个 Pandas DataFrame 格式的数据,然后再将映射后的数据输入到名为 `rsv.map_drugs()` 的函数中进行处理。
具体来说,`drugs_to_search` 列表中包含了四个元素,每个元素都是一个字典类型,分别表示了不同的药品信息。其中,第一个元素的键为 `"drug_name"`,表示药品的名称;第二个元素的键为 `"input_smiles"`,表示药品的 SMILES 表示法;第三个元素的键为 `"pubchem_cid"`,表示药品的 PubChem ID;第四个元素的键同样为 `"drug_name"`,表示另一个药品的名称。
`pd.DataFrame(drugs_to_search)` 表示将 `drugs_to_search` 列表转换成一个 Pandas DataFrame 格式的数据,其中每个元素的键将成为 DataFrame 的列名,而每个元素的值将成为 DataFrame 的一行数据。转换后的 DataFrame 数据将作为参数传递给 `rsv.map_drugs()` 函数进行处理。
阅读全文