做消费金融网站价格,住房与城乡建设部网站,友情链接多久有效果,1元涨1000粉丝网站#x1f935;♂️ 个人主页#xff1a;艾派森的个人主页 ✍#x1f3fb;作者简介#xff1a;Python学习者 #x1f40b; 希望大家多多支持#xff0c;我们一起进步#xff01;#x1f604; 如果文章对你有帮助的话#xff0c; 欢迎评论 #x1f4ac;点赞#x1f4… ♂️ 个人主页艾派森的个人主页 ✍作者简介Python学习者 希望大家多多支持我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 目录
1.项目背景
2.数据集介绍
3.技术工具
4.导入数据
5.数据可视化
源代码 1.项目背景 在当今日新月异的科技时代人工智能和机器学习技术的迅猛发展正推动着各行各业进行深刻的变革。作为这一变革中的核心力量机器学习工程师的需求和关注度与日俱增。他们不仅承担着研发、优化机器学习算法的重任更是推动企业智能化转型的关键角色。 然而随着机器学习工程师人才市场的竞争日趋激烈如何准确评估这一职业群体的薪资水平以及影响薪资的各种因素成为了行业内外普遍关注的问题。薪资水平不仅直接反映了机器学习工程师的市场价值也是他们职业发展、生活品质的重要体现。 在此背景下本实验旨在通过对机器学习工程师薪资数据进行可视化分析揭示薪资水平的分布规律、影响因素以及行业趋势。我们收集了大量来自招聘网站、薪资调查机构等渠道的原始数据涵盖了不同地区、不同企业规模、不同工作经验等多个维度的信息。通过对这些数据进行清洗、整理、分类和可视化处理我们可以更加直观地了解机器学习工程师薪资的整体状况为企业制定招聘策略、为员工提供职业规划提供参考。 同时本实验还尝试运用机器学习算法对数据进行深入挖掘探索薪资水平与各种因素之间的潜在关系为行业内的研究者和决策者提供有价值的洞见。我们相信通过本实验的研究和分析不仅可以为机器学习工程师的薪资问题提供更为准确的解答还可以为整个行业的健康发展提供有力的支持。
2.数据集介绍 本实验数据集来源于Kaggle原始数据集中共有16494条数据11个变量各变量含义如下
work_year收集薪资数据的年份例如2024 年。
experience_level员工的经验水平例如MI 表示中级。
employment_type就业类型例如FT 表示全职。
job_title职位名称例如数据科学家。
salary工资金额。
salary_currency工资的计价货币例如USD 代表美元。
salary_in_usd转换为美元的工资金额。
employee_residence员工居住的国家/地区例如AU 代表澳大利亚。
Remote_ratio表示远程工作级别的比率0 表示无远程工作。
company_location公司的位置例如AU 代表澳大利亚。
company_size公司的规模例如S 表示小型。
3.技术工具
Python版本:3.9
代码编辑器jupyter notebook
4.导入数据
导入数据分析第三方库并加载数据集 查看数据集大小 查看数据基本信息 查看数值型变量的描述性统计 查看非数值型变量的描述性统计 统计数据集缺失值情况 统计数据集重复值情况 从结果中可以看出原始数据集不存在缺失值但存在6401个重复数据。
删除重复数据 5.数据可视化 -工资分布似乎是右偏的长尾倾向于更高的工资。
-大部分人的工资在101,000 - 186,000美元之间。
-工资中位数约为14.13万美元这表明有一半的工资高于/低于此值。
-有一些异常值的薪水很高这可能需要进一步调查。 在前20名中最常见的职位是数据工程师这表明对该职位的需求很高。
其他突出的职位包括数据科学家、数据分析师和机器学习工程师这表明它们在数据集中的重要性。
排名前20的职位出现的频率各不相同有些职位的出现频率明显高于其他职位。 中型企业的平均工资和中位数在这三类企业中是最高的。
大公司的平均工资和中位数是第二高的。
小公司的平均工资和中位数最低。
所有公司规模的工资中位数都低于平均工资这表明工资分布略有右倾斜(即有一些高异常值将平均值向上拉)。 按工资中位数对经验等级排序
首先我们根据他们的工资中位数对经验水平进行排名。这让我们初步了解了不同经验水平的薪水是如何不同的。
输出结果显示经验等级排序如下:
EX(行政人员)平均工资为18万美元
SE(高级)工资中位数为165,000美元
MI(中级)工资中位数为129,900美元
EN(入门级)工资中位数为85,750美元 源代码
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings(ignore)df pd.read_csv(salaries.csv)
df.head()
df.shape
df.info()
df.describe()
df.describe(includeO)
df.isnull().sum()
df.duplicated().sum()
df.drop_duplicates(inplaceTrue)
df.duplicated().sum()
# 工资分布直方图
plt.figure(figsize(8, 6))
sns.histplot(datadf, xsalary_in_usd, kdeTrue)
plt.title(Distribution of Salaries (USD))
plt.xlabel(Salary (USD))
plt.ylabel(Frequency)
plt.show()
-工资分布似乎是右偏的长尾倾向于更高的工资。
-大部分人的工资在101,000 - 186,000美元之间。
-工资中位数约为14.13万美元这表明有一半的工资高于/低于此值。
-有一些异常值的薪水很高这可能需要进一步调查。
# 前20个职位标题的条形图
top_20_titles df[job_title].value_counts().head(20)
# 为排名前20的职位创建一个条形图
plt.figure(figsize(12, 6))
plt.bar(top_20_titles.index, top_20_titles.values)
plt.xlabel(Job Title)
plt.ylabel(Count)
plt.title(Top 20 Job Titles)
plt.xticks(rotation45, haright)
plt.tight_layout()
plt.show()
该柱状图揭示了以下见解:
在前20名中最常见的职位是数据工程师这表明对该职位的需求很高。
其他突出的职位包括数据科学家、数据分析师和机器学习工程师这表明它们在数据集中的重要性。
排名前20的职位出现的频率各不相同有些职位的出现频率明显高于其他职位。
# 职位名称词云
top_20_titles df[job_title].value_counts().head(20)
title_counts dict(top_20_titles)
from wordcloud import WordCloud
wordcloud WordCloud(width800, height400, background_colorwhite).generate_from_frequencies(title_counts)
plt.figure(figsize(10, 6))
plt.imshow(wordcloud, interpolationbilinear)
plt.axis(off)
plt.title(Top 20 - Job Title Word Cloud)
plt.show()
# 前10名职位树图-树状图使用嵌套的矩形来表示每个职位的相对频率。
job_title_counts df[job_title].value_counts().head(10)
import squarify
plt.figure(figsize(12, 6))
squarify.plot(sizesjob_title_counts, labeljob_title_counts.index, alpha0.8)
plt.axis(off)
plt.title(Job Title Treemap)
plt.show()
# 公司规模分析
# 变量
sizedf[company_size]
salarydf[salary_in_usd]#公司规模
print(Value Counts by Company Size:)
company_size_counts df[company_size].value_counts()
print(company_size_counts)# 计算组均值和中位数
print(Mean Salaries by Company Size:)
print(df.groupby(company_size)[salary_in_usd].mean().to_string(indexTrue))
print(\nMedian Salaries by Company Size:)
print(df.groupby(company_size)[salary_in_usd].median().to_string(indexTrue))#散点图
plt.figure(figsize(16, 6))
plt.scatter(salary,size)
plt.xlabel(Salary in USD)
plt.ylabel(Company Size)
plt.title(Salary vs. Company Size)
plt.show()#箱型图
plt.figure(figsize(10, 6))
box_plot_data [df[df[company_size] size][salary_in_usd] for size in [S, M, L]]
box_plot plt.boxplot(box_plot_data, patch_artistTrue)
colors [lightblue, lightgreen, pink]
for patch, color in zip(box_plot[boxes], colors):patch.set_facecolor(color)
plt.xticks([1, 2, 3], [Small, Medium, Large])
plt.xlabel(Company Size)
plt.ylabel(Salary (USD))
plt.title(Salary Distribution by Company Size)
plt.legend(box_plot[boxes], [Small, Medium, Large], titleCompany Size, locupper right)
plt.show()
中型企业的平均工资和中位数在这三类企业中是最高的。
大公司的平均工资和中位数是第二高的。
小公司的平均工资和中位数最低。
所有公司规模的工资中位数都低于平均工资这表明工资分布略有右倾斜(即有一些高异常值将平均值向上拉)。
# 按经验水平分析工资分配
# 计算每个经验级别的工资中位数
experience_salaries df.groupby(experience_level)[salary_in_usd].median().reset_index()
# 按工资中位数降序排序经验水平
experience_salaries_sorted experience_salaries.sort_values(salary_in_usd, ascendingFalse)
# 将经验等级与原始数据合并
df_Ranked pd.merge(df, experience_salaries_sorted, onexperience_level)
# 创建了一个字典将经验等级映射到他们的等级
experience_rank {EN: 0, MI: 1, SE: 2, EX: 3}
df[experience_rank] df[experience_level].map(experience_rank)
print(Experience Levels Ranked by Median Salary:)
print(experience_salaries_sorted)
plt.figure(figsize(10, 6))
sns.boxplot(datadf, xexperience_level, ysalary_in_usd)
plt.title(Salary Distribution by Experience Level)
plt.xlabel(Experience Level)
plt.ylabel(Salary (USD))
plt.xticks([0, 1, 2, 3], [EN, MI, SE, EX])
plt.show()
按工资中位数对经验等级排序¶
首先我们根据他们的工资中位数对经验水平进行排名。这让我们初步了解了不同经验水平的薪水是如何不同的。
输出结果显示经验等级排序如下:
EX(行政人员)平均工资为18万美元
SE(高级)工资中位数为165,000美元
MI(中级)工资中位数为129,900美元
EN(入门级)工资中位数为85,750美元
# 按经验水平及受雇类别划分的薪金分布
plt.figure(figsize(12, 6))
sns.set_color_codes(pastel)
sns.barplot(xexperience_level, ysalary_in_usd, hueemployment_type, datadf,)
plt.title(Salary Distribution by Experience Level and Employment Type)
plt.xlabel(Experience Level)
plt.ylabel(Salary (USD))
plt.legend(titleEmployment Type)
plt.show()
# 历年按经验水平划分的平均工资
plt.figure(figsize(10, 6))
sns.lineplot(datadf, xwork_year, ysalary_in_usd, hueexperience_level, estimatormean, ciNone)
plt.title(Average salaries by level of experience over the years)
plt.xlabel(Year)
plt.ylabel(Salary (USD))
plt.legend(titleExperience level, labels[EN, MI, SE, EX])
plt.show()
# 历年的薪资趋势
plt.figure(figsize(10, 6))
sns.lineplot(datadf, xwork_year, ysalary_in_usd, estimatormean, ciNone)
plt.title(Salary trends over the years)
plt.xlabel(Year)
plt.ylabel(Salary (USD))
plt.show()
# 按公司规模划分的历年平均工资
plt.figure(figsize(10, 6))
df.groupby([work_year, company_size])[salary_in_usd].mean().unstack().plot(kindline, markero)
plt.title(Average Salaries by Company Size Over the Years)
plt.xlabel(Year)
plt.ylabel(Average salary (USD))
plt.legend(titleCompany size)
plt.show()
# 相关性分析
numeric_columns df.select_dtypes(include[number])
correlation_matrix numeric_columns.corr()
plt.figure(figsize(12, 8))
sns.heatmap(correlation_matrix, annotTrue, cmapcoolwarm, fmt.2f, linewidths0.5)
plt.title(Correlation Matrix)
plt.show()
df.head()
new_df df.drop([salary,salary_currency],axis1)
new_df.head()
from sklearn.preprocessing import LabelEncoderfor col in new_df.describe(includeO):new_df[col] LabelEncoder().fit_transform(new_df[col])
new_df.head()
sns.boxplot(datanew_df,ysalary_in_usd)
new_df new_df[new_df[salary_in_usd]400000]
from sklearn.model_selection import train_test_split
X new_df.drop(salary_in_usd,axis1)
y new_df[salary_in_usd]
# 划分数据集
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state42)
import seaborn as sns
import matplotlib.pylab as plt
plt.rcParams[font.sans-serif] [SimHei] #解决中文显示
plt.rcParams[axes.unicode_minus] False #解决符号无法显示
sns.set(fontSimHei)
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
import numpy as np
# 定义一个训练模型并对模型各个指标进行评估的函数
def train_model(ml_model):print(Model is: , ml_model)model ml_model.fit(X_train, y_train)print(Training score: , model.score(X_train,y_train))predictions model.predict(X_test)r2score r2_score(y_test, predictions)print(r2 score is: , r2score)print(MAE:, mean_absolute_error(y_test,predictions))print(MSE:, mean_squared_error(y_test,predictions))print(RMSE:, np.sqrt(mean_squared_error(y_test,predictions)))# 真实值和预测值的差值sns.distplot(y_test - predictions)
# 构建多元线性回归
from sklearn.linear_model import LinearRegression
lg LinearRegression()
train_model(lg)
# 构建knn回归
from sklearn.neighbors import KNeighborsRegressor
knn KNeighborsRegressor()
train_model(knn)
# 构建决策树回归
from sklearn.tree import DecisionTreeRegressor
tree DecisionTreeRegressor()
train_model(tree)
# 构建随机森林回归
from sklearn.ensemble import RandomForestRegressor
forest RandomForestRegressor()
train_model(forest)
# GBDT回归
from sklearn.ensemble import GradientBoostingRegressor
gbdt GradientBoostingRegressor()
train_model(gbdt)
#打印特征重要性评分
feat_labels X_train.columns[0:]
importances forest.feature_importances_
indices np.argsort(importances)[::-1]
index_list []
value_list []
for f,j in zip(range(X_train.shape[1]),indices):index_list.append(feat_labels[j])value_list.append(importances[j])print(f 1, feat_labels[j], importances[j])
plt.figure(figsize(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize12)
plt.title(各特征重要程度排序,fontsize14)
plt.show()
# 使用随机森林模型预测并可视化
plt.figure(figsize(10,6))
y_pred forest.predict(X_test)
plt.plot(range(len(y_test))[:200],y_pred[:200],b,label预测值)
plt.plot(range(len(y_test))[:200],y_test[:200],r,label真实值)
plt.legend(locupper right,fontsize15)
plt.xlabel(the number of job,fontdict{weight: normal, size: 15})
plt.ylabel(value of salary,fontdict{weight: normal, size: 15})
plt.show()资料获取更多粉丝福利关注下方公众号获取