Python数据分析-数据职业的薪水分析预测

一、研究背景

随着大数据和人工智能技术的迅猛发展,数据职业在全球范围内迅速崛起,成为当前就业市场上的热点领域。数据分析师、数据科学家、机器学习工程师等职业需求量大增,吸引了大量求职者的关注。然而,不同数据职业之间的薪酬差异,以及影响薪酬的关键因素,仍然是求职者和雇主共同关心的问题。

在现代社会,薪酬不仅反映了员工的劳动价值和企业对员工的认可程度,还在一定程度上影响着职业选择和职业发展路径。因此,了解数据职业的薪酬情况及其影响因素,对求职者在职业规划和求职过程中具有重要参考价值。同时,企业在招聘和薪酬制定过程中,也可以通过数据分析,制定更加科学合理的薪酬策略,吸引和留住高素质人才。

本研究旨在利用Python数据分析技术,对数据职业的薪酬数据进行探索性分析和预测建模,找出影响薪酬的关键因素,并建立薪酬预测模型,为求职者和雇主提供科学依据和决策支持。

二、研究意义

  1. 为求职者提供职业规划参考:通过对数据职业薪酬数据的分析,求职者可以了解不同职业的薪酬水平及其影响因素,从而在职业选择和规划中做出更加明智的决策,选择更适合自身发展的职业路径。

  2. 帮助企业制定薪酬策略:企业可以利用本研究的成果,了解市场上不同数据职业的薪酬水平和关键影响因素,从而制定更加科学合理的薪酬策略,吸引和留住高素质的数据人才,提高企业竞争力。

  3. 促进薪酬公平和透明:通过公开的薪酬分析和预测,求职者和雇主可以对市场薪酬水平有更清晰的认知,避免因信息不对称而造成的薪酬不公平现象,促进就业市场的公平和透明。

  4. 为教育和培训机构提供指导:教育和培训机构可以根据市场需求和薪酬水平,调整课程设置和培训内容,为社会培养更多符合市场需求的数据人才,提升教育和培训的有效性。

三、实证分析

代码和数据

该数据可用于薪资预测、趋势分析和人力资源分析。

列描述符 FIRST NAME:数据专业人员的名字 (String)

LAST NAME:数据专业人员的姓氏 (String)

SEX:数据专业人员的性别(字符串:“F”表示女性,“M”表示男性)

DOJ(加入日期):数据专业人员加入公司的日期(月/日/年格式的日期)

CURRENT DATE:数据的当前日期或快照日期(MM/DD/YYYY 格式的日期)

职称:数据专业人员的工作角色或职称(字符串:例如,分析师、高级分析师、经理)

AGE:数据专业人员的年龄(整数)

薪资:数据专业人员的年薪(浮动)

UNIT:数据专业人员工作的业务单位或部门(字符串:例如 IT、财务、营销)

LEAVES USED:数据专业人员使用的叶子数(整数)

LEAVES REMAINING:数据专业人员的剩余叶子数(整数)

评级:数据专业人员的绩效评级(浮动)

过去的经验:加入当前公司之前的多年工作经验(Float)

该数据集是根据一家公司的内部人力资源记录得到的。 每条记录都代表一个独特的数据专业人员,具有从他们的工作历史中收集的各种属性。 数据跨度从 2009 年到 2016 年,捕获截至 2016 年 1 月 7 日的快照。 数据组织: 数据按加入日期(DOJ)按时间顺序排列。 每一行代表一个单独的数据专业人员。 包括各种属性,例如名称、部门和绩效评级,以便进行全面分析。

首先读取基本的数据分析包并且读取和查看数据

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("Salary Prediction of Data Professions.csv")
df.head()

接下来查看是否存在缺失值

na_counts = df.isna().sum()
na_counts

 

发现AGE、LAST NAME、LEAVES USED、LEAVES REMAINING、RATINGS这几列存在缺失值,后续进行处理

接下来进行特征二值化

df["AGE_BIN"] = pd.cut(df["AGE"].astype(int), 5)
from sklearn.preprocessing import LabelEncoder

label = LabelEncoder()
df["AGE_BIN_CODE"] = label.fit_transform(df["AGE_BIN"])

def gender_to_number(gender):
  if gender == 'M':
    return 1
  elif gender == 'F':
    return 0

df['SEX'] = df.SEX.apply(gender_to_number)

职位名称中的“高级”通常表示更高水平的经验、专业知识和责任感,并且可能与工资率相关。 

接下来可视化一下

plt.subplots(figsize=(15, 7.5), dpi =200)
sns.set(style = "white")
pal = sns.color_palette('Paired')

sns.boxplot(data= df_analytics_managers, 
            x = 'DESIGNATION', y = 'SALARY',
            hue = 'IS_SENIOR',
            linewidth=2.5, 
            palette = pal)
plt.show()

 发现在有等级的职业中,老年人的工资彼此有很大差异。

接下来创建功能DAYS_IN_COMPANY函数
此功能显示工作人员在该公司工作的时间(以天为单位)。

def data_formatter(DOJ):
    # transform 5-18-2014 data format to 05-18-2014
    if (type(DOJ) == str):
        DOJ = DOJ.split('-') 
        if len(DOJ[0]) == 1 and DOJ[0][0] != 0:
            DOJ[0] = '0' + DOJ[0]
            DOJ = '-'.join(DOJ)

df.DOJ.apply(data_formatter).inplace=True

def convert_to_datetime(date_str, date_format='%m-%d-%Y'):
    if isinstance(date_str, str):
        return pd.to_datetime(date_str, format=date_format)
    return date_str


df['DOJ'] = df['DOJ'].apply(lambda x: convert_to_datetime(x, '%m-%d-%Y'))
df['CURRENT DATE'] = df['CURRENT DATE'].apply(lambda x: convert_to_datetime(x, '%m-%d-%Y'))

 接下来定义YEARS_IN_COMPANY函数
此功能通过将DAYS_IN_COMPANY转换为YEARS_IN_COMPANY来显示工作人员在该公司工作的时间(以年为单位)

df['YEARS_IN_COMPANY'] = round(df['DAYS_IN_COMPANY'] / 365, 1)
df['WORK_EXPERIENCE'] = df['YEARS_IN_COMPANY'] + df['PAST EXP']
df["WORK_EXPERIENCE_BIN"] = pd.cut(df["WORK_EXPERIENCE"].astype(int), 5)
from sklearn.preprocessing import LabelEncoder

label = LabelEncoder()
df["WORK_EXPERIENCE_BIN_CODE"] = label.fit_transform(df["WORK_EXPERIENCE_BIN"])

接下来用箱线图查看

sns.catplot(x="WORK_EXPERIENCE_BIN_CODE", y="SALARY", data=df, kind="box")

 

可以发现,随着专业经验的增加,薪资增长。

接下来查看职称与工资的箱线图

plot = sns.catplot(x="DESIGNATION", y="SALARY", data=df, kind="box")

for ax in plot.axes.flat:
    for label in ax.get_xticklabels():
        label.set_rotation(35)
        label.set_horizontalalignment('right')

plt.show()

再加上性别

plt.subplots(figsize=(15, 7.5), dpi =200)
sns.set(style = "white")

blue = '#7FB3D5'
pink = '#FF91A4'

pal = {1: blue, 0: pink}

sns.boxplot(data= df, 
            x = 'DESIGNATION', y = 'SALARY',
            hue = 'SEX',
            linewidth=2, 
            palette = pal)
plt.show()

 从上面可以发现工资的分配取决于职业。

接下来查看工资与年龄的关系

sns.catplot(x="AGE_BIN_CODE", y="SALARY", data=df, kind="box")

从图中可以发现工资随着专业年龄的增长而增长。

随后探究一下工资与性别的关系

blue = '#7FB3D5'
pink = '#FF91A4'

pal = {1: blue, 0: pink}

sns.catplot(x="SEX", y="SALARY", data=df, kind="box", palette = pal)

可以发现性别和工资之间没有相关性。接下来画下相关系数热力图

colormap = plt.cm.RdBu
plt.figure(figsize=(15, 15))

NumericData = df[["SALARY", 
                  "AGE",
                  'SEX', 
                  'WORK_EXPERIENCE', 
                  'Analyst',	
                  'Associate',
                  'Director',	
                  'Manager',	
                  'IS_SENIOR']] 

plt.title("Pearson Correlation of Features", y=1.05, size=18)
sns.heatmap(
    NumericData.corr(),
    linewidths=0.1,
    vmax=1.0,
    square=True,
    cmap=colormap,
    linecolor="white",
    annot=True,
)

plt.show()

接下来建立决策树模型

from mlxtend.plotting import plot_decision_regions
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.tree import DecisionTreeRegressor, plot_tree
y = NumericFeatures['SALARY']
X = NumericFeatures.drop('SALARY', axis=1)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=13
)

 接下来可视化决策树模型

dt = DecisionTreeRegressor(max_depth=6, random_state=13)
dt.fit(X_train, y_train)
plot_tree(dt, feature_names=X.columns, filled=True, rounded=True)

对模型评价使用MSE来做模型评价指标

mean_squared_error(y_test, dt.predict(X_test))

接下来用决策树集成模型:XGboost

import xgboost as xgb
from xgboost.sklearn import XGBRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from xgboost import XGBRegressor
from numpy import absolute
from sklearn.metrics import mean_absolute_error
model = XGBRegressor(n_estimators=150, 
                     learning_rate = 0.1,
                     max_depth=7, 
                     min_child_weight = 5,
                     eta=0.1, 
                     subsample=0.7, 
                     colsample_bytree=0.8)
model.fit(X_train, y_train)

 接下来预测工资,并且加入MAE指标(平均绝对误差)

predictions = model.predict(X_test)

# Mean Absolute Error (MAE) 
mae = mean_absolute_error(y_test, predictions)

预测趋势是一致的,还可以

接下来画一下重要性特征图

从上面可以发现,工作经验和在公司的年限以及员工年龄是最重要的三个指标。

四、结论

通过对数据职业薪酬数据的探索性数据分析和预测建模,本研究得出以下主要结论:

  1. 影响薪酬的主要因素:数据职业的薪酬水平受到多个因素的影响,包括但不限于职业类别、性别、年龄、工作年限、学历背景、所属部门、绩效评级等。不同职业类别和不同部门的薪酬差异显著,工作年限和绩效评级对薪酬有显著影响。

  2. 薪酬预测模型的有效性:基于所选取的特征变量,使用机器学习算法建立的薪酬预测模型在测试数据上表现良好,具有较高的预测准确性。通过对模型的调优和验证,可以进一步提高预测效果,为薪酬预测提供可靠的技术支持。

  3. 数据驱动的薪酬策略:利用数据分析结果,企业可以制定更加科学和灵活的薪酬策略,结合市场需求和企业实际情况,动态调整薪酬水平,提高员工满意度和企业竞争力。

  4. 求职建议:基于薪酬预测模型,求职者可以在职业选择和职业规划中做出更加明智的决策,选择薪酬水平较高且符合自身发展的职业路径。通过了解影响薪酬的关键因素,求职者可以有针对性地提升自身竞争力,提高求职成功率。

本研究为数据职业薪酬的分析和预测提供了有效的方法和工具,具有重要的应用价值和参考意义。未来可以进一步结合更多的外部数据,如行业发展趋势、经济环境、地域差异等,提升模型的预测精度和适用性。

创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值