import streamlit as st import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import plotly.express as px from PIL import Image from wordcloud import WordCloud from wordcloud import ImageColorGenerator from wordcloud import STOPWORDS st.set_page_config( page_title='Công cụ ước tính lương nghề khoa học dữ liệu' ) def run(): # Membuat Title st.title('Công cụ ước tính lương nghề khoa học dữ liệu') # Sub header # Insert Gambar image = Image.open('gaji.jpg') st.image(image, caption='Lương', use_column_width=True) # description st.markdown('## Mục tiêu của công cụ ước tính lương') st.write( 'Với tư cách là một nhà khoa học dữ liệu, tôi muốn biết liệu tôi có nhận được mức lương xứng đáng từ công ty hay không, vì vậy tôi đã tạo ra mô hình học máy này để dự đoán mức lương cho các công việc trong thế giới dữ liệu.') st.write('Công cụ ước tính lương này có thể giúp các bạn biết liệu mình có nhận được mức lương xứng đáng hay không.') st.markdown('---') st.markdown('## Mô tả') st.write('Cấp độ kinh nghiệm') st.markdown( '- Entry-level: người mới ra trường họặc ít năm kinh nghiệm.\n- Mid-level: vị trí có một mức độ kinh nghiệm và chuyên môn nhất định, vượt qua cấp độ mới vào nghề (Entry-level) nhưng chưa đạt đến cấp độ cao cấp (Senior-level).\n- Senior-level: vị trí có mức độ kinh nghiệm, chuyên môn và thẩm quyền cao.\n- Executive-level: cấp điều hành.') st.markdown('---') # show dataframe data = pd.read_csv('DataScienceSalaries.csv') map_ex = {'SE': 'Senior-level', 'MI': 'Mid-level', 'EN': 'Entry-level', 'EX': 'Executive-level'} map_type = {'FT': 'Toàn thời gian', 'PT': 'Bán thời gian', 'CT': 'Hợp đồng', 'FL': 'Tự do'} map_size = {'S': 'Nhỏ', 'M': 'Vừa', 'L': 'Lớn'} data['experience_level'] = data['experience_level'].map(map_ex) data['employment_type'] = data['employment_type'].map(map_type) data['company_size'] = data['company_size'].map(map_size) st.dataframe(data) # membuat histogram salary st.write('### Biểu đồ lương bằng USD') fig = plt.figure(figsize=(10, 5), dpi=150) sns.histplot(data['salary_in_usd'], kde=True, bins=40) plt.xlabel('Lương bằng USD', fontsize=15) plt.ylabel('Số lượng', fontsize=15) st.pyplot(fig) # membuat pie chart experience st.write('### Biểu đồ phân phối cấp độ kinh nghiệm') exp = data.experience_level.value_counts() def make_autopct(values): def my_autopct(pct): total = sum(values) val = int(round(pct * total / 100.0)) return '{p:.2f}% ({v:d})'.format(p=pct, v=val) return my_autopct fig = plt.figure(figsize=(5, 5), dpi=150) exp.plot.pie(autopct=make_autopct(exp)) st.pyplot(fig) # barchart posisi dengan gaji terbesar st.write('### 5 Vị trí có mức lương cao nhất') work_rate = data.groupby(['job_title'])['salary_in_usd'].mean() work = work_rate.nlargest(5) fig = plt.figure(figsize=(15, 5), dpi=150) work.plot(kind="bar") plt.xlabel('Tên vị trí', fontsize=15) plt.xticks(rotation=45, fontsize=15) plt.ylabel('Lương bằng USD', fontsize=15) st.pyplot(fig) # negara dengan gaji tertinggi st.write('### 5 Quốc gia có mức lương cao nhất') location_payrate = data.groupby(['company_location'])['salary_in_usd'].mean() lar = location_payrate.nlargest(5) fig = plt.figure(figsize=(15, 8), dpi=150) lar.plot(kind="bar") plt.xlabel('Tên quốc gia', fontsize=15) plt.xticks(rotation=0, fontsize=15) plt.ylabel('Lương bằng usd', fontsize=15) st.pyplot(fig) # popular job st.write('### Top 10 công việc được tuyển dụng nhiều nhất') job = data.groupby(['job_title'])['job_title'].count() top_job = job.nlargest(10) fig = plt.figure(figsize=(12, 12), dpi=150) plt.xticks(rotation=0, fontsize = 15) plt.yticks(fontsize = 15) plt.ylabel('Tên công việc', fontsize=15) plt.xlabel('Số lượng', fontsize=15) sns.barplot(y=top_job.index, x=top_job.values) st.pyplot(fig) # wordcloud # see most job with word cloud st.write('### Word-cloud các từ được nhắc tới nhiều nhất') text = " ".join(i for i in data.job_title) stopwords = set(STOPWORDS) wordcloud = WordCloud(width=1600, height=800).generate(text) fig = plt.figure(figsize=(15, 10), facecolor='k') plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") st.pyplot(fig) if __name__ == '__main__': run()