用python实现以下内容:一、从full database.xml文件中提取approved药物的id、name、type和<expertmental-properties>/<calculated-properties>中的Molecular Weight及另一个数值property。将以上信息读入一个DataFrame中,保存为property.csv文件。二、统计出不同type药物的Molecular Weight和另一个数值property的平均值(降序排列),将平均值输出到新文件“average.txt”中。三、对不同type药物的Molecular Weight,绘制并显示箱型图,将图像导出到“Boxplot.pdf”中。
时间: 2024-02-20 08:01:53 浏览: 158
用python实现文件的读取
好的,我可以为您提供Python代码实现。请注意,以下代码需要使用xml.etree.ElementTree、pandas和matplotlib库,您需要先安装它们。
```python
import xml.etree.ElementTree as ET
import pandas as pd
import matplotlib.pyplot as plt
# 一、提取信息到DataFrame并保存为csv文件
tree = ET.parse('full_database.xml')
root = tree.getroot()
data = []
for drug in root.findall(".//drug[./groups/group='approved']"):
drug_id = drug.find('drugbank-id').text
drug_name = drug.find('name').text
drug_type = drug.find('groups/group').text
drug_weight = drug.find('.//property[@kind="Molecular Weight"]/value')
drug_property = drug.find('.//property[@kind="Another Property"]/value')
if drug_weight is not None and drug_property is not None:
drug_weight = drug_weight.text
drug_property = drug_property.text
data.append([drug_id, drug_name, drug_type, drug_weight, drug_property])
df = pd.DataFrame(data, columns=['ID', 'Name', 'Type', 'Molecular Weight', 'Another Property'])
df.to_csv('property.csv', index=False)
# 二、计算不同type药物的平均值并输出到文件
avg_df = df.groupby('Type').mean().sort_values('Molecular Weight', ascending=False)
avg_df.to_csv('average.txt', sep='\t', index=True)
# 三、绘制箱型图并导出到文件
plt.figure(figsize=(10, 6))
df.boxplot(column=['Molecular Weight'], by='Type')
plt.savefig('Boxplot.pdf')
```
以上代码实现了您提出的三个问题。第一部分提取了approved药物的id、name、type和<expertmental-properties>/<calculated-properties>中的Molecular Weight及另一个数值property,并将其存储在名为property.csv的文件中。第二部分统计了不同type药物的Molecular Weight和另一个数值property的平均值,并将结果输出到名为average.txt的文件中。第三部分绘制了不同type药物的Molecular Weight的箱型图,并将其保存为名为Boxplot.pdf的文件。
阅读全文