基于Python大数据的职位招聘信息挖掘系统
资源下载地址:https://download.csdn.net/download/sheziqiong/85738468
资源下载地址:https://download.csdn.net/download/sheziqiong/85738468
数据获取及预处理
数据说明
j_name职位名称c_name公司名称c_nature公司性质c_scale公司规模description岗位描述(岗位要求)w_place工作地点w_filed职位类别w_experience要求的经验education要求的学历s_min最低工资s_max最高工资vacancies职位空缺welfare福利
数据预处理
数据去重
在数据分析过程中,原始数据常常会有一些重复的记录,因此数据去重是必不可少的一个步骤。针对数据集,自定义去重规则,删除重复行并对数据进行整合。
针对所爬取的数据集,将职位名称(j_name)和公司名称(c_name)同时相同的定义为重复数据。
采用 drop_duplicate 方法对数据进行去重,drop_duplicate 方法是针对 DataFrame 格式的数据去除特定列下面的重复行,参数解释如下:
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
subset:列名,默认所有列
keep:keep='first'表示去重时每组重复数据保留第一条数据,其余数据丢弃;keep='last'表示去重时每组重复数据保留最后一条数据,其余数据丢弃;keep=False表示去重时每组重复数据全部丢弃,不保留
inplace:inplace=False表示去重之后不覆盖原表格数据,inplace=True表示去重之后原表格数据被覆盖
代码如下:
path='D:\\BIT\\Course\\数据挖掘\\大作业\\1.csv'
f=open(path,encoding='UTF-8')
df=pd.read_csv(f)
print(df.shape[0])#原始数据量输出
df.drop_duplicates(subset=['j_name','c_name'],keep='first',inplace=True)
print(df.shape[0])#去重后数据量输出
处理前数据量为 49248 行,13 列;去重后数据量为 39397 行,13 列。
数据去噪
实际数据是数据挖掘算法的输入,它受多个组件的影响。其中,噪声的存在是关键因素。噪声是不可避免的问题,它会影响数据挖掘应用程序中经常发生错误的数据收集和数据准备过程。噪声有两个主要来源:隐式错误由测量工具引入;以及批处理或专家在收集数据时引入的随机错误。
针对所爬取的数据集进行分析,可看出数据集中包含了许多非大数据相关职业的数据。我们采取自定义筛选规则,将不符合要求的数据筛选掉。主要对属性职位名称(j_name)和职位类别(w_field)进行筛选,筛选掉含有某些字段的数据(例如含有字段:软件测试,销售,运营,商务等),最后进行数据整合。
使用 pandas 数据包中自带函数,筛选掉含有特殊字段的数据,再筛选后的数据合并起来。
伪代码如下:
# 不选取J_name中含有某些字段的数据行
df=df[~ df['j_name'].str.contains('软件测试|化工|扫描仪|实施|信息|测试|合伙人|售前|运维|电销|销售|律师|专员|机械|土木|商务|链家|运营|新媒体|岗位|教学|教务|整形|美容|微信|web|前端|行政|司机|助理|设计|策划|文案|架构')]
# 不选取j_name为某些字段的数据行
df=df[~df['j_name'].isin(['软件工程师','高级软件工程师'])]
# 选取j_name大于四个字的数据行
df=df[df['j_name'].str.len()>4]
# 不选取w_field中含有某些字段的数据行
df=df[~ df['w_field'].str.contains('测试|售前|运维|合伙人|电销|销售|律师|专员|机械|土木|商务|链家|运营|新媒体|岗位|教学|教务|整形|美容|微信|web|前端|行政|司机|助理|设计|策划|文案|架构',na=False)]
print(df.shape[0])#去噪后数据量输出
```http://www.biyezuopin.vip去噪前数据量为 39397 行,13 列,去噪后数据量为 19872 行,13 列。### 数据分析与可视化#### 分词首先对属性岗位描述(岗位要求)(description)进行粗粒度的分词,并将分词结果保存。在此调用腾讯进行粗粒度分词。```python
# 调用api获取结果object
def request_texSmart(obj):req_str = json.dumps(obj).encode()url = 'https://texsmart.qq.com/api'r = requests.post(url, data=req_str)r.encoding = 'utf-8'return json.loads(r.text)
# 从object中抽取出粗粒度的分词结果
def generate_segment_info(obj):seg_sent = [seg_obj['str'] for seg_obj in obj['phrase_list']]return ','.join(str(seg) for seg in seg_sent), seg_sent
if __name__ == '__main__':#对数据集中的每一个description都进行分词for i in range(len(df)):add_sentence_to_request_obj(df.loc[i, 'description'])seg_description, seg_lst = generate_segment_info(request_texSmart(request_obj))df.loc[i, 'description'] = seg_descriptionseg_words += seg_lst
词云生成
对分词后的 description 进行词云生成。
# 设置停用词
stop_words = set(load_file('../segment/result/stop_words.txt'))
# 获取分词文本
text = ' '.join(str(seg) for seg in seg_words)
# 词云生成
image = Image.open('background.png')
graph = np.array(image)
wc = WordCloud(font_path='Songti.ttc', background_color='White', max_words=50, mask=graph, stopwords=stop_words, collocations=False)
wc.generate(text)
image_color = ImageColorGenerator(graph)
plt.imshow(wc)
plt.imshow(wc.recolor(color_func=image_color))
plt.axis("off")
plt.show()
wc.to_file('output.png')
词云生成结果如下图所示:





模型选取
本项目建立的模型能通过求职者的基本信息(渴望薪资、学历、工作经验等),生成可求职企业的基本画像。该功能可以帮助各招聘门户网站完善其求职搜索功能,在用户进行搜索后迅速缩小适合企业的范围,进行更加迅速有效的职位推荐。
该问题的本质是多标签分类问题。
输入输出
- 输入
- 最低工资
- 最高工资
- 经验
- 学历
- 工作地点
- 输出
- 公司性质
- 公司规模
数据集划分
数据集一共有 19872 条数据,将数据集按照 4:1 的比例进行训练集与测试集的划分。
拟采用的模型
拟采用多层的 CNN 与 LSTM 进行模型训练,最后一层使用 sigmoid 函数进行预测,训练阶段使用 binary_crossentropy 作为损失函数。
评估方法
使用精确率(Precision)、召回率(Recall)和 F 值(F-measure)来进行结果的评估。
资源下载地址:https://download.csdn.net/download/sheziqiong/85738468
资源下载地址:https://download.csdn.net/download/sheziqiong/85738468
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
