数据分析案例-大数据相关招聘岗位可视化分析

简介: 数据分析案例-大数据相关招聘岗位可视化分析

数据集介绍

本次数据集来源于xx招聘网共计4223条招聘信息,每条招聘信息字段包括岗位名称、公司名称、工作经验要求、学历要求、工作地点、薪酬、公司规模、发布时间、公司福利共9条字段信息。



数据预处理

首先导入本次数据集,

import pandas as pd
data = pd.read_csv('job_data.csv')
data.head()

查看数据缺失值情况,

data.isnull().sum()

通过缺失值情况,我们发现公司规模缺失值较多,而这个字段数据对于本次分析没有太大用处,故在这里直接删除这一列,对于其他少量缺失值,直接删除就好。

data.drop('公司规模',axis=1,inplace=True)
data.dropna(inplace=True)
data.shape

接着就是处理数据集中的字段信息,便于后面的数据可视化

# 处理工作经验要求
data['工作经验要求'] = data['工作经验要求'].replace(to_replace=
{'无需经验':'经验不限','经验在校/应届':'经验不限','1年经验':'1-3年','2年经验':'1-3年','经验1-3年':'1-3年',
'经验1年以下':'1-3年','3-4年经验':'3-5年','经验3-5年':'3-5年','5-7年经验':'5-10年','经验5-10年':'5-10年',
'8-9年经验':'5-10年','10年以上经验':'10年以上','经验10年以上':'10年以上'})
# 处理学历要求
data['学历要求'] = data['学历要求'].replace(to_replace={'大专':'专科及以下','高中':'专科及以下','不限':'专科及以下','中技/中专':'专科及以下'})
# 获取工作城市
data['工作城市'] = data['工作地点'].apply(lambda x:x.split('-')[0])
data['工作城市'] = data['工作城市'].apply(lambda x:x.split('·')[0])
def avg_salary(x):
    try:
        start = x.split('-')[0]
        end = x.split('-')[1]
        if end[-1] == '千':
            start_salary = float(start)*1000
            end_salary = float(end[:-1])*1000
        elif end[-1] == '万':
            if start[-1] == '千':
                start_salary = float(start[:-1])*1000
                end_salary = float(end[:-1])*10000
            else:
                start_salary = float(start)*10000
                end_salary = float(end[:-1])*10000
        elif end[-1] == 'k':
            start_salary = float(start[:-1])*1000
            end_salary = float(end[:-1])*1000
        elif end[-1] == '薪':
            salary_number = float(end.split('·')[1][:-1])
            if end.split('·')[0][-1] == '万':
                if start[-1] == '千':
                    start_salary = float(start[:-1])*1000/12*salary_number
                    end_salary = float(end.split('·')[0][:-1])*10000/12*salary_number
                else:
                    start_salary = float(start)*10000/12*salary_number
                    end_salary =  float(end.split('·')[0][:-1])*10000/12*salary_number
            elif end.split('·')[0][-1] == '千':
                start_salary = float(start)*1000/12*salary_number
                end_salary = float(end.split('·')[0][:-1])*1000/12*salary_number
        elif end[-1] == '年':
            end = end[:-2]
            if end[-1] == '万':
                if start[-1] == '千':
                    start_salary = float(start[:-1])*1000
                    end_salary = float(end[:-1])*10000
                else:
                    start_salary = float(start)*10000
                    end_salary = float(end[:-1])*10000
        return (start_salary+end_salary)/2
    except:
        return 10000
data['平均薪资'] = data['薪酬'].apply(avg_salary)
data.head()


在这里,我把工作经验和学历要求进行了清洗整理,划分为固定的几个分类,然后提取了工作城市,以及处理了原始薪资数据(数据是真的很杂,需要花点时间来处理),最后得到平均薪资。



数据可视化

先导入数据可视化需要用到的第三方包,


import pandas as pd
import matplotlib.pyplot as plt
from pyecharts.charts import *
from pyecharts import options as  opts 
from pyecharts.globals import ThemeType
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False

分析各工作经验要求占比

# 工作经验要求
df1 = data['工作经验要求'].value_counts()
a1 = Pie(init_opts=opts.InitOpts(theme = ThemeType.DARK))
a1.add(series_name='工作经验要求',
        data_pair=[list(z) for z in zip(df1.index.to_list(),df1.values.tolist())],
        radius='70%',
        )
a1.set_global_opts(title_opts=opts.TitleOpts(title="工作经验要求占比",
                    pos_left='center',
                    pos_top=30))
a1.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)'))
a1.render_notebook()


通过图表我们发现,除了10年以上,其他区间的经验要求占比相差不大,说明各个区间的经验要求需求岗位量大体相似。


分析不同工作经验的岗位数量和薪资变化

x = ['经验不限','1-3年','3-5年','5-10年','10年以上']
bar =Bar()
bar.add_xaxis(x)
bar.add_yaxis('岗位数量',[399,724,870,535,27],label_opts=opts.LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=opts.TitleOpts('不同工作经验的岗位数量和薪资变化'),
    tooltip_opts=opts.TooltipOpts(is_show=True,trigger='axis',axis_pointer_type='cross'),
    xaxis_opts= opts.AxisOpts(type_='category',axispointer_opts=opts.AxisPointerOpts(is_show=True,type_='shadow'))
    )
bar.extend_axis(yaxis=opts.AxisOpts(
    name='月薪',min_=0,max_= 110000,
    interval = 10000
))
line = Line()
line.add_xaxis(x)
line.add_yaxis('平均薪资',[18468,17011,32701,40371,101429],yaxis_index=1,label_opts=opts.LabelOpts(is_show=False))
bar.overlap(line) # 合并图
bar.render_notebook()



通过图表,我们发现经验要求的需求量大体呈正态分布,薪酬是随着经验年限的增长而逐渐递增。


分析不同学历要求占比

# 学历要求
df2 = data['学历要求'].value_counts()
a2 = Pie(init_opts=opts.InitOpts(theme = ThemeType.DARK))
a2.add(series_name='学历要求',
        data_pair=[list(z) for z in zip(df2.index.to_list(),df2.values.tolist())],
        radius='70%',
        )
a2.set_global_opts(title_opts=opts.TitleOpts(title="学历要求占比",
                    pos_left='center',
                    pos_top=30))
a2.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)'))
a2.render_notebook()


通过图表我们发现,本科学历占据了65%,本科及以下共高达95%,对于学历这块,要求似乎要求不是很高。


分析不同学历要求的岗位数量和薪酬变化


x = ['专科及以下','本科','硕士','博士']
bar =Bar()
bar.add_xaxis(x)
bar.add_yaxis('岗位数量',[684,1753,109,9],label_opts=opts.LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=opts.TitleOpts('不同学历要求的岗位数量和薪资变化'),
    tooltip_opts=opts.TooltipOpts(is_show=True,trigger='axis',axis_pointer_type='cross'),
    xaxis_opts= opts.AxisOpts(type_='category',axispointer_opts=opts.AxisPointerOpts(is_show=True,type_='shadow'))
    )
bar.extend_axis(yaxis=opts.AxisOpts(
    name='月薪',min_=0,max_= 45000
))
line = Line()
line.add_xaxis(x)
line.add_yaxis('平均薪资',[11888,33784,44118,34148],yaxis_index=1,label_opts=opts.LabelOpts(is_show=False))
bar.overlap(line) # 合并图
bar.render_notebook()


随着学历的增长,薪资也在增长,这里博士学历应该是数据量太少导致出现了下滑异常,总体趋势肯定还是学历越高,薪资越高。


分析岗位需求量最高的前五名公司

data['公司名称'].value_counts().head().plot(kind='barh')
plt.title('岗位需求量最高的前五名公司')
plt.show()


岗位需求量大的公司貌似都集中在深圳北京等一线城市。


词云图可视化


先定义一个制作词云图的函数


import jieba
import collections
import re
import stylecloud
from PIL import Image
# 封装一个画词云图的函数
def draw_WorldCloud(df,pic_name,color='black'):
    data =  ''.join([item for item in df])
    # 文本预处理 :去除一些无用的字符只提取出中文出来
    new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
    new_data = "".join(new_data)
    # 文本分词
    seg_list_exact = jieba.cut(new_data, cut_all=True)
    result_list = []
    with open('停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语
        con = f.readlines()
        stop_words = set()
        for i in con:
            i = i.replace("\n", "")   # 去掉读取每一行数据的\n
            stop_words.add(i)
    for word in seg_list_exact:
        if word not in stop_words and len(word) > 1:
            result_list.append(word)
    word_counts = collections.Counter(result_list)
    # 词频统计:获取前100最高频的词
    word_counts_top = word_counts.most_common(100)
    print(word_counts_top)
    # 绘制词云图
    stylecloud.gen_stylecloud(text=' '.join(result_list), 
                            collocations=False, # 是否包括两个单词的搭配(二字组)
                            font_path=r'C:\Windows\Fonts\msyh.ttc', #设置字体
                            size=800, # stylecloud 的大小
                            palette='cartocolors.qualitative.Bold_7', # 调色板
                            background_color=color, # 背景颜色
                            icon_name='fas fa-circle', # 形状的图标名称 
                            gradient='horizontal', # 梯度方向
                            max_words=2000, # stylecloud 可包含的最大单词数
                            max_font_size=150, # stylecloud 中的最大字号
                            stopwords=True, # 布尔值,用于筛除常见禁用词
                            output_name=f'{pic_name}.png') # 输出图片
    # 打开图片展示
    img=Image.open(f'{pic_name}.png')
    img.show()


接着使用岗位名称数据来进行词云图可视化,看看大数据相关岗位的情况

draw_WorldCloud(data['职位名称'],'大数据职位名称词云图')


通过词云图发现,大数据相关岗位大体主要分为数据分析、大数据开发、架构师等。


使用公司福利数据来词云图分析一下

draw_WorldCloud(data['公司福利'],'公司福利词云图')


通过词云图看出,大数据相关岗位福利主要为各种奖金、补贴、培训等等。


通过热力地图分析各城市岗位分布


# 各城市岗位数量分布热力地图
df3 = data['工作城市'].value_counts()
city_data = city_data = [[x,y] if x[-3:] != '自治州' else [x,y] for x,y in zip(df3.index.to_list(),df3.values.tolist())]
map = Map()
map.add('地区',city_data,
    maptype='china-cities',
    label_opts=opts.LabelOpts(is_show=False))
map.set_global_opts(
    title_opts=opts.TitleOpts('各城市岗位数量分布'),
    visualmap_opts=opts.VisualMapOpts(max_=500,min_=1)
)
map.render(path='各城市岗位数量分布.html')
map.render_notebook()



通过热力地图我们看出,大数据岗位在上海,北京、深圳等城市需求量较高 。(热力地图如在手机端无法查看可用PC端打开查看)


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
2月前
|
数据可视化 搜索推荐 数据挖掘
数据分析案例-顾客购物数据可视化分析
数据分析案例-顾客购物数据可视化分析
99 0
|
9天前
|
数据采集 数据可视化 数据挖掘
Seaborn在数据分析中的应用:案例分析与实践
【4月更文挑战第17天】本文介绍了Seaborn在数据分析中的应用,它是一个基于Python的可视化库,简化了复杂数据的图表创建。通过一个销售数据分析的案例,展示了数据加载、描述性统计、相关性分析、多变量分析及高级可视化步骤。实践技巧包括数据清洗、图表选择、颜色使用、注释标签和交互性。Seaborn助力高效数据探索和理解,提升分析效率。注意,实际使用需根据数据集和目标调整,并参考最新文档。
|
10天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
10天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
22天前
|
存储 机器学习/深度学习 数据采集
数据分析师如何处理数据以进行分析?
【4月更文挑战第4天】数据分析师如何处理数据以进行分析?
19 9
|
1月前
|
机器学习/深度学习 数据可视化 算法
python数据分析——在面对各种问题时,因如何做分析的分类汇总
Python数据分析是指使用Python编程语言对数据进行收集、处理、分析和可视化的过程。Python是一种非常流行的编程语言,具有简单易学、代码可读性高、生态系统强大的特点,因此在数据科学领域得到广泛应用。
83 0
|
1月前
|
算法 大数据 数据挖掘
python数据分析——大数据伦理风险分析
大数据伦理风险分析在当前数字化快速发展的背景下显得尤为重要。随着大数据技术的广泛应用,企业、政府以及个人都在不断地产生、收集和分析海量数据。然而,这些数据的利用也带来了诸多伦理风险,如隐私泄露、数据滥用、算法偏见等。因此,对大数据伦理风险进行深入分析,并采取相应的防范措施,对于保障数据安全、维护社会公平正义具有重要意义。
51 0
|
1月前
|
存储 大数据 数据挖掘
python数据分析——大数据和云计算
大数据和云计算作为当代信息技术的两大核心驱动力,正在以前所未有的速度改变着我们的生活、工作和思维方式。它们不仅为各行各业的创新提供了强大的技术支持,更是推动了整个社会的数字化转型。 从大数据的角度来看,它的核心价值在于通过对海量数据的收集、存储、分析和挖掘,发现其中的关联性和趋势,从而为决策提供更为科学、精准的依据。无论是商业领域的市场预测、消费者行为分析,还是公共服务领域的城市规划、交通管理,大数据都发挥着不可或缺的作用。同时,随着物联网、传感器等技术的普及,大数据的来源和种类也在不断扩展,这使得我们能够更全面地认识世界,把握规律。
47 0
|
1月前
|
监控 搜索推荐 数据挖掘
python数据分析——业务指标分析
业务指标分析是企业运营中不可或缺的一环,通过对各项关键指标的深入剖析,我们能够更好地了解企业的运营状况,发现潜在问题,进而制定相应的策略来优化业务流程、提升经营效率。 在业务指标分析中,我们首先要明确分析的目的和范围。是为了评估整体业务健康状况,还是针对某一具体环节进行优化?明确了目的后,我们需要收集相关的数据,这些数据可能来源于不同的业务系统和数据库,因此数据的整合和清洗也是分析过程中的重要步骤。 接下来,我们要选择合适的分析方法。比如,对于销售数据,我们可以采用时间序列分析来观察销售趋势;对于用户行为数据,我们可以使用用户画像和路径分析来洞察用户需求和行为习惯。
102 1
|
2月前
|
数据挖掘 数据库
GEE——降水数据分析(半天)图表分析含(IANA(IANA Time Zone Database) 时区名称的定义)
GEE——降水数据分析(半天)图表分析含(IANA(IANA Time Zone Database) 时区名称的定义)
30 1

热门文章

最新文章