Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import plotly.express as px | |
from fpdf import FPDF | |
import base64 | |
from transformers import pipeline | |
from openai import OpenAI | |
pipe = pipeline("sentiment-analysis", | |
model="finiteautomata/bertweet-base-sentiment-analysis") | |
def col_labels(df, column_name): | |
label_count = df[column_name].value_counts() | |
return label_count | |
def plots(labels): | |
fig = px.pie(names=labels.index, values=labels.values) | |
fig.update_layout( | |
showlegend=True, | |
autosize=False, | |
width=500, | |
height=500 | |
) | |
st.plotly_chart(fig, use_container_width=True) | |
def generate_pdf_report(df, questions): | |
pdf = FPDF() | |
pdf.add_page() | |
pdf.set_font("Arial", size=12, style='B') | |
pdf.cell(200, 10, txt="Bennett University NAAC Survey Report", | |
ln=True, align="C") | |
pdf.ln(10) | |
for question in questions: | |
pdf.multi_cell(200, 10, txt=question) | |
labels = col_labels(df, question) | |
for label, count in labels.items(): | |
pdf.cell(200, 10, txt=f"{label}: {count}", ln=True) | |
pdf.ln(5) | |
pdf_file = "survey_report.pdf" | |
pdf.output(pdf_file) | |
return pdf_file | |
def chunking(arr): | |
max_chunk_size = 1024 | |
chunks = [] | |
current_chunk = "" | |
for recommendation in arr: | |
if len(current_chunk) + len(arr) + len('. ') <= max_chunk_size: | |
current_chunk += recommendation + '. ' | |
else: | |
chunks.append(current_chunk[:-2]) | |
current_chunk = recommendation + '. ' | |
if current_chunk: | |
chunks.append(current_chunk[:-2]) | |
return chunks | |
def generate_summary(text): | |
input_chunks = chunking(text) | |
output_chunks = [] | |
client = OpenAI() | |
for chunk in input_chunks: | |
response = client.completions.create( | |
model="gpt-3.5-turbo-instruct", | |
prompt=( | |
f"Please give summary of:\n{chunk}. The summary given should be in bullet points.\n\nSummary:"), | |
temperature=0.7, | |
max_tokens=1024, | |
n=1, | |
stop=None | |
) | |
summary = response.choices[0].text.strip() | |
output_chunks.append(summary) | |
return " ".join(output_chunks) | |
st.set_page_config( | |
page_title="Bennett University NAAC Survey Report", | |
page_icon="📊", | |
layout="wide" | |
) | |
hide_streamlit_style = """ | |
<style> | |
#MainMenu {visibility: hidden;} | |
footer {visibility: hidden;} | |
</style> | |
""" | |
st.markdown(hide_streamlit_style, unsafe_allow_html=True) | |
st.markdown( | |
"<h1 style='text-align: center; color: #008080;'>Bennett University NAAC Survey Report</h1>", | |
unsafe_allow_html=True | |
) | |
file = st.file_uploader("Upload Response File", type=['csv']) | |
if file is not None: | |
st.sidebar.info("File uploaded successfully! Proceed with the analysis.") | |
df = pd.read_csv(file) | |
questions = [ | |
'How much of the syllabus was covered in the class?', | |
'How well did the teachers prepare for the classes?', | |
'How well were the teachers able to communicate?', | |
'The teacher\'s approach to teaching can best be described as', | |
'Fairness of the internal evaluation process by the teachers.', | |
'Was your performance in assignments discussed with you?', | |
'The institute takes active interest in promoting internship, student exchange, field visit opportunities for students.', | |
'The teaching and mentoring process in your institution facilitates you in cognitive, social and emotional growth.', | |
'The institution provides multiple opportunities to learn and grow.', | |
'Teachers inform you about your expected competencies, course outcomes and programme outcomes.', | |
'Your mentor does a necessary follow-up with an assigned task to you.', | |
'The teachers illustrate the concepts through examples and applications.', | |
'The teachers identify your strengths and encourage you with providing right level of challenges.', | |
'Teachers are able to identify your weaknesses and help you to overcome them.', | |
'The institution makes effort to engage students in the monitoring, review and continuous quality improvement of the teaching learning process.', | |
'The institute/ teachers use student centric methods, such as experiential learning, participative learning and problem solving methodologies for enhancing learning experiences.', | |
'Teachers encourage you to participate in extracurricular activities.', | |
'Efforts are made by the institute/ teachers to inculcate soft skills, life skills and employability skills to make you ready for the world of work.', | |
'What percentage of teachers use ICT tools such as LCD projector, Multimedia, etc. while teaching.', | |
'The overall quality of teaching-learning process in your institute is very good.', | |
] | |
st.write("---") | |
st.write("### Survey Questions Analysis") | |
st.write("Below are the analysis results for each survey question:") | |
pos_comments = [] | |
neg_comments = [] | |
neu_comments = [] | |
for data in df['Give three observation / suggestions to improve the overall teaching - learning experience in your institution.']: | |
sentiment = pipe(data)[0]['label'] | |
if sentiment == "POS": | |
pos_comments.append(data) | |
if sentiment == "NEG": | |
neg_comments.append(data) | |
if sentiment == "NEU": | |
neu_comments.append(data) | |
else: | |
neu_comments.append(data) | |
st.subheader("Positive Comments") | |
st.write(generate_summary(pos_comments)) | |
st.write("---") | |
st.subheader("Negative Comments") | |
st.write(generate_summary(neg_comments)) | |
st.sidebar.markdown("---") | |
st.sidebar.write("#### Analysis Settings") | |
selected_questions = [ | |
question for question in questions if st.sidebar.checkbox(question, value=True)] | |
for question in selected_questions: | |
st.write("") | |
st.subheader(question) | |
labels = col_labels(df, question) | |
plots(labels) | |
st.sidebar.markdown("---") | |
st.sidebar.write("#### Download Report") | |
if st.sidebar.button("Generate PDF Report"): | |
pdf_file = generate_pdf_report(df, selected_questions) | |
with open(pdf_file, "rb") as f: | |
base64_pdf = base64.b64encode(f.read()).decode("utf-8") | |
href = f"<a href='data:application/octet-stream;base64,{base64_pdf}' download='survey_report.pdf'><button>Download PDF Report</button></a>" | |
st.sidebar.markdown(href, unsafe_allow_html=True) | |