基于招聘技能需求频率的相似职业识别(R语言实现)
用R语言分析职业技能关联的实现方案
1. 环境准备与数据导入
首先安装并加载所需核心包:
# 安装包(仅首次运行需要) install.packages(c("tidyverse", "proxy", "factoextra")) # 加载包 library(tidyverse) library(proxy) library(factoextra)
假设你的数据集是CSV格式,用以下代码导入并清理无效数据:
# 导入数据,替换为你的文件路径 job_data <- read.csv("招聘数据集.csv", stringsAsFactors = FALSE) # 移除技能字段为空的无效记录 job_data_clean <- job_data %>% filter(!is.na(skillname) & skillname != "")
2. 统计各职业的技能需求频率
先按职业和技能分组统计出现次数,再转换为职业-技能频率矩阵(行=职业,列=技能,值=该技能在对应职业中的需求次数):
# 统计职业-技能的需求频次 skill_freq <- job_data_clean %>% group_by(occname, skillname) %>% summarise(freq = n(), .groups = "drop") # 转换为宽格式矩阵,缺失技能的频次填充为0 skill_matrix <- skill_freq %>% pivot_wider(names_from = skillname, values_from = freq, values_fill = 0) # 提取数值矩阵并设置行名为职业名称 row_names <- skill_matrix$occname skill_matrix_num <- skill_matrix %>% select(-occname) %>% as.matrix() rownames(skill_matrix_num) <- row_names
3. 计算职业间的技能相似度
用余弦相似度衡量职业间的技能需求相似性(值越接近1,代表技能需求重合度越高):
# 计算余弦相似度矩阵 similarity_matrix <- simil(skill_matrix_num, method = "cosine") # 转换为数据框方便查看 similarity_df <- as.data.frame(as.matrix(similarity_matrix))
4. 识别技能需求相似的关联职业
方式1:筛选高相似度职业对
设定相似度阈值(比如0.8),筛选出符合条件的职业组合:
# 将相似度矩阵转换为长格式,避免重复配对 similarity_long <- similarity_df %>% rownames_to_column(var = "职业A") %>% pivot_longer(cols = -职业A, names_to = "职业B", values_to = "相似度") %>% filter(职业A < 职业B, 相似度 >= 0.8) # 查看结果 print(similarity_long)
方式2:聚类分析分组相似职业
用层次聚类将技能需求相似的职业归为一类,可视化聚类结果:
# 基于相似度矩阵进行层次聚类 hc <- hclust(as.dist(1 - similarity_matrix), method = "ward.D2") # 绘制聚类树,k为聚类组数,可按需调整 fviz_dend(hc, cex = 0.6, k = 3, main = "职业技能需求相似性聚类树", xlab = "职业", ylab = "相似度距离")
关键说明
- 若数据集为Excel格式,可替换
read.csv为read_excel(需先安装readxl包)。 - 相似度阈值可根据数据实际分布调整,比如0.7或0.9。
- 若仅关注技能是否被需求而非频次,可改用
method = "jaccard"计算相似度。
内容的提问来源于stack exchange,提问作者Dandae
相关产品推荐
相关产品推荐

