vumichien's picture
fix ui
687dc0b
raw
history blame
4.93 kB
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()