一、研究背景
随着大数据和人工智能技术的迅猛发展,数据职业在全球范围内迅速崛起,成为当前就业市场上的热点领域。数据分析师、数据科学家、机器学习工程师等职业需求量大增,吸引了大量求职者的关注。然而,不同数据职业之间的薪酬差异,以及影响薪酬的关键因素,仍然是求职者和雇主共同关心的问题。
在现代社会,薪酬不仅反映了员工的劳动价值和企业对员工的认可程度,还在一定程度上影响着职业选择和职业发展路径。因此,了解数据职业的薪酬情况及其影响因素,对求职者在职业规划和求职过程中具有重要参考价值。同时,企业在招聘和薪酬制定过程中,也可以通过数据分析,制定更加科学合理的薪酬策略,吸引和留住高素质人才。
本研究旨在利用Python数据分析技术,对数据职业的薪酬数据进行探索性分析和预测建模,找出影响薪酬的关键因素,并建立薪酬预测模型,为求职者和雇主提供科学依据和决策支持。
二、研究意义
-
为求职者提供职业规划参考:通过对数据职业薪酬数据的分析,求职者可以了解不同职业的薪酬水平及其影响因素,从而在职业选择和规划中做出更加明智的决策,选择更适合自身发展的职业路径。
-
帮助企业制定薪酬策略:企业可以利用本研究的成果,了解市场上不同数据职业的薪酬水平和关键影响因素,从而制定更加科学合理的薪酬策略,吸引和留住高素质的数据人才,提高企业竞争力。
-
促进薪酬公平和透明:通过公开的薪酬分析和预测,求职者和雇主可以对市场薪酬水平有更清晰的认知,避免因信息不对称而造成的薪酬不公平现象,促进就业市场的公平和透明。
-
为教育和培训机构提供指导:教育和培训机构可以根据市场需求和薪酬水平,调整课程设置和培训内容,为社会培养更多符合市场需求的数据人才,提升教育和培训的有效性。
三、实证分析
该数据可用于薪资预测、趋势分析和人力资源分析。
列描述符 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)
预测趋势是一致的,还可以
接下来画一下重要性特征图
从上面可以发现,工作经验和在公司的年限以及员工年龄是最重要的三个指标。
四、结论
通过对数据职业薪酬数据的探索性数据分析和预测建模,本研究得出以下主要结论:
-
影响薪酬的主要因素:数据职业的薪酬水平受到多个因素的影响,包括但不限于职业类别、性别、年龄、工作年限、学历背景、所属部门、绩效评级等。不同职业类别和不同部门的薪酬差异显著,工作年限和绩效评级对薪酬有显著影响。
-
薪酬预测模型的有效性:基于所选取的特征变量,使用机器学习算法建立的薪酬预测模型在测试数据上表现良好,具有较高的预测准确性。通过对模型的调优和验证,可以进一步提高预测效果,为薪酬预测提供可靠的技术支持。
-
数据驱动的薪酬策略:利用数据分析结果,企业可以制定更加科学和灵活的薪酬策略,结合市场需求和企业实际情况,动态调整薪酬水平,提高员工满意度和企业竞争力。
-
求职建议:基于薪酬预测模型,求职者可以在职业选择和职业规划中做出更加明智的决策,选择薪酬水平较高且符合自身发展的职业路径。通过了解影响薪酬的关键因素,求职者可以有针对性地提升自身竞争力,提高求职成功率。
本研究为数据职业薪酬的分析和预测提供了有效的方法和工具,具有重要的应用价值和参考意义。未来可以进一步结合更多的外部数据,如行业发展趋势、经济环境、地域差异等,提升模型的预测精度和适用性。
创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)