💖💖作者:计算机毕业设计小途
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目
目录
- 拉勾网招聘数据可视化分析系统介绍
- 拉勾网招聘数据可视化分析系统演示视频
- 拉勾网招聘数据可视化分析系统演示图片
- 拉勾网招聘数据可视化分析系统代码展示
- 拉勾网招聘数据可视化分析系统文档展示
拉勾网招聘数据可视化分析系统介绍
本系统名为《基于大数据的拉勾网招聘数据可视化分析》,是一个面向计算机专业毕业设计的招聘数据处理、分析与可视化平台。系统以招聘信息为核心数据,使用Hadoop的HDFS做数据存储,借助Spark和Spark SQL完成数据清洗、分组统计、指标计算和简单分群,配合Pandas、NumPy做辅助处理,分析结果存入MySQL。后端提供Python+Django和Java+Spring Boot两个版本,前端采用Vue、ElementUI、Echarts、HTML、CSS、JavaScript和jQuery完成页面展示与图表交互。功能上包含系统首页、数据大屏、用户管理、招聘信息管理、地域分布分析、薪资水平分析、岗位结构分析、应聘门槛分析、企业特征分析、福利标签分析、岗位分群分析、个人信息和修改密码等模块。用户可以在首页查看整体数据概况,在数据大屏中观察招聘信息的核心指标变化,在招聘信息模块维护和查询原始记录,再通过地域分布、薪资水平、岗位结构、应聘门槛、企业特征、福利标签和岗位分群等页面,从不同角度了解招聘数据的分布与差异。系统不追求复杂算法,更强调把大数据处理流程、后端接口、数据库存储和前端可视化串成一条完整链路,适合作为本科阶段综合实践项目,也方便后续按需扩展分析维度。
拉勾网招聘数据可视化分析系统演示视频
点击观看项目演示视频
拉勾网招聘数据可视化分析系统演示图片
拉勾网招聘数据可视化分析系统代码展示
spark=SparkSession.builder.appName("RecruitBigDataAnalysis").master("local[*]").getOrCreate()defregion_distribution_analysis():df=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/recruit_db").option("dbtable","recruit_info").option("user","root").option("password","123456").load()df.createOrReplaceTempView("recruit_info")region_df=spark.sql(""" select city, count(*) as job_count, round(avg(salary_min), 2) as avg_salary_min, round(avg(salary_max), 2) as avg_salary_max, sum(case when education like '%本科%' then 1 else 0 end) as bachelor_count, sum(case when experience like '%应届%' then 1 else 0 end) as fresh_count, collect_set(company_type) as company_types, collect_set(welfare_tags) as welfare_list from recruit_info where city is not null and city != '' group by city order by job_count desc """)region_pd=region_df.toPandas()region_pd["salary_avg"]=(region_pd["avg_salary_min"]+region_pd["avg_salary_max"])/2region_pd["job_ratio"]=region_pd["job_count"]/region_pd["job_count"].sum()region_pd["bachelor_ratio"]=region_pd["bachelor_count"]/region_pd["job_count"]region_pd["fresh_ratio"]=region_pd["fresh_count"]/region_pd["job_count"]region_pd["main_company"]=region_pd["company_types"].apply(lambdax:list(x)[:3]ifxelse[])region_pd=region_pd.sort_values("job_ratio",ascending=False)result=region_pd[["city","job_count","salary_avg","job_ratio","bachelor_ratio","fresh_ratio","main_company"]].to_dict(orient="records")returnresultdefsalary_level_analysis():df=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/recruit_db").option("dbtable","recruit_info").option("user","root").option("password","123456").load()df.createOrReplaceTempView("recruit_info")salary_df=spark.sql(""" select case when salary_min < 5000 then '5k以下' when salary_min >= 5000 and salary_min < 10000 then '5k-10k' when salary_min >= 10000 and salary_min < 15000 then '10k-15k' when salary_min >= 15000 and salary_min < 20000 then '15k-20k' else '20k以上' end as salary_level, count(*) as job_count, round(avg(salary_min), 2) as avg_min, round(avg(salary_max), 2) as avg_max, round(avg((salary_min + salary_max) / 2), 2) as avg_salary, collect_set(city) as city_list, collect_set(education) as education_list from recruit_info where salary_min is not null and salary_max is not null group by salary_level order by job_count desc """)salary_pd=salary_df.toPandas()salary_pd["salary_mid"]=(salary_pd["avg_min"]+salary_pd["avg_max"])/2salary_pd["job_ratio"]=salary_pd["job_count"]/salary_pd["job_count"].sum()salary_pd["city_count"]=salary_pd["city_list"].apply(lambdax:len(set(x))ifxelse0)salary_pd["education_count"]=salary_pd["education_list"].apply(lambdax:len(set(x))ifxelse0)salary_pd["top_city"]=salary_pd["city_list"].apply(lambdax:list(x)[:5]ifxelse[])salary_pd=salary_pd.sort_values("job_ratio",ascending=False)returnsalary_pd[["salary_level","job_count","salary_mid","job_ratio","city_count","education_count","top_city"]].to_dict(orient="records")defjob_group_analysis():df=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/recruit_db").option("dbtable","recruit_info").option("user","root").option("password","123456").load()df.createOrReplaceTempView("recruit_info")base_df=spark.sql(""" select job_name, company_type, education, experience, salary_min, salary_max, city, welfare_tags, (salary_min + salary_max) / 2 as salary_avg, case when education like '%本科%' then 1 else 0 end as need_bachelor, case when experience like '%应届%' then 1 else 0 end as fresh_ok, size(split(welfare_tags, ',')) as welfare_count from recruit_info where job_name is not null and salary_min is not null and salary_max is not null """)base_df.createOrReplaceTempView("job_base")group_df=spark.sql(""" select case when salary_avg >= 18000 and need_bachelor = 1 then '高薪高门槛' when salary_avg >= 18000 and need_bachelor = 0 then '高薪低门槛' when salary_avg < 18000 and need_bachelor = 1 then '普通高门槛' else '普通低门槛' end as job_group, count(*) as job_count, round(avg(salary_avg), 2) as avg_salary, round(avg(welfare_count), 2) as avg_welfare, sum(fresh_ok) as fresh_count, collect_set(company_type) as company_types, collect_set(city) as city_list from job_base group by job_group order by job_count desc """)group_pd=group_df.toPandas()group_pd["group_ratio"]=group_pd["job_count"]/group_pd["job_count"].sum()group_pd["fresh_ratio"]=group_pd["fresh_count"]/group_pd["job_count"]group_pd["main_company"]=group_pd["company_types"].apply(lambdax:list(x)[:3]ifxelse[])group_pd["main_city"]=group_pd["city_list"].apply(lambdax:list(x)[:5]ifxelse[])returngroup_pd[["job_group","job_count","avg_salary","avg_welfare","group_ratio","fresh_ratio","main_company","main_city"]].to_dict(orient="records")拉勾网招聘数据可视化分析系统文档展示
💖💖作者:计算机毕业设计小途
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目