-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
180 lines (169 loc) Β· 8.82 KB
/
index.html
File metadata and controls
180 lines (169 loc) Β· 8.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8" />
<title>Aging SLAYers Hackathon Team</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700" type="text/css" />
<link rel="stylesheet" href="https://nb3.me/themes/default/style.css" type="text/css" />
<link rel="stylesheet" href="https://nb3.me/themes/default/fontello.css" type="text/css" />
<script src="https://nb3.me/themes/default/scripts/modernizr-2.6.1.min.js"></script>
<script src="https://global.localizecdn.com/localize.js"></script>
<script>(function(a){if(!a.Localize){a.Localize={};for(var e=["translate","untranslate","phrase","initialize","translatePage","setLanguage","getLanguage","detectLanguage","getAvailableLanguages","untranslatePage","bootstrap","prefetch","on","off","hideWidget","showWidget","getSourceLanguage"],t=0;t<e.length;t++)a.Localize[e[t]]=function(){};}})(window);</script>
<script>
Localize.initialize({
key: '6gbFinGhPdwFc',
rememberLanguage: true,
// other options go here, separated by commas
});
</script>
</head>
<body>
<header id="header">
<div class="inner clearfix">
</div>
</header>
<section id="content">
<div class="inner"><h1>Longevity hackathon</h1>
<p>This is a project to showcase results obtained for the <a href="https://forimmortality.ai/ru/">Longevity hackathon</a></p>
<h1>Drug Research Platform</h1>
<p>A Streamlit-based web application for biomedical drug research and discovery, integrating multiple pharmaceutical and biomedical databases for comprehensive drug analysis and exploration.</p>
<h2>πΈ Slides for the presentation</h2>
<p>Feel free to find them <a href="https://www.figma.com/proto/3vflh9xhpQ9hv4irNHTPyU/SLAY-Longevity-Priority.-%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B8?node-id=0-1&p=f&viewport=623%2C906%2C0.16&t=F4tHTfWUBOR6brma-0&scaling=min-zoom&content-scaling=fixed&starting-point-node-id=10%3A2">here</a>.</p>
<h2>π More resources</h2>
<p>Project repository <a href="https://github.com/aging-slayers/hackathon">here</a>.</p>
<p>Live demo <a href="https://slay.nb3.me">here</a>.</p>
<br />
<h2>π Features</h2>
<ul>
<li><strong>Multi-Database Integration</strong>: Combines data from DrKG, DrugBank, MeSH, SIDER, DOID, and HGNC</li>
<li><strong>Interactive Web Interface</strong>: Built with Streamlit for intuitive data exploration</li>
<li><strong>Containerized Deployment</strong>: Docker-based setup for consistent environments</li>
<li><strong>Knowledge Graph Analysis</strong>: Leverages drug repurposing knowledge graphs</li>
<li><strong>Disease Ontology Integration</strong>: Incorporates structured disease classifications</li>
</ul>
<h2>π Prerequisites</h2>
<ul>
<li>Docker and Docker Compose</li>
<li>Make (optional, for convenience commands)</li>
<li>Minimum 4GB RAM recommended</li>
<li>At least 2GB free disk space for data and containers</li>
</ul>
<h2>ποΈ Data Structure</h2>
<p>The application integrates the following biomedical databases:</p>
<pre><code>data/
βββ doid/ # Disease Ontology
β βββ doid.obo # Disease classifications and relationships
βββ drkg/ # Drug Repurposing Knowledge Graph
β βββ drkg.tsv # Main knowledge graph data
β βββ graph.gml # Graph structure file
β βββ relation_glossary.tsv # Relationship definitions
β βββ relation_glossary.xlsx
βββ drugbank/ # DrugBank Database
β βββ drugbank_vocabulary.csv # Drug nomenclature and metadata
βββ hgnc/ # Human Gene Nomenclature Committee
β βββ HGNC_complete_set.tsv # Official gene symbols and names
βββ mesh/ # Medical Subject Headings
β βββ desc2025.xml # Medical terminology hierarchy
βββ sider/ # Side Effect Resource
β βββ meddra_all_indications.tsv # Drug side effects and indications
βββ drugbank_vocabulary.csv # Additional drug vocabulary
βββ entity_name_mapping.json # Entity name mappings across databases</code></pre>
<h3>Database Sources</h3>
<ul>
<li><strong>DOID</strong>: <a href="https://disease-ontology.org/">Disease Ontology</a> - Standardized disease classifications</li>
<li><strong>DrKG</strong>: <a href="https://github.com/gnn4dr/DRKG">Drug Repurposing Knowledge Graph</a> - Comprehensive biomedical knowledge graph</li>
<li><strong>DrugBank</strong>: <a href="https://go.drugbank.com/">DrugBank Database</a> - Pharmaceutical knowledge base</li>
<li><strong>HGNC</strong>: <a href="https://www.genenames.org/">HUGO Gene Nomenclature Committee</a> - Official gene symbols</li>
<li><strong>MeSH</strong>: <a href="https://www.nlm.nih.gov/mesh/">Medical Subject Headings</a> - NLM's controlled vocabulary</li>
<li><strong>SIDER</strong>: <a href="http://sideeffects.embl.de/">Side Effect Resource</a> - Drug side effects database</li>
</ul>
<h3>Google Drive Access files</h3>
<p>Place the following files in the <code>access/</code> directory to enable Google Drive access:
<code>access/service_account.json</code>.
Instructions on creating a Google Drive client and connecting it to the code can be found <a href="https://developers.google.com/workspace/sheets/api/quickstart/python">here</a>.</p>
<h2>π οΈ Installation & Setup</h2>
<h3>Option 1: Using Make (Recommended)</h3>
<pre><code class="language-bash"># Clone the repository
git clone <repository-url>
cd <project-directory>
# Build and start all services
make</code></pre>
<h3>Option 2: Using Docker Compose Directly</h3>
<p>Don't forget to place Google Drive client JSON file.</p>
<pre><code class="language-bash"># Set environment variables
export UID=$(id -u)
export GID=$(id -g)
# Build and start
./run.sh</code></pre>
<h2>π Usage</h2>
<h3>Accessing the Application</h3>
<p>Once the containers are running, access the Streamlit application at:</p>
<pre><code>http://localhost:8501</code></pre>
<h3>Available Make Commands</h3>
<pre><code class="language-bash">make help # Show all available commands
make build # Build all containers
make up # Start containers in detached mode
make down # Stop all containers
make logs # View container logs
make ps # Show container status
make restart # Restart services
make clean # Clean volumes (β οΈ removes data)</code></pre>
<h3>Development Commands</h3>
<pre><code class="language-bash"># Access container shell
make shell SERVICE=streamlit_app
# View logs in real-time
make logs
# Restart specific service
make restart SERVICE=streamlit_app</code></pre>
<h2>π§ Configuration</h2>
<h3>Port Configuration</h3>
<ul>
<li><strong>Streamlit App</strong>: Port 8501 (configurable in docker-compose.yml)</li>
</ul>
<h3>Volume Mounts</h3>
<ul>
<li><code>./streamlit_app</code> β <code>/app/streamlit_app</code> (Application code)</li>
<li><code>./data</code> β <code>/app/data</code> (Database files)</li>
<li><code>./access</code> β <code>/app/access</code> (Access control files)</li>
</ul>
<h2>π Project Structure</h2>
<pre><code>.
βββ docker-compose.yml # Docker services configuration
βββ Dockerfile # Container build instructions
βββ Makefile # Development convenience commands
βββ requirements.txt # Python dependencies
βββ project_config.py # Project configuration
βββ streamlit_app/ # Streamlit application code
β βββ root_page.py # Main application entry point
βββ app/ # Core application modules
βββ research_scripts/ # Research and analysis scripts
βββ data/ # Database files (see structure above)
βββ access/ # Access control and authentication</code></pre>
<h2>π€ Contributing</h2>
<ol>
<li>Fork the repository</li>
<li>Create a feature branch: <code>git checkout -b feature-name</code></li>
<li>Make your changes</li>
<li>Test with: <code>make build && make up</code></li>
<li>Submit a pull request</li>
</ol>
<h2>π License</h2>
<p>This project is licensed under the MIT License.</p>
<h2>π§ Team and contacts</h2>
<ol>
<li><a href="https://github.com/bioinvlad">Vlad Maksimov</a>, team leader</li>
<li><a href="https://github.com/vikachok">Victoria Nersisyan</a>, biologist</li>
<li><a href="https://github.com/Smirness">Viktor Smirnov</a>, bioinformatician</li>
<li><a href="https://github.com/NetBUG">Oleg Urzhumtsev</a>, programmer, ML engineer & maintainer</li>
<li><a href="https://github.com/mikprin">Mike Solovyanov</a>, programmer & maintainer</li>
<li><a href="https://www.behance.net/nikkondr">Nikita Kondratev</a>, designer and researcher</li>
</ol>
</div>
</section>
<footer id="footer">
<div class="inner">
<div class="social"> </div>
</div>
</footer>
</body>
</html>