diff --git a/Replicating_Phenomizer_Results/Replicating_Phenomizer_Results.ipynb b/Replicating_Phenomizer_Results/Replicating_Phenomizer_Results.ipynb
new file mode 100644
index 0000000..8ff6363
--- /dev/null
+++ b/Replicating_Phenomizer_Results/Replicating_Phenomizer_Results.ipynb
@@ -0,0 +1,3289 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# The goal of this notebook is to replicate Phenomizer results in the paper \"Wikidata as a FAIR knowledge graph for the life sciences\"\n",
+ "Notes:
\n",
+ "1) Set up a python virual environment and make sure required softwares are installed. You can do do this in terminal by running `pip install -r requirements.txt`
\n",
+ "* Wikidata integrator: https://github.com/SuLab/WikidataIntegrator
\n",
+ "* Requirements: https://github.com/SuLab/Wikidata-phenomizer/blob/master/Replicating_Phenomizer_Results/requirements.txt
\n",
+ "\n",
+ "2) Download \"Wikidata_phenomizer_input_modifier.py\" from github link:
\n",
+ "* Python script: https://github.com/SuLab/Wikidata-phenomizer/Replicating_Phenomizer_Results/Wikidata_phenomizer_input_modifier.py
\n",
+ "\n",
+ "\n",
+ "3) Install BOQA: https://github.com/sulab/boqa
\n",
+ "\n",
+ "4) Download hpo.obo files (you can do that in this notebook)
\n",
+ "5) Download phenotype_annotation.tab files (you can do this in this notebook)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### The following steps are done to manipulate the data for BOQA analysis:\n",
+ "* Download `hpo.obo` and `phenotype_annotation.tab` files.\n",
+ "* Generate `phenotype_annotation_wd.tab` files (essentially `phenotype_annotation.tab` files with wikidata items appended at the end).\n",
+ "* Rename each file `DBname` to those found in build 1266. (Makes analysis more consistent).\n",
+ "* Run BOQA\n",
+ "* Extract text from BOQA\n",
+ "* Graph!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Import libraries required."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Downloading the annotation_files and obo_files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pwd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# create a directory to download annotation files to.\n",
+ "!mkdir _annotation_files\n",
+ "os.chdir(\"_annotation_files\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Download `phenotype_annotation.tab` builds from human phenotype ontology Jenkin's servers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "# From Jenkins, Download all `phenotype_annotation.tab` files\n",
+ "phenotype_annotation_ls = ['1266','1265','1264','1263','1262',\n",
+ " '1259','1254','1252','1249','1248',\n",
+ " '1246','1241','1239','1237']\n",
+ "\n",
+ "for a_file in phenotype_annotation_ls:\n",
+ " curCount = phenotype_annotation_ls.index(a_file) # gets index from the list\n",
+ " fileName = \"http://compbio.charite.de/jenkins/job/hpo.annotations/\" + a_file +\"/artifact/misc/phenotype_annotation.tab\"\n",
+ " !wget $fileName -q\n",
+ " reName = 'pa_b' + phenotype_annotation_ls[curCount] + \".tab\"\n",
+ " !mv phenotype_annotation.tab $reName"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Change out (up) of this directory, create a new directory, and change into (down) that directory."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Get out of current directory, create a new directory, change into the new directory.\n",
+ "os.chdir(\"..\")\n",
+ "!mkdir _obo_files\n",
+ "os.chdir(\"_obo_files\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Download old `hpo.obo` builds from Bioportal into the newly created folder."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "# From Bioportal, download `hp.obo` files\n",
+ "obo_ls = ['577','576','575','574','573',\n",
+ " '572','571','570','569','568',\n",
+ " '567','566','564', '563']\n",
+ "\n",
+ "for a_file in obo_ls:\n",
+ " curCount = obo_ls.index(a_file) # gets index from the list\n",
+ " fileName = \"http://data.bioontology.org/ontologies/HP/submissions/\" + a_file + \"/download?apikey=8b5b7825-538d-40e0-9e9e-5ab9274a9aeb\"\n",
+ " !wget $fileName -q\n",
+ " reName = 'hp_b' + phenotype_annotation_ls[curCount] + \".obo\"\n",
+ " !mv download?apikey=8b5b7825-538d-40e0-9e9e-5ab9274a9aeb $reName\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Fix phenotype_annotation.tab builds 1248, 1249, 1252 and 1254 because they have extra columns..."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# fix build 1248, 1249, 1252 and 1254 because it has 15 columns vs 14 (why?!?!)\n",
+ "os.chdir(\"..\")\n",
+ "os.chdir(\"_annotation_files\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3020: DtypeWarning: Columns (3,7,11,14) have mixed types. Specify dtype option on import or set low_memory=False.\n",
+ " interactivity=interactivity, compiler=compiler, result=result)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# read to a dictionary, manipulate files with pandas\n",
+ "\n",
+ "toFix = ['b1248', 'b1249', 'b1252', 'b1254']\n",
+ "toFix_dict = dict()\n",
+ "\n",
+ "for item in toFix:\n",
+ " key = item\n",
+ " value = pd.read_csv(\"pa_\" + item + \".tab\", header = None, sep = \"\\t\")\n",
+ " toFix_dict.update({key:value})\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#*If you want to visualize the dataframe before column switching, convert this from markdown → code.*
\n",
+ "`for item in toFix:\n",
+ " display(toFix_dict[item].head())`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " 12 | \n",
+ " 13 | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 12 13 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " 12 | \n",
+ " 13 | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 12 13 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " 12 | \n",
+ " 13 | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 12 13 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " 12 | \n",
+ " 13 | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " 2013-05-29 | \n",
+ " HPO:skoehler | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 12 13 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME 2013-05-29 HPO:skoehler NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "for item in toFix:\n",
+ " display(toFix_dict[item].head())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Concatenate col 13 and 12 as 'cat', remove col 13 and 12, and reorder indices.\n",
+ "for item in toFix:\n",
+ " df = toFix_dict[item]\n",
+ " df['cat'] = df[13] + \"[\" + df[12] + \"]\"\n",
+ " del df[12]\n",
+ " del df[13]\n",
+ " value = df[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,'cat' , 14]]\n",
+ " toFix_dict.update({item:value})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#*If you want to visualize the dataframe after column switching.*
\n",
+ "\n",
+ "` for item in toFix:\n",
+ " display(toFix_dict[item].head()) `"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " cat | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 cat 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " cat | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 cat 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " cat | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 cat 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " cat | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0000252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001249 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001250 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001252 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " DECIPHER | \n",
+ " 1 | \n",
+ " Wolf-Hirschhorn Syndrome | \n",
+ " NaN | \n",
+ " HP:0001518 | \n",
+ " DECIPHER:1 | \n",
+ " IEA | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " O | \n",
+ " WOLF-HIRSCHHORN SYNDROME | \n",
+ " HPO:skoehler[2013-05-29] | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 \\\n",
+ "0 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0000252 DECIPHER:1 IEA \n",
+ "1 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001249 DECIPHER:1 IEA \n",
+ "2 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001250 DECIPHER:1 IEA \n",
+ "3 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001252 DECIPHER:1 IEA \n",
+ "4 DECIPHER 1 Wolf-Hirschhorn Syndrome NaN HP:0001518 DECIPHER:1 IEA \n",
+ "\n",
+ " 7 8 9 10 11 cat 14 \n",
+ "0 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "1 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "2 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "3 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN \n",
+ "4 NaN NaN NaN O WOLF-HIRSCHHORN SYNDROME HPO:skoehler[2013-05-29] NaN "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "for item in toFix:\n",
+ " display(toFix_dict[item].head())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Export merged files.\n",
+ "for item in toFix:\n",
+ " df = toFix_dict[item]\n",
+ " df.to_csv(\"pa_\" + item + \".tab\", sep = '\\t', header = None)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Congrats! You've downloaded the both the datasets and fixed the files that had too many columns. \n",
+ "Next we'll explore utilizing Phenomizer. Phenomizer (Su Lab) is a program that takes a `phenotype_annotation.tab` file, queries wikidata for all OMIM entries and appends them to the phenotype_annotation, and returns the file as a `phenotype_annotation_wd.tab` file."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Get `Wikidata_phenomizer_input_modifier.py` from github to the folder that holding your `_annotation_files`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2019-10-09 17:52:08-- https://raw.githubusercontent.com/turoger/Wikidata-phenomizer/master/Replicating_Phenomizer_Results/Wikidata_phenomizer_input_modifier.py\n",
+ "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.196.133\n",
+ "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.196.133|:443... connected.\n",
+ "HTTP request sent, awaiting response... 200 OK\n",
+ "Length: 3742 (3.7K) [text/plain]\n",
+ "Saving to: ‘Wikidata_phenomizer_input_modifier.py’\n",
+ "\n",
+ "Wikidata_phenomizer 100%[===================>] 3.65K --.-KB/s in 0s \n",
+ "\n",
+ "2019-10-09 17:52:09 (58.0 MB/s) - ‘Wikidata_phenomizer_input_modifier.py’ saved [3742/3742]\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "!wget https://raw.githubusercontent.com/turoger/Wikidata-phenomizer/master/Replicating_Phenomizer_Results/Wikidata_phenomizer_input_modifier.py"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/_annotation_files\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pwd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Run phenomizer to generate wikidata + HPO `_wd.tab` files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 131600\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3200\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "NGLY1-deficiency 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 146171\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3173\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 160275\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 274\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 68\n",
+ "lung cancer 28\n",
+ "Parkinson disease 20\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 11\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 172366\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 285\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG 68\n",
+ "lung cancer 28\n",
+ "Parkinson disease 20\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 11\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "LUNG CANCER 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 150177\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 252\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 143508\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3175\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 158239\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 274\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG 68\n",
+ "lung cancer 28\n",
+ "Parkinson disease 20\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 11\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 165700\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 280\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 68\n",
+ "lung cancer 28\n",
+ "Parkinson disease 20\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 11\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "LUNG CANCER 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 145453\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3175\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 12\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 151695\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 259\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 12\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 159162\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 283\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG 68\n",
+ "lung cancer 28\n",
+ "Parkinson disease 20\n",
+ "type 2 diabetes mellitus 12\n",
+ "BEHCET SYNDROME 11\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 129155\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3253\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG;;CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 63\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "%613065 LEUKEMIA, ACUTE LYMPHOBLASTIC; ALLLEUKEMIA, ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;ALL1, INCLUDED;;LEUKEMIA, ACUTE LYMPHOCYTIC, SUSCEPTIBILITY TO, 1, INCLUDED;;LEUKEMIA, B-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, T-CELL ACUTE LYMPHOBLASTIC, SUSCEPTIBILITY TO, INCLUDED;;LEUKEMIA, ACUTE LYMPHOBLASTIC, B-HYPERDIPLOID, SUSCEPTIBILITY TO,INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 128603\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3253\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "#615273 CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG;;CONGENITAL DISORDER OF GLYCOSYLATION, TYPE Iv; CDG1V;;CDG Iv; CDGIv 63\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "#154700 MARFAN SYNDROME; MFS;;MARFAN SYNDROME, TYPE I; MFS1 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n",
+ "/home/rogertu/Phenomizer/Phen_env/lib/python3.6/site-packages/pandas/core/frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
+ "of pandas will change to not sort by default.\n",
+ "\n",
+ "To accept the future behavior, pass 'sort=False'.\n",
+ "\n",
+ "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
+ "\n",
+ " sort=sort)\n",
+ "number of hpo annotations: 147417\n",
+ "number of wikidata annotations: 418\n",
+ "number overlap annotations: 3177\n",
+ "\n",
+ "top unique disease-phenotypes in wd:\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION 70\n",
+ "lung cancer 28\n",
+ "Parkinson disease 24\n",
+ "BEHCET SYNDROME 12\n",
+ "type 2 diabetes mellitus 12\n",
+ "MAJOR AFFECTIVE DISORDER 2 7\n",
+ "LYMPHOBLASTIC LEUKEMIA, ACUTE, WITH LYMPHOMATOUS FEATURES 7\n",
+ "LUNG CANCERALVEOLAR CELL CARCINOMA, INCLUDED 7\n",
+ "MAJOR AFFECTIVE DISORDER 1 7\n",
+ "#266600 INFLAMMATORY BOWEL DISEASE 1; IBD1REGIONAL ENTERITIS, INCLUDED;;CROHN DISEASE, INCLUDED;;ULCERATIVE COLITIS, INCLUDED;;CROHN DISEASE-ASSOCIATED GROWTH FAILURE, SUSCEPTIBILITY TO, INCLUDED 7\n",
+ "Name: DB_Name, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "for item in os.listdir():\n",
+ " if item.endswith(\".tab\"):\n",
+ " !python3 Wikidata_phenomizer_input_modifier.py $item"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pa_b1237_wd.tab pa_b1248_wd.tab pa_b1259_wd.tab pa_b1265_wd.tab\r\n",
+ "pa_b1239_wd.tab pa_b1249_wd.tab pa_b1262_wd.tab pa_b1266_wd.tab\r\n",
+ "pa_b1241_wd.tab pa_b1252_wd.tab pa_b1263_wd.tab\r\n",
+ "pa_b1246_wd.tab pa_b1254_wd.tab pa_b1264_wd.tab\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls *_wd.tab"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Next, change all names in each file to that of build 1266. If you don't do this, the naming is inconsistent between each build over time, which gives erroneous results in BOQA."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Column labels\n",
+ "tab_colnames = ['DB', 'DB_Object_ID', 'DB_Name', 'Qualifier', 'HPO_ID', 'DB_Reference',\n",
+ " 'Evidence_Code', 'Onset modifier', 'Frequency', 'Sex', 'Modifier',\n",
+ " 'Aspect', 'Date_Created', 'Assigned_By']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import items into a dictionary for unmodified files and wdmodified files\n",
+ "unmod_ls = []\n",
+ "unmod_dict = dict()\n",
+ "disease_label = dict()\n",
+ "\n",
+ "wdmod_ls = []\n",
+ "wdmod_dict = dict()\n",
+ "\n",
+ "for item in os.listdir():\n",
+ " \n",
+ " if not item.endswith(\"_wd.tab\") and item.startswith(\"pa\"):\n",
+ " unmod_ls.append(item)\n",
+ " value = pd.read_csv(item, delimiter = \"\\t\", names=tab_colnames, dtype=str)\n",
+ " unmod_dict.update({item:value})\n",
+ " disease_label.update({item:dict(zip(value.DB_Reference, value.DB_Name))})\n",
+ " \n",
+ " elif item.endswith(\"_wd.tab\") and item.startswith(\"pa\"):\n",
+ " wdmod_ls.append(item)\n",
+ " value = pd.read_csv(item, delimiter = \"\\t\", names=tab_colnames, dtype=str)\n",
+ " wdmod_dict.update({item:value})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Change labels for unmodified and wd modified files to build 1266\n",
+ "# Takes generated dictionary in previous(pd_dict), and change all names to labels found in b1266.\n",
+ "\n",
+ "b1266_unmod_dict = dict()\n",
+ "b1266_wdmod_dict = dict()\n",
+ "for item in unmod_ls:\n",
+ " df = unmod_dict[item]\n",
+ " df['DB_Name_hpo'] = df.DB_Reference.map(disease_label[\"pa_b1266.tab\"].get)\n",
+ " df['DB_Name'] = df.DB_Name_hpo.combine_first(df.DB_Name)\n",
+ " b1266_unmod_dict.update({item:df})\n",
+ " \n",
+ "for item in wdmod_ls:\n",
+ " df = wdmod_dict[item]\n",
+ " df['DB_Name_hpo'] = df.DB_Reference.map(disease_label[\"pa_b1266.tab\"].get)\n",
+ " df['DB_Name'] = df.DB_Name_hpo.combine_first(df.DB_Name)\n",
+ " b1266_wdmod_dict.update({item:df})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Export files named appropriately\n",
+ "\n",
+ "for item in unmod_ls:\n",
+ " df = b1266_unmod_dict[item]\n",
+ " df[tab_colnames].to_csv(item, sep=\"\\t\", header=False, index=False)\n",
+ " \n",
+ "for item in wdmod_ls:\n",
+ " df = b1266_wdmod_dict[item]\n",
+ " df[tab_colnames].to_csv(item, sep=\"\\t\", header=False, index=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Run BOQA on unmodified and modified files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/home/rogertu/Phenomizer/boqa\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Run BOQA for each set\n",
+ "hpo_ids=\"HP:0001263,HP:0001252,HP:0000522,HP:0012804,HP:0000559,HP:0011968,HP:0009830,HP:0001265,HP:0002167,HP:0000970,HP:0040129\"\n",
+ "os.chdir(\"/home/rogertu/Phenomizer/boqa/\") # Note, you need to change into the directory you installed boqa in\n",
+ "!pwd\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# First create adict to map your keys to obo files\n",
+ "obo_Path = \"/home/rogertu/Phenomizer/_obo_files/\" # Note, you need to pick where your obo_files are\n",
+ "ann_Path = \"/home/rogertu/Phenomizer/_annotation_files/\" # Note, you need to pick where your annotation_tab files are\n",
+ "annobo_Dict = dict()\n",
+ "\n",
+ "for fname in os.listdir(ann_Path):\n",
+ " if fname.startswith(\"pa\") and not fname.endswith(\"_wd.tab\"):\n",
+ " splitted = fname.split(\".\")\n",
+ " name = splitted[0]\n",
+ " annobo_Val = obo_Path + \"hp_\" + name[3:8] + \".obo\"\n",
+ " annobo_Key = ann_Path + fname\n",
+ " \n",
+ " annobo_Dict.update({annobo_Key:annobo_Val})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#*check if your dictionary is mapped properly. You'd want your `ann_Path:obo_Path` id's to match correspondingly.*
\n",
+ "\n",
+ "```annobo_Dict```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Create dictionary for obo files with \"_wd\"\n",
+ "annobo_Dict2 = dict()\n",
+ "\n",
+ "for fname in os.listdir(ann_Path):\n",
+ " if fname.endswith(\"_wd.tab\"):\n",
+ " splitted = fname.split(\".\")\n",
+ " name = splitted[0]\n",
+ " annobo_Val = obo_Path + \"hp_\" + name[3:8] +\".obo\"\n",
+ " annobo_Key = ann_Path + fname\n",
+ " \n",
+ "\n",
+ " annobo_Dict2.update({annobo_Key:annobo_Val})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#*check if your dictionary is mapped properly. You'd want your `ann_Path2:obo_Path` id's to match correspondingly.*
\n",
+ "\n",
+ "```annobo_Dict2```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Run BOQA on Unmodified and Wdmodified files, pipe the standard out and error to a text file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pa_b1237.tab\n",
+ "pa_b1239.tab\n",
+ "pa_b1241.tab\n",
+ "pa_b1246.tab\n",
+ "pa_b1248.tab\n",
+ "pa_b1249.tab\n",
+ "pa_b1252.tab\n",
+ "pa_b1254.tab\n",
+ "pa_b1259.tab\n",
+ "pa_b1262.tab\n",
+ "pa_b1263.tab\n",
+ "pa_b1264.tab\n",
+ "pa_b1265.tab\n",
+ "pa_b1266.tab\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BOQA Unmodified, pipe output to a file named unmod.txt\n",
+ "directory = ann_Path\n",
+ "\n",
+ "for filename in sorted(os.listdir(directory)):\n",
+ "\n",
+ " if filename.startswith(\"pa\") and not filename.endswith(\"_wd.tab\"): \n",
+ " print(filename)\n",
+ " filePath = os.path.join(directory, filename)\n",
+ " filePathStr = ('\"'+filePath+'\"') # Takes path obtained, adds quotes\n",
+ " hp_obo = (annobo_Dict[filePath]) # Pass a Key into annobo_Dict, recieve a value and add quotes\n",
+ " \n",
+ " # make sure you choose the right path to output your result text files.\n",
+ " runThis = !java -jar target/boqa-0.0.3-SNAPSHOT.jar -hpo {hpo_ids} -obo {hp_obo} -af {filePathStr} -n 10 &>> /home/rogertu/Phenomizer/_annotation_files/unmod.txt\n",
+ " runThis\n",
+ " continue\n",
+ " \n",
+ " else:\n",
+ " continue"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pa_b1237_wd.tab\n",
+ "pa_b1239_wd.tab\n",
+ "pa_b1241_wd.tab\n",
+ "pa_b1246_wd.tab\n",
+ "pa_b1248_wd.tab\n",
+ "pa_b1249_wd.tab\n",
+ "pa_b1252_wd.tab\n",
+ "pa_b1254_wd.tab\n",
+ "pa_b1259_wd.tab\n",
+ "pa_b1262_wd.tab\n",
+ "pa_b1263_wd.tab\n",
+ "pa_b1264_wd.tab\n",
+ "pa_b1265_wd.tab\n",
+ "pa_b1266_wd.tab\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BOQA WDmodified, pipe output to a file named wdmod.txt\n",
+ "directory = ann_Path\n",
+ "\n",
+ "for filename in sorted(os.listdir(directory)):\n",
+ "\n",
+ " if filename.startswith(\"pa\") and filename.endswith(\"_wd.tab\"): # Note the removal of `not`\n",
+ " print(filename)\n",
+ " filePath = os.path.join(directory, filename)\n",
+ " filePathStr = ('\"'+filePath+'\"') # Takes path obtained, adds quotes\n",
+ " hp_obo = (annobo_Dict2[filePath]) # Pass a Key into annobo_Dict, recieve a value and add quotes\n",
+ "\n",
+ " runThis = !java -jar target/boqa-0.0.3-SNAPSHOT.jar -hpo {hpo_ids} -obo {hp_obo} -af {filePathStr} -n 25 &>> /home/rogertu/Phenomizer/_annotation_files/wdmod.txt\n",
+ " runThis\n",
+ " continue\n",
+ " \n",
+ " else:\n",
+ " continue"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Text processing of the BOQA outputs for the raw and the Wikidata-modified phenotype_annotation.tab files."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import datetime\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "os.chdir(\"/home/rogertu/Phenomizer/_annotation_files/\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Get indices of where `itemName|score` is located in the unmodified BOQA outputs."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[4067,\n",
+ " 8145,\n",
+ " 12229,\n",
+ " 16313,\n",
+ " 20391,\n",
+ " 24469,\n",
+ " 28547,\n",
+ " 30925,\n",
+ " 33303,\n",
+ " 35733,\n",
+ " 38355,\n",
+ " 40793,\n",
+ " 43223,\n",
+ " 45557]"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "unmod = open(\"unmod.txt\", \"r\")\n",
+ "\n",
+ "itemName_indices = []\n",
+ "for index, line in enumerate(unmod):\n",
+ " if line == \"itemName|score\\n\":\n",
+ " itemName_indices.append(index)\n",
+ " \n",
+ "itemName_indices"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "14"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# length? \n",
+ "len(itemName_indices)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### For every index in `itemName_indices`, look 10 lines down for CDDG. If it exists, create an item in a dictionary to build and value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b1241\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.13222605766200135\n",
+ "\n",
+ "b1246\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.13163654580120396\n",
+ "\n",
+ "b1248\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.13468054869009333\n",
+ "\n",
+ "b1249\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.14825745555847192\n",
+ "\n",
+ "b1252\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.14473728630088692\n",
+ "\n",
+ "b1254\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.1115729099754877\n",
+ "\n",
+ "b1259\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.10695366023475644\n",
+ "\n",
+ "b1262\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.35724875360237396\n",
+ "\n",
+ "b1263\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.35746508599626475\n",
+ "\n",
+ "b1264\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3482354901598477\n",
+ "\n",
+ "b1265\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3458454767346629\n",
+ "\n",
+ "b1266\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.32071617741247055\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "unmod = open(\"unmod.txt\", \"r\")\n",
+ "unmod_ls = unmod.readlines()\n",
+ "build_ls = ['b1237','b1239','b1241','b1246','b1248',\n",
+ " 'b1249','b1252','b1254','b1259','b1262',\n",
+ " 'b1263','b1264','b1265','b1266']\n",
+ "res_un = dict()\n",
+ "\n",
+ "for line in unmod_ls:\n",
+ " split = line.split(sep=\"|\") # returns a list of two, name and % semantic similarity\n",
+ " f_ind = unmod_ls.index(line) # computes the index of the line in the file is\n",
+ " \n",
+ " if split[0] == \"CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)\":\n",
+ "\n",
+ " for index in itemName_indices:\n",
+ " withn = range(index,index+10) # computes the index range file line should fall in.\n",
+ " buildName = build_ls[itemName_indices.index(index)] # returns the name of build from build list.\n",
+ "\n",
+ " if f_ind in withn:\n",
+ " val = split[1] # fix the % semantic similarity from string to float.\n",
+ " val = val.strip('\\n') #\n",
+ " val = float(val) # \n",
+ " res_un.update({buildName:val}) # Update dictionary with build and % semantic similarity\n",
+ " print(buildName)\n",
+ " print(line)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Do the same thing for wikidata modified BOQA results.\n",
+ "* Create an index for `itemName|score`.\n",
+ "* Look for CDDG, store build and value to a dictionary."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "wdmod = open(\"wdmod.txt\", \"r\")\n",
+ "\n",
+ "itemName_indices2 = []\n",
+ "for index, line in enumerate(wdmod):\n",
+ " if line == \"itemName|score\\n\":\n",
+ " itemName_indices2.append(index)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "14"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(itemName_indices2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "b1237\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.17160357887114772\n",
+ "\n",
+ "b1239\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.17110371199145843\n",
+ "\n",
+ "b1241\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3356842848618296\n",
+ "\n",
+ "b1246\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.34719783567372703\n",
+ "\n",
+ "b1248\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.37075900318274746\n",
+ "\n",
+ "b1249\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.39493342004768245\n",
+ "\n",
+ "b1252\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3949371882443358\n",
+ "\n",
+ "b1254\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3949349034867903\n",
+ "\n",
+ "b1259\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.39493723518214785\n",
+ "\n",
+ "b1262\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.3828069035818584\n",
+ "\n",
+ "b1263\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.38281125834105606\n",
+ "\n",
+ "b1264\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.40537283847675226\n",
+ "\n",
+ "b1265\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.4053704040700968\n",
+ "\n",
+ "b1266\n",
+ "CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)|0.40534408678088857\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "wdmod = open(\"wdmod.txt\", \"r\")\n",
+ "wdmod_ls = wdmod.readlines()\n",
+ "\n",
+ "res_wd = dict()\n",
+ "\n",
+ "for line in wdmod_ls:\n",
+ " split = line.split(sep=\"|\") # returns a list of two, name and % semantic similarity\n",
+ " f_ind = wdmod_ls.index(line) # computes the index of the line in the file is\n",
+ " \n",
+ " if split[0] == \"CONGENITAL DISORDER OF DEGLYCOSYLATION; CDDG (OMIM:615273)\":\n",
+ "\n",
+ " for index in itemName_indices2:\n",
+ " withn = range(index,index+10) # computes the index range file line should fall in.\n",
+ " buildName = build_ls[itemName_indices2.index(index)]# returns the name of build from build list.\n",
+ "\n",
+ " if f_ind in withn:\n",
+ " val = split[1] # fix the % semantic similarity from string to float.\n",
+ " val = val.strip('\\n') #\n",
+ " val = float(val) # \n",
+ " res_wd.update({buildName:val}) # Update dictionary with build and % semantic similarity\n",
+ " print(buildName)\n",
+ " print(line)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Print both dictionaries to see if the values match"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'b1241': 0.13222605766200135,\n",
+ " 'b1246': 0.13163654580120396,\n",
+ " 'b1248': 0.13468054869009333,\n",
+ " 'b1249': 0.14825745555847192,\n",
+ " 'b1252': 0.14473728630088692,\n",
+ " 'b1254': 0.1115729099754877,\n",
+ " 'b1259': 0.10695366023475644,\n",
+ " 'b1262': 0.35724875360237396,\n",
+ " 'b1263': 0.35746508599626475,\n",
+ " 'b1264': 0.3482354901598477,\n",
+ " 'b1265': 0.3458454767346629,\n",
+ " 'b1266': 0.32071617741247055}"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res_un"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'b1237': 0.17160357887114772,\n",
+ " 'b1239': 0.17110371199145843,\n",
+ " 'b1241': 0.3356842848618296,\n",
+ " 'b1246': 0.34719783567372703,\n",
+ " 'b1248': 0.37075900318274746,\n",
+ " 'b1249': 0.39493342004768245,\n",
+ " 'b1252': 0.3949371882443358,\n",
+ " 'b1254': 0.3949349034867903,\n",
+ " 'b1259': 0.39493723518214785,\n",
+ " 'b1262': 0.3828069035818584,\n",
+ " 'b1263': 0.38281125834105606,\n",
+ " 'b1264': 0.40537283847675226,\n",
+ " 'b1265': 0.4053704040700968,\n",
+ " 'b1266': 0.40534408678088857}"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res_wd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Create date object for builds 1237 to 1266."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "date_ls = ['2017/03/09','2017/04/14','2017/06/30','2017/10/06', '2017/12/12',\n",
+ " '2018/01/26','2018/03/09','2018/06/13','2018/07/27', '2018/10/09',\n",
+ " '2018/12/21','2019/02/12','2019/04/15','2019/06/03']\n",
+ "date_ls = pd.to_datetime(date_ls)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "DatetimeIndex(['2017-03-09', '2017-04-14', '2017-06-30', '2017-10-06',\n",
+ " '2017-12-12', '2018-01-26', '2018-03-09', '2018-06-13',\n",
+ " '2018-07-27', '2018-10-09', '2018-12-21', '2019-02-12',\n",
+ " '2019-04-15', '2019-06-03'],\n",
+ " dtype='datetime64[ns]', freq=None)"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "date_ls"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Create a list from the dictionaries, that way you can create a pandas dataframe."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# pushing results from the untransformed and wd into a list to create a pandas df.\n",
+ "res_un_ls = []\n",
+ "for name in build_ls:\n",
+ " if name in res_un.keys():\n",
+ " res_un_ls.append(res_un[name])\n",
+ " else:\n",
+ " res_un_ls.append(0)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "res_wd_ls = []\n",
+ "for name in build_ls:\n",
+ " if name in res_wd.keys():\n",
+ " res_wd_ls.append(res_wd[name])\n",
+ " else:\n",
+ " res_wd_ls.append(0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Construct your dataframe"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data = {'build':build_ls, 'date':date_ls, 'HPO':res_un_ls, 'HPO + Wikidata':res_wd_ls}\n",
+ "res = pd.DataFrame.from_dict(data)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " build | \n",
+ " date | \n",
+ " HPO | \n",
+ " HPO + Wikidata | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " b1237 | \n",
+ " 2017-03-09 | \n",
+ " 0.000000 | \n",
+ " 0.171604 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " b1239 | \n",
+ " 2017-04-14 | \n",
+ " 0.000000 | \n",
+ " 0.171104 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " b1241 | \n",
+ " 2017-06-30 | \n",
+ " 0.132226 | \n",
+ " 0.335684 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " b1246 | \n",
+ " 2017-10-06 | \n",
+ " 0.131637 | \n",
+ " 0.347198 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " b1248 | \n",
+ " 2017-12-12 | \n",
+ " 0.134681 | \n",
+ " 0.370759 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " b1249 | \n",
+ " 2018-01-26 | \n",
+ " 0.148257 | \n",
+ " 0.394933 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " b1252 | \n",
+ " 2018-03-09 | \n",
+ " 0.144737 | \n",
+ " 0.394937 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " b1254 | \n",
+ " 2018-06-13 | \n",
+ " 0.111573 | \n",
+ " 0.394935 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " b1259 | \n",
+ " 2018-07-27 | \n",
+ " 0.106954 | \n",
+ " 0.394937 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " b1262 | \n",
+ " 2018-10-09 | \n",
+ " 0.357249 | \n",
+ " 0.382807 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " b1263 | \n",
+ " 2018-12-21 | \n",
+ " 0.357465 | \n",
+ " 0.382811 | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " b1264 | \n",
+ " 2019-02-12 | \n",
+ " 0.348235 | \n",
+ " 0.405373 | \n",
+ "
\n",
+ " \n",
+ " 12 | \n",
+ " b1265 | \n",
+ " 2019-04-15 | \n",
+ " 0.345845 | \n",
+ " 0.405370 | \n",
+ "
\n",
+ " \n",
+ " 13 | \n",
+ " b1266 | \n",
+ " 2019-06-03 | \n",
+ " 0.320716 | \n",
+ " 0.405344 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " build date HPO HPO + Wikidata\n",
+ "0 b1237 2017-03-09 0.000000 0.171604\n",
+ "1 b1239 2017-04-14 0.000000 0.171104\n",
+ "2 b1241 2017-06-30 0.132226 0.335684\n",
+ "3 b1246 2017-10-06 0.131637 0.347198\n",
+ "4 b1248 2017-12-12 0.134681 0.370759\n",
+ "5 b1249 2018-01-26 0.148257 0.394933\n",
+ "6 b1252 2018-03-09 0.144737 0.394937\n",
+ "7 b1254 2018-06-13 0.111573 0.394935\n",
+ "8 b1259 2018-07-27 0.106954 0.394937\n",
+ "9 b1262 2018-10-09 0.357249 0.382807\n",
+ "10 b1263 2018-12-21 0.357465 0.382811\n",
+ "11 b1264 2019-02-12 0.348235 0.405373\n",
+ "12 b1265 2019-04-15 0.345845 0.405370\n",
+ "13 b1266 2019-06-03 0.320716 0.405344"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Gotta melt your dataframe\n",
+ "res_melt = pd.melt(res, id_vars= [\"build\", \"date\"], value_vars=[\"HPO\",\"HPO + Wikidata\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " build | \n",
+ " date | \n",
+ " variable | \n",
+ " value | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " b1237 | \n",
+ " 2017-03-09 | \n",
+ " HPO | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " b1239 | \n",
+ " 2017-04-14 | \n",
+ " HPO | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " b1241 | \n",
+ " 2017-06-30 | \n",
+ " HPO | \n",
+ " 0.132226 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " b1246 | \n",
+ " 2017-10-06 | \n",
+ " HPO | \n",
+ " 0.131637 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " b1248 | \n",
+ " 2017-12-12 | \n",
+ " HPO | \n",
+ " 0.134681 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " b1249 | \n",
+ " 2018-01-26 | \n",
+ " HPO | \n",
+ " 0.148257 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " b1252 | \n",
+ " 2018-03-09 | \n",
+ " HPO | \n",
+ " 0.144737 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " b1254 | \n",
+ " 2018-06-13 | \n",
+ " HPO | \n",
+ " 0.111573 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " b1259 | \n",
+ " 2018-07-27 | \n",
+ " HPO | \n",
+ " 0.106954 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " b1262 | \n",
+ " 2018-10-09 | \n",
+ " HPO | \n",
+ " 0.357249 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " b1263 | \n",
+ " 2018-12-21 | \n",
+ " HPO | \n",
+ " 0.357465 | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " b1264 | \n",
+ " 2019-02-12 | \n",
+ " HPO | \n",
+ " 0.348235 | \n",
+ "
\n",
+ " \n",
+ " 12 | \n",
+ " b1265 | \n",
+ " 2019-04-15 | \n",
+ " HPO | \n",
+ " 0.345845 | \n",
+ "
\n",
+ " \n",
+ " 13 | \n",
+ " b1266 | \n",
+ " 2019-06-03 | \n",
+ " HPO | \n",
+ " 0.320716 | \n",
+ "
\n",
+ " \n",
+ " 14 | \n",
+ " b1237 | \n",
+ " 2017-03-09 | \n",
+ " HPO + Wikidata | \n",
+ " 0.171604 | \n",
+ "
\n",
+ " \n",
+ " 15 | \n",
+ " b1239 | \n",
+ " 2017-04-14 | \n",
+ " HPO + Wikidata | \n",
+ " 0.171104 | \n",
+ "
\n",
+ " \n",
+ " 16 | \n",
+ " b1241 | \n",
+ " 2017-06-30 | \n",
+ " HPO + Wikidata | \n",
+ " 0.335684 | \n",
+ "
\n",
+ " \n",
+ " 17 | \n",
+ " b1246 | \n",
+ " 2017-10-06 | \n",
+ " HPO + Wikidata | \n",
+ " 0.347198 | \n",
+ "
\n",
+ " \n",
+ " 18 | \n",
+ " b1248 | \n",
+ " 2017-12-12 | \n",
+ " HPO + Wikidata | \n",
+ " 0.370759 | \n",
+ "
\n",
+ " \n",
+ " 19 | \n",
+ " b1249 | \n",
+ " 2018-01-26 | \n",
+ " HPO + Wikidata | \n",
+ " 0.394933 | \n",
+ "
\n",
+ " \n",
+ " 20 | \n",
+ " b1252 | \n",
+ " 2018-03-09 | \n",
+ " HPO + Wikidata | \n",
+ " 0.394937 | \n",
+ "
\n",
+ " \n",
+ " 21 | \n",
+ " b1254 | \n",
+ " 2018-06-13 | \n",
+ " HPO + Wikidata | \n",
+ " 0.394935 | \n",
+ "
\n",
+ " \n",
+ " 22 | \n",
+ " b1259 | \n",
+ " 2018-07-27 | \n",
+ " HPO + Wikidata | \n",
+ " 0.394937 | \n",
+ "
\n",
+ " \n",
+ " 23 | \n",
+ " b1262 | \n",
+ " 2018-10-09 | \n",
+ " HPO + Wikidata | \n",
+ " 0.382807 | \n",
+ "
\n",
+ " \n",
+ " 24 | \n",
+ " b1263 | \n",
+ " 2018-12-21 | \n",
+ " HPO + Wikidata | \n",
+ " 0.382811 | \n",
+ "
\n",
+ " \n",
+ " 25 | \n",
+ " b1264 | \n",
+ " 2019-02-12 | \n",
+ " HPO + Wikidata | \n",
+ " 0.405373 | \n",
+ "
\n",
+ " \n",
+ " 26 | \n",
+ " b1265 | \n",
+ " 2019-04-15 | \n",
+ " HPO + Wikidata | \n",
+ " 0.405370 | \n",
+ "
\n",
+ " \n",
+ " 27 | \n",
+ " b1266 | \n",
+ " 2019-06-03 | \n",
+ " HPO + Wikidata | \n",
+ " 0.405344 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " build date variable value\n",
+ "0 b1237 2017-03-09 HPO 0.000000\n",
+ "1 b1239 2017-04-14 HPO 0.000000\n",
+ "2 b1241 2017-06-30 HPO 0.132226\n",
+ "3 b1246 2017-10-06 HPO 0.131637\n",
+ "4 b1248 2017-12-12 HPO 0.134681\n",
+ "5 b1249 2018-01-26 HPO 0.148257\n",
+ "6 b1252 2018-03-09 HPO 0.144737\n",
+ "7 b1254 2018-06-13 HPO 0.111573\n",
+ "8 b1259 2018-07-27 HPO 0.106954\n",
+ "9 b1262 2018-10-09 HPO 0.357249\n",
+ "10 b1263 2018-12-21 HPO 0.357465\n",
+ "11 b1264 2019-02-12 HPO 0.348235\n",
+ "12 b1265 2019-04-15 HPO 0.345845\n",
+ "13 b1266 2019-06-03 HPO 0.320716\n",
+ "14 b1237 2017-03-09 HPO + Wikidata 0.171604\n",
+ "15 b1239 2017-04-14 HPO + Wikidata 0.171104\n",
+ "16 b1241 2017-06-30 HPO + Wikidata 0.335684\n",
+ "17 b1246 2017-10-06 HPO + Wikidata 0.347198\n",
+ "18 b1248 2017-12-12 HPO + Wikidata 0.370759\n",
+ "19 b1249 2018-01-26 HPO + Wikidata 0.394933\n",
+ "20 b1252 2018-03-09 HPO + Wikidata 0.394937\n",
+ "21 b1254 2018-06-13 HPO + Wikidata 0.394935\n",
+ "22 b1259 2018-07-27 HPO + Wikidata 0.394937\n",
+ "23 b1262 2018-10-09 HPO + Wikidata 0.382807\n",
+ "24 b1263 2018-12-21 HPO + Wikidata 0.382811\n",
+ "25 b1264 2019-02-12 HPO + Wikidata 0.405373\n",
+ "26 b1265 2019-04-15 HPO + Wikidata 0.405370\n",
+ "27 b1266 2019-06-03 HPO + Wikidata 0.405344"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res_melt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Plot your data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "