预测python数据分析师的工资

  前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取(https://www.cnblogs.com/lyuzt/p/10636501.html)和对获取的数据进行可视化分析(https://www.cnblogs.com/lyuzt/p/10643941.html),这次我们就用 sklearn 对不同学历和工作经验的 python 数据分析师做一个简单的工资预测。由于在前面两篇博客中已经了解了数据集的大概,就直接进入正题。

一、对薪资进行转换

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

import pandas as pd
import numpy as np
import matplotlib.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 in salarys:
    # 根据‘-‘进行分割并去掉‘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 import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
features_scores = []
max_features = [.1, .2, .3, .4, .5, .6, .7, .8, .9]
for max_feature in max_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 import AdaBoostClassifier
n_scores = []
estimator_nums = [5, 10, 15, 20, 25, 30, 35, 40]
for estimator_num in estimator_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_dtctest_data[‘薪资(boosting)‘] = y_abc

          

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

原文地址:https://www.cnblogs.com/lyuzt/p/10741049.html

时间: 2024-10-19 17:44:42

预测python数据分析师的工资的相关文章

买《Python数据分析师:从0基础到数据分析达人》专题视频课程送纸质图书

<Python从小白到大牛>纸质图书于2018年10月上市,为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院([Python数据分析师:从0基础到数据分析达人]专题课程的学员送一本<Python从小白到大牛>纸质版图书. 学员购买视频后请于购买课程后10个工作日内申请赠书,过期视为放弃.注意:苹果支付购买,以及8折(含8折)一下活动购买不赠送图书.领取说明:加qq群:51CTO-关老师付费群 523714201 验证消息:用户名+订单号即可通过. 最好您在购买之前咨

数据分析师是一种什么样的职业?

数据分析师分布在不同行业中,专门从事行业数据的搜集.整理.分析,并依据数据做出行业研究.评估和预测.数据分析师需要敏锐的数字洞察力,因此,统计.会计.保险.工程经济.金融.数学.计算机等专业的同学对这个行业有明显优势,但其他行业的同学如果对这个职业感兴趣,通过日常学习,掌握一些统计必备技能,亦可以从事此类工作. 主要工作领域: 1.从事投资项目审核审批和招商引资.项目评估.投资决策等工作的政府机构.企业的相关领导以及从业人员. 2.在银行或非银行金融机构.投资管理公司.投资管理顾问公司从事风险投

数据分析师都有哪些发展方向?

要说现在什么工作赚钱的同时还比较有逼格,数据分析师可以说是其中之一.数据分析师算得上是一个新的职业,是伴随着大数据的不断发展而诞生的一个职业.做为一名数据分析师,主要的工作内容就是对大量数据进行及时准确的分析和整理,然后得出结论,进而对公司企业的发展以及决策提供帮助,不仅高薪,同时还比较的高端,属于互联网高科技行业.那么,数据分析师都有哪些发展方向呢? 1.业务方向 一般来说大家在很多招聘网站搜寻数据分析的时候,会发现数据分析的业务方向有两种,一种就是辅助业务的数据分析职位.另一种就是数据分析师

python、数据分析师、算法工程师的学习计划

1.前言 最近(2018.4.1)在百忙之中开通了博客,就喜欢能够把自己所学所想沉淀下来,这篇是我开始系统学习python,称为数据分析师和算法工程师之路的计划,望有志于为同样目标奋斗的数据猿一起交流和学习. 2.Python学习计划 2.1 学习计划 (1)找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本. (2)去找一个实际项目练手.(参照Crossin的编程教室-Python入门,Python的练手项目) 2.2 学习资料 零基础入门书籍:<简明python教程>

文武双全!为什么数据分析师需要既懂业务又懂技术

作者:接地气的陈老师 ================================================================================= 在企业中,数据分析师们往往分为业务和技术两大类.两类能力和工作内容有较大区别,但经常企业在招人的时候都叫:数据分析师.这常使想进门的新人感到困惑.今天,我们就来科普一下业务与技术的那些事. 业务 or 技术 业务类分析师,往往在战略发展部,市场部,会员中心,销售部,运营部.根据服务的业务部门的不同,他们也可能叫数

合格大数据分析师应该具备的技能

阶段一.业务数据分析师 课程一.数据挖掘/分析师之硬技能 - 必备常用工具使用与高级技巧 本部分内容主要介绍了数据挖掘.分析师.数据产品经理必备的常用工具的,主要有 Excel,Visio,Xmind,PPT的涉及图表数据分析方面的高级技巧,包括但不限于:数据透视表演练.Vision跨职能流程图演练.Xmind项目计划导图演练.PPT高级动画技巧等! 一.Excel 1)数据分析工具EXECL入门介绍2)数据透视表演练 3) 数据处理4) EXECL报告自动化5) PPT报告数据自动化 二.Vi

数据分析师:数据分析工作常见七种错误及其规避技巧(转自经管之家)

数据分析师:数据分析工作常见七种错误及其规避技巧商业领域的数据科学家和侦探类似:去探索未知的事物.不过,当他们在这个旅程中冒险的时候,他们很容易落入陷阱.所以要明白,这些错误是如何造成的,以及如何避免.“ ... 数据分析师:数据分析工作常见七种错误及其规避技巧 商业领域的数据科学家和侦探类似:去探索未知的事物.不过,当他们在这个旅程中冒险的时候,他们很容易落入陷阱.所以要明白,这些错误是如何造成的,以及如何避免. “错误是发现的入口.”——James Joyce (著名的爱尔兰小说家). 这在

如何成为顶尖的数据分析师

什么是数据分析? 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总.理解并消化,以求最大化地开发数据的功能,发挥数据的作用. 数据分析的目的是把隐藏在一大批看似杂乱无章的数据背后的信息集中和提炼出来,总结出研究对象的内在规律.在实际 工作当中,数据分析能够帮助管理者进行判断和决策,以便采取适当策略与行动. 数据分析师指的是不同行业中,专门从事行业数据搜集.整理.分析,并依据数据做出行业研究.评估和预测的专业人员. 数据分析师成长路线介绍: 路线主要是包括数据分析基础知识

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv