drkareemkamal commited on
Commit
7ee8472
·
verified ·
1 Parent(s): 9e8cdbb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -78
app.py CHANGED
@@ -1,79 +1,56 @@
1
- # import libraries
2
- import os
3
- from dotenv import load_dotenv
4
  import streamlit as st
5
- import pinecone
6
- from langchain.document_loaders import PyPDFDirectoryLoader
7
- from langchain.text_splitter import RecursiveCharacterTextSplitter
8
- from langchain.embeddings.openai import OpenAIEmbeddings
9
- from langchain_pinecone import PineconeVectorStore
10
- from langchain.prompts import PromptTemplate
11
- from langchain.chains.question_answering import load_qa_chain
12
- from langchain_community.llms import CTransformers
13
- from langchain_community.embeddings.huggingface import HuggingFaceBgeEmbeddings
14
-
15
-
16
- load_dotenv()
17
-
18
- embeddings = HuggingFaceBgeEmbeddings(model_name = 'sentence-transformers/all-MiniLM-L6-v2',
19
- model_kwargs = {'device':'cpu'})
20
-
21
- os.environ['PINECONE_API_KEY'] = 'afb0bb4d-3c15-461b-91a4-fb12fb1f25f2'
22
- index_name = 'harisonvecot'
23
-
24
- vectorstore = PineconeVectorStore(index_name=index_name,embedding=embeddings)
25
-
26
- # Create the vector index from documents
27
- def create_index(documents):
28
- vectorstore.add_documents(documents)
29
-
30
- # Retrieve query from Pinecone
31
- def retrieve_query(query, k=2):
32
- matching_results = vectorstore.similarity_search(query, k=k)
33
- return matching_results
34
-
35
- # Custom prompt template
36
- custom_prompt_template = '''
37
- use the following pieces of information to answer the user's questions.
38
- If you don't know the answer, please just say that you don't know the answer, don't try to make up an answer.
39
- Content : {context}
40
- Question : {question}
41
- only return the helpful answer below and nothing else.
42
- '''
43
-
44
- def set_custom_prompt():
45
- prompt = PromptTemplate(template=custom_prompt_template, input_variables=['context', 'question'])
46
- return prompt
47
-
48
- # Load LLM model
49
- llm_model = CTransformers(model='TheBloke/Llama-2-7B-Chat-GGML',
50
- model_type = 'llama',
51
- max_new_token = 512,
52
- temperature=0.5)
53
-
54
- # Create retrieval QA chain
55
- def retrieval_qa_chain():
56
- prompt = set_custom_prompt()
57
- chain = load_qa_chain(llm_model, chain_type='stuff', prompt=prompt)
58
- return chain
59
-
60
- # Search answers from Vector DB
61
- def retrieve_answer(query):
62
- doc_search = retrieve_query(query)
63
- chain = retrieval_qa_chain()
64
- response = chain.run(input_documents=doc_search, question=query)
65
- return response
66
-
67
- queries = st.text_input('write a medical questions ?')
68
- # Example usage
69
- submit = st.button('submit')
70
- # Read and process documents
71
- # doc = read_doc('documents/')
72
- # documents = chunk_data(docs=doc)
73
- # create_index(documents)
74
- if submit :
75
- if queries :
76
- # Query and get answer
77
- #our_query = 'What is cause of Eczema?'
78
- answer = retrieve_answer(queries)
79
- st.write(answer)
 
 
 
 
1
  import streamlit as st
2
+ import pandas as pd
3
+ import seaborn as sns
4
+ import matplotlib.pyplot as plt
5
+
6
+ # Load Data
7
+ @st.cache_data
8
+ def load_data():
9
+ return pd.read_csv("data/inbody_with_clusters.csv", parse_dates=["Test Date"])
10
+
11
+ df = load_data()
12
+
13
+ st.title("📊 InBody 270 Dashboard")
14
+ st.markdown("Explore trends, clusters, and body composition metrics.")
15
+
16
+ # Sidebar Filters
17
+ with st.sidebar:
18
+ st.header("🔎 Filter")
19
+ id_options = df['ID'].unique()
20
+ selected_ids = st.multiselect("Select Patient ID(s)", id_options, default=list(id_options[:5]))
21
+
22
+ gender = st.radio("Gender", options=["All", "M", "F"])
23
+ bmi_range = st.slider("BMI Range", float(df["27. BMI (Body Mass Index)"].min()),
24
+ float(df["27. BMI (Body Mass Index)"].max()), (18.5, 35.0))
25
+
26
+ # Apply Filters
27
+ filtered = df[df["ID"].isin(selected_ids)]
28
+ if gender != "All":
29
+ filtered = filtered[filtered["3. Gender"] == gender]
30
+ filtered = filtered[(filtered["27. BMI (Body Mass Index)"] >= bmi_range[0]) &
31
+ (filtered["27. BMI (Body Mass Index)"] <= bmi_range[1])]
32
+
33
+ # Line Chart: Weight/BMI/BFM over time
34
+ st.subheader("📈 Trends Over Time")
35
+ metric = st.selectbox("Select a Metric to Plot", ['6. Weight', '27. BMI (Body Mass Index)', '18. BFM (Body Fat Mass)'])
36
+
37
+ fig, ax = plt.subplots(figsize=(10, 5))
38
+ sns.lineplot(data=filtered, x="Test Date", y=metric, hue="ID", marker="o", ax=ax)
39
+ st.pyplot(fig)
40
+
41
+ # Cluster Scatterplot
42
+ st.subheader("🧬 Body Type Clusters")
43
+ fig2, ax2 = plt.subplots()
44
+ sns.scatterplot(data=filtered, x="18. BFM (Body Fat Mass)", y="24. SMM (Skeletal Muscle Mass)",
45
+ hue="Body Type Cluster", palette="Set1", ax=ax2)
46
+ st.pyplot(fig2)
47
+
48
+ # Summary Table
49
+ st.subheader("📋 Latest Measurements (Per Patient)")
50
+ latest = filtered.sort_values("Test Date").groupby("ID").tail(1)
51
+ st.dataframe(latest[["ID", "Test Date", "6. Weight", "27. BMI (Body Mass Index)",
52
+ "18. BFM (Body Fat Mass)", "24. SMM (Skeletal Muscle Mass)",
53
+ "58. BMR (Basal Metabolic Rate)", "Body Type Cluster"]])
54
+
55
+ # Download option
56
+ st.download_button("📥 Download Filtered Data", latest.to_csv(index=False), file_name="filtered_inbody.csv")