minwoosun commited on
Commit
f81db88
·
verified ·
1 Parent(s): 16f9ab6

Incorporate classifier

Browse files
Files changed (1) hide show
  1. app.py +57 -11
app.py CHANGED
@@ -1,17 +1,45 @@
1
  import gradio as gr
2
  import pandas as pd
 
3
  import umap
 
4
  import matplotlib.pyplot as plt
5
  import os
6
- import tempfile
7
  import scanpy as sc
8
- import argparse
9
  import subprocess
10
  import sys
 
 
11
  from io import BytesIO
 
12
  from huggingface_hub import hf_hub_download
13
 
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  def main(input_file_path, species):
16
 
17
  # Get the current working directory
@@ -40,8 +68,6 @@ def main(input_file_path, species):
40
  ##############
41
  # UCE #
42
  ##############
43
- from evaluate import AnndataProcessor
44
- from accelerate import Accelerator
45
 
46
  # # python eval_single_anndata.py --adata_path "./data/10k_pbmcs_proc.h5ad" --dir "./" --model_loc "minwoosun/uce-100m"
47
  # script_name = "/home/user/app/UCE/eval_single_anndata.py"
@@ -77,6 +103,25 @@ def main(input_file_path, species):
77
  print(result.stderr)
78
  print("---> FINSIH UCE")
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  ##############
81
  # UMAP #
82
  ##############
@@ -84,12 +129,12 @@ def main(input_file_path, species):
84
 
85
  if (UMAP):
86
 
87
- # Set output file path
88
- file_name_with_ext = os.path.basename(input_file_path)
89
- file_name = os.path.splitext(file_name_with_ext)[0]
90
- output_file = "/home/user/app/UCE/" + f"{file_name}_uce_adata.h5ad"
91
 
92
- adata = sc.read_h5ad(output_file)
93
 
94
  labels = pd.Categorical(adata.obs["cell_type"])
95
 
@@ -123,7 +168,7 @@ def main(input_file_path, species):
123
  img = None
124
  print("no image")
125
 
126
- return img, output_file
127
 
128
 
129
  if __name__ == "__main__":
@@ -181,12 +226,13 @@ if __name__ == "__main__":
181
  with gr.Row():
182
  image_output = gr.Image(type="numpy", label="UMAP of UCE Embeddings")
183
  file_output = gr.File(label="Download embeddings")
 
184
 
185
  # Add the components and link to the function
186
  run_button.click(
187
  fn=main,
188
  inputs=[file_input, species_input],
189
- outputs=[image_output, file_output]
190
  )
191
 
192
  demo.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import numpy as np
4
  import umap
5
+ import json
6
  import matplotlib.pyplot as plt
7
  import os
8
+ # import tempfile
9
  import scanpy as sc
10
+ # import argparse
11
  import subprocess
12
  import sys
13
+ from evaluate import AnndataProcessor
14
+ from accelerate import Accelerator
15
  from io import BytesIO
16
+ from sklearn.linear_model import LogisticRegression
17
  from huggingface_hub import hf_hub_download
18
 
19
 
20
+ def load_and_predict_with_classifier(x, model_path, output_path):
21
+
22
+ # Load the model parameters from the JSON file
23
+ with open(model_path, 'r') as f:
24
+ model_params = json.load(f)
25
+
26
+ # Reconstruct the logistic regression model
27
+ model_loaded = LogisticRegression(multi_class='multinomial', solver='lbfgs', max_iter=1000)
28
+ model_loaded.coef_ = np.array(model_params["coef"])
29
+ model_loaded.intercept_ = np.array(model_params["intercept"])
30
+ model_loaded.classes_ = np.array(model_params["classes"])
31
+
32
+ # output predictions
33
+ y_pred = model_loaded.predict(x)
34
+
35
+ # Convert the array to a Pandas DataFrame
36
+ if save:
37
+ df = pd.DataFrame(y_pred, columns=["predicted_cell_type"])
38
+ df.to_csv(output_path, index=False, header=False)
39
+
40
+ return y_pred
41
+
42
+
43
  def main(input_file_path, species):
44
 
45
  # Get the current working directory
 
68
  ##############
69
  # UCE #
70
  ##############
 
 
71
 
72
  # # python eval_single_anndata.py --adata_path "./data/10k_pbmcs_proc.h5ad" --dir "./" --model_loc "minwoosun/uce-100m"
73
  # script_name = "/home/user/app/UCE/eval_single_anndata.py"
 
103
  print(result.stderr)
104
  print("---> FINSIH UCE")
105
 
106
+ ################################
107
+ # Cell-type classification #
108
+ ################################
109
+
110
+
111
+ # Set output file path
112
+ file_name_with_ext = os.path.basename(input_file_path)
113
+ file_name = os.path.splitext(file_name_with_ext)[0]
114
+ pred_file = "/home/user/app/UCE/" + f"{file_name}_predictions.csv"
115
+ model_path = hf_hub_download(repo_id="minwoosun/uce-misc", filename="tabula_sapiens_v1_logistic_regression_model_weights.json")
116
+
117
+ file_name_with_ext = os.path.basename(input_file_path)
118
+ file_name = os.path.splitext(file_name_with_ext)[0]
119
+ output_file = "/home/user/app/UCE/" + f"{file_name}_uce_adata.h5ad"
120
+ adata = sc.read_h5ad(output_file)
121
+ x = adata.obsm['X_uce']
122
+
123
+ y_pred = load_and_predict_with_classifier(x, model_path, pred_file, save=True)
124
+
125
  ##############
126
  # UMAP #
127
  ##############
 
129
 
130
  if (UMAP):
131
 
132
+ # # Set output file path
133
+ # file_name_with_ext = os.path.basename(input_file_path)
134
+ # file_name = os.path.splitext(file_name_with_ext)[0]
135
+ # output_file = "/home/user/app/UCE/" + f"{file_name}_uce_adata.h5ad"
136
 
137
+ # adata = sc.read_h5ad(output_file)
138
 
139
  labels = pd.Categorical(adata.obs["cell_type"])
140
 
 
168
  img = None
169
  print("no image")
170
 
171
+ return img, output_file, pred_file
172
 
173
 
174
  if __name__ == "__main__":
 
226
  with gr.Row():
227
  image_output = gr.Image(type="numpy", label="UMAP of UCE Embeddings")
228
  file_output = gr.File(label="Download embeddings")
229
+ pred_output = gr.File(label="Download predictions")
230
 
231
  # Add the components and link to the function
232
  run_button.click(
233
  fn=main,
234
  inputs=[file_input, species_input],
235
+ outputs=[image_output, file_output, pred_output]
236
  )
237
 
238
  demo.launch()