前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取(

一、对薪资进行转换

在这之前先导入模块并读入文件,不仅有训练数据文件,还有一组自拟的测试数据文件。

importpandas as pdimportnumpy as npimportmatplotlib.pyplot as plt

train_file= "analyst.csv"test_file= "test.csv"

#读取文件获得数据

train_data = pd.read_csv(train_file, encoding="gbk")

train_data= train_data.drop('ID', axis=1)

test_data= pd.read_csv(test_file, encoding="gbk")

train_data.shape, test_data.shape

为了更好地进行分析,我们要对薪资做一个预处理。由于其分布比较散乱,很多值的个数只有1。为了不造成过大的误差,根据其分布情况,可以将它分成【5k 以下、5k-10k、10k-20k、20k-30k、30k-40k、40k 以上】,为了更加方便我们分析,取每个薪资范围的中位数,并划分到我们指定的范围内。

salarys = train_data['薪资'].unique() #获取到薪资的不同值

for salary insalarys:#根据'-'进行分割并去掉'k',分别将两端的值转换成整数

min_sa = int(salary.split('-')[0][:-1])

max_sa= int(salary.split('-')[1][:-1])#求中位数

median_sa = (min_sa + max_sa) / 2

#判断其值并划分到指定范围

if median_sa < 5:

train_data.replace(salary,'5k以下', inplace=True)elif median_sa >= 5 and median_sa < 10:

train_data.replace(salary,'5k-10k', inplace=True)elif median_sa >= 10 and median_sa < 20:

train_data.replace(salary,'10k-20k', inplace=True)elif median_sa >= 20 and median_sa < 30:

train_data.replace(salary,'20k-30k', inplace=True)elif median_sa >= 30 and median_sa < 40:

train_data.replace(salary,'30k-40k', inplace=True)else:

train_data.replace(salary,'40k以上', inplace=True)

处理完成后,我们可以将"薪资”单独提取出来当作训练集的 label。

y_train = train_data.pop('薪资').values

二、对变量进行转换

把category的变量转变成numerical表达式

由于变量都不是numerical变量,在训练的时候计算机没办法识别,因此要对它们进行转换。 当我们用numerical来表达categorical的时候,要注意,数字本身有大小的含义,所以乱用数字会给之后的模型学习带来麻烦。于是我们可以用One-Hot的方法来表达category。

pandas自带的get_dummies方法,可以一键做到One-Hot。 这里按我的理解解释一下One-Hot:比如说data['学历要求']有'大专', '本科', '硕士', '不限'。但data['学历要求']=='本科',则他可以用字典表示成这样{'大专': 0, '本科':1, '硕士':0, '不限':0},用向量表示为[0, 1, 0, 0] 。

在此之前,将测试集和训练集组合起来一起处理,稍微方便一点。

data = pd.concat((train_data, test_data), axis=0)

dummied_data=pd.get_dummies(data)

dummied_data.head()

为了更好地理解 One-Hot ,把处理后的结果展示出来,得到的结果是这样的:

当然,也可以用别的方法,比如用数字代替不同的值,这也是可以的。

上次可视化分析的时候就已经知道数据集中不存在缺失值了,为了走一下流程并确保正确性,再次看一下是否有缺失值。

dummied_data.isnull().sum().sort_values(ascending=False).head(10)

OK,很好,没有缺失值。这些值比较简单,不需要做那么多工作,但还是要先把训练集和测试集分开。

X_train =dummied_data[:train_data.shape[0]].values

X_test= dummied_data[-test_data.shape[0]:].values

三、选择参数

1、DecisionTree(决策树)

from sklearn.tree importDecisionTreeClassifierfrom sklearn.model_selection importcross_val_score

features_scores=[]

max_features= [.1, .2, .3, .4, .5, .6, .7, .8, .9]for max_feature inmax_features:

clf= DecisionTreeClassifier(max_features=max_feature)

features_score= cross_val_score(clf, X_train, y_train, cv=5)

features_scores.append(np.mean(features_score))

plt.plot(max_features, features_scores)

这个过程主要是通过交叉验证获得使模型更好时的参数,交叉验证大概可以理解为,把训练集分成几部分,然后分别把他们设置为训练集和测试集,重复循环训练得到的结果取平均值。Emmm... 感觉这样讲还是有点笼统,还是上网查来得详细吧哈哈。

然后我们得到的参数和值得关系如图所示:

可见当 max_features = 0.2 时达到最大,大概有0.5418。

2、ensemble(集成算法)

集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。这里将采用sklearn 的 AdaBoostClassifier(adaptive boosting) 通过改变训练样本的权值,学习多个分类器,并将这些分类器进行线性组合,提高泛化性能。

from sklearn.ensemble importAdaBoostClassifier

n_scores=[]

estimator_nums= [5, 10, 15, 20, 25, 30, 35, 40]for estimator_num inestimator_nums:

clf= AdaBoostClassifier(n_estimators=estimator_num, base_estimator=dtc)

n_score= cross_val_score(clf, X_train, y_train, cv=5)

n_scores.append(np.mean(n_score))

plt.plot(estimator_nums, n_scores)

当 estimators=20 的时候,score最高,大概有0.544,虽然跟单个决策树的 score 的值相差不大,但总体还是有所提升。

四、建立模型

参数选择完毕,就可以建立模型了。

dtc = DecisionTreeClassifier(max_features=0.2)

abc= AdaBoostClassifier(n_estimators=20)

# 训练

abc.fit(X_train, y_train)

dtc.fit(X_train, y_train)

# 预测

y_dtc = dtc.predict(X_test)

y_abc = abc.predict(X_test)

test_data['薪资(单个决策树)'] = y_dtc

test_data['薪资(boosting)'] = y_abc

至于结果,总不可能预测得很完美,而且不同模型的结果也会有所不同,更何况它预测出来的结果是否符合常理还有待商榷,所以就把它当作一个小项目就好了,具体代码在这里:

python工资一般多少p-预测python数据分析师的工资相关推荐

  1. python与算法社区_【Python算法】分类与预测——Python随机森林

    [Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...

  2. 数据分析师的工资水平如何?

    数据分析师随着大数据时代的高速发展,其作用越来越明显.与此同时数据分析师的工资水平也水涨船高.根据某大型招聘网站数据显示,目前数据分析工资水平平均在12000左右.其中达到8000以上薪资的人群占到8 ...

  3. 英国python工资_在伦敦金融城当数据分析师-Python篇

    当一个数据分析师用Python时,到底是用什么呢. 背景: 帝国理工商业分析硕士, 课程结束后无缝连接直接伦敦金融城实习,四个月后拿到return offer 成为permenant employee ...

  4. python 笔试题 英方_4000字转型数据分析师笔试面试经验分享

    大家好,我是戴师兄~ 在上一篇文章中我分享了快速自学数据分析的经验. 本篇文章,我将跟大家分享下我的笔试和面试心得. 开头先说说我转型前的职业背景: 想看笔试面试经验的同学萌可以直接跳过这一段~ 20 ...

  5. python源码剖析 豆瓣_在数据分析师的分析中豆瓣的书那些值得读

    最近总是有人问我有什么书好推荐看看,特烦.但是看到那么多人问,看来挺多人有这个需求,便想了一下,如何通过数据分析找到值得看的书.通过爬取某个标签例如产品,运营获取对应已经打了标签的书,获取书对应的评分 ...

  6. python数据分析在北京基本薪资_数据分析师薪酬如何?爬虫拉勾网告诉你

    首先说明这篇文章的数据来源,是爬虫拉勾网"数据分析师"这一职位信息所得来的.并且主要分析了数据分析师总体薪酬情况.不同城市薪酬分布.不同学历薪酬分布.北京上海工作经验薪酬分布情况. ...

  7. 看了大厂数据分析师的工资表,我酸了...真的人均50w?

    大家应该都和我一样,经常看到类似于<XXX入职大厂数据分析师,年薪50W+>之类的标题. 数据分析师的薪资真的有这么夸张吗?我特意去查了下2021年的数据: (数据来源:职友集) 最近的数 ...

  8. python数据分析师工资待遇_预测python数据分析师的工资

    前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取( 一.对薪资进行转换 在这之前先导入模块并读入文件,不仅有训练数据文件,还有一组自拟的测试数据文件. importpandas a ...

  9. 【华为云技术分享】【Python算法】分类与预测——Python随机森林

    1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探索等方面,取得了不错的成效.另外,它还担任了集成学习中的 ...

最新文章

  1. 线程VS进程,多线程VS多进程,并行VS并发,单核cpuVS多核cpu
  2. git学习创建项目仓库
  3. 中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式
  4. flatpickr功能强大的日期时间选择器插件
  5. java停启was集群_shell脚本实现weblogic 节点启停,应用部署
  6. 1环境-企业级 Hyper-v 群集部署实验方案
  7. [swift] LeetCode 96. Unique Binary Search Trees
  8. 产品需求文档写作方法(一)写前准备+梳理需求
  9. day_05 显示字符A
  10. 光纤交换机巡检配置常用命令
  11. 微信支付不靠谱 星巴克喝一杯咖啡被刷掉一千多
  12. 程序员有话说 | 原来你是这样的程序员:麦霸、大厨、舞林高手……
  13. SSL/TLS一键配置工具-IISCrypto
  14. Java8新特性——Optional 类
  15. 海量数据处理-Python
  16. Qt TCP/IP语音
  17. 万事达卡、中国银行、北汽鹏龙联手 推联名信用卡
  18. vivado下使用ILA抓取波形
  19. 中国传感器制造产业投资前景分析与未来发展战略咨询报告2021-2027年
  20. 史上最全的Java面试题

热门文章

  1. OpenGL加载纹理glGenTextures——内存优化(OpenGL内存泄漏)
  2. Qt面试题(一)Qt信号槽第五个参数
  3. OpenCV案例(四): 投射矫正
  4. OpenCV案例(二):选取圆对象
  5. 一篇文章告诉你[C++]数组初始化
  6. 查看mysql所有命令
  7. Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结
  8. Oracle 学习笔记 14 -- 集合操作和高级子查询
  9. Linux中last的用法及参数,查看登陆系统用户的信息
  10. UVA10579 Fibonacci Numbers【大数】