File size: 7,082 Bytes
d2fb654
 
c1ae168
d2fb654
4795714
d2fb654
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4795714
 
 
 
 
 
 
 
 
d2fb654
 
 
 
 
4795714
 
 
 
d2fb654
 
4795714
d2fb654
4795714
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d2fb654
 
4795714
d2fb654
4795714
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d2fb654
 
 
 
 
 
f5f6f4f
d2fb654
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import streamlit as st
from datasets import load_dataset
import pandas as pd
from transformers import pipeline
import time

# Constants
universities_url = "https://www.4icu.org/top-universities-world/"

# Load datasets with caching to optimize performance
@st.cache_resource
def load_datasets():
    ds_jobs = load_dataset("lukebarousse/data_jobs")
    ds_courses = load_dataset("azrai99/coursera-course-dataset")
    ds_custom_courses = pd.read_csv("final_cleaned_merged_coursera_courses.csv")
    ds_custom_jobs = pd.read_csv("merged_data_science_jobs.csv")
    ds_custom_universities = pd.read_csv("merged_university_data_cleaned (1).csv")
    return ds_jobs, ds_courses, ds_custom_courses, ds_custom_jobs, ds_custom_universities

ds_jobs, ds_courses, ds_custom_courses, ds_custom_jobs, ds_custom_universities = load_datasets()

# Initialize the pipeline with caching, using an accessible model like 'google/flan-t5-large'
@st.cache_resource
def load_pipeline():
    return pipeline("text2text-generation", model="google/flan-t5-large")

qa_pipeline = load_pipeline()

# Streamlit App Interface
st.title("Career Counseling Application")
st.subheader("Build Your Profile and Discover Tailored Career Recommendations")

# Sidebar for Profile Setup
st.sidebar.header("Profile Setup")
educational_background = st.sidebar.text_input("Educational Background (e.g., Degree, Major)")
interests = st.sidebar.text_input("Interests (e.g., AI, Data Science, Engineering)")
tech_skills = st.sidebar.text_area("Technical Skills (e.g., Python, SQL, Machine Learning)")
soft_skills = st.sidebar.text_area("Soft Skills (e.g., Communication, Teamwork)")

# Save profile data for session-based recommendations
if st.sidebar.button("Save Profile"):
    with st.spinner('Saving your profile...'):
        time.sleep(2)  # Simulate processing time
        st.session_state.profile_data = {
            "educational_background": educational_background,
            "interests": interests,
            "tech_skills": tech_skills,
            "soft_skills": soft_skills
        }
        st.sidebar.success("Profile saved successfully!")

# Intelligent Q&A Section
st.header("Intelligent Q&A")
question = st.text_input("Ask a career-related question:")
if question:
    with st.spinner('Processing your question...'):
        answer = qa_pipeline(question)[0]["generated_text"]
        time.sleep(2)  # Simulate processing time
        st.write("Answer:", answer)

# Career and Job Recommendations Section
st.header("Job Recommendations")
if "profile_data" in st.session_state:
    with st.spinner('Generating job recommendations...'):
        time.sleep(2)  # Simulate processing time
        job_recommendations = []

        # Find jobs from ds_jobs
        for job in ds_jobs["train"]:
            job_title = job.get("job_title_short", "Unknown Job Title")
            job_skills = job.get("job_skills", "") or ""
            if any(skill.lower() in job_skills.lower() for skill in st.session_state.profile_data["tech_skills"].split(",")):
                job_recommendations.append(job_title)

        # Find jobs from ds_custom_jobs
        for _, job in ds_custom_jobs.iterrows():
            job_title = job.get("job_title", "Unknown Job Title")
            job_skills = job.get("skills", "") or ""
            if any(skill.lower() in job_skills.lower() for skill in st.session_state.profile_data["tech_skills"].split(",")):
                job_recommendations.append(job_title)

        # Remove duplicates and keep the unique job titles
        job_recommendations = list(set(job_recommendations))

        if job_recommendations:
            st.subheader("Based on your profile, here are some potential job roles:")
            for job in job_recommendations[:5]:  # Limit to top 5 job recommendations
                st.write("- ", job)
        else:
            st.write("No specific job recommendations found matching your profile. Here are some general recommendations:")
            for job in ["Data Analyst", "Software Engineer", "Project Manager", "Research Scientist", "Business Analyst"][:5]:
                st.write("- ", job)

# Course Suggestions Section
st.header("Recommended Courses")
if "profile_data" in st.session_state:
    with st.spinner('Finding courses related to your profile...'):
        time.sleep(2)  # Simulate processing time
        course_recommendations = []

        # Find relevant courses in ds_courses
        for course in ds_courses["train"]:
            if any(interest.lower() in course.get("Course Name", "").lower() for interest in st.session_state.profile_data["interests"].split(",")):
                course_recommendations.append({
                    "name": course.get("Course Name", "Unknown Course Title"),
                    "url": course.get("Links", "#")
                })

        # Find relevant courses in ds_custom_courses
        for _, row in ds_custom_courses.iterrows():
            if any(interest.lower() in row["Course Name"].lower() for interest in st.session_state.profile_data["interests"].split(",")):
                course_recommendations.append({
                    "name": row["Course Name"],
                    "url": row.get("Links", "#")
                })

        # Remove duplicates from course recommendations by converting to a set of tuples and back to a list
        course_recommendations = list({(course["name"], course["url"]) for course in course_recommendations})

        # If there are fewer than 5 exact matches, add nearly related courses
        if len(course_recommendations) < 5:
            for course in ds_courses["train"]:
                if len(course_recommendations) >= 5:
                    break
                if any(skill.lower() in course.get("Course Name", "").lower() for skill in st.session_state.profile_data["tech_skills"].split(",")):
                    course_recommendations.append((course.get("Course Name", "Unknown Course Title"), course.get("Links", "#")))

            for _, row in ds_custom_courses.iterrows():
                if len(course_recommendations) >= 5:
                    break
                if any(skill.lower() in row["Course Name"].lower() for skill in st.session_state.profile_data["tech_skills"].split(",")):
                    course_recommendations.append((row["Course Name"], row.get("Links", "#")))

            # Remove duplicates again after adding nearly related courses
            course_recommendations = list({(name, url) for name, url in course_recommendations})

        if course_recommendations:
            st.write("Here are the top 5 courses related to your interests:")
            for course in course_recommendations[:5]:  # Limit to top 5 course recommendations
                st.write(f"- [{course[0]}]({course[1]})")

# University Recommendations Section
st.header("Top Universities")
st.write("For further education, you can explore the top universities worldwide:")
st.write(f"[View Top Universities Rankings]({universities_url})")

# Conclusiona
st.write("Thank you for using the Career Counseling Application!")