From 1cc839cdb83e0958f63616a5db0f37dae9ea9fac Mon Sep 17 00:00:00 2001 From: Chanin Nantasenamat <51851491+dataprofessor@users.noreply.github.com> Date: Wed, 30 Sep 2020 19:23:37 +0700 Subject: [PATCH] Add files via upload --- streamlit/dna-app.py | 95 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 streamlit/dna-app.py diff --git a/streamlit/dna-app.py b/streamlit/dna-app.py new file mode 100644 index 0000000..1836cea --- /dev/null +++ b/streamlit/dna-app.py @@ -0,0 +1,95 @@ +###################### +# Import libraries +###################### + +import pandas as pd +import streamlit as st +import altair as alt +from PIL import Image + +###################### +# Page Title +###################### + +image = Image.open('dna-logo.jpg') + +st.image(image, use_column_width=True) + +st.write(""" +# DNA Nucleotide Count Web App + +This app counts the nucleotide composition of query DNA! + +*** +""") + + +###################### +# Input Text Box +###################### + +#st.sidebar.header('Enter DNA sequence') +st.header('Enter DNA sequence') + +sequence_input = ">DNA Query 2\nGAACACGTGGAGGCAAACAGGAAGGTGAAGAAGAACTTATCCTATCAGGACGGAAGGTCCTGTGCTCGGG\nATCTTCCAGACGTCGCGACTCTAAATTGCCCCCTCTGAGGTCAAGGAACACAAGATGGTTTTGGAAATGC\nTGAACCCGATACATTATAACATCACCAGCATCGTGCCTGAAGCCATGCCTGCTGCCACCATGCCAGTCCT" + +#sequence = st.sidebar.text_area("Sequence input", sequence_input, height=250) +sequence = st.text_area("Sequence input", sequence_input, height=250) +sequence = sequence.splitlines() +sequence = sequence[1:] # Skips the sequence name (first line) +sequence = ''.join(sequence) # Concatenates list to string + +st.write(""" +*** +""") + +## Prints the input DNA sequence +st.header('INPUT (DNA Query)') +sequence + +## DNA nucleotide count +st.header('OUTPUT (DNA Nucleotide Count)') + +### 1. Print dictionary +st.subheader('1. Print dictionary') +def DNA_nucleotide_count(seq): + d = dict([ + ('A',seq.count('A')), + ('T',seq.count('T')), + ('G',seq.count('G')), + ('C',seq.count('C')) + ]) + return d + +X = DNA_nucleotide_count(sequence) + +#X_label = list(X) +#X_values = list(X.values()) + +X + +### 2. Print text +st.subheader('2. Print text') +st.write('There are ' + str(X['A']) + ' adenine (A)') +st.write('There are ' + str(X['T']) + ' thymine (T)') +st.write('There are ' + str(X['G']) + ' guanine (G)') +st.write('There are ' + str(X['C']) + ' cytosine (C)') + +### 3. Display DataFrame +st.subheader('3. Display DataFrame') +df = pd.DataFrame.from_dict(X, orient='index') +df = df.rename({0: 'count'}, axis='columns') +df.reset_index(inplace=True) +df = df.rename(columns = {'index':'nucleotide'}) +st.write(df) + +### 4. Display Bar Chart using Altair +st.subheader('4. Display Bar chart') +p = alt.Chart(df).mark_bar().encode( + x='nucleotide', + y='count' +) +p = p.properties( + width=alt.Step(80) # controls width of bar. +) +st.write(p)