102-基于Spark的招聘数据预测分析推荐系统
基于Spark的招聘数据分析预测推荐系统
📋 项目概述
本项目是一个基于大数据技术的招聘数据分析与推荐系统,集成了数据采集、清洗、分析、可视化和智能推荐等功能。系统采用分布式计算框架Spark进行大规模数据处理,结合机器学习算法实现职位薪资预测和个性化推荐,为求职者和企业提供数据驱动的招聘决策支持。
🏗️ 系统架构
技术栈
后端技术
- Web框架: Django 3.1.14
- 数据库: MySQL + Hive
- 大数据处理: Apache Spark (PySpark)
- 机器学习: TensorFlow 2.13.0, scikit-learn 1.3.2
- 数据处理: pandas 1.4.3, numpy 1.23.1
- 自然语言处理: jieba 0.42.1, snownlp 0.12.3
前端技术
- 模板引擎: Django Templates
- 数据可视化: ECharts, ApexCharts, Chart.js
- UI框架: Bootstrap
- 图表库: wordcloud 1.8.2.2
数据采集
- 爬虫框架: Selenium WebDriver
- 浏览器驱动: ChromeDriver
- 数据存储: CSV, MySQL
项目演示
项目源码获取,码界筑梦坊,各大平台同名,欢迎咨询哔哩哔哩个人主页~
📁 项目结构
基于Spark的招聘数据分析预测推荐系统/
├── myApp/ # Django应用主目录
│ ├── templates/ # 前端模板
│ ├── models.py # 数据模型
│ ├── views.py # 视图控制器
│ └── urls.py # URL路由
├── spiders/ # 数据采集模块
│ ├── spider.py # 爬虫主程序
│ └── jobData.csv # 原始数据
├── spark/ # Spark数据分析
│ ├── sparkAna.py # 数据分析脚本
│ └── sparkFir.py # Spark初始化
├── recommend/ # 推荐系统
│ └── goRecommend.py # 协同过滤推荐
├── predict/ # 薪资预测
│ └── goPredict.py # 深度学习预测
├── utils/ # 工具函数
│ ├── getChartData.py # 图表数据获取
│ ├── getPublicData.py # 公共数据接口
│ └── queryhive.py # Hive查询
└── static/ # 静态资源├── css/ # 样式文件├── js/ # JavaScript库└── images/ # 图片资源
🔧 核心功能实现
1. 数据采集模块
爬虫实现
class spider(object):def __init__(self, type, city, page):self.type = typeself.city = cityself.page = pageself.spiderUrl = 'https://www.lagou.com/wn/jobs?fromSearch=true&kd=%s&city=%s&pn=%s'def startBrowser(self):service = Service('./chromedriver.exe')option = webdriver.ChromeOptions()option.debugger_address = 'localhost:9222'browser = webdriver.Chrome(service=service, options=option)return browserdef main(self, page):browser = self.startBrowser()browser.get(self.spiderUrl % (self.type, self.city, self.page))job_list = browser.find_elements(by=By.XPATH, value='//div[@id="jobList"]/div[@class="list__YibNq"]/div[@class="item__10RTO"]')for job in job_list:# 提取职位信息title = job.find_element(by=By.XPATH, value='.//div[@class="p-top__1F7CL"]/a').textcompanyTitle = job.find_element(by=By.XPATH, value='.//div[@class="company-name__2-SjF"]/a').textsalary = job.find_element(by=By.XPATH, value='.//div[@class="p-bom__JlNur"]/span').text# 数据清洗和标准化salary = re.findall('\d+', salary)minSalary = int(salary[0]) * 1000maxSalary = int(salary[1]) * 1000# 保存到CSVself.save_to_csv([self.type, title, companyTitle, minSalary, maxSalary, workExperience, education, totalTag, companyPeople, workTag, welfare, imgSrc, self.city])
技术特点:
- 使用Selenium WebDriver实现动态页面爬取
- 支持多城市、多职位类型批量采集
- 数据实时清洗和标准化处理
- 异常处理和重试机制
2. 大数据分析模块
Spark数据分析
# 构建Spark会话
spark = SparkSession.builder.appName("sparkSQL").master("local[*]").\config("spark.sql.shuffle.partitions", 2).\config("spark.sql.warehouse.dir", "hdfs://node1:8020/user/hive/warehouse").\config("hive.metastore.uris", "thrift://node1:9083").\enableHiveSupport().\getOrCreate()# 城市平均工资分析
top_city = jobData.groupby("city")\.agg(avg("maxSalary").alias("avg_max_salary"))\.orderBy(desc("avg_max_salary"))# 薪资区间分布
jobData_classfiy = jobData.withColumn("salary_category",when(col("maxSalary").between(0, 5000), "0-5k").when(col("maxSalary").between(5000, 7000), "5k-7k").when(col("maxSalary").between(7000, 10000), "7k-10k").when(col("maxSalary").between(10000, 20000), "10-20k").when(col("maxSalary") > 20000, "20k以上").otherwise("未分类"))# 工作经验与薪资关系
result3 = jobData.groupby("workExperience")\.agg(avg("maxSalary").alias("avg_max_salary"),avg("minSalary").alias("avg_min_salary"))\.orderBy("workExperience")
分析维度:
- 城市薪资排名分析
- 薪资区间分布统计
- 工作经验与薪资关系
- 城市职位分布热力图
- 行业薪资对比分析
3. 机器学习预测模块
薪资预测模型
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
import tensorflow as tf# 数据预处理
X = data[['city', 'workExperience', 'education']]
y = data['maxSalary'].astype(float)# 标签编码
label_encodes = {}
for column in X.columns:le = LabelEncoder()X[column] = le.fit_transform(X[column])label_encodes[column] = le# 构建神经网络模型
model = tf.keras.Sequential([tf.keras.layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mean_squared_error')# 预测函数
def pred_salary(city, workExp, education):input_data = pd.DataFrame([[city, workExp, education]], columns=['city', 'workExperience', 'education'])for column in input_data.columns:input_data[column] = label_encodes[column].transform(input_data[column])prediction = model.predict(input_data)return prediction[0][0]
模型特点:
- 基于深度学习的薪资预测
- 多特征输入(城市、经验、学历)
- 自动特征编码和标准化
- 模型训练和验证分离
4. 推荐系统模块
协同过滤推荐
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity# TF-IDF特征提取
tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(data['title'])# 计算相似度矩阵
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)# 推荐函数
def get_recommendations(title, cosine_sim=cosine_sim):idx = data[data['title'] == title].index[0]# 获取相似职位sim_scores = list(enumerate(cosine_sim[idx]))sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)# 返回推荐结果similar_titles = [(data.iloc[i]['title'], i) for i, _ in sim_scores[1:]]return similar_titles
推荐算法:
- 基于TF-IDF的文本相似度计算
- 余弦相似度度量
- 职位标题特征提取
- 个性化推荐排序
5. 数据可视化模块
Django视图实现
def home(request):if request.method == 'GET':# 获取各类统计数据averageCityX, averageCityY, salarycategoryData, expSalaryX, expSalaryY1, expSalaryY2, peoplecategoryData, adddresssumData = getIndexData()sorted_arr = list(getsalaryTop())return render(request, 'home.html', {'averageCityX': averageCityX,'averageCityY': averageCityY,'salarycategoryData': salarycategoryData,'expSalaryX': expSalaryX,'expSalaryY1': expSalaryY1,'expSalaryY2': expSalaryY2,'peoplecategoryData': peoplecategoryData,'adddresssumData': adddresssumData,'sorted_arr': sorted_arr})def salaryChar(request):# 薪资分析图表typeSalaryList = list(gettypeSalary())typeSalaryX = [x[0] for x in typeSalaryList]typeSalaryY1 = list(typeSalaryList[0][1:])typeSalaryY2 = list(typeSalaryList[1][1:])typeSalaryY3 = list(typeSalaryList[2][1:])
可视化功能:
- 城市薪资分布柱状图
- 薪资区间饼图
- 工作经验薪资趋势线图
- 城市职位分布地图
- 行业分析雷达图
- 词云展示
📊 数据模型设计
用户模型
class User(models.Model):id = models.AutoField("id", primary_key=True)username = models.CharField("username", max_length=255, default='')password = models.CharField("password", max_length=255, default='')createTime = models.DateField("创建时间", auto_now_add=True)class Meta:db_table = "user"class History(models.Model):id = models.AutoField("id", primary_key=True)jobId = models.CharField("职位ID", max_length=255, default='')user = models.ForeignKey(User, on_delete=models.CASCADE)count = models.IntegerField("收藏次数", default=1)class Meta:db_table = "history"
职位数据结构
type,title,companyTitle,minSalary,maxSalary,workExperience,education,totalTag,companyPeople,workTag,welfare,imgSrc,city
🎯 系统功能清单
用户管理
- ✅ 用户注册与登录
- ✅ 会话管理与安全控制
- ✅ 个人信息管理
数据采集
- ✅ 自动化职位数据爬取
- ✅ 多城市、多职位类型采集
- ✅ 数据清洗与标准化
- ✅ 实时数据更新
数据分析
- ✅ 城市薪资排名分析
- ✅ 薪资区间分布统计
- ✅ 工作经验薪资关系
- ✅ 城市职位分布热力图
- ✅ 行业薪资对比分析
- ✅ 学历要求统计
数据可视化
- ✅ 交互式图表展示
- ✅ 多维度数据对比
- ✅ 实时数据更新
- ✅ 响应式设计
智能推荐
- ✅ 基于内容的推荐
- ✅ 协同过滤算法
- ✅ 个性化推荐排序
- ✅ 推荐结果展示
薪资预测
- ✅ 深度学习模型
- ✅ 多特征输入预测
- ✅ 预测结果可视化
- ✅ 模型性能评估
🚀 部署与运行
环境要求
- Python 3.8+
- Apache Spark 3.0+
- MySQL 8.0+
- Hive 3.0+
- Chrome浏览器 + ChromeDriver
安装依赖
pip install -r requirements.txt
数据库配置
# settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bigdata','USER': 'root','PASSWORD': 'root','HOST': 'localhost','PORT': '3306',}
}
启动服务
# 启动Django服务
python manage.py runserver# 运行Spark分析
python spark/sparkAna.py# 启动爬虫
python spiders/spider.py
📈 性能优化
数据处理优化
- 使用Spark分布式计算提升大数据处理性能
- 数据分区和缓存策略
- 并行计算优化
数据库优化
- 索引优化
- 查询语句优化
- 连接池配置
前端优化
- 静态资源压缩
- CDN加速
- 懒加载实现
🔮 未来扩展
功能扩展
- 实时数据流处理
- 更多机器学习算法集成
- 移动端适配
- API接口开放
技术升级
- 微服务架构改造
- 容器化部署
- 云原生架构
- 实时推荐系统
📝 总结
本项目成功构建了一个基于Spark的招聘数据分析预测推荐系统,实现了从数据采集到智能推荐的完整闭环。系统采用现代化的技术栈,结合大数据处理和机器学习技术,为招聘市场提供了数据驱动的决策支持。
项目亮点:
- 技术栈全面: 涵盖Web开发、大数据处理、机器学习、数据可视化
- 架构合理: 模块化设计,便于维护和扩展
- 功能完整: 从数据采集到智能推荐的全流程实现
- 性能优化: 分布式计算提升处理效率
- 用户体验: 直观的可视化界面和个性化推荐
应用价值:
- 为求职者提供薪资参考和职位推荐
- 为企业提供市场分析和人才需求预测
- 为招聘平台提供数据驱动的运营支持
联系方式: [码界筑梦坊 各平台同名]
标签: #大数据 #Spark #机器学习 #Django #数据可视化 #推荐系统 #招聘分析