建立回归模型预测数据分析岗位薪资(上)
一、分析目标
通过建立因变量与自变量之间的多元线性回归模型以便根据自身条件预测自己能拿到的薪资
数据集:链接: https://pan.baidu.com/s/16rQ3JGLS9tvIVvAH1_FWNQ
提取码:pkz7
二、数据预处理
install.packages("readxl") #加载需要的包
install.packages("ggplot2")
install.packages("jiebaR")
library(readxl)
library(ggplot2)
library(jiebaR)
job = read_excel("C:/Users/Administrator/Desktop/job.xlsx") # 读取原始数据
str(job) # 查看数据结构
(1) 构造因变量:平均薪资变量
job$最低薪资 = as.numeric(job$最低薪资) # 将最低薪资的字符型变量改为数值型变量
job$最高薪资 = as.numeric(job$最高薪资) # 将最高薪资的字符型变量改为数值型变量
job$平均薪资 = (job$最高薪资 + job$最低薪资) / 2
(2) 按照 disctrict 向量将地区重新划分为北上广深和非北上广深两个水平
loc = which(job$地区 %in% c("北京", "上海", "深圳", "广州"))
loc_other = which(!job$地区 %in% c("北京", "上海", "深圳", "广州"))
job$地区[loc] = 1
job$地区[loc_other] = 0
job$地区 = as.numeric(job$地区)
(3) 将公司规模转变为因子型变量,便于画图
job$公司规模 = factor(job$公司规模, levels = c("少于 50 人", "50-150 人","150-500 人",
"500-1000 人", "1000-5000 人","5000-10000 人", "10000 人以上"))
# 将 50-150 人和 150-500 人合并为一个水平:50-500 人
levels(job$公司规模)[c(2, 3)] = c("50-500 人", "50-500 人")
(4) 将学历转化为因子型变量,便于画图
job$学历 = factor(job$学历, levels = c("中专", "高中", "大专","无", "本科", "硕士", "博士"))
(5) 匹配各个公司要求的统计软件
建立 software 数据框,用于存放各个公司的软件匹配结果
# 先建立一个0 矩阵,行数为观测数,列数为统计软件的个数,并转化为 data frame 格式
software = as.data.frame(matrix(0, nrow = length(job$描述), ncol = 12))
# 将 software 的 data frame 的列名改为软件名称
colnames(software) = c("R", "SPSS", "Excel", "Python", "MATLAB", "Java", "SQL", "SAS", "Stata",
"EViews", "Spark", "Hadoop")
# 按照缺省值,设置分词引擎
mixseg = worker()
对每个描述观测进行分词,并存储在 software 里面,循环次数为总观测数,总观测数可
通过 length(job$描述)获取
for (j in 1:length(job$描述)){
subdata = as.character(job$描述[j]) # 取出每个观测,保存在 subdata 变量
fenci = mixseg[subdata] # 对取出的观测进行分词,保存在分词变量
设置各个软件的判别条件,以 R 为例,R.indentify 表示 r 或 R 是否在 fenci 这个变量里
R.identify = ("R" %in% fenci) | ("r" %in% fenci)
SPSS.identify = ("spss" %in% fenci) | ("Spss" %in% fenci) | ("SPSS" %in% fenci)
Excel.identify = ("excel" %in% fenci) | ("EXCEL" %in% fenci) | ("Excel" %in% fenci)
Python.identify = ("Python" %in% fenci) | ("python" %in% fenci) | ("PYTHON" %in% fenci)
MATLAB.identify = ("matlab" %in% fenci) | ("Matlab" %in% fenci) | ("MATLAB" %in% fenci)
Java.identify = ("java" %in% fenci) | ("JAVA" %in% fenci) | ("Java" %in% fenci)
SQL.identify = ("SQL" %in% fenci) | ("Sql" %in% fenci) | ("sql" %in% fenci)
SAS.identify = ("SAS" %in% fenci) | ("Sas" %in% fenci) | ("sas" %in% fenci)
Stata.identify = ("STATA" %in% fenci) | ("Stata" %in% fenci) | ("stata" %in% fenci)
EViews.identify = ("EViews" %in% fenci) | ("EVIEWS" %in% fenci) | ("Eviews" %in% fenci) |
("eviews" %in% fenci)
Spark.identify = ("Spark" %in% fenci) | ("SPARK" %in% fenci) | ("spark" %in% fenci)
Hadoop.identify = ("HADOOP" %in% fenci) | ("Hadoop" %in% fenci) | ("hadoop" %in% fenci)
判断各个描述变量里面是否有某软件要求,以 R 为例,第 j 个描述变量,若 R.identify
为 TRUE 时,software 的第 j 行的 R 变量为 1,反之为 0;
if (R.identify) software$R[j] = 1
if (SPSS.identify) software$SPSS[j] = 1
if (Excel.identify) software$Excel[j] = 1
if (Python.identify) software$Python[j] = 1
if (MATLAB.identify) software$MATLAB[j] = 1
if (Java.identify) software$Java[j] = 1
if (SQL.identify) software$SQL[j] = 1
if (SAS.identify) software$SAS[j] = 1
if (Stata.identify) software$Stata[j] = 1
if (EViews.identify) software$EViews[j] = 1
if (Spark.identify) software$Spark[j] = 1
if (Hadoop.identify) software$Hadoop[j] = 1
}
将平均薪资和 software 这两个数据框合并
job.new = cbind(job$平均薪资, software)
colnames(job.new) = c("平均薪资", colnames(software))
(6) 加入需要的变量
job.new$地区 = job$地区
job.new$公司类别 = job$公司类别
job.new$公司规模 = job$公司规模
job.new$学历 = job$学历
job.new$经验要求 = job$经验
job.new$行业类别 = job$行业类别
(7) 公司类别中非营利机构与事业单位两类观测过少,予以删除
table(job.new$公司类别)
job.new = job.new[-which(job.new$公司类别 %in% c("非营利机构", "事业单位")), ]
(8) 重赋列名
colnames(job.new) = c("aveSalary", colnames(job.new[2:13]), "area", "compVar","compScale", "academic", "exp", "induCate")
(9) 保存数据集
write.csv(job.new, file = "C:/Users/Administrator/Desktop/数据分析岗位招聘.csv", row.names = FALSE)