Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
def shorten_categories(categories, cutoff): | |
categorical_map = {} | |
for i in range(len(categories)): | |
if categories.values[i] >= cutoff: | |
categorical_map[categories.index[i]] = categories.index[i] | |
else: | |
categorical_map[categories.index[i]] = 'Other' | |
return categorical_map | |
def clean_experience(x): | |
if x == 'More than 50 years': | |
return 50 | |
if x == 'Less than 1 year': | |
return 0.5 | |
return float(x) | |
def clean_education(x): | |
if 'Bachelor’s degree' in x: | |
return 'Bachelor’s degree' | |
if 'Master’s degree' in x: | |
return 'Master’s degree' | |
if 'Professional degree' in x or 'Other doctoral' in x: | |
return 'Post grad' | |
return 'Less than a Bachelors' | |
def load_data(): | |
df = pd.read_csv("survey_results_public.csv") | |
df = df[["Country", "EdLevel", "YearsCodePro", "Employment", "ConvertedCompYearly"]] | |
df = df.rename({"ConvertedCompYearly": "Salary"}, axis=1) | |
df = df[df["Salary"].notnull()] | |
df = df.dropna() | |
df = df[df["Employment"] == "Employed, full-time"] | |
df = df.drop("Employment", axis=1) | |
country_map = shorten_categories(df.Country.value_counts(), 400) | |
df['Country'] = df['Country'].map(country_map) | |
df = df[df["Salary"] <= 250000] | |
df = df[df["Salary"] >= 10000] | |
df = df[df['Country'] != 'Other'] | |
df['YearsCodePro'] = df['YearsCodePro'].apply(clean_experience) | |
df['EdLevel'] = df['EdLevel'].apply(clean_education) | |
return df | |
df = load_data() | |
def show_explore_page(): | |
st.title("Explore Software Engineer Salaries") | |
st.write("""### Stack Overflow Developer Survey 2022""") | |
data = df["Country"].value_counts() | |
fig1, ax1 = plt.subplots() | |
ax1.pie(data, labels=data.index, autopct="%1.1f%%", shadow=True, startangle=90) | |
ax1.axis("equal") # Equal aspect ratio ensures that pie is drawn as a circle. | |
st.write("""#### Number of Data from different countries""") | |
st.pyplot(fig1) | |
st.write("""#### Mean Salary Based On Country""") | |
data = df.groupby(["Country"])["Salary"].mean().sort_values(ascending=True) | |
st.bar_chart(data) | |
st.write("""#### Mean Salary Based On Experience""") | |
data = df.groupby(["YearsCodePro"])["Salary"].mean().sort_values(ascending=True) | |
st.line_chart(data) |