dna-sequencing / app.py
ai-lover's picture
Create app.py
8347b68 verified
import streamlit as st
from difflib import SequenceMatcher
# Function to calculate DNA sequence similarity
def calculate_similarity(seq1, seq2):
# Calculate similarity ratio using SequenceMatcher
seq_matcher = SequenceMatcher(None, seq1, seq2)
return seq_matcher.ratio() * 100
# Function to display DNA sequence matching results
def display_results(seq1, seq2, similarity):
st.subheader("Results")
st.write(f"DNA Sequence 1: {seq1}")
st.write(f"DNA Sequence 2: {seq2}")
if similarity == 100:
st.success("The DNA sequences are an exact match!")
elif similarity > 0:
st.warning(f"The sequences are {similarity:.2f}% similar.")
else:
st.error("The sequences do not match.")
# Title of the app
st.title("DNA Sequence Matching App")
# User input for DNA Sequences
st.subheader("Enter two DNA sequences to match:")
seq1 = st.text_area("DNA Sequence 1 (e.g., ATCGGCTA)", height=150)
seq2 = st.text_area("DNA Sequence 2 (e.g., ATCGGCTA)", height=150)
if st.button("Match Sequences"):
# Remove any spaces or newline characters from the sequences
seq1 = seq1.replace(" ", "").replace("\n", "").upper()
seq2 = seq2.replace(" ", "").replace("\n", "").upper()
# Check if the sequences are non-empty
if seq1 and seq2:
similarity = calculate_similarity(seq1, seq2)
display_results(seq1, seq2, similarity)
else:
st.error("Both DNA sequences must be entered.")
# Optional: DNA Sequence Upload (CSV or Text file input)
st.sidebar.subheader("Upload DNA Sequences")
uploaded_file = st.sidebar.file_uploader("Upload file with DNA sequences", type=["txt", "csv"])
if uploaded_file is not None:
# Read the uploaded file and assume it's a text file with sequences
content = uploaded_file.read().decode("utf-8").strip().splitlines()
if len(content) >= 2:
seq1 = content[0]
seq2 = content[1]
similarity = calculate_similarity(seq1, seq2)
display_results(seq1, seq2, similarity)
else:
st.sidebar.error("The uploaded file must contain at least two DNA sequences.")