数据科学家赚多少?数据全分析与可视化 ⛵

💡 作者:韩信子@ShowMeAI
📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40
📘 AI 岗位&攻略系列:https://www.showmeai.tech/tutorials/47
📘 本文地址:https://www.showmeai.tech/article-detail/402
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

💡 引言

数据科学在互联网、医疗、电信、零售、体育、航空、艺术等各个领域仍然越来越受欢迎。在 📘Glassdoor的美国最佳职位列表中,数据科学职位排名第三,2022 年有近 10,071 个职位空缺。

除了数据独特的魅力,数据科学相关岗位的薪资也备受关注,在本篇内容中,ShowMeAI会基于数据对下述问题进行分析:

  • 数据科学中薪水最高的工作是什么?
  • 哪个国家的薪水最高,机会最多?
  • 典型的薪资范围是多少?
  • 工作水平对数据科学家有多重要?
  • 数据科学,全职vs自由职业者
  • 数据科学领域薪水最高的工作是什么?
  • 数据科学领域平均薪水最高的工作是什么?
  • 数据科学专业的最低和最高工资
  • 招聘数据科学专业人员的公司规模如何?
  • 工资是不是跟公司规模有关?
  • WFH(远程办公)和 WFO 的比例是多少?
  • 数据科学工作的薪水每年如何增长?
  • 如果有人正在寻找与数据科学相关的工作,你会建议他在网上搜索什么?
  • 如果你有几年初级员工的经验,你应该考虑跳槽到什么规模的公司?

💡 数据说明

我们本次用到的数据集是 🏆数据科学工作薪水数据集,大家可以通过 ShowMeAI 的百度网盘地址下载。

🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [37]基于pandasql和plotly的数据科学家薪资分析与可视化 『ds_salaries数据集

ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub

数据集包含 11 列,对应的名称和含义如下:

参数含义
work_year支付工资的年份
experience_level : 发薪时的经验等级
employment_type就业类型
job_title岗位名称
salary支付的总工资总额
salary_currency支付的薪水的货币
salary_in_usd支付的标准化工资(美元)
employee_residence员工的主要居住国家
remote_ratio远程完成的工作总量
company_location雇主主要办公室所在的国家/地区
company_size根据员工人数计算的公司规模

本篇分析使用到Pandas和SQL,欢迎大家阅读ShowMeAI的数据分析教程和对应的工具速查表文章,系统学习和动手实践:

📘图解数据分析:从入门到精通系列教程

📘编程语言速查表 | SQL 速查表

📘数据科学工具库速查表 | Pandas 速查表

📘数据科学工具库速查表 | Matplotlib 速查表

💡 导入工具库

我们先导入需要使用的工具库,我们使用pandas读取数据,使用 Plotly 和 matplotlib 进行可视化。并且我们在本篇中会使用 SQL 进行数据分析,我们这里使用到了 📘pandasql 工具库。

# For loading data
import pandas as pd
import numpy as np# For SQL queries
import pandasql as ps# For ploting graph / Visualization
import plotly.graph_objects as go
import plotly.express as px
from plotly.offline import iplot
import plotly.figure_factory as ffimport plotly.io as pio
import seaborn as sns
import matplotlib.pyplot as plt# To show graph below the code or on same notebook
from plotly.offline import init_notebook_mode
init_notebook_mode(connected=True)# To convert country code to country name
import country_converter as cocoimport warnings
warnings.filterwarnings('ignore')

💡 加载数据集

我们下载的数据集是 CSV 格式的,所以我们可以使用 read_csv 方法来读取我们的数据集。

# Loading data
salaries = pd.read_csv('ds_salaries.csv')

要查看前五个记录,我们可以使用 salaries.head() 方法。

借助 pandasql完成同样的任务是这样的:

# Function query to execute SQL queries
def query(query):return ps.sqldf(query)# Showing Top 5 rows of data
query("""SELECT * FROM salaries LIMIT 5
""")

输出:

💡 数据预处理

我们数据集中的第1列“Unnamed: 0”是没有用的,在分析之前我们把它剔除:

salaries = salaries.drop('Unnamed: 0', axis = 1)

我们查看一下数据集中缺失值情况:

salaries.isna().sum()

输出:

work_year             0
experience_level      0
employment_type       0
job_title             0
salary                0
salary_currency       0
salary_in_usd         0
employee_residence    0
remote_ratio          0
company_location      0
company_size          0
dtype: int64

我们的数据集中没有任何缺失值,因此不用做缺失值处理,employee_residencecompany_location 使用的是短国家代码。我们映射替换为国家的全名以便于理解:

# Converting countries code to country names
salaries["employee_residence"] = coco.convert(names=salaries["employee_residence"], to="name")
salaries["company_location"] = coco.convert(names=salaries["company_location"], to="name")

这个数据集中的experience_level代表不同的经验水平,使用的是如下缩写:

  • CN: Entry Level (入门级)
  • ML:Mid level (中级)
  • SE:Senior Level (高级)
  • EX:Expert Level (资深专家级)

为了更容易理解,我们也把这些缩写替换为全称。

# Replacing values in column - experience_level :
salaries['experience_level'] = query("""SELECT REPLACE(REPLACE(REPLACE(REPLACE(experience_level, 'MI', 'Mid level'), 'SE', 'Senior Level'), 'EN', 'Entry Level'), 'EX', 'Expert Level') FROM salaries""")

同样的方法,我们对工作形式也做全称替换

  • FT: Full Time (全职)
  • PT: Part Time (兼职)
  • CT:Contract (合同制)
  • FL:Freelance (自由职业)
# Replacing values in column - experience_level :
salaries['employment_type'] = query("""SELECT REPLACE(REPLACE(REPLACE(REPLACE(employment_type, 'PT', 'Part Time'), 'FT', 'Full Time'), 'FL', 'Freelance'), 'CT', 'Contract') FROM salaries""")

数据集中公司规模字段处理如下:

  • S:Small (小型)
  • M:Medium (中型)
  • L:Large (大型)
# Replacing values in column - company_size :
salaries['company_size'] = query("""SELECT REPLACE(REPLACE(REPLACE(company_size, 'M', 'Medium'), 'L', 'Large'), 'S', 'Small') FROM salaries""")

我们对远程比率字段也做一些处理,以便更好理解

# Replacing values in column - remote_ratio :
salaries['remote_ratio'] = query("""SELECT REPLACE(REPLACE(REPLACE(remote_ratio, '100', 'Fully Remote'), '50', 'Partially Remote'), '0', 'Non Remote Work') FROM salaries""")

这是预处理后的最终输出。

💡 数据分析&可视化

💦 数据科学中薪水最高的工作是什么?

top10_jobs = query("""SELECT job_title,Count(*) AS job_countFROM salariesGROUP BY job_titleORDER BY job_count DESCLIMIT 10
""")

我们绘制条形图以便更直观理解:

data = go.Bar(x = top10_jobs['job_title'], y = top10_jobs['job_count'],text = top10_jobs['job_count'], textposition = 'inside',textfont = dict(size = 12,color = 'white'),marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'black',line_width = 1))layout = go.Layout(title = {'text': "<b>Top 10 Data Science Jobs</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Job Title</b>', tickmode = 'array'),yaxis = dict(title = '<b>Total</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 数据科学职位的市场分布

fig = px.pie(top10_jobs, values='job_count', names='job_title', color_discrete_sequence = px.colors.qualitative.Alphabet)fig.update_layout(title = {'text': "<b>Distribution of job positions</b>", 'x':0.5, 'xanchor': 'center'},width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 拥有最多数据科学工作的国家

top10_com_loc = query("""SELECT company_location AS company,Count(*) AS job_countFROM salariesGROUP BY companyORDER BY job_count DESCLIMIT 10
""")data = go.Bar(x = top10_com_loc['company'], y = top10_com_loc['job_count'],textfont = dict(size = 12,color = 'white'),marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'black',line_width = 1))layout = go.Layout(title = {'text': "<b>Top 10 Data Science Countries</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Countries</b>', tickmode = 'array'),yaxis = dict(title = '<b>Total</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

从上图中,我们可以看出美国在数据科学方面的工作机会最多。现在我们来看看世界各地的薪水。大家可以继续运行代码,查看可视化结果。

df = salaries
df["company_country"] = coco.convert(names = salaries["company_location"], to = 'name_short')temp_df = df.groupby('company_country')['salary_in_usd'].sum().reset_index()
temp_df['salary_scale'] = np.log10(df['salary_in_usd'])fig = px.choropleth(temp_df, locationmode = 'country names', locations = "company_country",color = "salary_scale", hover_name = "company_country",hover_data = temp_df[['salary_in_usd']], color_continuous_scale = 'Jet',)fig.update_layout(title={'text':'<b>Salaries across the World</b>', 'xanchor': 'center','x':0.5})
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 平均工资(基于货币计算)

df = salaries[['salary_currency','salary_in_usd']].groupby(['salary_currency'], as_index = False).mean().set_index('salary_currency').reset_index().sort_values('salary_in_usd', ascending = False)#Selecting top 14
df = df.iloc[:14]
fig = px.bar(df, x = 'salary_currency',y = 'salary_in_usd',color = 'salary_currency',color_discrete_sequence = px.colors.qualitative.Safe,)fig.update_layout(title={'text':'<b>Average salary as a function of currency</b>', 'xanchor': 'center','x':0.5},xaxis_title = '<b>Currency</b>',yaxis_title = '<b>Mean Salary</b>')
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

人们以美元赚取的收入最多,其次是瑞士法郎和新加坡元。

df = salaries[['company_country','salary_in_usd']].groupby(['company_country'], as_index = False).mean().set_index('company_country').reset_index().sort_values('salary_in_usd', ascending = False)#Selecting top 14
df = df.iloc[:14]
fig = px.bar(df, x = 'company_country',y = 'salary_in_usd',color = 'company_country',color_discrete_sequence = px.colors.qualitative.Dark2,)fig.update_layout(title = {'text': "<b>Average salary as a function of company location</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Company Location</b>', tickmode = 'array'),yaxis = dict(title = '<b>Mean Salary</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 数据科学工作经验水平分布

job_exp = query("""SELECT experience_level, Count(*) AS job_countFROM salariesGROUP BY experience_levelORDER BY job_count ASC
""")data = go.Bar(x = job_exp['job_count'], y = job_exp['experience_level'],orientation = 'h', text = job_exp['job_count'],marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'white',line_width = 2))layout = go.Layout(title = {'text': "<b>Jobs on Experience Levels</b>",'x':0.5, 'xanchor':'center'},xaxis = dict(title='<b>Total</b>', tickmode = 'array'),yaxis = dict(title='<b>Experience lvl</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_layout(plot_bgcolor = '#f1e7d2', paper_bgcolor = '#f1e7d2')
fig.show()

从上图可以看出,大多数数据科学都是 高级水平专家级很少。

💦 数据科学工作就业类型分布

job_emp = query("""
SELECT employment_type,
COUNT(*) AS job_count
FROM salaries
GROUP BY employment_type
ORDER BY job_count ASC
""")data =  go.Bar(x = job_emp['job_count'], y = job_emp['employment_type'], orientation ='h',text = job_emp['job_count'],textposition ='outside',marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'white',line_width = 2))layout = go.Layout(title = {'text': "<b>Jobs on Employment Type</b>",'x':0.5, 'xanchor': 'center'},xaxis = dict(title='<b>Total</b>', tickmode = 'array'),yaxis =dict(title='<b>Emp Type lvl</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_layout(plot_bgcolor = '#f1e7d2', paper_bgcolor = '#f1e7d2')
fig.show()

从上图中,我们可以看到大多数数据科学家从事 全职工作而合同工和自由职业者 则较少

💦 数据科学工作数量趋势

job_year = query("""SELECT work_year, COUNT(*) AS 'job count'FROM salariesGROUP BY work_yearORDER BY 'job count' DESC
""")data = go.Scatter(x = job_year['work_year'], y = job_year['job count'],marker = dict(size = 20,line_width = 1.5,line_color = 'white',color = px.colors.qualitative.Alphabet),line = dict(color = '#ED7D31', width = 4), mode = 'lines+markers')layout  = go.Layout(title = {'text' : "<b><i>Data Science jobs Growth (2020 to 2022)</i></b>",'x' : 0.5, 'xanchor' : 'center'},xaxis = dict(title = '<b>Year</b>'),yaxis = dict(title = '<b>Jobs</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_xaxes(tickvals = ['2020','2021','2022'])
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 数据科学工作薪水分布

salary_usd = query("""SELECT salary_in_usd FROM salaries
""")import matplotlib.pyplot as pltplt.figure(figsize = (20, 8))
sns.set(rc = {'axes.facecolor' : '#f1e7d2','figure.facecolor' : '#f1e7d2'})p = sns.histplot(salary_usd["salary_in_usd"], kde = True, alpha = 1, fill = True,edgecolor = 'black', linewidth = 1)
p.axes.lines[0].set_color("orange")
plt.title("Data Science Salary Distribution \n", fontsize = 25)
plt.xlabel("Salary", fontsize = 18)
plt.ylabel("Count", fontsize = 18)
plt.show()

💦 薪酬最高的 10 大数据科学工作

salary_hi10 = query("""SELECT job_title,MAX(salary_in_usd) AS salaryFROM salariesGROUP BY salaryORDER BY salary DESCLIMIT 10
""")data = go.Bar(x = salary_hi10['salary'],y = salary_hi10['job_title'],orientation = 'h',text = salary_hi10['salary'],textposition = 'inside',insidetextanchor = 'middle',textfont = dict(size = 13,color = 'black'),marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'black',line_width = 1))layout = go.Layout(title = {'text': "<b>Top 10 Highest paid Data Science Jobs</b>",'x':0.5,'xanchor': 'center'},xaxis = dict(title = '<b>salary</b>', tickmode = 'array'),yaxis = dict(title = '<b>Job Title</b>'),width = 900,height = 600)
fig = go.Figure(data = data, layout= layout)
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

首席数据工程师 是数据科学领域的高薪工作。

💦 不同岗位平均薪资与排名

salary_av10 = query("""SELECT job_title,ROUND(AVG(salary_in_usd)) AS salaryFROM salariesGROUP BY job_titleORDER BY salary DESCLIMIT 10
""")data = go.Bar(x = salary_av10['salary'],y = salary_av10['job_title'],orientation = 'h',text = salary_av10['salary'],textposition = 'inside',insidetextanchor = 'middle',textfont = dict(size = 13,color = 'white'),marker = dict(color = px.colors.qualitative.Alphabet,opacity = 0.9,line_color = 'white',line_width = 2))layout = go.Layout(title = {'text': "<b>Top 10 Average paid Data Science Jobs</b>",'x':0.5,'xanchor': 'center'},xaxis = dict(title = '<b>salary</b>', tickmode = 'array'),yaxis = dict(title = '<b>Job Title</b>'),width = 900,height = 600)
fig = go.Figure(data = data, layout = layout)
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 数据科学薪资趋势

salary_year = query("""SELECT ROUND(AVG(salary_in_usd)) AS salary,work_year AS yearFROM salariesGROUP BY yearORDER BY salary DESC
""")data = go.Scatter(x = salary_year['year'],y = salary_year['salary'],marker = dict(size = 20,line_width = 1.5,line_color = 'black',color = '#ED7D31'),line = dict(color = 'black', width = 4), mode = 'lines+markers')layout = go.Layout(title = {'text' : "<b>Data Science Salary Growth (2020 to 2022) </b>",'x' : 0.5,'xanchor' : 'center'},xaxis = dict(title = '<b>Year</b>'),yaxis = dict(title = '<b>Salary</b>'),width = 900,height = 600)fig = go.Figure(data = data, layout = layout)
fig.update_xaxes(tickvals = ['2020','2021','2022'])
fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 经验水平&薪资

salary_exp = query("""SELECT experience_level AS 'Experience Level',salary_in_usd AS SalaryFROM salaries
""")fig = px.violin(salary_exp, x = 'Experience Level', y = 'Salary', color = 'Experience Level', box = True)fig.update_layout(title = {'text': "<b>Salary on Experience Level</b>",'xanchor': 'center','x':0.5},xaxis = dict(title = '<b>Experience level</b>'),yaxis = dict(title = '<b>salary</b>', ticktext = [-300000, 0, 100000, 200000, 300000, 400000, 500000, 600000, 700000]),width = 900,height = 600)fig.update_layout(paper_bgcolor= '#f1e7d2', plot_bgcolor = '#f1e7d2', showlegend = False)
fig.show()

💦 不同经验水平的薪资趋势

tmp_df = salaries.groupby(['work_year', 'experience_level']).median()
tmp_df.reset_index(inplace = True)fig = px.line(tmp_df, x='work_year', y='salary_in_usd', color='experience_level', symbol="experience_level")fig.update_layout(title = {'text': "<b>Median Salary Trend By Experience Level</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Working Year</b>', tickvals = [2020, 2021, 2022], tickmode = 'array'),yaxis = dict(title = '<b>Salary</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

观察 1. 在COVID-19大流行期间(2020 年至 2021 年),专家级员工薪资非常高,但是呈现部分下降趋势。 2. 2021年以后专家级和高级职称人员工资有所上涨。

💦 年份&薪资分布

year_gp = salaries.groupby('work_year')
hist_data = [year_gp.get_group(2020)['salary_in_usd'],year_gp.get_group(2021)['salary_in_usd'],year_gp.get_group(2022)['salary_in_usd']]
group_labels = ['2020', '2021', '2022']fig = ff.create_distplot(hist_data, group_labels, show_hist = False)fig.update_layout(title = {'text': "<b>Salary Distribution By Working Year</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Salary</b>'),yaxis = dict(title = '<b>Kernel Density</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 就业类型&薪资

salary_emp = query("""SELECT employment_type AS 'Employment Type',salary_in_usd AS SalaryFROM salaries
""")fig = px.box(salary_emp,x='Employment Type',y='Salary',color = 'Employment Type')fig.update_layout(title = {'text': "<b>Salary by Employment Type</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Employment Type</b>'),yaxis = dict(title = '<b>Salary</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 公司规模分布

comp_size = query("""SELECT company_size,COUNT(*) AS countFROM salariesGROUP BY company_size
""")import plotly.graph_objects as go
data = go.Pie(labels = comp_size['company_size'], values = comp_size['count'].values,hoverinfo = 'label',hole = 0.5,textfont_size = 16,textposition = 'auto')
fig = go.Figure(data = data)fig.update_layout(title = {'text': "<b>Company Size</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b></b>'),yaxis = dict(title = '<b></b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 不同公司规模的经验水平比例

df = salaries.groupby(['company_size', 'experience_level']).size()
comp_s = np.round(df['Small'].values / df['Small'].values.sum(),2)
comp_m = np.round(df['Medium'].values / df['Medium'].values.sum(),2)
comp_l = np.round(df['Large'].values / df['Large'].values.sum(),2)fig = go.Figure()
categories = ['Entry Level', 'Expert Level','Mid level','Senior Level']fig.add_trace(go.Scatterpolar(r = comp_s,theta = categories,fill = 'toself',name = 'Company Size S'))fig.add_trace(go.Scatterpolar(r = comp_m,theta = categories,fill = 'toself',name = 'Company Size M'))fig.add_trace(go.Scatterpolar(r = comp_l,theta = categories,fill = 'toself',name = 'Company Size L'))fig.update_layout(polar = dict(radialaxis = dict(range = [0, 0.6])),showlegend = True,
)fig.update_layout(title = {'text': "<b>Proportion of Experience Level In Different Company Sizes</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b></b>'),yaxis = dict(title = '<b></b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 不同公司规模&工作薪资

salary_size = query("""SELECT company_size AS 'Company size',salary_in_usd AS SalaryFROM salaries
""")fig = px.box(salary_size, x='Company size', y = 'Salary',color = 'Company size')fig.update_layout(title = {'text': "<b>Salary by Company size</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Company size</b>'),yaxis = dict(title = '<b>Salary</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 WFH(远程办公)和 WFO 的比例

rem_type = query("""SELECT remote_ratio,COUNT(*) AS totalFROM salariesGROUP BY remote_ratio
""")data = go.Pie(labels = rem_type['remote_ratio'], values = rem_type['total'].values,hoverinfo = 'label',hole = 0.4,textfont_size = 18,textposition = 'auto')fig = go.Figure(data = data)fig.update_layout(title = {'text': "<b>Remote Ratio</b>", 'x':0.5, 'xanchor': 'center'},width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 薪水受Remote Type影响程度

salary_remote = query("""SELECT remote_ratio AS 'Remote type',salary_in_usd AS SalaryFrom salaries
""")fig = px.box(salary_remote, x = 'Remote type', y = 'Salary', color = 'Remote type')fig.update_layout(title = {'text': "<b>Salary by Remote Type</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Remote type</b>'),yaxis = dict(title = '<b>Salary</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💦 不同经验水平&远程比率

exp_remote = salaries.groupby(['experience_level', 'remote_ratio']).count()
exp_remote.reset_index(inplace = True)fig = px.histogram(exp_remote, x = 'experience_level',y = 'work_year', color = 'remote_ratio',barmode = 'group',text_auto = True)fig.update_layout(title = {'text': "<b>Respondent Count In Different Experience Level Based on Remote Ratio</b>", 'x':0.5, 'xanchor': 'center'},xaxis = dict(title = '<b>Experience Level</b>'),yaxis = dict(title = '<b>Number of Respondents</b>'),width = 900,height = 600)fig.update_layout(plot_bgcolor = '#f1e7d2',paper_bgcolor = '#f1e7d2')
fig.show()

💡 分析结论

  • 数据科学领域Top3多的职位是数据科学家数据工程师数据分析师

  • 数据科学工作越来越受欢迎。员工比例从2020年的11.9%增加到2022年的52.4%

  • 美国是数据科学公司最多的国家。

  • 工资分布的IQR在62.7k和150k之间。

  • 在数据科学员工中,大多数是高级水平,而专家级则更少。

  • 大多数数据科学员工都是全职工作,很少有合同工自由职业者

  • 首席数据工程师是薪酬最高的数据科学工作。

  • 数据科学的最低工资(入门级经验)为4000美元,具有专家级经验的数据科学的最高工资为60万美元。

  • 公司构成:53.7%中型公司,32.6%大型公司,13.7%小型数据科学公司。

  • 工资也受公司规模影响,规模大的公司支付更高的薪水。

  • 62.8%的数据科学是完全远程工作,20.9%是非远程工作,16.3%部分远程工作。

  • 数据科学薪水随时间和经验积累而增长

参考资料

  • 📘 Glassdoor
  • 📘 pandasql
  • 📘 数据科学工作薪水数据集(Kaggle)
  • 📘 图解数据分析:从入门到精通系列教程:https://www.showmeai.tech/tutorials/33
  • 📘 编程语言速查表 | SQL 速查表:https://www.showmeai.tech/article-detail/99
  • 📘 数据科学工具库速查表 | Pandas 速查表:https://www.showmeai.tech/article-detail/101
  • 📘 数据科学工具库速查表 | Matplotlib 速查表:https://www.showmeai.tech/article-detail/103

推荐阅读

  • 🌍 数据分析实战系列 :https://www.showmeai.tech/tutorials/40
  • 🌍 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
  • 🌍 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
  • 🌍 TensorFlow数据分析实战系列:https://www.showmeai.tech/tutorials/43
  • 🌍 PyTorch数据分析实战系列:https://www.showmeai.tech/tutorials/44
  • 🌍 NLP实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
  • 🌍 CV实战数据分析实战系列:https://www.showmeai.tech/tutorials/46
  • 🌍 AI 面试题库系列:https://www.showmeai.tech/tutorials/48

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61449.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人美声甜GPT,数学题哪里不会讲哪里

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 大模型的颠覆和变革&#xff0c;还只是开始。 ChatGPT一炮而红&#xff0c;重塑搜索、办公协同等多个场景和行业后&#xff0c;在线教育&#xff0c;被视为最重要的垂直场景——毕竟大语言模型展示出的能力&#xff0c;正是之前在线教育…

除了方文山,用TA你也能帮周杰伦写歌词了

周杰伦几乎陪伴了每个90后的青春&#xff0c;那如果AI写杰伦风格的歌词会写成怎样呢&#xff1f; 首先当然我们需要准备杰伦的歌词&#xff0c;这里一共收录了他的十几张专辑&#xff0c;近5000多行歌词。 原文档格式&#xff1a; 第一步数据预处理 def preprocess(data):&qu…

Selenium+Request+Beautifulsoup(周杰伦,林俊杰歌词爬取)

爬去JZ的歌词是为了做一个NlLP的任务&#xff0c;这里是在python上使用SelenuimRequestsBeautifulSoup实现的。使用selenuim是因为会涉及到动态网页抓取&#xff0c;又使用Request的原因是selenium对网页抓取时是要先进行加载的因此很耗时间&#xff0c;而Request不需要网页加载…

爬取QQ音乐(周杰伦)

首先呢&#xff0c;我们打开QQ音乐搜索周杰伦 https://y.qq.com/portal/search.html#page1&searchid1&remoteplacetxt.yqq.top&tsong&w周杰伦 一切做好准备后呢&#xff0c;我们需要找到歌曲清单&#xff0c;找到client_search&#xff08;客户端搜索&#xf…

【方向盘】轰动从未停止,感动从未消失。他,是周杰伦

不仅20年&#xff0c;不仅是青春。 本文已被https://yourbatman.cn收录&#xff1b;女娲Knife-Initializr工程可公开访问啦&#xff1b;程序员专用网盘https://wangpan.yourbatman.cn&#xff1b;公号后台回复“专栏列表”获取全部小而美的原创技术专栏 你好&#xff0c;我是方…

用Python分析周杰伦歌曲并进行数据可视化

大家好&#xff0c;今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程&#xff0c;接下来我们会先简单讲解数据的预处理过程&#xff0c;即如何将 JSON 数据转化为Excel 格式&#xff0c;以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…

哪里可以免费听到周杰伦的歌曲?请看这里,教你免费听歌

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 小伙伴说想听周杰伦的音乐&#xff0c;有什么网站是可以免费听的&#xff0c;然后他发现咪咕音乐可以免费听周杰伦的歌曲&#xff0c;既然可以免费听&#xff0c;那…

计算机音乐谱大全告白气球,周杰伦《告白气球》钢琴曲谱

《告白气球》是由方文山作词&#xff0c;周杰伦作曲并演唱的歌曲&#xff0c;收录于周杰伦2016年6月24日发行的专辑《周杰伦的床边故事》中。2017年1月&#xff0c;这首歌曲获得Billboard Radio China 2016年度十大金曲奖。 创作背景 词作者方文山为周杰伦创作了《印地安老斑鸠…

周杰伦的歌里都有些啥?

周董的夕阳红粉丝团“被迫营业”&#xff0c;把蔡徐坤拉下了盘踞许久的微博超话人气榜第一&#xff0c;还一举破了亿。 当然&#xff0c;等我知道的时候&#xff0c;都战局已定了……作为当年会唱前三张专辑里所有歌曲的老粉&#xff0c;不想就这么躺赢&#xff0c;我今天也来给…

Python+pyecharts研究周杰伦歌词中的 秘密

一个朋友很喜欢周杰伦。 所以&#xff0c;前两天我跟别人去KTV&#xff0c;就唱的是“七里香”。 唱着唱歌&#xff0c;突然就好奇了起来。周杰伦的歌里&#xff0c;是不是还有很多的麻雀 后来发现&#xff0c;270首歌&#xff0c;140786个字&#xff0c;千言万语&#xff0…

周杰伦入局元宇宙,带你搞懂元宇宙怎么玩

自古以来&#xff0c;每个新兴产业的崛起&#xff0c;最关键、最重要的元素一定是流量&#xff0c;这对于元宇宙来说亦是如此。如果Facebook的入局元宇宙行业吸引了第一波市场流量&#xff0c;那么NBA球星史蒂芬库里、歌手林俊杰、周杰伦等明星入局的影响力就为“元宇宙”吸引了…

HTML网页设计:周杰伦网站

Hello朋友们&#xff01;我们又见面了&#xff01;是不是又到了焦头烂额忙期末设计的作业的时候了&#xff0c;不要担心&#xff0c;我来了&#xff0c;经过不懈的努力写出了一个比较容易懂的网页&#xff0c;完全足够应付你亲爱的老师的网页设计大作业&#xff01; 哦&#xf…

用matlab演奏周杰伦的《七里香》

问题描述 前几天在学习matlab的时候&#xff0c;发现了一篇用matlab演奏音乐的文章&#xff0c;不禁感叹matlab居然还能这么玩&#xff01;于是我就学着用matlab演奏我最喜欢听的一首歌——周杰伦的《七里香》。最后成果我已经发到B站&#xff0c;链接为&#xff1a;用matlab演…

WPF 消息传递简明教程

WPF 消息传递简明教程 独立观察员 2023 年 4 月 24 日 0、说明 参考&#xff1a;https://www.cnblogs.com/cdaniu/p/16852620.html 使用包&#xff1a;CommunityToolkit.Mvvm&#xff08;8.1.0&#xff09; 1、订阅 让需要使用消息的 ViewModel 继承 ObservableRecipient&#…

VMware官网注册账号之验证码问题

VMware官网注册账号之验证码问题 首先上个官网注册账号链接&#xff5e; https://my.vmware.com/zh/web/vmware/registration 点我访问官网注册 然后不出意外都会看见中文版页面 这时候不要着急注册&#xff0c;因为你会发现验证码是这个造型的 抓狂的时候来了&#xff0c;不…

ChatGpt3.5 使用小记001

使用了一段时间的ChatGpt。主要的用途是向它咨询些学习的问题。因为有些它的分类是对话形式的&#xff0c;所以&#xff0c;一定问题多了&#xff0c;自己都不好找。故此想稍做整理&#xff0c;在此留存。 1.英语学习类 英语单词类&#xff0c;主要是因为有些近义词在中文的翻…

chatgpt赋能Python-python3_5怎么打开

Python 3.5怎么打开&#xff1f;教你几种方法 Python是目前非常流行的一种编程语言&#xff0c;几乎在所有行业都得到了广泛的应用。Python非常容易上手&#xff0c;且有强大的数据处理和科学计算能力。现在我们来说一下&#xff0c;如何在您的计算机上打开Python 3.5。 方法…

python-openCV实现银行卡卡号识别

实现效果&#xff1a; code import cv2 as cv import numpy as np# 轮廓排序 默认从左到右 # --cnts 待排序的轮廓列表 # --method 排序方法 自上而下&#xff0c;从左到右等 def sort_contours(cnts, method"left-to-right"):# 初始化反向标志和排序索引reverse F…

opencv之银行卡号识别

1.项目背景 1.1 项目介绍 这个一个opencv的经典应用,所以用它来熟悉之前的一些操作。 1.2 项目目的 通过此程序可以识别出银行卡图片中包括的银行卡卡号。 2.项目介绍 此项目主要分为两部分:模板图片处理,银行卡图片处理。 模板图片: 银行卡图片示例: 2.1 模板图片处…